diff options
author | Vincent Bénony | 2016-01-06 16:20:23 +0100 |
---|---|---|
committer | Vincent Bénony | 2016-01-06 16:20:23 +0100 |
commit | efdb5679ce6304dbc854afbbc511e633d7513338 (patch) | |
tree | e680a240e5f6018fc3a4cce53b50060caa22a929 | |
parent | 4687ff6d6d2863cc95c8137543ecf9c39bc01723 (diff) | |
parent | b72c02bad44749a1355acefdb198e36b2e772575 (diff) | |
download | scummvm-rg350-efdb5679ce6304dbc854afbbc511e633d7513338.tar.gz scummvm-rg350-efdb5679ce6304dbc854afbbc511e633d7513338.tar.bz2 scummvm-rg350-efdb5679ce6304dbc854afbbc511e633d7513338.zip |
IOS: Merge branch 'master' into ios-fix
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 "Cancella" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Escull" @@ -86,6 +86,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Realment voleu suprimir aquesta partida?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "S" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "No" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -384,7 +417,7 @@ msgstr "" msgid "~Q~uit" msgstr "~T~anca" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Surt de ScummVM" @@ -392,7 +425,7 @@ msgstr "Surt de ScummVM" msgid "A~b~out..." msgstr "~Q~uant a..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Quant a ScummVM" @@ -492,26 +525,6 @@ msgstr "" "Esteu segur que voleu executar el detector massiu de jocs? Aix pot afegir " "una gran quantitat de jocs." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "S" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "No" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM no ha pogut obrir el directori especificat!" @@ -667,7 +680,7 @@ msgid "Special dithering modes supported by some games" msgstr "Modes de tramat especials suportats per alguns jocs" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Mode pantalla completa" @@ -1135,7 +1148,7 @@ msgstr "GFX desactivats" msgid "Standard Renderer" msgstr "Pintat estndard (16bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Estndard" @@ -1385,7 +1398,7 @@ msgstr "~R~etorna al Llanador" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1398,7 +1411,7 @@ msgstr "Desa la partida:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1736,58 +1749,58 @@ msgstr "Clic central" msgid "Right Click" msgstr "Clic dret" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Amaga ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Oculta els altres" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Mostra-ho tot" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Finestra" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimitza" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (sense escalar)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (no escalat)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "S'ha activat la correcci de la relaci d'aspecte" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "S'ha desactivat la correcci de la relaci d'aspecte" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Filtre de grfics actiu:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Mode de finestra" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 #, fuzzy msgid "OpenGL" msgstr "Obre" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "" @@ -2230,13 +2243,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Recupera la partida:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Restaura" @@ -2777,36 +2790,36 @@ msgstr "~A~nterior" msgid "~N~ext" msgstr "~S~egent" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Noms veus" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Veu i subttols" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Noms subttols" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Veus i sub." -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Seleccioneu el nivell de competncia." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Consulteu el manual de Loom(TM) per ajuda." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Prctica" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Expert" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index aa3fc856b8..84783ce4d0 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -1,15 +1,15 @@ # Czech translation for ScummVM. -# Copyright (C) 2001-2015 The ScummVM Team +# Copyright (C) 2001-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. -# Zbynk Schwarz <zbynek.schwarz@gmail.com>, 2011-2013. +# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2011-2013. # msgid "" msgstr "" "Project-Id-Version: ScummVM 1.7.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" -"PO-Revision-Date: 2015-07-26 18:51+0200\n" -"Last-Translator: Zbynk Schwarz <zbynek.schwarz@gmail.com>\n" +"POT-Creation-Date: 2015-12-24 13:36+0100\n" +"PO-Revision-Date: 2015-12-24 13:37+0100\n" +"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n" "Language-Team: \n" "Language: Cesky\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Poedit-SourceCharset: iso-8859-2\n" -"X-Generator: Poedit 1.8.3\n" +"X-Generator: Poedit 1.8.6\n" "X-Poedit-Basepath: ..\n" #: gui/about.cpp:94 @@ -27,97 +27,127 @@ msgstr "(sestaveno %s)" #: gui/about.cpp:101 msgid "Features compiled in:" -msgstr "Zakompilovan funkce:" +msgstr "Zakompilované funkce:" #: gui/about.cpp:110 msgid "Available engines:" -msgstr "Dostupn jdra:" +msgstr "Dostupná jádra:" #: gui/browser.cpp:68 gui/browser_osx.mm:104 msgid "Show hidden files" -msgstr "Zobrazit skryt soubory" +msgstr "Zobrazit skryté soubory" #: gui/browser.cpp:68 msgid "Show files marked with the hidden attribute" -msgstr "Zobrazit soubory s vlastnost skryt" +msgstr "Zobrazit soubory s vlastností skryté" #: gui/browser.cpp:72 msgid "Go up" -msgstr "Jt nahoru" +msgstr "Jít nahoru" #: gui/browser.cpp:72 gui/browser.cpp:74 msgid "Go to previous directory level" -msgstr "Jt na pedchoz rove adrese" +msgstr "Jít na předchozí úroveň adresáře" #: gui/browser.cpp:74 msgctxt "lowres" msgid "Go up" -msgstr "Jt nahoru" +msgstr "Jít nahoru" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 #: backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 #: engines/scumm/dialogs.cpp:191 engines/sword1/control.cpp:865 msgid "Cancel" -msgstr "Zruit" +msgstr "Zrušit" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Zvolit" #: gui/editrecorddialog.cpp:58 -#, fuzzy msgid "Author:" msgstr "Autor:" #: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204 msgid "Name:" -msgstr "Jmno" +msgstr "Jméno" #: gui/editrecorddialog.cpp:60 -#, fuzzy msgid "Notes:" -msgstr "Poznmky:" +msgstr "Poznámky:" #: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75 msgid "Ok" -msgstr "" +msgstr "Ok" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "Zvolte soubor pro načtení" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "Zadejte název souboru pro uložení" + +#: gui/filebrowser-dialog.cpp:132 +msgid "Do you really want to overwrite the file?" +msgstr "Opravdu chcete tento soubor přepsat?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Ano" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Ne" #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 #: engines/scumm/help.cpp:210 msgid "Close" -msgstr "Zavt" +msgstr "Zavřít" #: gui/gui-manager.cpp:120 msgid "Mouse click" -msgstr "Kliknut my" +msgstr "Kliknutí myší" #: gui/gui-manager.cpp:124 base/main.cpp:319 msgid "Display keyboard" -msgstr "Zobrazit klvesnici" +msgstr "Zobrazit klávesnici" #: gui/gui-manager.cpp:128 base/main.cpp:323 msgid "Remap keys" -msgstr "Pemapovat klvesy" +msgstr "Přemapovat klávesy" #: gui/gui-manager.cpp:131 base/main.cpp:326 engines/scumm/help.cpp:87 msgid "Toggle fullscreen" -msgstr "Pepnout celou obrazovku" +msgstr "Přepnout celou obrazovku" #: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" -msgstr "Zvolte innost k mapovn" +msgstr "Zvolte činnost k mapování" #: gui/KeysDialog.cpp:41 msgid "Map" @@ -145,25 +175,25 @@ msgstr "OK" #: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" -msgstr "Zvolte innost a kliknte 'Mapovat'" +msgstr "Zvolte činnost a klikněte 'Mapovat'" #: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" -msgstr "Piazen klvesa: %s" +msgstr "Přiřazená klávesa: %s" #: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" -msgstr "Piazen klvesa: dn" +msgstr "Přiřazená klávesa: žádná" #: gui/KeysDialog.cpp:90 msgid "Please select an action" -msgstr "Prosm vyberte innost" +msgstr "Prosím vyberte činnost" #: gui/KeysDialog.cpp:106 msgid "Press the key to associate" -msgstr "Zmknte klvesu pro piazen" +msgstr "Zmáčkněte klávesu pro přiřazení" #: gui/launcher.cpp:193 msgid "Game" @@ -178,8 +208,8 @@ msgid "" "Short game identifier used for referring to saved games and running the game " "from the command line" msgstr "" -"Krtk identifiktor her, pouvan jako odkaz k uloenm hrm a sputn " -"hry z pkazovho dku" +"Krátký identifikátor her, používaný jako odkaz k uloženým hrám a spuštění " +"hry z příkazového řádku" #: gui/launcher.cpp:199 msgctxt "lowres" @@ -188,12 +218,12 @@ msgstr "ID:" #: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207 msgid "Full title of the game" -msgstr "pln nzev hry" +msgstr "Úplný název hry" #: gui/launcher.cpp:206 msgctxt "lowres" msgid "Name:" -msgstr "Jmno:" +msgstr "Jméno:" #: gui/launcher.cpp:210 msgid "Language:" @@ -203,13 +233,13 @@ msgstr "Jazyk:" msgid "" "Language of the game. This will not turn your Spanish game version into " "English" -msgstr "Jazyk hry. Toto z va panlsk verze neudl Anglickou" +msgstr "Jazyk hry. Toto z vaší Španělské verze neudělá Anglickou" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87 #: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208 #: audio/null.cpp:41 msgid "<default>" -msgstr "<vchoz>" +msgstr "<výchozí>" #: gui/launcher.cpp:222 msgid "Platform:" @@ -217,7 +247,7 @@ msgstr "Platforma:" #: gui/launcher.cpp:222 gui/launcher.cpp:224 gui/launcher.cpp:225 msgid "Platform the game was originally designed for" -msgstr "Platforma, pro kterou byla hra pvodn vytvoena" +msgstr "Platforma, pro kterou byla hra původně vytvořena" #: gui/launcher.cpp:224 msgctxt "lowres" @@ -226,7 +256,7 @@ msgstr "Platforma:" #: gui/launcher.cpp:237 msgid "Engine" -msgstr "Jdro" +msgstr "Jádro" #: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088 msgid "Graphics" @@ -238,12 +268,12 @@ msgstr "GFX" #: gui/launcher.cpp:248 msgid "Override global graphic settings" -msgstr "Potlait globln nastaven obrazu" +msgstr "Potlačit globální nastavení obrazu" #: gui/launcher.cpp:250 msgctxt "lowres" msgid "Override global graphic settings" -msgstr "Potlait globln nastaven obrazu" +msgstr "Potlačit globální nastavení obrazu" #: gui/launcher.cpp:257 gui/options.cpp:1094 msgid "Audio" @@ -251,12 +281,12 @@ msgstr "Zvuk" #: gui/launcher.cpp:260 msgid "Override global audio settings" -msgstr "Potlait globln nastaven zvuku" +msgstr "Potlačit globální nastavení zvuku" #: gui/launcher.cpp:262 msgctxt "lowres" msgid "Override global audio settings" -msgstr "Potlait globln nastaven zvuku" +msgstr "Potlačit globální nastavení zvuku" #: gui/launcher.cpp:271 gui/options.cpp:1099 msgid "Volume" @@ -269,12 +299,12 @@ msgstr "Hlasitost" #: gui/launcher.cpp:276 msgid "Override global volume settings" -msgstr "Potlait globln nastaven hlasitosti" +msgstr "Potlačit globální nastavení hlasitosti" #: gui/launcher.cpp:278 msgctxt "lowres" msgid "Override global volume settings" -msgstr "Potlait globln nastaven hlasitosti" +msgstr "Potlačit globální nastavení hlasitosti" #: gui/launcher.cpp:286 gui/options.cpp:1109 msgid "MIDI" @@ -282,12 +312,12 @@ msgstr "MIDI" #: gui/launcher.cpp:289 msgid "Override global MIDI settings" -msgstr "Potlait globln nastaven MIDI" +msgstr "Potlačit globální nastavení MIDI" #: gui/launcher.cpp:291 msgctxt "lowres" msgid "Override global MIDI settings" -msgstr "Potlait globln nastaven MIDI" +msgstr "Potlačit globální nastavení MIDI" #: gui/launcher.cpp:300 gui/options.cpp:1115 msgid "MT-32" @@ -295,12 +325,12 @@ msgstr "MT-32" #: gui/launcher.cpp:303 msgid "Override global MT-32 settings" -msgstr "Potlait globln nastaven MT-32" +msgstr "Potlačit globální nastavení MT-32" #: gui/launcher.cpp:305 msgctxt "lowres" msgid "Override global MT-32 settings" -msgstr "Potlait globln nastaven MT-32" +msgstr "Potlačit globální nastavení MT-32" #: gui/launcher.cpp:314 gui/options.cpp:1122 msgid "Paths" @@ -322,30 +352,30 @@ msgstr "Cesta Hry:" #: gui/launcher.cpp:330 gui/options.cpp:1148 msgid "Extra Path:" -msgstr "Dodaten Cesta:" +msgstr "Dodatečná Cesta:" #: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 msgid "Specifies path to additional data used by the game" -msgstr "Stanov cestu pro dodaten data pouit ve he" +msgstr "Stanoví cestu pro dodatečná data použitá ve hře" #: gui/launcher.cpp:332 gui/options.cpp:1150 msgctxt "lowres" msgid "Extra Path:" -msgstr "Dodaten Cesta:" +msgstr "Dodatečná Cesta:" #: gui/launcher.cpp:339 gui/options.cpp:1132 msgid "Save Path:" -msgstr "Cesta pro uloen:" +msgstr "Cesta pro uložení:" #: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 #: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135 msgid "Specifies where your saved games are put" -msgstr "Stanovuje, kam jsou umstny vae uloen hry" +msgstr "Stanovuje, kam jsou umístěny vaše uložené hry" #: gui/launcher.cpp:341 gui/options.cpp:1134 msgctxt "lowres" msgid "Save Path:" -msgstr "Cesta pro uloen:" +msgstr "Cesta pro uložení:" #: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 #: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151 @@ -355,13 +385,13 @@ msgstr "Cesta pro uloen:" #: gui/options.cpp:1440 msgctxt "path" msgid "None" -msgstr "dn" +msgstr "Žádné" #: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575 #: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431 #: backends/platform/wii/options.cpp:56 msgid "Default" -msgstr "Vchoz" +msgstr "Výchozí" #: gui/launcher.cpp:510 gui/options.cpp:1434 msgid "Select SoundFont" @@ -369,33 +399,33 @@ msgstr "Vybrat SoundFont" #: gui/launcher.cpp:529 gui/launcher.cpp:682 msgid "Select directory with game data" -msgstr "Vyberte adres s daty hry" +msgstr "Vyberte adresář s daty hry" #: gui/launcher.cpp:547 msgid "Select additional game directory" -msgstr "Vyberte dodaten adres hry" +msgstr "Vyberte dodatečný adresář hry" #: gui/launcher.cpp:559 gui/options.cpp:1377 msgid "Select directory for saved games" -msgstr "Vyberte adres pro uloen hry" +msgstr "Vyberte adresář pro uložené hry" #: gui/launcher.cpp:586 msgid "This game ID is already taken. Please choose another one." -msgstr "Toto ID hry je u zabran. Vyberte si, prosm, jin." +msgstr "Toto ID hry je už zabrané. Vyberte si, prosím, jiné." #: gui/launcher.cpp:626 engines/dialogs.cpp:111 msgid "~Q~uit" -msgstr "~U~konit" +msgstr "~U~končit" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" -msgstr "Ukonit ScummVM" +msgstr "Ukončit ScummVM" #: gui/launcher.cpp:627 msgid "A~b~out..." msgstr "~O~ Programu..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "O ScummVM" @@ -405,7 +435,7 @@ msgstr "~V~olby..." #: gui/launcher.cpp:628 msgid "Change global ScummVM options" -msgstr "Zmnit globln volby ScummVM" +msgstr "Změnit globální volby ScummVM" #: gui/launcher.cpp:630 msgid "~S~tart" @@ -417,19 +447,19 @@ msgstr "Spustit zvolenou hru" #: gui/launcher.cpp:633 msgid "~L~oad..." -msgstr "~N~ahrt..." +msgstr "~N~ahrát..." #: gui/launcher.cpp:633 msgid "Load saved game for selected game" -msgstr "Nahrt uloenou pozici pro zvolenou hru" +msgstr "Nahrát uloženou pozici pro zvolenou hru" #: gui/launcher.cpp:638 msgid "~A~dd Game..." -msgstr "~P~idat hru..." +msgstr "~P~řidat hru..." #: gui/launcher.cpp:638 gui/launcher.cpp:645 msgid "Hold Shift for Mass Add" -msgstr "Podrte Shift pro Hromadn Pidn" +msgstr "Podržte Shift pro Hromadné Přidání" #: gui/launcher.cpp:640 msgid "~E~dit Game..." @@ -437,7 +467,7 @@ msgstr "~U~pravit Hru..." #: gui/launcher.cpp:640 gui/launcher.cpp:647 msgid "Change game options" -msgstr "Zmnit volby hry" +msgstr "Změnit volby hry" #: gui/launcher.cpp:642 msgid "~R~emove Game" @@ -445,12 +475,12 @@ msgstr "~O~dstranit Hru" #: gui/launcher.cpp:642 gui/launcher.cpp:649 msgid "Remove game from the list. The game data files stay intact" -msgstr "Odstranit hru ze seznamu. Hern data zstanou zachovna" +msgstr "Odstranit hru ze seznamu. Herní data zůstanou zachována" #: gui/launcher.cpp:645 msgctxt "lowres" msgid "~A~dd Game..." -msgstr "~P~idat hru..." +msgstr "~P~řidat hru..." #: gui/launcher.cpp:647 msgctxt "lowres" @@ -474,7 +504,7 @@ msgstr "Hledat:" #: engines/mohawk/myst.cpp:245 engines/mohawk/riven.cpp:718 #: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 msgid "Load game:" -msgstr "Nahrt hru:" +msgstr "Nahrát hru:" #: gui/launcher.cpp:685 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 @@ -483,43 +513,23 @@ msgstr "Nahrt hru:" #: engines/mohawk/riven.cpp:718 engines/pegasus/pegasus.cpp:353 #: engines/scumm/dialogs.cpp:189 engines/tsage/scenes.cpp:600 msgid "Load" -msgstr "Nahrt" +msgstr "Nahrát" #: gui/launcher.cpp:792 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." msgstr "" -"Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciln " -"pidat velkou spoustu her. " - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Ano" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Ne" +"Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciálně " +"přidat velkou spoustu her. " #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" -msgstr "ScummVM nemohl tento adres otevt!" +msgstr "ScummVM nemohl tento adresář otevřít!" #: gui/launcher.cpp:853 msgid "ScummVM could not find any game in the specified directory!" -msgstr "ScummVM nemohl v zadanm adresi najt dnou hru!" +msgstr "ScummVM nemohl v zadaném adresáři najít žádnou hru!" #: gui/launcher.cpp:867 msgid "Pick the game:" @@ -527,68 +537,66 @@ msgstr "Vybrat hru:" #: gui/launcher.cpp:941 msgid "Do you really want to remove this game configuration?" -msgstr "Opravdu chcete odstranit nastaven tto hry?" +msgstr "Opravdu chcete odstranit nastavení této hry?" #: gui/launcher.cpp:999 msgid "Do you want to load saved game?" -msgstr "Chcete nast uloenou pozici?" +msgstr "Chcete načíst uloženou pozici?" #: gui/launcher.cpp:1048 msgid "This game does not support loading games from the launcher." -msgstr "Tato hra nepodporuje spoutn her ze spoute" +msgstr "Tato hra nepodporuje spouštění her ze spouštěče" #: gui/launcher.cpp:1052 msgid "ScummVM could not find any engine capable of running the selected game!" -msgstr "ScummVM nemohl najt dn jdro schopn vybranou hru spustit!" +msgstr "ScummVM nemohl najít žádné jádro schopné vybranou hru spustit!" #: gui/launcher.cpp:1159 msgid "Mass Add..." -msgstr "Hromadn Pidn..." +msgstr "Hromadné Přidání..." #: gui/launcher.cpp:1161 msgid "Record..." -msgstr "Nahrt..." +msgstr "Nahrát..." #: gui/massadd.cpp:79 gui/massadd.cpp:82 msgid "... progress ..." -msgstr "... prbh ..." +msgstr "... průběh ..." #: gui/massadd.cpp:259 msgid "Scan complete!" -msgstr "Hledn dokoneno!" +msgstr "Hledání dokončeno!" #: gui/massadd.cpp:262 #, c-format msgid "Discovered %d new games, ignored %d previously added games." -msgstr "Objeveno %d novch her, ignorovno %d dve pidanch her." +msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her." #: gui/massadd.cpp:266 #, c-format msgid "Scanned %d directories ..." -msgstr "Prohledno %d adres..." +msgstr "Prohledáno %d adresářů..." #: gui/massadd.cpp:269 #, c-format msgid "Discovered %d new games, ignored %d previously added games ..." -msgstr "Objeveno %d novch her, ignorovno %d dve pidanch her ..." +msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her ..." #: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103 msgid "Stop" -msgstr "" +msgstr "Zastavit" #: gui/onscreendialog.cpp:106 msgid "Edit record description" -msgstr "" +msgstr "Upravit popis záznamu" #: gui/onscreendialog.cpp:108 -#, fuzzy msgid "Switch to Game" -msgstr "Pepnout" +msgstr "Přepnout do hry" #: gui/onscreendialog.cpp:110 -#, fuzzy msgid "Fast replay" -msgstr "Rychl reim" +msgstr "Rychlé přehrávání" #: gui/options.cpp:85 msgid "Never" @@ -596,19 +604,19 @@ msgstr "Nikdy" #: gui/options.cpp:85 msgid "every 5 mins" -msgstr "Kadch 5 min" +msgstr "Každých 5 min" #: gui/options.cpp:85 msgid "every 10 mins" -msgstr "Kadch 10 min" +msgstr "Každých 10 min" #: gui/options.cpp:85 msgid "every 15 mins" -msgstr "Kadch 15 min" +msgstr "Každých 15 min" #: gui/options.cpp:85 msgid "every 30 mins" -msgstr "Kadch 30 min" +msgstr "Každých 30 min" #: gui/options.cpp:87 msgid "8 kHz" @@ -634,110 +642,110 @@ msgstr "48 kHz" #: gui/options.cpp:649 gui/options.cpp:857 msgctxt "soundfont" msgid "None" -msgstr "dn" +msgstr "Žádné" #: gui/options.cpp:389 msgid "Failed to apply some of the graphic options changes:" -msgstr "Nelze pout nkter zmny monost grafiky:" +msgstr "Nelze použít některé změny možností grafiky:" #: gui/options.cpp:401 msgid "the video mode could not be changed." -msgstr "reim obrazu nemohl bt zmnn." +msgstr "režim obrazu nemohl být změněn." #: gui/options.cpp:407 msgid "the fullscreen setting could not be changed" -msgstr "nastaven cel obrazovky nemohlo bt zmnno" +msgstr "nastavení celé obrazovky nemohlo být změněno" #: gui/options.cpp:413 msgid "the aspect ratio setting could not be changed" -msgstr "nastaven pomru stran nemohlo bt zmnno" +msgstr "nastavení poměru stran nemohlo být změněno" #: gui/options.cpp:732 msgid "Graphics mode:" -msgstr "Reim obrazu:" +msgstr "Režim obrazu:" #: gui/options.cpp:746 msgid "Render mode:" -msgstr "Reim vykreslen:" +msgstr "Režim vykreslení:" #: gui/options.cpp:746 gui/options.cpp:747 msgid "Special dithering modes supported by some games" -msgstr "Speciln reimy chvn podporovan nktermi hrami" +msgstr "Speciální režimy chvění podporované některými hrami" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" -msgstr "Reim cel obrazovky" +msgstr "Režim celé obrazovky" #: gui/options.cpp:761 msgid "Aspect ratio correction" -msgstr "Korekce pomru stran" +msgstr "Korekce poměru stran" #: gui/options.cpp:761 msgid "Correct aspect ratio for 320x200 games" -msgstr "Korigovat pomr stran pro hry 320x200" +msgstr "Korigovat poměr stran pro hry 320x200" #: gui/options.cpp:769 msgid "Preferred Device:" -msgstr "Prioritn Zazen:" +msgstr "Prioritní Zařízení:" #: gui/options.cpp:769 msgid "Music Device:" -msgstr "Hudebn zazen" +msgstr "Hudební zařízení" #: gui/options.cpp:769 gui/options.cpp:771 msgid "Specifies preferred sound device or sound card emulator" -msgstr "Stanov prioritn zvukov zazen nebo emultor zvukov karty" +msgstr "Stanoví prioritní zvukové zařízení nebo emulátor zvukové karty" #: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772 msgid "Specifies output sound device or sound card emulator" -msgstr "Stanov vstupn zvukov zazen nebo emultor zvukov karty" +msgstr "Stanoví výstupní zvukové zařízení nebo emulátor zvukové karty" #: gui/options.cpp:771 msgctxt "lowres" msgid "Preferred Dev.:" -msgstr "Prioritn Za.:" +msgstr "Prioritní Zař.:" #: gui/options.cpp:771 msgctxt "lowres" msgid "Music Device:" -msgstr "Hudebn zazen" +msgstr "Hudební zařízení" #: gui/options.cpp:798 msgid "AdLib emulator:" -msgstr "AdLib emultor" +msgstr "AdLib emulátor" #: gui/options.cpp:798 gui/options.cpp:799 msgid "AdLib is used for music in many games" -msgstr "AdLib se pouv pro hudbu v mnoha hrch" +msgstr "AdLib se používá pro hudbu v mnoha hrách" #: gui/options.cpp:809 msgid "Output rate:" -msgstr "Vstup. frekvence:" +msgstr "Výstup. frekvence:" #: gui/options.cpp:809 gui/options.cpp:810 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" msgstr "" -"Vy hodnota zpsob lep kvalitu zvuku, ale nemus bt podporovna Vai " +"Vyšší hodnota způsobí lepší kvalitu zvuku, ale nemusí být podporována Vaši " "zvukovou kartou" #: gui/options.cpp:820 msgid "GM Device:" -msgstr "GM Zazen:" +msgstr "GM Zařízení:" #: gui/options.cpp:820 msgid "Specifies default sound device for General MIDI output" -msgstr "Stanov vchoz zvukov zazen pro vstup General MIDI" +msgstr "Stanoví výchozí zvukové zařízení pro výstup General MIDI" #: gui/options.cpp:831 msgid "Don't use General MIDI music" -msgstr "Nepouvat hudbu General MIDI" +msgstr "Nepoužívat hudbu General MIDI" #: gui/options.cpp:842 gui/options.cpp:908 msgid "Use first available device" -msgstr "Pout prvn dostupn zazen" +msgstr "Použít první dostupné zařízení" #: gui/options.cpp:854 msgid "SoundFont:" @@ -746,7 +754,7 @@ msgstr "SoundFont:" #: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" -"SoundFont je podporovn nktermi zvukovmi kartami, FluidSynth a Timidity" +"SoundFont je podporován některými zvukovými kartami, FluidSynth a Timidity" #: gui/options.cpp:856 msgctxt "lowres" @@ -755,69 +763,69 @@ msgstr "SoundFont:" #: gui/options.cpp:862 msgid "Mixed AdLib/MIDI mode" -msgstr "Smen reim AdLib/MIDI" +msgstr "Smíšený režim AdLib/MIDI" #: gui/options.cpp:862 msgid "Use both MIDI and AdLib sound generation" -msgstr "Pout ob zvukov generace MIDI a AdLib" +msgstr "Použít obě zvukové generace MIDI a AdLib" #: gui/options.cpp:865 msgid "MIDI gain:" -msgstr "Zeslen MIDI:" +msgstr "Zesílení MIDI:" #: gui/options.cpp:872 msgid "FluidSynth Settings" -msgstr "Nastaven FluidSynth" +msgstr "Nastavení FluidSynth" #: gui/options.cpp:879 msgid "MT-32 Device:" -msgstr "Zazen MT-32:" +msgstr "Zařízení MT-32:" #: gui/options.cpp:879 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" -"Stanov vchoz zvukov vstupn zazen pro Roland MT-32/LAPC1/CM32l/CM64" +"Stanoví výchozí zvukové výstupní zařízení pro Roland MT-32/LAPC1/CM32l/CM64" #: gui/options.cpp:884 msgid "True Roland MT-32 (disable GM emulation)" -msgstr "Opravdov Roland MT-32 (vypne GM emulaci)" +msgstr "Opravdový Roland MT-32 (vypne GM emulaci)" #: gui/options.cpp:884 gui/options.cpp:886 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" msgstr "" -"Zakrtnte, pokud chcete pout prav hardwarov zazen kompatibiln s " -"Roland, pipojen k vaemu potai" +"Zaškrtněte, pokud chcete použít pravé hardwarové zařízení kompatibilní s " +"Roland, připojené k vašemu počítači" #: gui/options.cpp:886 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" -msgstr "Opravdov Roland MT-32 (dn GM emulace)" +msgstr "Opravdový Roland MT-32 (žádná GM emulace)" #: gui/options.cpp:889 msgid "Roland GS Device (enable MT-32 mappings)" -msgstr "Zazen Roland GS (zapne mapovn MT-32)" +msgstr "Zařízení Roland GS (zapne mapování MT-32)" #: gui/options.cpp:889 msgid "" "Check if you want to enable patch mappings to emulate an MT-32 on a Roland " "GS device" msgstr "" -"Zakrtnte, pokud chcete povolit zplaty mapovn umoujc emulovat MT-32 " -"na zazen Roland GS" +"Zaškrtněte, pokud chcete povolit záplaty mapování umožňující emulovat MT-32 " +"na zařízení Roland GS" #: gui/options.cpp:898 msgid "Don't use Roland MT-32 music" -msgstr "Nepouvat hudbu Roland MT-32" +msgstr "Nepoužívat hudbu Roland MT-32" #: gui/options.cpp:925 msgid "Text and Speech:" -msgstr "Text a e" +msgstr "Text a Řeč" #: gui/options.cpp:929 gui/options.cpp:939 msgid "Speech" -msgstr "e" +msgstr "Řeč" #: gui/options.cpp:930 gui/options.cpp:940 msgid "Subtitles" @@ -829,16 +837,16 @@ msgstr "Oba" #: gui/options.cpp:933 msgid "Subtitle speed:" -msgstr "Rychlost titulk:" +msgstr "Rychlost titulků:" #: gui/options.cpp:935 msgctxt "lowres" msgid "Text and Speech:" -msgstr "Text a e:" +msgstr "Text a Řeč:" #: gui/options.cpp:939 msgid "Spch" -msgstr "e" +msgstr "Řeč" #: gui/options.cpp:940 msgid "Subs" @@ -851,12 +859,12 @@ msgstr "Oba" #: gui/options.cpp:941 msgid "Show subtitles and play speech" -msgstr "Zobrazit titulky a pehrvat e" +msgstr "Zobrazit titulky a přehrávat řeč" #: gui/options.cpp:943 msgctxt "lowres" msgid "Subtitle speed:" -msgstr "Rychlost titulk" +msgstr "Rychlost titulků" #: gui/options.cpp:959 msgid "Music volume:" @@ -869,29 +877,29 @@ msgstr "Hlasitost hudby" #: gui/options.cpp:968 msgid "Mute All" -msgstr "Ztlumit Ve" +msgstr "Ztlumit Vše" #: gui/options.cpp:971 msgid "SFX volume:" -msgstr "Hlasitost zvuk" +msgstr "Hlasitost zvuků" #: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974 msgid "Special sound effects volume" -msgstr "Hlasitost specilnch zvukovch efekt" +msgstr "Hlasitost speciálních zvukových efektů" #: gui/options.cpp:973 msgctxt "lowres" msgid "SFX volume:" -msgstr "Hlasitost zvuk" +msgstr "Hlasitost zvuků" #: gui/options.cpp:981 msgid "Speech volume:" -msgstr "Hlasitost ei" +msgstr "Hlasitost řeči" #: gui/options.cpp:983 msgctxt "lowres" msgid "Speech volume:" -msgstr "Hlasitost ei" +msgstr "Hlasitost řeči" #: gui/options.cpp:1140 msgid "Theme Path:" @@ -904,25 +912,25 @@ msgstr "Cesta ke Vzhledu:" #: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151 msgid "Specifies path to additional data used by all games or ScummVM" -msgstr "Stanov cestu k dodatenm datm pouvan vemi hrami nebo ScummVM" +msgstr "Stanoví cestu k dodatečným datům používaná všemi hrami nebo ScummVM" #: gui/options.cpp:1157 msgid "Plugins Path:" -msgstr "Cesta k Pluginm:" +msgstr "Cesta k Pluginům:" #: gui/options.cpp:1159 msgctxt "lowres" msgid "Plugins Path:" -msgstr "Cesta k Pluginm:" +msgstr "Cesta k Pluginům:" #: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138 msgid "Misc" -msgstr "Rzn" +msgstr "Různé" #: gui/options.cpp:1170 msgctxt "lowres" msgid "Misc" -msgstr "Rzn" +msgstr "Různé" #: gui/options.cpp:1172 msgid "Theme:" @@ -930,20 +938,20 @@ msgstr "Vzhled:" #: gui/options.cpp:1176 msgid "GUI Renderer:" -msgstr "GUI Vykreslova:" +msgstr "GUI Vykreslovač:" #: gui/options.cpp:1188 msgid "Autosave:" -msgstr "Autoukldn:" +msgstr "Autoukládání:" #: gui/options.cpp:1190 msgctxt "lowres" msgid "Autosave:" -msgstr "Autoukldn:" +msgstr "Autoukládání:" #: gui/options.cpp:1198 msgid "Keys" -msgstr "Klvesy" +msgstr "Klávesy" #: gui/options.cpp:1205 msgid "GUI Language:" @@ -955,58 +963,57 @@ msgstr "Jazyk GUI ScummVM" #: gui/options.cpp:1364 msgid "You have to restart ScummVM before your changes will take effect." -msgstr "Pro pouit tchto nastaven muste restartovat ScummVM." +msgstr "Pro použití těchto nastavení musíte restartovat ScummVM." #: gui/options.cpp:1384 msgid "The chosen directory cannot be written to. Please select another one." -msgstr "Do zvolenho adrese nelze zapisovat. Vyberte, prosm, jin." +msgstr "Do zvoleného adresáře nelze zapisovat. Vyberte, prosím, jiný." #: gui/options.cpp:1393 msgid "Select directory for GUI themes" -msgstr "Vyberte adres pro vhledy GUI" +msgstr "Vyberte adresář pro vhledy GUI" #: gui/options.cpp:1403 msgid "Select directory for extra files" -msgstr "Vyberte adres pro dodaten soubory" +msgstr "Vyberte adresář pro dodatečné soubory" #: gui/options.cpp:1414 msgid "Select directory for plugins" -msgstr "Vyberte adres pro zsuvn moduly" +msgstr "Vyberte adresář pro zásuvné moduly" #: gui/options.cpp:1467 msgid "" "The theme you selected does not support your current language. If you want " "to use this theme you need to switch to another language first." msgstr "" -"Vzhled, kter jste zvolili, nepodporuje V souasn jazyk. Pokud chcete " -"tento vzhled pout, muste nejdve pepnout na jin jazyk." +"Vzhled, který jste zvolili, nepodporuje Váš současný jazyk. Pokud chcete " +"tento vzhled použít, musíte nejdříve přepnout na jiný jazyk." #. I18N: You must leave "#" as is, only word 'next' is translatable #: gui/predictivedialog.cpp:87 msgid "# next" -msgstr "" +msgstr "# další" #: gui/predictivedialog.cpp:88 msgid "add" -msgstr "" +msgstr "přidat" #: gui/predictivedialog.cpp:92 -#, fuzzy msgid "Delete char" -msgstr "Smazat" +msgstr "Smazat znak" #: gui/predictivedialog.cpp:96 msgid "<" -msgstr "" +msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is #: gui/predictivedialog.cpp:98 msgid "* Pre" -msgstr "" +msgstr "* Prediktivní" #: gui/recorderdialog.cpp:64 msgid "Recorder or Playback Gameplay" -msgstr "Nahrvat nebo pehrt hru" +msgstr "Nahrávat nebo přehrát hru" #: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 @@ -1015,11 +1022,11 @@ msgstr "Smazat" #: gui/recorderdialog.cpp:71 msgid "Record" -msgstr "Nahrt" +msgstr "Nahrát" #: gui/recorderdialog.cpp:72 msgid "Playback" -msgstr "Pehrt" +msgstr "Přehrát" #: gui/recorderdialog.cpp:74 msgid "Edit" @@ -1033,16 +1040,15 @@ msgstr "Autor:" #: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 #: gui/recorderdialog.cpp:254 msgid "Notes: " -msgstr "Poznmky:" +msgstr "Poznámky:" #: gui/recorderdialog.cpp:155 msgid "Do you really want to delete this record?" -msgstr "Opravdu chcete tento zznam smazat?" +msgstr "Opravdu chcete tento záznam smazat?" #: gui/recorderdialog.cpp:174 -#, fuzzy msgid "Unknown Author" -msgstr "Neznm chyba" +msgstr "Neznámý autor" #: gui/saveload-dialog.cpp:167 msgid "List view" @@ -1050,23 +1056,23 @@ msgstr "Seznam" #: gui/saveload-dialog.cpp:168 msgid "Grid view" -msgstr "Mka" +msgstr "Mřížka" #: gui/saveload-dialog.cpp:211 gui/saveload-dialog.cpp:360 msgid "No date saved" -msgstr "Neuloena dn data" +msgstr "Neuložena žádná data" #: gui/saveload-dialog.cpp:212 gui/saveload-dialog.cpp:361 msgid "No time saved" -msgstr "dn uloen as" +msgstr "Žádný uložený čas" #: gui/saveload-dialog.cpp:213 gui/saveload-dialog.cpp:362 msgid "No playtime saved" -msgstr "dn uloen doba hran" +msgstr "Žádná uložená doba hraní" #: gui/saveload-dialog.cpp:275 msgid "Do you really want to delete this saved game?" -msgstr "Opravdu chcete tuto uloenou hru vymazat" +msgstr "Opravdu chcete tuto uloženou hru vymazat" #: gui/saveload-dialog.cpp:385 gui/saveload-dialog.cpp:884 msgid "Date: " @@ -1074,35 +1080,35 @@ msgstr "Datum:" #: gui/saveload-dialog.cpp:389 gui/saveload-dialog.cpp:890 msgid "Time: " -msgstr "as:" +msgstr "Čas:" #: gui/saveload-dialog.cpp:395 gui/saveload-dialog.cpp:898 msgid "Playtime: " -msgstr "Doba hran:" +msgstr "Doba hraní:" #: gui/saveload-dialog.cpp:408 gui/saveload-dialog.cpp:496 msgid "Untitled savestate" -msgstr "Bezejmenn uloen stav" +msgstr "Bezejmenný uložený stav" #: gui/saveload-dialog.cpp:548 msgid "Next" -msgstr "Dal" +msgstr "Další" #: gui/saveload-dialog.cpp:551 msgid "Prev" -msgstr "Pedchoz" +msgstr "Předchozí" #: gui/saveload-dialog.cpp:748 msgid "New Save" -msgstr "Nov uloen pozice" +msgstr "Nová uložená pozice" #: gui/saveload-dialog.cpp:748 msgid "Create a new save game" -msgstr "Vytvoit novou uloenou hru." +msgstr "Vytvořit novou uloženou hru." #: gui/saveload-dialog.cpp:877 msgid "Name: " -msgstr "Nzev:" +msgstr "Název:" #: gui/saveload-dialog.cpp:949 #, c-format @@ -1115,32 +1121,32 @@ msgstr "Vyberte Vzhled" #: gui/ThemeEngine.cpp:347 msgid "Disabled GFX" -msgstr "GFX zakzno" +msgstr "GFX zakázáno" #: gui/ThemeEngine.cpp:347 msgctxt "lowres" msgid "Disabled GFX" -msgstr "GFX zakzno" +msgstr "GFX zakázáno" #: gui/ThemeEngine.cpp:348 msgid "Standard Renderer" -msgstr "Standardn Vykreslova" +msgstr "Standardní Vykreslovač" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" -msgstr "Standardn" +msgstr "Standardní" #: gui/ThemeEngine.cpp:350 msgid "Antialiased Renderer" -msgstr "Vykreslova s vyhlazenmi hranami" +msgstr "Vykreslovač s vyhlazenými hranami" #: gui/ThemeEngine.cpp:350 msgid "Antialiased" -msgstr "S vyhlazenmi hranami" +msgstr "S vyhlazenými hranami" #: gui/widget.cpp:323 gui/widget.cpp:325 gui/widget.cpp:331 gui/widget.cpp:333 msgid "Clear value" -msgstr "Vyistit hodnotu" +msgstr "Vyčistit hodnotu" #: gui/fluidsynth-dialog.cpp:68 msgid "Reverb" @@ -1148,23 +1154,23 @@ msgstr "Dozvuk" #: gui/fluidsynth-dialog.cpp:70 gui/fluidsynth-dialog.cpp:102 msgid "Active" -msgstr "Aktivn" +msgstr "Aktivní" #: gui/fluidsynth-dialog.cpp:72 msgid "Room:" -msgstr "Mstnost:" +msgstr "Místnost:" #: gui/fluidsynth-dialog.cpp:79 msgid "Damp:" -msgstr "Tlumen:" +msgstr "Tlumení:" #: gui/fluidsynth-dialog.cpp:86 msgid "Width:" -msgstr "ka:" +msgstr "Šířka:" #: gui/fluidsynth-dialog.cpp:93 gui/fluidsynth-dialog.cpp:111 msgid "Level:" -msgstr "rove:" +msgstr "Úroveň:" #: gui/fluidsynth-dialog.cpp:100 msgid "Chorus" @@ -1192,7 +1198,7 @@ msgstr "Sinus" #: gui/fluidsynth-dialog.cpp:136 msgid "Triangle" -msgstr "Trojhrlnk" +msgstr "Trojúhrlník" #: gui/fluidsynth-dialog.cpp:140 msgid "Interpolation:" @@ -1200,19 +1206,19 @@ msgstr "Interpolace:" #: gui/fluidsynth-dialog.cpp:143 msgid "None (fastest)" -msgstr "dn (Nejrychlej)" +msgstr "Žádná (Nejrychlejší)" #: gui/fluidsynth-dialog.cpp:144 msgid "Linear" -msgstr "Linern" +msgstr "Lineární" #: gui/fluidsynth-dialog.cpp:145 msgid "Fourth-order" -msgstr "Interpolace tvrtho du" +msgstr "Interpolace čtvrtého řádu" #: gui/fluidsynth-dialog.cpp:146 msgid "Seventh-order" -msgstr "Interpolace sedmho du" +msgstr "Interpolace sedmého řádu" #: gui/fluidsynth-dialog.cpp:150 msgid "Reset" @@ -1220,19 +1226,19 @@ msgstr "Resetovat" #: gui/fluidsynth-dialog.cpp:150 msgid "Reset all FluidSynth settings to their default values." -msgstr "Resetovat veker nastaven FludSynth n ajejich vchoz hodnoty." +msgstr "Resetovat veškerá nastavení FludSynth n ajejich výchozí hodnoty." #: gui/fluidsynth-dialog.cpp:217 msgid "" "Do you really want to reset all FluidSynth settings to their default values?" msgstr "" -"Opravdu chcete resetovat veker nastaven FluidSynth na jejich vchoz " +"Opravdu chcete resetovat veškerá nastavení FluidSynth na jejich výchozí " "hodnoty?" #: base/main.cpp:228 #, c-format msgid "Engine does not support debug level '%s'" -msgstr "Jdro nepodporuje rove ladn '%s'" +msgstr "Jádro nepodporuje úroveň ladění '%s'" #: base/main.cpp:306 msgid "Menu" @@ -1242,7 +1248,7 @@ msgstr "Menu" #: backends/platform/wince/CEActionsPocket.cpp:45 #: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" -msgstr "Peskoit" +msgstr "Přeskočit" #: base/main.cpp:312 backends/platform/symbian/src/SymbianActions.cpp:50 #: backends/platform/wince/CEActionsPocket.cpp:42 @@ -1251,19 +1257,19 @@ msgstr "Pauza" #: base/main.cpp:315 msgid "Skip line" -msgstr "Peskoit dek" +msgstr "Přeskočit řádek" #: base/main.cpp:507 msgid "Error running game:" -msgstr "Chyba pi sputn hry:" +msgstr "Chyba při spuštění hry:" #: base/main.cpp:554 msgid "Could not find any engine capable of running the selected game" -msgstr "Nelze nalzt dn jdro schopn vybranou hru spustit" +msgstr "Nelze nalézt žádné jádro schopné vybranou hru spustit" #: common/error.cpp:38 msgid "No error" -msgstr "dn chyba" +msgstr "Žádná chyba" #: common/error.cpp:40 msgid "Game data not found" @@ -1271,19 +1277,19 @@ msgstr "Data hry nenalezena" #: common/error.cpp:42 msgid "Game id not supported" -msgstr "Id hry nen podporovno" +msgstr "Id hry není podporováno" #: common/error.cpp:44 msgid "Unsupported color mode" -msgstr "Nepodporovan barevn reim" +msgstr "Nepodporovaný barevný režim" #: common/error.cpp:47 msgid "Read permission denied" -msgstr "Oprvnn ke ten zamtnuto" +msgstr "Oprávnění ke čtení zamítnuto" #: common/error.cpp:49 msgid "Write permission denied" -msgstr "Oprvnn k zpisu zamtnuto" +msgstr "Oprávnění k zápisu zamítnuto" #: common/error.cpp:52 msgid "Path does not exist" @@ -1291,64 +1297,64 @@ msgstr "Cesta neexistuje" #: common/error.cpp:54 msgid "Path not a directory" -msgstr "Cesta nen adres" +msgstr "Cesta není adresář" #: common/error.cpp:56 msgid "Path not a file" -msgstr "Cesta nen soubor" +msgstr "Cesta není soubor" #: common/error.cpp:59 msgid "Cannot create file" -msgstr "Nelze vytvoit soubor" +msgstr "Nelze vytvořit soubor" #: common/error.cpp:61 msgid "Reading data failed" -msgstr "ten dat selhalo" +msgstr "Čtení dat selhalo" #: common/error.cpp:63 msgid "Writing data failed" -msgstr "Zpis dat selhal" +msgstr "Zápis dat selhal" #: common/error.cpp:66 msgid "Could not find suitable engine plugin" -msgstr "Nelze nalzt vhodn zs. modul jdra" +msgstr "Nelze nalézt vhodný zás. modul jádra" #: common/error.cpp:68 msgid "Engine plugin does not support save states" -msgstr "Zs. modul jdra nepodporuje uloen stavy" +msgstr "Zás. modul jádra nepodporuje uložené stavy" #: common/error.cpp:71 msgid "User canceled" -msgstr "Zrueno uivatelem" +msgstr "Zrušeno uživatelem" #: common/error.cpp:75 msgid "Unknown error" -msgstr "Neznm chyba" +msgstr "Neznámá chyba" #: engines/advancedDetector.cpp:317 #, c-format msgid "The game in '%s' seems to be unknown." -msgstr "Hra v '%s' se zd bt neznm." +msgstr "Hra v '%s' se zdá být neznámá." #: engines/advancedDetector.cpp:318 msgid "Please, report the following data to the ScummVM team along with name" -msgstr "Prosm nahlaste nsledujc data tmu ScummVM spolu se jmnem" +msgstr "Prosím nahlaste následující data týmu ScummVM spolu se jménem" #: engines/advancedDetector.cpp:320 msgid "of the game you tried to add and its version/language/etc.:" -msgstr "hry, kterou jste se pokusili pidat a jej verzi/jazyk/atd.:" +msgstr "hry, kterou jste se pokusili přidat a její verzi/jazyk/atd.:" #: engines/dialogs.cpp:85 msgid "~R~esume" -msgstr "~P~okraovat" +msgstr "~P~okračovat" #: engines/dialogs.cpp:87 msgid "~L~oad" -msgstr "~N~ahrt" +msgstr "~N~ahrát" #: engines/dialogs.cpp:91 msgid "~S~ave" -msgstr "~U~loit" +msgstr "~U~ložit" #: engines/dialogs.cpp:95 msgid "~O~ptions" @@ -1356,7 +1362,7 @@ msgstr "~V~olby" #: engines/dialogs.cpp:100 msgid "~H~elp" -msgstr "~N~povda" +msgstr "~N~ápověda" #: engines/dialogs.cpp:102 msgid "~A~bout" @@ -1364,20 +1370,20 @@ msgstr "~O~ programu" #: engines/dialogs.cpp:105 engines/dialogs.cpp:181 msgid "~R~eturn to Launcher" -msgstr "~N~vrat do Spoute" +msgstr "~N~ávrat do Spouštěče" #: engines/dialogs.cpp:107 engines/dialogs.cpp:183 msgctxt "lowres" msgid "~R~eturn to Launcher" -msgstr "~N~vrat do Spoute" +msgstr "~N~ávrat do Spouštěče" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" -msgstr "Uloit hru:" +msgstr "Uložit hru:" #: engines/dialogs.cpp:116 backends/platform/symbian/src/SymbianActions.cpp:44 #: backends/platform/wince/CEActionsPocket.cpp:43 @@ -1386,11 +1392,11 @@ msgstr "Uloit hru:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" -msgstr "Uloit" +msgstr "Uložit" #: engines/dialogs.cpp:145 msgid "" @@ -1398,9 +1404,9 @@ msgid "" "the README for basic information, and for instructions on how to obtain " "further assistance." msgstr "" -"Je nm lto, ale toto jdro v souasnosti nepodporuje hern npovdu. Prosm " -"prohldnte si README pro zkladn informace a pro instrukce jak zskat " -"dal pomoc." +"Je nám líto, ale toto jádro v současnosti nepodporuje herní nápovědu. Prosím " +"prohlédněte si README pro základní informace a pro instrukce jak získat " +"další pomoc." #: engines/dialogs.cpp:234 engines/pegasus/pegasus.cpp:393 #, c-format @@ -1408,8 +1414,8 @@ msgid "" "Gamestate save failed (%s)! Please consult the README for basic information, " "and for instructions on how to obtain further assistance." msgstr "" -"Uloen stavu hry selhalo (%s)! Prosm pette si dokumentaci pro zkladn " -"informace a pokyny k zskn dal podpory." +"Uložení stavu hry selhalo (%s)! Prosím přečtěte si dokumentaci pro základní " +"informace a pokyny k získání další podpory." #: engines/dialogs.cpp:307 engines/mohawk/dialogs.cpp:109 #: engines/mohawk/dialogs.cpp:170 engines/tsage/dialogs.cpp:106 @@ -1419,27 +1425,27 @@ msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:110 #: engines/mohawk/dialogs.cpp:171 engines/tsage/dialogs.cpp:107 msgid "~C~ancel" -msgstr "~Z~ruit" +msgstr "~Z~rušit" #: engines/dialogs.cpp:311 msgid "~K~eys" -msgstr "~K~lvesy" +msgstr "~K~lávesy" #: engines/engine.cpp:276 msgid "Could not initialize color format." -msgstr "Nelze zavst barevn formt." +msgstr "Nelze zavést barevný formát." #: engines/engine.cpp:284 msgid "Could not switch to video mode: '" -msgstr "Nelze pepnout na reim obrazu: '" +msgstr "Nelze přepnout na režim obrazu: '" #: engines/engine.cpp:293 msgid "Could not apply aspect ratio setting." -msgstr "Nelze pout nastaven pomru stran." +msgstr "Nelze použít nastavení poměru stran." #: engines/engine.cpp:298 msgid "Could not apply fullscreen setting." -msgstr "Nelze pout nastaven cel obrazovky." +msgstr "Nelze použít nastavení celé obrazovky." #: engines/engine.cpp:398 msgid "" @@ -1449,11 +1455,11 @@ msgid "" "the data files to your hard disk instead.\n" "See the README file for details." msgstr "" -"Vypad to, e tuto hru hrajete pmo z\n" -" CD. Je znmo, e toto zpsobuje problmy\n" -" a je tedy doporueno, a msto toho zkoprujete\n" -"datov soubory na V pevn disk.\n" -"Pro podrobnosti si pette README." +"Vypadá to, že tuto hru hrajete přímo z\n" +" CD. Je známo, že toto způsobuje problémy\n" +" a je tedy doporučeno, ať místo toho zkopírujete\n" +"datové soubory na Váš pevný disk.\n" +"Pro podrobnosti si přečtěte README." #: engines/engine.cpp:409 msgid "" @@ -1463,11 +1469,11 @@ msgid "" "order to listen to the game's music.\n" "See the README file for details." msgstr "" -"Tato hra m na svm disku zvukov stopy. Tyto\n" -"stopy mus bt z disku zkoprovny pouitm\n" -"vhodnho nstroje pro extrakci zvuku z CD,\n" -"abyste mohli poslouchat hudbu ve he.\n" -"Pro podrobnosti si pette README." +"Tato hra má na svém disku zvukové stopy. Tyto\n" +"stopy musí být z disku zkopírovány použitím\n" +"vhodného nástroje pro extrakci zvuku z CD,\n" +"abyste mohli poslouchat hudbu ve hře.\n" +"Pro podrobnosti si přečtěte README." #: engines/engine.cpp:467 #, c-format @@ -1475,8 +1481,8 @@ msgid "" "Gamestate load failed (%s)! Please consult the README for basic information, " "and for instructions on how to obtain further assistance." msgstr "" -"Naten stavu hry selhalo (%s)! Prosm pette si dokumentaci pro zkladn " -"informace a pokyny k zskn dal podpory." +"Načtení stavu hry selhalo (%s)! Prosím přečtěte si dokumentaci pro základní " +"informace a pokyny k získání další podpory." #: engines/engine.cpp:480 msgid "" @@ -1484,25 +1490,25 @@ msgid "" "ScummVM. As such, it is likely to be unstable, and any saves you make might " "not work in future versions of ScummVM." msgstr "" -"VAROVN: Hra, kterou se chystte spustit, nen jet pln podporovna " -"ScummVM. Proto je mon, e bude nestabiln a jakkoli uloen hry nemus " -"fungovat v budoucch verzch ScummVM." +"VAROVÁNÍ: Hra, kterou se chystáte spustit, není ještě plně podporována " +"ScummVM. Proto je možné, že bude nestabilní a jakékoli uložené hry nemusí " +"fungovat v budoucích verzích ScummVM." #: engines/engine.cpp:483 msgid "Start anyway" -msgstr "Pesto spustit" +msgstr "Přesto spustit" #: audio/fmopl.cpp:62 msgid "MAME OPL emulator" -msgstr "MAME OPL Emultor" +msgstr "MAME OPL Emulátor" #: audio/fmopl.cpp:64 msgid "DOSBox OPL emulator" -msgstr "DOSBox OPL Emultor" +msgstr "DOSBox OPL Emulátor" #: audio/fmopl.cpp:67 msgid "ALSA Direct FM" -msgstr "" +msgstr "ALSA Přímá FM" #: audio/mididrv.cpp:209 #, c-format @@ -1510,13 +1516,13 @@ msgid "" "The selected audio device '%s' was not found (e.g. might be turned off or " "disconnected)." msgstr "" -"Zvolen zvukov zazen '%s' nebylo nalezeno (nap. me bt vypnuto nebo " +"Zvolené zvukové zařízení '%s' nebylo nalezeno (např. může být vypnuto nebo " "odpojeno)." #: audio/mididrv.cpp:209 audio/mididrv.cpp:221 audio/mididrv.cpp:257 #: audio/mididrv.cpp:272 msgid "Attempting to fall back to the next available device..." -msgstr "Pokus o navrcen na nejbli dostupn zazen..." +msgstr "Pokus o navrácení na nejbližší dostupné zařízení..." #: audio/mididrv.cpp:221 #, c-format @@ -1524,8 +1530,8 @@ msgid "" "The selected audio device '%s' cannot be used. See log file for more " "information." msgstr "" -"Zvolen zvukov zazen '%s' nelze pout. Podvejte se na zznam pro vce " -"informac." +"Zvolené zvukové zařízení '%s' nelze použít. Podívejte se na záznam pro více " +"informací." #: audio/mididrv.cpp:257 #, c-format @@ -1533,7 +1539,7 @@ msgid "" "The preferred audio device '%s' was not found (e.g. might be turned off or " "disconnected)." msgstr "" -"Upednostovan zvukov zazen '%s' nebylo nalezeno (nap. me bt " +"Upřednostňované zvukové zařízení '%s' nebylo nalezeno (např. může být " "vypnuto nebo odpojeno)." #: audio/mididrv.cpp:272 @@ -1542,8 +1548,8 @@ msgid "" "The preferred audio device '%s' cannot be used. See log file for more " "information." msgstr "" -"Upednostovan zvukov zazen '%s' nelze pout. Podvejte se na zznam " -"pro vce informac." +"Upřednostňované zvukové zařízení '%s' nelze použít. Podívejte se na záznam " +"pro více informací." #: audio/null.h:44 msgid "No music" @@ -1551,55 +1557,55 @@ msgstr "Bez hudby" #: audio/mods/paula.cpp:196 msgid "Amiga Audio Emulator" -msgstr "Emultor zvuku Amiga" +msgstr "Emulátor zvuku Amiga" #: audio/adlib.cpp:2291 msgid "AdLib Emulator" -msgstr "AdLib Emultor" +msgstr "AdLib Emulátor" #: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" -msgstr "Apple II GS Emultor (NEN ZAVEDEN)" +msgstr "Apple II GS Emulátor (NENÍ ZAVEDEN)" #: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" -msgstr "Emultor zvuku C64" +msgstr "Emulátor zvuku C64" #: audio/softsynth/mt32.cpp:200 msgid "Initializing MT-32 Emulator" -msgstr "Zavdm MT-32 Emultor" +msgstr "Zavádím MT-32 Emulátor" #: audio/softsynth/mt32.cpp:426 msgid "MT-32 Emulator" -msgstr "MT-32 Emultor" +msgstr "MT-32 Emulátor" #: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" -msgstr "PC Speaker Emultor" +msgstr "PC Speaker Emulátor" #: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" -msgstr "IBM PCjr Emultor" +msgstr "IBM PCjr Emulátor" #: backends/keymapper/remap-dialog.cpp:48 msgid "Keymap:" -msgstr "Mapa Klves:" +msgstr "Mapa Kláves:" #: backends/keymapper/remap-dialog.cpp:67 msgid " (Effective)" -msgstr " (Aktivn)" +msgstr " (Aktivní)" #: backends/keymapper/remap-dialog.cpp:107 msgid " (Active)" -msgstr "(Aktivn)" +msgstr "(Aktivní)" #: backends/keymapper/remap-dialog.cpp:107 msgid " (Blocked)" -msgstr " (Blokovno)" +msgstr " (Blokováno)" #: backends/keymapper/remap-dialog.cpp:120 msgid " (Global)" -msgstr "(Globln)" +msgstr "(Globální)" #: backends/keymapper/remap-dialog.cpp:128 msgid " (Game)" @@ -1612,43 +1618,43 @@ msgstr "Windows MIDI" #: backends/platform/ds/arm9/source/dsoptions.cpp:56 #: engines/scumm/dialogs.cpp:291 msgid "~C~lose" -msgstr "~Z~avt" +msgstr "~Z~avřít" #: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" -msgstr "Hlavn Menu ScummVM" +msgstr "Hlavní Menu ScummVM" #: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" -msgstr "~R~eim pro levky" +msgstr "~R~ežim pro leváky" #: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" -msgstr "~O~vldn Indyho boje" +msgstr "~O~vládání Indyho boje" #: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" -msgstr "Zobrazit kurzor myi" +msgstr "Zobrazit kurzor myši" #: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" -msgstr "Pichytit k okrajm" +msgstr "Přichytit k okrajům" #: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" -msgstr "Dotykov vyrovnni na ose X" +msgstr "Dotykové vyrovnáni na ose X" #: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" -msgstr "Dotykov vyrovnni na ose Y" +msgstr "Dotykové vyrovnáni na ose Y" #: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" -msgstr "Pout styl kontroly kurzoru jako u ovldac poduky laptopu" +msgstr "Použít styl kontroly kurzoru jako u ovládací podušky laptopu" #: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" -msgstr "uknte pro lev kliknut, dvakrt pro prav kliknut" +msgstr "Ťukněte pro levé kliknutí, dvakrát pro pravé kliknutí" #: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" @@ -1656,23 +1662,23 @@ msgstr "Citlivost" #: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" -msgstr "Poten zmna velikosti horn obrazovky:" +msgstr "Počáteční změna velikosti horní obrazovky:" #: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" -msgstr "Zmna velikosti hlavn obrazovky:" +msgstr "Změna velikosti hlavní obrazovky:" #: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" -msgstr "Hardwarov zmna velikosti (rychl, ale nzk kvalita)" +msgstr "Hardwarová změna velikosti (rychlé, ale nízká kvalita)" #: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" -msgstr "Softwarov zmna velikosti (dobr kvalita, ale pomalej)" +msgstr "Softwarová změna velikosti (dobrá kvalita, ale pomalejší)" #: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" -msgstr "Beze zmny velikosti (muste posunovat doleva a doprava)" +msgstr "Beze změny velikosti (musíte posunovat doleva a doprava)" #: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" @@ -1680,31 +1686,31 @@ msgstr "Jas:" #: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" -msgstr "Vysok kvalita zvuku (pomalej) (restart) " +msgstr "Vysoká kvalita zvuku (pomalejší) (restart) " #: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" -msgstr "Zakzat vypnut" +msgstr "Zakázat vypnutí" #: backends/platform/iphone/osys_events.cpp:300 msgid "Mouse-click-and-drag mode enabled." -msgstr "Reim pethnut myi zapnut." +msgstr "Režim přetáhnutí myši zapnut." #: backends/platform/iphone/osys_events.cpp:302 msgid "Mouse-click-and-drag mode disabled." -msgstr "Reim pethnut myi vypnut." +msgstr "Režim přetáhnutí myši vypnut." #: backends/platform/iphone/osys_events.cpp:313 msgid "Touchpad mode enabled." -msgstr "Touchpad reim zapnut" +msgstr "Touchpad režim zapnut" #: backends/platform/iphone/osys_events.cpp:315 msgid "Touchpad mode disabled." -msgstr "Touchpad reim vypnut" +msgstr "Touchpad režim vypnut" #: backends/platform/maemo/maemo.cpp:208 msgid "Click Mode" -msgstr "Reim kliknut" +msgstr "Režim kliknutí" #: backends/platform/maemo/maemo.cpp:214 #: backends/platform/symbian/src/SymbianActions.cpp:42 @@ -1712,72 +1718,72 @@ msgstr "Reim kliknut" #: backends/platform/wince/CEActionsSmartphone.cpp:43 #: backends/platform/tizen/form.cpp:275 msgid "Left Click" -msgstr "Lev Kliknut" +msgstr "Levé Kliknutí" #: backends/platform/maemo/maemo.cpp:217 msgid "Middle Click" -msgstr "Kliknut prostednm tlatkem" +msgstr "Kliknutí prostředním tlačítkem" #: backends/platform/maemo/maemo.cpp:220 #: backends/platform/symbian/src/SymbianActions.cpp:43 #: backends/platform/wince/CEActionsSmartphone.cpp:44 #: backends/platform/tizen/form.cpp:267 msgid "Right Click" -msgstr "Prav kliknut" +msgstr "Pravé kliknutí" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" -msgstr "Skrt ScummVM" +msgstr "Skrýt ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" -msgstr "Skrt Ostatn" +msgstr "Skrýt Ostatní" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" -msgstr "Zobrazit Ve" +msgstr "Zobrazit Vše" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Okno" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimalizovat" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" -msgstr "Normln (bez zmny velikosti)" +msgstr "Normální (bez změny velikosti)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" -msgstr "Normln (bez zmny velikosti)" +msgstr "Normální (bez změny velikosti)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" -msgstr "Povolena korekce pomru stran" +msgstr "Povolena korekce poměru stran" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" -msgstr "Zakzna korekce pomru stran" +msgstr "Zakázána korekce poměru stran" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" -msgstr "Aktivn grafick filtr:" +msgstr "Aktivní grafický filtr:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" -msgstr "Reim do okna" +msgstr "Režim do okna" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" -msgstr "OpenGL (bez filtrovn)" +msgstr "OpenGL (bez filtrování)" #: backends/platform/symbian/src/SymbianActions.cpp:38 #: backends/platform/wince/CEActionsSmartphone.cpp:39 @@ -1787,7 +1793,7 @@ msgstr "Nahoru" #: backends/platform/symbian/src/SymbianActions.cpp:39 #: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" -msgstr "Dol" +msgstr "Dolů" #: backends/platform/symbian/src/SymbianActions.cpp:40 #: backends/platform/wince/CEActionsSmartphone.cpp:41 @@ -1812,44 +1818,43 @@ msgstr "Multi Funkce" #: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" -msgstr "Zamnit znaky" +msgstr "Zaměnit znaky" #: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" -msgstr "Peskoit text" +msgstr "Přeskočit text" #: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" -msgstr "Rychl reim" +msgstr "Rychlý režim" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 -#: engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 +#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 msgid "Quit" -msgstr "Ukonit" +msgstr "Ukončit" #: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" -msgstr "Ladc program" +msgstr "Ladící program" #: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" -msgstr "Globln menu" +msgstr "Globální menu" #: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" -msgstr "Virtuln klvesnice" +msgstr "Virtuální klávesnice" #: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" -msgstr "Mapova klves" +msgstr "Mapovač kláves" #: backends/events/symbiansdl/symbiansdl-events.cpp:186 msgid "Do you want to quit ?" -msgstr "Chcete ukonit ?" +msgstr "Chcete ukončit ?" #: backends/platform/wii/options.cpp:51 msgid "Video" @@ -1857,19 +1862,19 @@ msgstr "Video" #: backends/platform/wii/options.cpp:54 msgid "Current video mode:" -msgstr "Souasn reim obrazu:" +msgstr "Současný režim obrazu:" #: backends/platform/wii/options.cpp:56 msgid "Double-strike" -msgstr "Dvojit pekrtnut" +msgstr "Dvojité přeškrtnutí" #: backends/platform/wii/options.cpp:60 msgid "Horizontal underscan:" -msgstr "Horizontln zmenen" +msgstr "Horizontální zmenšení" #: backends/platform/wii/options.cpp:66 msgid "Vertical underscan:" -msgstr "Vertikln zmenen" +msgstr "Vertikální zmenšení" #: backends/platform/wii/options.cpp:71 msgid "Input" @@ -1881,7 +1886,7 @@ msgstr "Citlivost GC Padu" #: backends/platform/wii/options.cpp:80 msgid "GC Pad acceleration:" -msgstr "Zrychlen GC Padu" +msgstr "Zrychlení GC Padu" #: backends/platform/wii/options.cpp:86 msgid "DVD" @@ -1893,11 +1898,11 @@ msgstr "Stav:" #: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 msgid "Unknown" -msgstr "Neznm" +msgstr "Neznámé" #: backends/platform/wii/options.cpp:93 msgid "Mount DVD" -msgstr "Pipojit DVD" +msgstr "Připojit DVD" #: backends/platform/wii/options.cpp:94 msgid "Unmount DVD" @@ -1913,11 +1918,11 @@ msgstr "Server:" #: backends/platform/wii/options.cpp:110 msgid "Share:" -msgstr "Sdlen:" +msgstr "Sdílení:" #: backends/platform/wii/options.cpp:114 msgid "Username:" -msgstr "Uivatelsk jmno" +msgstr "Uživatelské jméno" #: backends/platform/wii/options.cpp:118 msgid "Password:" @@ -1925,11 +1930,11 @@ msgstr "Heslo" #: backends/platform/wii/options.cpp:121 msgid "Init network" -msgstr "Spustit s" +msgstr "Spustit síť" #: backends/platform/wii/options.cpp:123 msgid "Mount SMB" -msgstr "Pipojit SMB" +msgstr "Připojit SMB" #: backends/platform/wii/options.cpp:124 msgid "Unmount SMB" @@ -1937,56 +1942,56 @@ msgstr "Odpojit SMB" #: backends/platform/wii/options.cpp:143 msgid "DVD Mounted successfully" -msgstr "DVD spn pipojeno" +msgstr "DVD úspěšně připojeno" #: backends/platform/wii/options.cpp:146 msgid "Error while mounting the DVD" -msgstr "Chyba pi pipojovn DVD" +msgstr "Chyba při připojování DVD" #: backends/platform/wii/options.cpp:148 msgid "DVD not mounted" -msgstr "DVD nepipojeno" +msgstr "DVD nepřipojeno" #: backends/platform/wii/options.cpp:161 msgid "Network up, share mounted" -msgstr "S je zapnuta, sdlen pipojeno" +msgstr "Síť je zapnuta, sdílení připojeno" #: backends/platform/wii/options.cpp:163 msgid "Network up" -msgstr "S je zapnuta" +msgstr "Síť je zapnuta" #: backends/platform/wii/options.cpp:166 msgid ", error while mounting the share" -msgstr ", chyba pi pipojovn sdlen" +msgstr ", chyba při připojování sdílení" #: backends/platform/wii/options.cpp:168 msgid ", share not mounted" -msgstr ", sdlen nen pipojeno" +msgstr ", sdílení není připojeno" #: backends/platform/wii/options.cpp:174 msgid "Network down" -msgstr "S je nedostupn" +msgstr "Síť je nedostupná" #: backends/platform/wii/options.cpp:178 msgid "Initializing network" -msgstr "Zavdm s" +msgstr "Zavádím síť" #: backends/platform/wii/options.cpp:182 msgid "Timeout while initializing network" -msgstr "Pi zavdn st vyprel limit" +msgstr "Při zavádění sítě vypršel limit" #: backends/platform/wii/options.cpp:186 #, c-format msgid "Network not initialized (%d)" -msgstr "S nen zavedena (%d)" +msgstr "Síť není zavedena (%d)" #: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" -msgstr "Skrt Panel nstroj" +msgstr "Skrýt Panel nástrojů" #: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" -msgstr "Zobrazit klvesnici" +msgstr "Zobrazit klávesnici" #: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" @@ -1994,66 +1999,66 @@ msgstr "Zvuk zapnout/vypnout" #: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" -msgstr "Prav kliknut" +msgstr "Pravé kliknutí" #: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" -msgstr "Ukzat/Skrt Kurzor" +msgstr "Ukázat/Skrýt Kurzor" #: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" -msgstr "Rozhlen pomoc myi" +msgstr "Rozhlížení pomocí myši" #: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" -msgstr "Piblen nahoru" +msgstr "Přiblížení nahoru" #: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" -msgstr "Piblen dol" +msgstr "Přiblížení dolů" #: backends/platform/wince/CEActionsPocket.cpp:55 #: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" -msgstr "Piadit klvesy" +msgstr "Přiřadit klávesy" #: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" -msgstr "ipka Nahoru" +msgstr "Šipka Nahoru" #: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" -msgstr "ipka Dol" +msgstr "Šipka Dolů" #: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" -msgstr "ipka Doleva" +msgstr "Šipka Doleva" #: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" -msgstr "ipka Doprava" +msgstr "Šipka Doprava" #: backends/platform/wince/CEActionsPocket.cpp:267 #: backends/platform/wince/CEActionsSmartphone.cpp:231 msgid "Do you want to load or save the game?" -msgstr "Chcete hru nahrt nebo uloit?" +msgstr "Chcete hru nahrát nebo uložit?" #: backends/platform/wince/CEActionsPocket.cpp:326 #: backends/platform/wince/CEActionsSmartphone.cpp:287 msgid " Are you sure you want to quit ? " -msgstr " Jste si jisti, e chcete odejt ? " +msgstr " Jste si jisti, že chcete odejít ? " #: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" -msgstr "Klvesnice" +msgstr "Klávesnice" #: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" -msgstr "Otet" +msgstr "Otáčet" #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "Using SDL driver " -msgstr "Pouv ovlada SDL" +msgstr "Používá ovladač SDL" #: backends/platform/wince/CELauncherDialog.cpp:60 msgid "Display " @@ -2061,92 +2066,92 @@ msgstr "Displej" #: backends/platform/wince/CELauncherDialog.cpp:83 msgid "Do you want to perform an automatic scan ?" -msgstr "Chcete provst automatick hledn ?" +msgstr "Chcete provést automatické hledání ?" #: backends/platform/wince/wince-sdl.cpp:516 msgid "Map right click action" -msgstr "Mapovat innost prav kliknut" +msgstr "Mapovat činnost pravé kliknutí" #: backends/platform/wince/wince-sdl.cpp:520 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" -"Muste namapovat klvesu pro innost 'Prav Kliknut', abyste tuto hru mohli " -"hrt" +"Musíte namapovat klávesu pro činnost 'Pravé Kliknutí', abyste tuto hru mohli " +"hrát" #: backends/platform/wince/wince-sdl.cpp:529 msgid "Map hide toolbar action" -msgstr "Mapovat innost skrt panel nstroj" +msgstr "Mapovat činnost skrýt panel nástrojů" #: backends/platform/wince/wince-sdl.cpp:533 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" -"Muste namapovat klvesu pro innost 'Skrt Panel nstroj', abyste tuto hru " -"mohli hrt" +"Musíte namapovat klávesu pro činnost 'Skrýt Panel nástrojů', abyste tuto hru " +"mohli hrát" #: backends/platform/wince/wince-sdl.cpp:542 msgid "Map Zoom Up action (optional)" -msgstr "Namapovat innost Piblit Nahoru (nepovinn)" +msgstr "Namapovat činnost Přiblížit Nahoru (nepovinné)" #: backends/platform/wince/wince-sdl.cpp:545 msgid "Map Zoom Down action (optional)" -msgstr "Namapovat innost Piblit Dol (nepovinn)" +msgstr "Namapovat činnost Přiblížit Dolů (nepovinné)" #: backends/platform/wince/wince-sdl.cpp:553 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" -"Nezapomete namapovat klvesu k innosti 'Skrt Panel Nstroj, abyste " -"vidli cel invent" +"Nezapomeňte namapovat klávesu k činnosti 'Skrýt Panel Nástrojů, abyste " +"viděli celý inventář" #: backends/events/default/default-events.cpp:196 msgid "Do you really want to return to the Launcher?" -msgstr "Opravdu se chcete vrtit do Spoute?" +msgstr "Opravdu se chcete vrátit do Spouštěče?" #: backends/events/default/default-events.cpp:196 msgid "Launcher" -msgstr "Spout" +msgstr "Spouštěč" #: backends/events/default/default-events.cpp:218 msgid "Do you really want to quit?" -msgstr "Opravdu chcete skonit?" +msgstr "Opravdu chcete skončit?" #: backends/events/gph/gph-events.cpp:385 #: backends/events/gph/gph-events.cpp:428 #: backends/events/openpandora/op-events.cpp:168 msgid "Touchscreen 'Tap Mode' - Left Click" -msgstr "'Reim uknut' Dotykov Obrazovky - Lev Kliknut" +msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Levé Kliknutí" #: backends/events/gph/gph-events.cpp:387 #: backends/events/gph/gph-events.cpp:430 #: backends/events/openpandora/op-events.cpp:170 msgid "Touchscreen 'Tap Mode' - Right Click" -msgstr "'Reim uknut' Dotykov Obrazovky - Prav Kliknut" +msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Pravé Kliknutí" #: backends/events/gph/gph-events.cpp:389 #: backends/events/gph/gph-events.cpp:432 #: backends/events/openpandora/op-events.cpp:172 msgid "Touchscreen 'Tap Mode' - Hover (No Click)" -msgstr "'Reim uknut' Dotykov Obrazovky - Najet (Bez Kliknut)" +msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Najetí (Bez Kliknutí)" #: backends/events/gph/gph-events.cpp:409 msgid "Maximum Volume" -msgstr "Maximln Hlasitost" +msgstr "Maximální Hlasitost" #: backends/events/gph/gph-events.cpp:411 msgid "Increasing Volume" -msgstr "Zvyuji Hlasitost" +msgstr "Zvyšuji Hlasitost" #: backends/events/gph/gph-events.cpp:417 msgid "Minimal Volume" -msgstr "Minimln Hlasitost" +msgstr "Minimální Hlasitost" #: backends/events/gph/gph-events.cpp:419 msgid "Decreasing Volume" -msgstr "Sniuji Hlasitost" +msgstr "Snižuji Hlasitost" #: backends/events/openpandora/op-events.cpp:174 msgid "Touchscreen 'Tap Mode' - Hover (DPad Clicks)" -msgstr "'Reim uknut' Dotykov Obrazovky - Najet (Dpad klik)" +msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Najetí (Dpad kliká)" #: backends/updates/macosx/macosx-updates.mm:67 msgid "Check for Updates..." @@ -2154,7 +2159,7 @@ msgstr "Zkontrolovat Aktualizace..." #: backends/platform/tizen/form.cpp:263 msgid "Right Click Once" -msgstr "Prav kliknut jednou" +msgstr "Pravé kliknutí jednou" #: backends/platform/tizen/form.cpp:271 msgid "Move Only" @@ -2162,7 +2167,7 @@ msgstr "Pouze Pohyb" #: backends/platform/tizen/form.cpp:294 msgid "Escape Key" -msgstr "Klvesa Escape" +msgstr "Klávesa Escape" #: backends/platform/tizen/form.cpp:299 msgid "Game Menu" @@ -2170,64 +2175,64 @@ msgstr "Menu Hry" #: backends/platform/tizen/form.cpp:304 msgid "Show Keypad" -msgstr "Zobrazit Klvesnici" +msgstr "Zobrazit Klávesnici" #: backends/platform/tizen/form.cpp:309 msgid "Control Mouse" -msgstr "Ovldn Myi" +msgstr "Ovládání Myši" #: backends/events/maemosdl/maemosdl-events.cpp:180 msgid "Clicking Enabled" -msgstr "Kliknut Povoleno" +msgstr "Kliknutí Povoleno" #: backends/events/maemosdl/maemosdl-events.cpp:180 msgid "Clicking Disabled" -msgstr "Kliknut Zakzno" +msgstr "Kliknutí Zakázáno" #: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302 #: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160 #: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200 #: engines/zvision/detection_tables.h:51 msgid "Use original save/load screens" -msgstr "Pout pvodn obrazovky naten/uloen" +msgstr "Použít původní obrazovky načtení/uložení" #: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303 #: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161 #: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" -msgstr "Pout pvodn obrazovky naten/uloen msto ze ScummVM" +msgstr "Použít původní obrazovky načtení/uložení místo ze ScummVM" #: engines/agi/detection.cpp:157 msgid "Use an alternative palette" -msgstr "Pout jinou paletu" +msgstr "Použít jinou paletu" #: engines/agi/detection.cpp:158 msgid "" "Use an alternative palette, common for all Amiga games. This was the old " "behavior" msgstr "" -"Pout alternativn paletu, bn pro hry Amiga. Toto byl pvodn star " +"Použít alternativní paletu, běžné pro hry Amiga. Toto byl původní starý " "standard" #: engines/agi/detection.cpp:167 msgid "Mouse support" -msgstr "Podpora myi" +msgstr "Podpora myši" #: engines/agi/detection.cpp:168 msgid "" "Enables mouse support. Allows to use mouse for movement and in game menus." msgstr "" -"Povol podporu myi. Umon pout my pro pohyb a pro ovldn hernch " -"nabdek." +"Povolí podporu myši. Umožní použít myš pro pohyb a pro ovládání herních " +"nabídek." #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Obnovit hru" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Obnovit" @@ -2239,7 +2244,7 @@ msgid "" "\n" "%s" msgstr "" -"Nahrn stavu hry selhalo ze souboru:\n" +"Nahrání stavu hry selhalo ze souboru:\n" "\n" "%s" @@ -2250,7 +2255,7 @@ msgid "" "\n" "%s" msgstr "" -"Uloen stavu hry selhalo do souboru:\n" +"Uložení stavu hry selhalo do souboru:\n" "\n" "%s" @@ -2261,7 +2266,7 @@ msgid "" "\n" "%s" msgstr "" -"Stav hry spn uloen do:\n" +"Stav hry úspěšně uložen do:\n" "\n" "%s" @@ -2272,11 +2277,11 @@ msgstr "Soubor videa '%s' nenalezen'" #: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101 msgid "Color Blind Mode" -msgstr "Reim pro barvoslep" +msgstr "Režim pro barvoslepé" #: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102 msgid "Enable Color Blind Mode by default" -msgstr "Standardn zapnat reim pro barvoslep" +msgstr "Standardně zapínat režim pro barvoslepé" #: engines/drascula/saveload.cpp:47 msgid "" @@ -2288,31 +2293,31 @@ msgid "" "Press OK to convert them now, otherwise you will be asked again the next " "time you start the game.\n" msgstr "" -"ScummVM zjistil, e mte star uloen pozice pro Drascula, kter by mly " -"bt pevedeny.\n" -"Star formt uloench her ji nen podporovn, take pokud je nepevedete, " -"nebudete moci vae hry nast.\n" +"ScummVM zjistil, že máte staré uložené pozice pro Drascula, které by měly " +"být převedeny.\n" +"Starý formát uložených her již není podporován, takže pokud je nepřevedete, " +"nebudete moci vaše hry načíst.\n" "\n" -"Stisknte OK, abyste je pevedli te, jinak budete podni znovu, pi " -"sputn tto hry.\n" +"Stiskněte OK, abyste je převedli teď, jinak budete požádáni znovu, při " +"spuštění této hry.\n" #: engines/dreamweb/detection.cpp:57 msgid "Use bright palette mode" -msgstr "Pout reim jasn palety" +msgstr "Použít režim jasné palety" #: engines/dreamweb/detection.cpp:58 msgid "Display graphics using the game's bright palette" -msgstr "Zobrazit grafiku pomoc jasn palety hry" +msgstr "Zobrazit grafiku pomocí jasné palety hry" #: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1470 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 msgid "Failed to load game state from file." -msgstr "Nelze nast stav hry ze souboru." +msgstr "Nelze načíst stav hry ze souboru." #: engines/gob/inter_v2.cpp:1540 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 msgid "Failed to save game state to file." -msgstr "Nelze uloit stav hry do souboru." +msgstr "Nelze uložit stav hry do souboru." #: engines/gob/inter_v5.cpp:107 msgid "Failed to delete file." @@ -2320,23 +2325,23 @@ msgstr "Nelze smazat soubor." #: engines/groovie/detection.cpp:312 msgid "Fast movie speed" -msgstr "Zven rychlost videa" +msgstr "Zvýšená rychlost videa" #: engines/groovie/detection.cpp:313 msgid "Play movies at an increased speed" -msgstr "Pehrt videa se zvenou rychlost" +msgstr "Přehrát videa se zvýšenou rychlostí" #: engines/groovie/script.cpp:408 msgid "Failed to save game" -msgstr "Nelze uloit hru." +msgstr "Nelze uložit hru." #: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86 msgid "Gore Mode" -msgstr "Povolit nsiln scny" +msgstr "Povolit násilné scény" #: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87 msgid "Enable Gore Mode when available" -msgstr "Povolit nsiln scny, jsou-li dostupn" +msgstr "Povolit násilné scény, jsou-li dostupné" #. I18N: Studio audience adds an applause and cheering sounds whenever #. Malcolm makes a joke. @@ -2351,66 +2356,66 @@ msgstr "Povolit publikum ve studiu" #. I18N: This option allows the user to skip text and cutscenes. #: engines/kyra/detection.cpp:73 msgid "Skip support" -msgstr "Podpora peskoen" +msgstr "Podpora přeskočení" #: engines/kyra/detection.cpp:74 msgid "Allow text and cutscenes to be skipped" -msgstr "Umonit, aby text a videa mohly bt peskoeny" +msgstr "Umožnit, aby text a videa mohly být přeskočeny" #. I18N: Helium mode makes people sound like they've inhaled Helium. #: engines/kyra/detection.cpp:84 msgid "Helium mode" -msgstr "Hliov reim" +msgstr "Héliový režim" #: engines/kyra/detection.cpp:85 msgid "Enable helium mode" -msgstr "Zapnout hliov reim" +msgstr "Zapnout héliový režim" #. I18N: When enabled, this option makes scrolling smoother when #. changing from one screen to another. #: engines/kyra/detection.cpp:99 msgid "Smooth scrolling" -msgstr "Plynul posunovn" +msgstr "Plynulé posunování" #: engines/kyra/detection.cpp:100 msgid "Enable smooth scrolling when walking" -msgstr "Povolit plynul posunovn pi chzi" +msgstr "Povolit plynulé posunování při chůzi" #. I18N: When enabled, this option changes the cursor when it floats to the #. edge of the screen to a directional arrow. The player can then click to #. walk towards that direction. #: engines/kyra/detection.cpp:112 msgid "Floating cursors" -msgstr "Plovouc kurzory" +msgstr "Plovoucí kurzory" #: engines/kyra/detection.cpp:113 msgid "Enable floating cursors" -msgstr "Povolit plovouc kurzory" +msgstr "Povolit plovoucí kurzory" #. I18N: HP stands for Hit Points #: engines/kyra/detection.cpp:127 msgid "HP bar graphs" -msgstr "Sloupcov indiktor zdrav" +msgstr "Sloupcový indikátor zdraví" #: engines/kyra/detection.cpp:128 msgid "Enable hit point bar graphs" -msgstr "Povolit sloupcov indiktor zdrav" +msgstr "Povolit sloupcový indikátor zdraví" #: engines/kyra/lol.cpp:478 msgid "Attack 1" -msgstr "tok 1" +msgstr "Útok 1" #: engines/kyra/lol.cpp:479 msgid "Attack 2" -msgstr "tok 2" +msgstr "Útok 2" #: engines/kyra/lol.cpp:480 msgid "Attack 3" -msgstr "tok 3" +msgstr "Útok 3" #: engines/kyra/lol.cpp:481 msgid "Move Forward" -msgstr "Vped" +msgstr "Vpřed" #: engines/kyra/lol.cpp:482 msgid "Move Back" @@ -2418,23 +2423,23 @@ msgstr "Vzad" #: engines/kyra/lol.cpp:483 msgid "Slide Left" -msgstr "Pesunout se Doleva" +msgstr "Přesunout se Doleva" #: engines/kyra/lol.cpp:484 msgid "Slide Right" -msgstr "Pesunout se Doprava" +msgstr "Přesunout se Doprava" #: engines/kyra/lol.cpp:485 engines/pegasus/pegasus.cpp:2509 msgid "Turn Left" -msgstr "Otoit se doleva" +msgstr "Otočit se doleva" #: engines/kyra/lol.cpp:486 engines/pegasus/pegasus.cpp:2510 msgid "Turn Right" -msgstr "Otoit se doprava" +msgstr "Otočit se doprava" #: engines/kyra/lol.cpp:487 msgid "Rest" -msgstr "Odpoinout si" +msgstr "Odpočinout si" #: engines/kyra/lol.cpp:488 msgid "Options" @@ -2452,11 +2457,11 @@ msgid "" "General MIDI ones. It is still possible that\n" "some tracks sound incorrect." msgstr "" -"Zd se, e pouvte zazen General MIDI,\n" -"ale vae hra podporuje pouze Roland MT32 MIDI.\n" -"Sname se mapovat nstroje Roland MT32 na\n" -"ty od General MIDI. Je stle mon, e\n" -"nkter stopy nebudou znt sprvn." +"Zdá se, že používáte zařízení General MIDI,\n" +"ale vaše hra podporuje pouze Roland MT32 MIDI.\n" +"Snažíme se mapovat nástroje Roland MT32 na\n" +"ty od General MIDI. Je stále možné, že\n" +"některé stopy nebudou znít správně." #: engines/kyra/saveload_eob.cpp:557 #, c-format @@ -2468,11 +2473,11 @@ msgid "" "Do you wish to use this save game file with ScummVM?\n" "\n" msgstr "" -"V cest va hry byl nalezen nsledujc soubor s uloenou hrou:\n" +"V cestě vaší hry byl nalezen následující soubor s uloženou hrou:\n" "\n" "%s %s\n" "\n" -"Chcete tento soubor pout v ScummVM?\n" +"Chcete tento soubor použít v ScummVM?\n" "\n" #: engines/kyra/saveload_eob.cpp:590 @@ -2481,7 +2486,7 @@ msgid "" "A save game file was found in the specified slot %d. Overwrite?\n" "\n" msgstr "" -"V uren pozici %d byl nalezen soubor s uloenou hrou. Pepsat?\n" +"V určené pozici %d byl nalezen soubor s uloženou hrou. Přepsat?\n" "\n" #: engines/kyra/saveload_eob.cpp:623 @@ -2494,24 +2499,24 @@ msgid "" "'import_savefile'.\n" "\n" msgstr "" -"%d pvodnch soubor s uloenou hrou bylo spn importovno do\n" -"ScummVM. Pokud chcete pozdji toto uinit znovu run, je teba otevt\n" -"ladc konzoli ScummVM a pout pkaz 'import_savefile'.\n" +"%d původních souborů s uloženou hrou bylo úspěšně importováno do\n" +"ScummVM. Pokud chcete později toto učinit znovu ručně, je třeba otevřít\n" +"ladící konzoli ScummVM a použít příkaz 'import_savefile'.\n" "\n" #. I18N: Option for fast scene switching #: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167 msgid "~Z~ip Mode Activated" -msgstr "~R~eim Svitn Aktivovn" +msgstr "~R~ežim Svištění Aktivován" #: engines/mohawk/dialogs.cpp:93 msgid "~T~ransitions Enabled" -msgstr "~P~echody zapnuty" +msgstr "~P~řechody zapnuty" #. I18N: Drop book page #: engines/mohawk/dialogs.cpp:95 msgid "~D~rop Page" -msgstr "~Z~ahodit Strnku" +msgstr "~Z~ahodit Stránku" #: engines/mohawk/dialogs.cpp:99 msgid "~S~how Map" @@ -2519,7 +2524,7 @@ msgstr "~Z~obrazit Mapu" #: engines/mohawk/dialogs.cpp:105 msgid "~M~ain Menu" -msgstr "~H~lavn Menu" +msgstr "~H~lavní Menu" #: engines/mohawk/dialogs.cpp:168 msgid "~W~ater Effect Enabled" @@ -2527,19 +2532,19 @@ msgstr "~E~fekt Vody Zapnut" #: engines/neverhood/detection.cpp:167 msgid "Skip the Hall of Records storyboard scenes" -msgstr "Peskoit scny v Sni zznam" +msgstr "Přeskočit scény v Síni záznamů" #: engines/neverhood/detection.cpp:168 msgid "Allows the player to skip past the Hall of Records storyboard scenes" -msgstr "Umouje hri peskoit scny v Sni zznam" +msgstr "Umožňuje hráči přeskočit scény v Síni záznamů" #: engines/neverhood/detection.cpp:174 msgid "Scale the making of videos to full screen" -msgstr "Zvtit filmy o vrob na celou obrazovku" +msgstr "Zvětšit filmy o výrobě na celou obrazovku" #: engines/neverhood/detection.cpp:175 msgid "Scale the making of videos, so that they use the whole screen" -msgstr "Zvtit filmy o vrob tak, aby vyuivaly celou obrazovku" +msgstr "Zvětšit filmy o výrobě tak, aby využivaly celou obrazovku" #: engines/parallaction/saveload.cpp:133 #, c-format @@ -2547,16 +2552,16 @@ msgid "" "Can't save game in slot %i\n" "\n" msgstr "" -"Nelze uloit hru do pozice %i\n" +"Nelze uložit hru do pozice %i\n" "\n" #: engines/parallaction/saveload.cpp:204 msgid "Loading game..." -msgstr "Nahrvn hry..." +msgstr "Nahrávání hry..." #: engines/parallaction/saveload.cpp:219 msgid "Saving game..." -msgstr "Ukldn hry..." +msgstr "Ukládání hry..." #: engines/parallaction/saveload.cpp:272 msgid "" @@ -2567,16 +2572,16 @@ msgid "" "\n" "Press OK to convert them now, otherwise you will be asked next time.\n" msgstr "" -"ScummVM zjistil, e mte star uloen pozice pro Nippon Safes, kter by " -"mly bt pejmenovny.\n" -"Star nzvy ji nejsou podporovny, take pokud je nepevedete, nebudete " -"moci vae hry nast.\n" +"ScummVM zjistil, že máte staré uložené pozice pro Nippon Safes, které by " +"měly být přejmenovány.\n" +"Staré názvy již nejsou podporovány, takže pokud je nepřevedete, nebudete " +"moci vaše hry načíst.\n" "\n" -"Stisknte OK, abyste je pevedli te, jinak budete podni pt.\n" +"Stiskněte OK, abyste je převedli teď, jinak budete požádáni příště.\n" #: engines/parallaction/saveload.cpp:319 msgid "ScummVM successfully converted all your savefiles." -msgstr "ScummVM spn pevedl vechny vae uloen pozice. " +msgstr "ScummVM úspěšně převedl všechny vaše uložené pozice. " #: engines/parallaction/saveload.cpp:321 msgid "" @@ -2585,249 +2590,249 @@ msgid "" "\n" "Please report to the team." msgstr "" -"ScummVM vytiskl nkter varovn ve vaem okn konzole a neme zaruit, e " -"vechny vae soubory byly pevedeny.\n" +"ScummVM vytiskl některá varování ve vašem okně konzole a nemůže zaručit, že " +"všechny vaše soubory byly převedeny.\n" "\n" -"Prosm nahlaste to tmu" +"Prosím nahlaste to týmu" #: engines/pegasus/pegasus.cpp:714 msgid "Invalid save file name" -msgstr "Neplatn nzev souboru" +msgstr "Neplatný název souboru" #: engines/pegasus/pegasus.cpp:2507 msgid "Up/Zoom In/Move Forward/Open Doors" -msgstr "Nahoru/Piblit/Pohyb dopedu/Otevt dvee" +msgstr "Nahoru/Přiblížit/Pohyb dopředu/Otevřít dveře" #: engines/pegasus/pegasus.cpp:2508 msgid "Down/Zoom Out" -msgstr "Dol/Oddlen" +msgstr "Dolů/Oddálení" #: engines/pegasus/pegasus.cpp:2511 msgid "Display/Hide Inventory Tray" -msgstr "Zobrazit/Skrt podnos invente" +msgstr "Zobrazit/Skrýt podnos inventáře" #: engines/pegasus/pegasus.cpp:2512 msgid "Display/Hide Biochip Tray" -msgstr "Zobrazit/Skrt podnos bioipu" +msgstr "Zobrazit/Skrýt podnos biočipu" #: engines/pegasus/pegasus.cpp:2513 msgid "Action/Select" -msgstr "innost/Vybrat" +msgstr "Činnost/Vybrat" #: engines/pegasus/pegasus.cpp:2514 msgid "Toggle Center Data Display" -msgstr "Pepnout centrln datovou obrazovku" +msgstr "Přepnout centrální datovou obrazovku" #: engines/pegasus/pegasus.cpp:2515 msgid "Display/Hide Info Screen" -msgstr "Zobrazit/Skrto obrazovku informac" +msgstr "Zobrazit/Skrýto obrazovku informací" #: engines/pegasus/pegasus.cpp:2516 msgid "Display/Hide Pause Menu" -msgstr "Zobrazit/Skrt " +msgstr "Zobrazit/Skrýt " #: engines/queen/detection.cpp:56 msgid "Alternative intro" -msgstr "Alternativn vod" +msgstr "Alternativní úvod" #: engines/queen/detection.cpp:57 msgid "Use an alternative game intro (CD version only)" -msgstr "Pout jinou verzi vodu (Pouze verze CD)" +msgstr "Použít jinou verzi úvodu (Pouze verze CD)" #: engines/sci/detection.cpp:374 msgid "Skip EGA dithering pass (full color backgrounds)" -msgstr "Pekoit prchod rozkladu barev EGA (pozad v plnch barvch)" +msgstr "Překočit průchod rozkladu barev EGA (pozadí v plných barvách)" #: engines/sci/detection.cpp:375 msgid "Skip dithering pass in EGA games, graphics are shown with full colors" msgstr "" -"Peskoit prchod rozkladu barev EGA, obraze je zobrazen v plnch barvch" +"Přeskočit průchod rozkladu barev EGA, obraze je zobrazen v plných barvách" #: engines/sci/detection.cpp:384 msgid "Prefer digital sound effects" -msgstr "Upednostovat digitln zvukov efekty" +msgstr "Upřednostňovat digitální zvukové efekty" #: engines/sci/detection.cpp:385 msgid "Prefer digital sound effects instead of synthesized ones" -msgstr "Upednostovat digitln zvukov efekty ped syntetizovanmi" +msgstr "Upřednostňovat digitální zvukové efekty před syntetizovanými" #: engines/sci/detection.cpp:404 msgid "Use IMF/Yamaha FB-01 for MIDI output" -msgstr "Pout IMF/Yamaha FB-01 pro vstup MIDI" +msgstr "Použít IMF/Yamaha FB-01 pro výstup MIDI" #: engines/sci/detection.cpp:405 msgid "" "Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI " "output" msgstr "" -"Pout kartu IBM Music Feature nebo modul syntetiztoru Yamaha FB-01 FM pro " -"vstup MIDI" +"Použít kartu IBM Music Feature nebo modul syntetizátoru Yamaha FB-01 FM pro " +"výstup MIDI" #: engines/sci/detection.cpp:415 msgid "Use CD audio" -msgstr "Pout zvuky na CD" +msgstr "Použít zvuky na CD" #: engines/sci/detection.cpp:416 msgid "Use CD audio instead of in-game audio, if available" -msgstr "Pout zvuky na CD msto ve he, pokud je dostupn" +msgstr "Použít zvuky na CD místo ve hře, pokud je dostupné" #: engines/sci/detection.cpp:426 msgid "Use Windows cursors" -msgstr "Pout kurzory Windows" +msgstr "Použít kurzory Windows" #: engines/sci/detection.cpp:427 msgid "" "Use the Windows cursors (smaller and monochrome) instead of the DOS ones" -msgstr "Pout kurzory Windows (men a ernobl) msto kurzor z DOS" +msgstr "Použít kurzory Windows (menší a černobílé) místo kurzorů z DOS" #: engines/sci/detection.cpp:437 msgid "Use silver cursors" -msgstr "Pout stbrn kurzory" +msgstr "Použít stříbrné kurzory" #: engines/sci/detection.cpp:438 msgid "" "Use the alternate set of silver cursors, instead of the normal golden ones" -msgstr "Pout alternativn sadu stbrnch kurzor msto standardnch zlatch" +msgstr "Použít alternativní sadu stříbrných kurzorů místo standardních zlatých" #: engines/scumm/dialogs.cpp:176 #, c-format msgid "Insert Disk %c and Press Button to Continue." -msgstr "Vlote Disk %c a Stisknte Tlatko Pro Pokraovn." +msgstr "Vložte Disk %c a Stiskněte Tlačítko Pro Pokračování." #: engines/scumm/dialogs.cpp:177 #, c-format msgid "Unable to Find %s, (%c%d) Press Button." -msgstr "Nelze Najt %s, (%c%d) Stisknte Tlatko." +msgstr "Nelze Najít %s, (%c%d) Stiskněte Tlačítko." #: engines/scumm/dialogs.cpp:178 #, c-format msgid "Error reading disk %c, (%c%d) Press Button." -msgstr "Chyba pi ten disku %c, (%c%d) Stisknte Tlatko." +msgstr "Chyba při čtení disku %c, (%c%d) Stiskněte Tlačítko." #: engines/scumm/dialogs.cpp:179 msgid "Game Paused. Press SPACE to Continue." -msgstr "Hra Pozastavena. Stisknte MEZERNK pro pokraovn." +msgstr "Hra Pozastavena. Stiskněte MEZERNÍK pro pokračování." #. I18N: You may specify 'Yes' symbol at the end of the line, like this: #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' #: engines/scumm/dialogs.cpp:183 msgid "Are you sure you want to restart? (Y/N)Y" -msgstr "Jste si jisti, e chcete restartovat? (A/N)A" +msgstr "Jste si jisti, že chcete restartovat? (A/N)A" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment #: engines/scumm/dialogs.cpp:185 msgid "Are you sure you want to quit? (Y/N)Y" -msgstr "Jste si jisti, e chcete odejt? (A/N)A" +msgstr "Jste si jisti, že chcete odejít? (A/N)A" #: engines/scumm/dialogs.cpp:190 msgid "Play" -msgstr "Hrt" +msgstr "Hrát" #: engines/scumm/dialogs.cpp:194 msgid "Insert save/load game disk" -msgstr "Vlote hern disk pro uloen/naten" +msgstr "Vložte herní disk pro uložení/načtení" #: engines/scumm/dialogs.cpp:195 msgid "You must enter a name" -msgstr "Muste zadat jmno" +msgstr "Musíte zadat jméno" #: engines/scumm/dialogs.cpp:196 msgid "The game was NOT saved (disk full?)" -msgstr "Hra NEBYLA uloena (pln disk?)" +msgstr "Hra NEBYLA uložena (plný disk?)" #: engines/scumm/dialogs.cpp:197 msgid "The game was NOT loaded" -msgstr "Hra NEBYLA natena" +msgstr "Hra NEBYLA načtena" #: engines/scumm/dialogs.cpp:198 #, c-format msgid "Saving '%s'" -msgstr "Ukldm '%s'" +msgstr "Ukládám '%s'" #: engines/scumm/dialogs.cpp:199 #, c-format msgid "Loading '%s'" -msgstr "Natm '%s'" +msgstr "Načítám '%s'" #: engines/scumm/dialogs.cpp:200 msgid "Name your SAVE game" -msgstr "Pojmenujte svoji ULOENOU hru" +msgstr "Pojmenujte svoji ULOŽENOU hru" #: engines/scumm/dialogs.cpp:201 msgid "Select a game to LOAD" -msgstr "Vyberte hru k NATEN" +msgstr "Vyberte hru k NAČTENÍ" #: engines/scumm/dialogs.cpp:202 msgid "Game title)" -msgstr "Nzev hry" +msgstr "Název hry" #. I18N: Previous page button #: engines/scumm/dialogs.cpp:288 msgid "~P~revious" -msgstr "~P~edchoz" +msgstr "~P~ředchozí" #. I18N: Next page button #: engines/scumm/dialogs.cpp:290 msgid "~N~ext" -msgstr "~D~al" +msgstr "~D~alší" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" -msgstr "Pouze e" +msgstr "Pouze Řeč" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" -msgstr "e a Titulky" +msgstr "Řeč a Titulky" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Pouze Titulky" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" -msgstr "e a Titulky" +msgstr "Řeč a Titulky" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." -msgstr "Vyberte rove odbornosti." +msgstr "Vyberte úroveň odbornosti." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." -msgstr "Pro npovdu si pette manul Loom(TM)." +msgstr "Pro nápovědu si přečtěte manuál Loom(TM)." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" -msgstr "Cvien" +msgstr "Cvičení" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" -msgstr "Pokroil" +msgstr "Pokročilý" #: engines/scumm/help.cpp:74 msgid "Common keyboard commands:" -msgstr "Bn klvesov pkazy" +msgstr "Běžné klávesové příkazy" #: engines/scumm/help.cpp:75 msgid "Save / Load dialog" -msgstr "Dialog Nahrt / Uloit" +msgstr "Dialog Nahrát / Uložit" #: engines/scumm/help.cpp:77 msgid "Skip line of text" -msgstr "Peskoit dek textu" +msgstr "Přeskočit řádek textu" #: engines/scumm/help.cpp:78 msgid "Esc" -msgstr "Mezernk" +msgstr "Mezerník" #: engines/scumm/help.cpp:78 msgid "Skip cutscene" -msgstr "Peskoit video" +msgstr "Přeskočit video" #: engines/scumm/help.cpp:79 msgid "Space" -msgstr "Mezernk" +msgstr "Mezerník" #: engines/scumm/help.cpp:79 msgid "Pause game" @@ -2843,7 +2848,7 @@ msgstr "Ctrl" #: engines/scumm/help.cpp:80 msgid "Load game state 1-10" -msgstr "Nahrt stav hry 1-10" +msgstr "Nahrát stav hry 1-10" #: engines/scumm/help.cpp:81 engines/scumm/help.cpp:85 #: engines/scumm/help.cpp:87 engines/scumm/help.cpp:101 @@ -2853,7 +2858,7 @@ msgstr "Alt" #: engines/scumm/help.cpp:81 msgid "Save game state 1-10" -msgstr "Uloit stav hry 1-10" +msgstr "Uložit stav hry 1-10" #: engines/scumm/help.cpp:87 engines/scumm/help.cpp:90 msgid "Enter" @@ -2861,15 +2866,15 @@ msgstr "Enter" #: engines/scumm/help.cpp:88 msgid "Music volume up / down" -msgstr "Hlasitost hudby nahoru / dol" +msgstr "Hlasitost hudby nahoru / dolů" #: engines/scumm/help.cpp:89 msgid "Text speed slower / faster" -msgstr "Zvit / Snit rychlost textu" +msgstr "Zvýšit / Snížit rychlost textu" #: engines/scumm/help.cpp:90 msgid "Simulate left mouse button" -msgstr "Napodobit lev tlatko myi" +msgstr "Napodobit levé tlačítko myši" #: engines/scumm/help.cpp:91 msgid "Tab" @@ -2877,116 +2882,116 @@ msgstr "Tab" #: engines/scumm/help.cpp:91 msgid "Simulate right mouse button" -msgstr "Napodobit prav tlatko myi" +msgstr "Napodobit pravé tlačítko myši" #: engines/scumm/help.cpp:94 msgid "Special keyboard commands:" -msgstr "Speciln klvesov pkazy" +msgstr "Speciální klávesové příkazy" #: engines/scumm/help.cpp:95 msgid "Show / Hide console" -msgstr "Ukzat / Skrt konzoli" +msgstr "Ukázat / Skrýt konzoli" #: engines/scumm/help.cpp:96 msgid "Start the debugger" -msgstr "Spustit ladc program" +msgstr "Spustit ladící program" #: engines/scumm/help.cpp:97 msgid "Show memory consumption" -msgstr "Zobrazit spotebu pamti" +msgstr "Zobrazit spotřebu paměti" #: engines/scumm/help.cpp:98 msgid "Run in fast mode (*)" -msgstr "Spustit v rychlm reimu (*)" +msgstr "Spustit v rychlém režimu (*)" #: engines/scumm/help.cpp:99 msgid "Run in really fast mode (*)" -msgstr "Spustit ve velmi rychlm reimu (*)" +msgstr "Spustit ve velmi rychlém režimu (*)" #: engines/scumm/help.cpp:100 msgid "Toggle mouse capture" -msgstr "Povolit zachycovn myi" +msgstr "Povolit zachycování myši" #: engines/scumm/help.cpp:101 msgid "Switch between graphics filters" -msgstr "Pepnat mezi grafickmi filtry" +msgstr "Přepínat mezi grafickými filtry" #: engines/scumm/help.cpp:102 msgid "Increase / Decrease scale factor" -msgstr "Zvtit / Zmenit faktor zmny velikosti" +msgstr "Zvětšit / Zmenšit faktor změny velikosti" #: engines/scumm/help.cpp:103 msgid "Toggle aspect-ratio correction" -msgstr "Povolit korekci pomru stran" +msgstr "Povolit korekci poměru stran" #: engines/scumm/help.cpp:108 msgid "* Note that using ctrl-f and" -msgstr "Upozorujeme, e pouvn ctrl-f a" +msgstr "Upozorňujeme, že používání ctrl-f a" #: engines/scumm/help.cpp:109 msgid " ctrl-g are not recommended" -msgstr " ctrl-g nen doporueno" +msgstr " ctrl-g není doporučeno" #: engines/scumm/help.cpp:110 msgid " since they may cause crashes" -msgstr "jeliko mou zpsobit pd" +msgstr "jelikož můžou způsobit pád" #: engines/scumm/help.cpp:111 msgid " or incorrect game behavior." -msgstr " nebo nesprvn chovn hry." +msgstr " nebo nesprávné chování hry." #: engines/scumm/help.cpp:115 msgid "Spinning drafts on the keyboard:" -msgstr "Pleten nrtk na klvesnici:" +msgstr "Pletení náčrtků na klávesnici:" #: engines/scumm/help.cpp:117 msgid "Main game controls:" -msgstr "Hlavn ovldac prvky:" +msgstr "Hlavní ovládací prvky:" #: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 #: engines/scumm/help.cpp:162 msgid "Push" -msgstr "Tlait" +msgstr "Tlačit" #: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 #: engines/scumm/help.cpp:163 msgid "Pull" -msgstr "Thnout" +msgstr "Táhnout" #: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 #: engines/scumm/help.cpp:164 engines/scumm/help.cpp:198 #: engines/scumm/help.cpp:208 msgid "Give" -msgstr "Dt" +msgstr "Dát" #: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 #: engines/scumm/help.cpp:165 engines/scumm/help.cpp:191 #: engines/scumm/help.cpp:209 msgid "Open" -msgstr "Otevt" +msgstr "Otevřít" #: engines/scumm/help.cpp:127 msgid "Go to" -msgstr "Jt do" +msgstr "Jít do" #: engines/scumm/help.cpp:128 msgid "Get" -msgstr "Vzt" +msgstr "Vzít" #: engines/scumm/help.cpp:129 engines/scumm/help.cpp:153 #: engines/scumm/help.cpp:171 engines/scumm/help.cpp:199 #: engines/scumm/help.cpp:214 engines/scumm/help.cpp:225 #: engines/scumm/help.cpp:251 msgid "Use" -msgstr "Pout" +msgstr "Použít" #: engines/scumm/help.cpp:130 engines/scumm/help.cpp:142 msgid "Read" -msgstr "Pest" +msgstr "Přečíst" #: engines/scumm/help.cpp:131 engines/scumm/help.cpp:148 msgid "New kid" -msgstr "Nov dt" +msgstr "Nové dítě" #: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 #: engines/scumm/help.cpp:172 @@ -3001,7 +3006,7 @@ msgstr "Vypnout" #: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 #: engines/scumm/help.cpp:195 msgid "Walk to" -msgstr "Pejt na" +msgstr "Přejít na" #: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 #: engines/scumm/help.cpp:196 engines/scumm/help.cpp:211 @@ -3019,11 +3024,11 @@ msgstr "Odemknout" #: engines/scumm/help.cpp:150 msgid "Put on" -msgstr "Oblct" +msgstr "Obléct" #: engines/scumm/help.cpp:151 msgid "Take off" -msgstr "Svlct" +msgstr "Svléct" #: engines/scumm/help.cpp:157 msgid "Fix" @@ -3031,11 +3036,11 @@ msgstr "Spravit" #: engines/scumm/help.cpp:159 msgid "Switch" -msgstr "Pepnout" +msgstr "Přepnout" #: engines/scumm/help.cpp:167 engines/scumm/help.cpp:229 msgid "Look" -msgstr "Dvat se" +msgstr "Dívat se" #: engines/scumm/help.cpp:174 engines/scumm/help.cpp:224 msgid "Talk" @@ -3052,43 +3057,43 @@ msgstr "Henrymu / Indymu" #. I18N: These are different musical notes #: engines/scumm/help.cpp:180 msgid "play C minor on distaff" -msgstr "zahrt c moll na peslici" +msgstr "zahrát c moll na přeslici" #: engines/scumm/help.cpp:181 msgid "play D on distaff" -msgstr "zahrt D na peslici" +msgstr "zahrát D na přeslici" #: engines/scumm/help.cpp:182 msgid "play E on distaff" -msgstr "zahrt E na peslici" +msgstr "zahrát E na přeslici" #: engines/scumm/help.cpp:183 msgid "play F on distaff" -msgstr "zahrt F na peslici" +msgstr "zahrát F na přeslici" #: engines/scumm/help.cpp:184 msgid "play G on distaff" -msgstr "zahrt G na peslici" +msgstr "zahrát G na přeslici" #: engines/scumm/help.cpp:185 msgid "play A on distaff" -msgstr "zahrt A na peslici" +msgstr "zahrát A na přeslici" #: engines/scumm/help.cpp:186 msgid "play B on distaff" -msgstr "zahrt B na peslici" +msgstr "zahrát B na přeslici" #: engines/scumm/help.cpp:187 msgid "play C major on distaff" -msgstr "zahrt C dur na peslici" +msgstr "zahrát C dur na přeslici" #: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215 msgid "puSh" -msgstr "tlaIt" +msgstr "tlačIt" #: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 msgid "pull (Yank)" -msgstr "thnout (kubnout)" +msgstr "táhnout (Škubnout)" #: engines/scumm/help.cpp:197 engines/scumm/help.cpp:213 #: engines/scumm/help.cpp:249 @@ -3097,7 +3102,7 @@ msgstr "Mluvit s" #: engines/scumm/help.cpp:200 engines/scumm/help.cpp:212 msgid "Look at" -msgstr "Dvat se na" +msgstr "Dívat se na" #: engines/scumm/help.cpp:201 msgid "turn oN" @@ -3109,28 +3114,28 @@ msgstr "vypnoUt" #: engines/scumm/help.cpp:218 msgid "KeyUp" -msgstr "KlvesaNahoru" +msgstr "KlávesaNahoru" #: engines/scumm/help.cpp:218 msgid "Highlight prev dialogue" -msgstr "Zvraznit pedchoz dialog" +msgstr "Zvýraznit předchozí dialog" #: engines/scumm/help.cpp:219 msgid "KeyDown" -msgstr "KlvesaDol" +msgstr "KlávesaDolů" #: engines/scumm/help.cpp:219 msgid "Highlight next dialogue" -msgstr "Zvraznit nsledujc dialog" +msgstr "Zvýraznit následující dialog" #: engines/scumm/help.cpp:223 msgid "Walk" -msgstr "Jt" +msgstr "Jít" #: engines/scumm/help.cpp:226 engines/scumm/help.cpp:235 #: engines/scumm/help.cpp:242 engines/scumm/help.cpp:250 msgid "Inventory" -msgstr "Invent" +msgstr "Inventář" #: engines/scumm/help.cpp:227 msgid "Object" @@ -3138,11 +3143,11 @@ msgstr "Objekt" #: engines/scumm/help.cpp:230 msgid "Black and White / Color" -msgstr "ernobl / Barva" +msgstr "Černobílé / Barva" #: engines/scumm/help.cpp:233 msgid "Eyes" -msgstr "Oi" +msgstr "Oči" #: engines/scumm/help.cpp:234 msgid "Tongue" @@ -3150,7 +3155,7 @@ msgstr "Jazyk" #: engines/scumm/help.cpp:236 msgid "Punch" -msgstr "Udeit" +msgstr "Udeřit" #: engines/scumm/help.cpp:237 msgid "Kick" @@ -3158,11 +3163,11 @@ msgstr "Kopnout" #: engines/scumm/help.cpp:240 engines/scumm/help.cpp:248 msgid "Examine" -msgstr "Prohldnout" +msgstr "Prohlédnout" #: engines/scumm/help.cpp:241 msgid "Regular cursor" -msgstr "Obyejn kurzor" +msgstr "Obyčejný kurzor" #. I18N: Comm is a communication device #: engines/scumm/help.cpp:244 @@ -3171,15 +3176,15 @@ msgstr "Komunikace" #: engines/scumm/help.cpp:247 msgid "Save / Load / Options" -msgstr "Uloit / Nahrt / Volby" +msgstr "Uložit / Nahrát / Volby" #: engines/scumm/help.cpp:256 msgid "Other game controls:" -msgstr "Dal ovldac prvky hry" +msgstr "Další ovládací prvky hry" #: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 msgid "Inventory:" -msgstr "Invent:" +msgstr "Inventář:" #: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 msgid "Scroll list up" @@ -3191,63 +3196,63 @@ msgstr "Posunout seznam dolu" #: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 msgid "Upper left item" -msgstr "Poloka vlevo nahoe" +msgstr "Položka vlevo nahoře" #: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 msgid "Lower left item" -msgstr "Poloka vlevo dole" +msgstr "Položka vlevo dole" #: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 msgid "Upper right item" -msgstr "Poloka vpravo nahoe" +msgstr "Položka vpravo nahoře" #: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 msgid "Lower right item" -msgstr "Poloka vpravo dole" +msgstr "Položka vpravo dole" #: engines/scumm/help.cpp:270 msgid "Middle left item" -msgstr "Poloka vlevo uprosted" +msgstr "Položka vlevo uprostřed" #: engines/scumm/help.cpp:273 msgid "Middle right item" -msgstr "Poloka vpravo uprosted" +msgstr "Položka vpravo uprostřed" #: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 msgid "Switching characters:" -msgstr "Mnn postav:" +msgstr "Měnění postav:" #: engines/scumm/help.cpp:282 msgid "Second kid" -msgstr "Druh dt" +msgstr "Druhé dítě" #: engines/scumm/help.cpp:283 msgid "Third kid" -msgstr "Tet dt" +msgstr "Třetí dítě" #: engines/scumm/help.cpp:292 msgid "Toggle Inventory/IQ Points display" -msgstr "Pepnat zobrazen invente/chytrostnch bod" +msgstr "Přepínat zobrazení inventáře/chytrostních bodů" #: engines/scumm/help.cpp:293 msgid "Toggle Keyboard/Mouse Fighting (*)" -msgstr "Pepnat bojovn pomoc klves/myi (*)" +msgstr "Přepínat bojování pomocí kláves/myši (*)" #: engines/scumm/help.cpp:295 msgid "* Keyboard Fighting is always on," -msgstr "* Bojovn pomoc klvesnice je vdy zapnuto," +msgstr "* Bojování pomocí klávesnice je vždy zapnuto," #: engines/scumm/help.cpp:296 msgid " so despite the in-game message this" -msgstr " take nehled a to, co k hra," +msgstr " takže nehledě a to, co říká hra," #: engines/scumm/help.cpp:297 msgid " actually toggles Mouse Fighting Off/On" -msgstr " toto ve skutenosti ovld bojovn s my" +msgstr " toto ve skutečnosti ovládá bojování s myší" #: engines/scumm/help.cpp:304 msgid "Fighting controls (numpad):" -msgstr "Ovldn boje (num. klv.)" +msgstr "Ovládání boje (num. kláv.)" #: engines/scumm/help.cpp:305 engines/scumm/help.cpp:306 #: engines/scumm/help.cpp:307 @@ -3256,31 +3261,31 @@ msgstr "Ustoupit" #: engines/scumm/help.cpp:308 msgid "Block high" -msgstr "Brnit nahoe" +msgstr "Bránit nahoře" #: engines/scumm/help.cpp:309 msgid "Block middle" -msgstr "Brnit uprosted" +msgstr "Bránit uprostřed" #: engines/scumm/help.cpp:310 msgid "Block low" -msgstr "Brnit dole" +msgstr "Bránit dole" #: engines/scumm/help.cpp:311 msgid "Punch high" -msgstr "Udeit nahoru" +msgstr "Udeřit nahoru" #: engines/scumm/help.cpp:312 msgid "Punch middle" -msgstr "Udeit doprosted" +msgstr "Udeřit doprostřed" #: engines/scumm/help.cpp:313 msgid "Punch low" -msgstr "Udeit dol" +msgstr "Udeřit dolů" #: engines/scumm/help.cpp:315 msgid "Sucker punch" -msgstr "Neekan rna" +msgstr "Nečekaná rána" #: engines/scumm/help.cpp:318 msgid "These are for Indy on left." @@ -3288,74 +3293,71 @@ msgstr "Tyto jsou pro Indyho nalevo." #: engines/scumm/help.cpp:319 msgid "When Indy is on the right," -msgstr "Kdy je Indy napravo," +msgstr "Když je Indy napravo," #: engines/scumm/help.cpp:320 msgid "7, 4, and 1 are switched with" -msgstr "7, 4 a 1 jsou zamnny s" +msgstr "7, 4 a 1 jsou zaměněny s" #: engines/scumm/help.cpp:321 msgid "9, 6, and 3, respectively." -msgstr "9, 6 a 3, v tomto poad." +msgstr "9, 6 a 3, v tomto pořadí." #: engines/scumm/help.cpp:328 msgid "Biplane controls (numpad):" -msgstr "Kontrola dvojplonku (numerick klvesnice)" +msgstr "Kontrola dvojplošníku (numerická klávesnice)" #: engines/scumm/help.cpp:329 msgid "Fly to upper left" -msgstr "Lett doprava nahoru" +msgstr "Letět doprava nahoru" #: engines/scumm/help.cpp:330 msgid "Fly to left" -msgstr "Lett doleva" +msgstr "Letět doleva" #: engines/scumm/help.cpp:331 msgid "Fly to lower left" -msgstr "Lett doleva dol" +msgstr "Letět doleva dolů" #: engines/scumm/help.cpp:332 msgid "Fly upwards" -msgstr "Lett nahoru" +msgstr "Letět nahoru" #: engines/scumm/help.cpp:333 msgid "Fly straight" -msgstr "Lett rovn" +msgstr "Letět rovně" #: engines/scumm/help.cpp:334 msgid "Fly down" -msgstr "Lett dol" +msgstr "Letět dolů" #: engines/scumm/help.cpp:335 msgid "Fly to upper right" -msgstr "Lett doprava nahoru" +msgstr "Letět doprava nahoru" #: engines/scumm/help.cpp:336 msgid "Fly to right" -msgstr "Lett doprava" +msgstr "Letět doprava" #: engines/scumm/help.cpp:337 msgid "Fly to lower right" -msgstr "Lett doprava dol" +msgstr "Letět doprava dolů" #: engines/scumm/input.cpp:572 -#, fuzzy msgid "Snap scroll on" -msgstr "Plynul posunovn" +msgstr "Přichycení při posunování zapnuto" #: engines/scumm/input.cpp:574 msgid "Snap scroll off" -msgstr "" +msgstr "Přichycení při posunování zapnuto" #: engines/scumm/input.cpp:587 -#, fuzzy msgid "Music volume: " -msgstr "Hlasitost hudby" +msgstr "Hlasitost hudby:" #: engines/scumm/input.cpp:604 -#, fuzzy msgid "Subtitle speed: " -msgstr "Rychlost titulk:" +msgstr "Rychlost titulkù:" #: engines/scumm/scumm.cpp:1832 #, c-format @@ -3363,8 +3365,8 @@ msgid "" "Native MIDI support requires the Roland Upgrade from LucasArts,\n" "but %s is missing. Using AdLib instead." msgstr "" -"Pirozen podpora MIDI vyaduje Aktualizaci Roland od LucasArts,\n" -"ale %s chyb. Msto toho je pouit AdLib." +"Přirozená podpora MIDI vyžaduje Aktualizaci Roland od LucasArts,\n" +"ale %s chybí. Místo toho je použit AdLib." #: engines/scumm/scumm.cpp:2644 msgid "" @@ -3372,54 +3374,54 @@ msgid "" "files for Maniac Mansion have to be in the 'Maniac' directory inside the " "Tentacle game directory, and the game has to be added to ScummVM." msgstr "" -"Normln by te byl sputn Maniac Mansion. Ale aby toto mohlo fungovat, " -"mus bt soubory se hrou umstny do sloky 'Maniac' uvnit sloky se hrou " -"Tentacle a hra mus bt pidna do ScummVM." +"Normálně by teď byl spuštěn Maniac Mansion. Ale aby toto mohlo fungovat, " +"musí být soubory se hrou umístěny do složky 'Maniac' uvnitř složky se hrou " +"Tentacle a hra musí být přidána do ScummVM." #: engines/scumm/players/player_v3m.cpp:129 msgid "" "Could not find the 'Loom' Macintosh executable to read the\n" "instruments from. Music will be disabled." msgstr "" -"Nelze najt spustiteln soubor 'Loom' pro Macintosh z jeho\n" -"maj bt nateny hudebn nstroje. Hudba bude zakzna." +"Nelze najít spustitelný soubor 'Loom' pro Macintosh z jehož\n" +"mají být načteny hudební nástroje. Hudba bude zakázána." #: engines/scumm/players/player_v5m.cpp:107 msgid "" "Could not find the 'Monkey Island' Macintosh executable to read the\n" "instruments from. Music will be disabled." msgstr "" -"Nelze najt spustiteln soubor 'Monkey Island' pro Macintosh z\n" -"jeho maj bt nateny hudebn nstroje. Hudba bude zakzna." +"Nelze najít spustitelný soubor 'Monkey Island' pro Macintosh z\n" +"jehož mají být načteny hudební nástroje. Hudba bude zakázána." #: engines/sky/compact.cpp:130 msgid "" "Unable to find \"sky.cpt\" file!\n" "Please download it from www.scummvm.org" msgstr "" -"Nelze nalzt soubor \"sky.cpt\"!\n" -"Sthnte si ho, prosm z www.scummvm.org" +"Nelze nalézt soubor \"sky.cpt\"!\n" +"Stáhněte si ho, prosím z www.scummvm.org" #: engines/sky/compact.cpp:141 msgid "" "The \"sky.cpt\" file has an incorrect size.\n" "Please (re)download it from www.scummvm.org" msgstr "" -"Soubor \"sky.cpt\" m nesprvnou velikost.\n" -"Sthnte si ho, prosm, (znovu) z www.scummvm.org" +"Soubor \"sky.cpt\" má nesprávnou velikost.\n" +"Stáhněte si ho, prosím, (znovu) z www.scummvm.org" #: engines/sky/detection.cpp:44 msgid "Floppy intro" -msgstr "vod z diskety" +msgstr "Úvod z diskety" #: engines/sky/detection.cpp:45 msgid "Use the floppy version's intro (CD version only)" -msgstr "Pout verzi vodu z diskety (Pouze verze CD)" +msgstr "Použít verzi úvodu z diskety (Pouze verze CD)" #: engines/sword1/animation.cpp:524 #, c-format msgid "PSX stream cutscene '%s' cannot be played in paletted mode" -msgstr "Proud videa PSX '%s' neme bt pehrn v reimu palety" +msgstr "Proud videa PSX '%s' nemůže být přehrán v režimu palety" #: engines/sword1/animation.cpp:545 engines/sword2/animation.cpp:445 msgid "DXA cutscenes found but ScummVM has been built without zlib" @@ -3445,13 +3447,13 @@ msgid "" "Press OK to convert them now, otherwise you will be asked again the next " "time you start the game.\n" msgstr "" -"ScummVM zjistil, e mte star uloen pozice pro Broken Sword 1, kter by " -"mly bt pevedeny.\n" -"Star formt uloench her ji nen podporovn, take pokud je nepevedete, " -"nebudete moci vae hry nast.\n" +"ScummVM zjistil, že máte staré uložené pozice pro Broken Sword 1, které by " +"měly být převedeny.\n" +"Starý formát uložených her již není podporován, takže pokud je nepřevedete, " +"nebudete moci vaše hry načíst.\n" "\n" -"Stisknte OK, abyste je pevedli te, jinak budete podni znovu, pi " -"sputn tto hry.\n" +"Stiskněte OK, abyste je převedli teď, jinak budete požádáni znovu, při " +"spuštění této hry.\n" #: engines/sword1/control.cpp:1232 #, c-format @@ -3459,8 +3461,8 @@ msgid "" "Target new save game already exists!\n" "Would you like to keep the old save game (%s) or the new one (%s)?\n" msgstr "" -"Nov clov uloen hra ji existuje!\n" -"Chtli byste ponechat starou uloenou hru (%s), nebo novou (%s)?\n" +"Nová cílová uložená hra již existuje!\n" +"Chtěli byste ponechat starou uloženou hru (%s), nebo novou (%s)?\n" #: engines/sword1/control.cpp:1235 msgid "Keep the old one" @@ -3481,46 +3483,44 @@ msgstr "Videa PSX nalezena, ale ScummVM byl sestaven bez podpory barev RGB" #: engines/sword2/sword2.cpp:79 msgid "Show object labels" -msgstr "Zobrazit jmenovky objekt" +msgstr "Zobrazit jmenovky objektů" #: engines/sword2/sword2.cpp:80 msgid "Show labels for objects on mouse hover" -msgstr "Zobrazit jmenovky objekt pi najet myi" +msgstr "Zobrazit jmenovky objektů při najetí myši" #: engines/teenagent/resources.cpp:95 msgid "" "You're missing the 'teenagent.dat' file. Get it from the ScummVM website" -msgstr "Chyb vm soubor 'teenagent.dat'. Mete ho zskat ze strnky ScummVM." +msgstr "Chybí vám soubor 'teenagent.dat'. Můžete ho získat ze stránky ScummVM." #: engines/teenagent/resources.cpp:116 msgid "" "The teenagent.dat file is compressed and zlib hasn't been included in this " "executable. Please decompress it" msgstr "" -"Soubor teenagent.dat je komprimovn a zlib nen soust spustitelnho " -"souboru. Prosm dekomprimujte ho" +"Soubor teenagent.dat je komprimován a zlib není součástí spustitelného " +"souboru. Prosím dekomprimujte ho" #: engines/wintermute/detection.cpp:58 msgid "Show FPS-counter" -msgstr "Zobrazit potadlo FPS" +msgstr "Zobrazit počítadlo FPS" #: engines/wintermute/detection.cpp:59 msgid "Show the current number of frames per second in the upper left corner" -msgstr "Zobrazit souasn poet snmk za sekundu v hornm levm rohu" +msgstr "Zobrazit současný počet snímků za sekundu v horním levém rohu" #: engines/zvision/detection_tables.h:52 -#, fuzzy msgid "Use the original save/load screens instead of the ScummVM interface" -msgstr "Pout pvodn obrazovky naten/uloen msto ze ScummVM" +msgstr "Použít původní obrazovky načtení/uložení místo rozhraní ScummVM" #: engines/zvision/detection_tables.h:61 msgid "Double FPS" -msgstr "Dvojit snmky za sekundu" +msgstr "Dvojité snímky za sekundu" #: engines/zvision/detection_tables.h:62 -#, fuzzy msgid "Increase framerate from 30 to 60 FPS" -msgstr "Zvit hern snmky za sekundu z 30 na 60" +msgstr "Zvýšit snímkovou frekvenci z 30 na 60" #: engines/zvision/detection_tables.h:71 msgid "Enable Venus" @@ -3528,137 +3528,134 @@ msgstr "Povolit Venus" #: engines/zvision/detection_tables.h:72 msgid "Enable the Venus help system" -msgstr "Povolit systm npovdy Venus" +msgstr "Povolit systém nápovědy Venus" #: engines/zvision/detection_tables.h:81 msgid "Disable animation while turning" -msgstr "Zakzat animaci pi oten" +msgstr "Zakázat animaci při otáčení" #: engines/zvision/detection_tables.h:82 -#, fuzzy msgid "Disable animation while turning in panorama mode" -msgstr "Zakzat animaci pi oten v panoramatickm reimu" +msgstr "Zakázat animaci při otáčení v panoramatickém režimu" #: engines/zvision/detection_tables.h:91 -#, fuzzy msgid "Use high resolution MPEG video" -msgstr "Pout videa MPEG ve vysokm rozlien" +msgstr "Použít video MPEG ve vysokém rozlišení" #: engines/zvision/detection_tables.h:92 -#, fuzzy msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" msgstr "" -"Pout videa MPEG ve vysokm rozlien pochzejc z DVD verze, namsto " -"vide AVI v nzkm rozlien." +"Použít video MPEG pocházející z DVD verze, namísto videa AVI v nízkém " +"rozlišení." #~ msgid "EGA undithering" -#~ msgstr "Nerozkldn EGA" +#~ msgstr "Nerozkládání EGA" #~ msgid "Enable undithering in EGA games" -#~ msgstr "Povolit nerozkldn v EGA hrch" +#~ msgstr "Povolit nerozkládání v EGA hrách" #~ msgid "Are you sure you want to restart? (Y/N)" -#~ msgstr "Jste si jisti, e chcete restartovat? (A/N)A" +#~ msgstr "Jste si jisti, že chcete restartovat? (A/N)A" #~ msgid "Are you sure you want to quit? (Y/N)" -#~ msgstr "Jste si jisti, e chcete odejt? (A/N)A" +#~ msgstr "Jste si jisti, že chcete odejít? (A/N)A" #~ msgid "" #~ "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. " #~ "To play it, go to 'Add Game' in the ScummVM start menu and select the " #~ "'Maniac' directory inside the Tentacle game directory." #~ msgstr "" -#~ "Normln by te Maniac Mansion byl sputn. Ale ScummVM toto zatm " -#~ "nedl. Abyste toto mohli hrt, pejdte do 'Pidat Hru' v potenm " -#~ "menu ScummVM a vyberte adres 'Maniac' uvnit hernho adrese Tentacle." +#~ "Normálně by teď Maniac Mansion byl spuštěn. Ale ScummVM toto zatím " +#~ "nedělá. Abyste toto mohli hrát, přejděte do 'Přidat Hru' v počátečním " +#~ "menu ScummVM a vyberte adresář 'Maniac' uvnitř herního adresáře Tentacle." #~ msgid "MPEG-2 cutscenes found but ScummVM has been built without MPEG-2" #~ msgstr "Videa MPEG-2 nalezena, ale ScummVM byl sestaven bez MPEG-2" #~ msgctxt "lowres" #~ msgid "Mass Add..." -#~ msgstr "Hromadn Pidn..." +#~ msgstr "Hromadné Přidání..." #~ msgid "" #~ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" #~ msgstr "" -#~ "Vypne mapovn General MIDI pro hry s Roland MT-32 zvukovm doprovodem" +#~ "Vypne mapování General MIDI pro hry s Roland MT-32 zvukovým doprovodem" #~ msgid "Standard (16bpp)" -#~ msgstr "Standardn (16bpp)" +#~ msgstr "Standardní (16bpp)" #~ msgid "MPEG2 cutscenes are no longer supported" -#~ msgstr "Videa MPGE2 ji nejsou podporovna" +#~ msgstr "Videa MPGE2 již nejsou podporována" #~ msgid "OpenGL Normal" -#~ msgstr "OpenGL Normln" +#~ msgstr "OpenGL Normální" #~ msgid "OpenGL Conserve" -#~ msgstr "OpenGL Zachovvajc" +#~ msgstr "OpenGL Zachovávající" #~ msgid "OpenGL Original" -#~ msgstr "OpenGL Pvodn" +#~ msgstr "OpenGL Původní" #~ msgid "Current display mode" -#~ msgstr "Souasn reim obrazu" +#~ msgstr "Současný režim obrazu" #~ msgid "Current scale" -#~ msgstr "Souasn velikost" +#~ msgstr "Současná velikost" #~ msgid "Active filter mode: Linear" -#~ msgstr "Aktivn reim filtru: Linern" +#~ msgstr "Aktivní režim filtru: Lineární" #~ msgid "Active filter mode: Nearest" -#~ msgstr "Aktivn reim filtru: Nejbli" +#~ msgstr "Aktivní režim filtru: Nejbližší" #~ msgid "Enable Roland GS Mode" -#~ msgstr "Zapnout reim Roland GS" +#~ msgstr "Zapnout režim Roland GS" #~ msgid "Hercules Green" -#~ msgstr "Hercules Zelen" +#~ msgstr "Hercules Zelená" #~ msgid "Hercules Amber" -#~ msgstr "Hercules Jantarov" +#~ msgstr "Hercules Jantarová" #~ msgctxt "lowres" #~ msgid "Hercules Green" -#~ msgstr "Hercules Zelen" +#~ msgstr "Hercules Zelená" #~ msgctxt "lowres" #~ msgid "Hercules Amber" -#~ msgstr "Hercules Jantarov" +#~ msgstr "Hercules Jantarová" #~ msgid "Save game failed!" -#~ msgstr "Ukldn hry selhalo!" +#~ msgstr "Ukládání hry selhalo!" #~ msgctxt "lowres" #~ msgid "Add Game..." -#~ msgstr "Pidat Hru..." +#~ msgstr "Přidat Hru..." #~ msgid "Add Game..." -#~ msgstr "Pidat Hru..." +#~ msgstr "Přidat Hru..." #~ msgid "" #~ "Your game version has been detected using filename matching as a variant " #~ "of %s." #~ msgstr "" -#~ "Bylo zjitno, e Vae verze hry pouv jmno souboru shodujc se s " +#~ "Bylo zjištěno, že Vaše verze hry používá jméno souboru shodující se s " #~ "variantou %s." #~ msgid "If this is an original and unmodified version, please report any" -#~ msgstr "Pokud je toto pvodn a nezmnn verze, ohlaste prosm jakkoli" +#~ msgstr "Pokud je toto původní a nezměněná verze, ohlaste prosím jakékoli" #~ msgid "information previously printed by ScummVM to the team." -#~ msgstr "pedele vypsan informace od ScummVM zptky tmu." +#~ msgstr "předešle vypsané informace od ScummVM zpátky týmu." #~ msgid "Discovered %d new games." -#~ msgstr "Objeveno %d novch her." +#~ msgstr "Objeveno %d nových her." #~ msgid "Command line argument not processed" -#~ msgstr "Argument pkazov dky nebyl zpracovn" +#~ msgstr "Argument příkazové řádky nebyl zpracován" #~ msgid "FM Towns Emulator" -#~ msgstr "FM Towns Emultor" +#~ msgstr "FM Towns Emulátor" #~ msgid "Invalid Path" -#~ msgstr "Neplatn Cesta" +#~ msgstr "Neplatná Cesta" diff --git a/po/da_DA.po b/po/da_DA.po index 0da2db01f3..ce523f345a 100644 --- a/po/da_DA.po +++ b/po/da_DA.po @@ -1,5 +1,5 @@ # Dansk translation for ScummVM -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Steffen Nyeland <steffen@nyeland.dk>, 2010. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-07-09 17:34+0100\n" "Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n" "Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n" @@ -53,13 +53,13 @@ msgid "Go up" msgstr "G op" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -68,7 +68,7 @@ msgid "Cancel" msgstr "Fortryd" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Vlg" @@ -88,6 +88,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Vil du virkelig slette denne gemmer?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Ja" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Nej" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -385,7 +418,7 @@ msgstr "Dette spil ID er allerede i brug. Vlg venligst et andet." msgid "~Q~uit" msgstr "~A~fslut" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Slut ScummVM" @@ -393,7 +426,7 @@ msgstr "Slut ScummVM" msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Om ScummVM" @@ -491,26 +524,6 @@ msgstr "" "Vil du virkelig kre fler spils detektoren? Dette kunne potentielt tilfje " "et stort antal spil." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Ja" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Nej" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikke bne det angivne bibliotek!" @@ -664,7 +677,7 @@ msgid "Special dithering modes supported by some games" msgstr "Speciel farvereduceringstilstand understttet a nogle spil" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Fuldskrms tilstand" @@ -1125,7 +1138,7 @@ msgstr "Deaktiveret GFX" msgid "Standard Renderer" msgstr "Standard renderer" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Standard" @@ -1373,7 +1386,7 @@ msgstr "~R~etur til oversigt" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1386,7 +1399,7 @@ msgstr "Gemmer:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1725,57 +1738,57 @@ msgstr "Miderste klik" msgid "Right Click" msgstr "Hjre klik" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Skjul ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Skjul andre" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Vis alle" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Vindue" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimer" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (ingen skalering)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (ingen skalering)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Aktivr billedformat korrektion" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Deaktivr billedformat korrektion" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Aktive grafik filtre:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Vindue tilstand" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (Ingen filtrering)" @@ -2218,13 +2231,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Gendan spil:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Gendan" @@ -2762,36 +2775,36 @@ msgstr "Fo~r~rige" msgid "~N~ext" msgstr "~N~ste" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Kun tale" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Tale og Undertekster" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Kun undertekster" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tale & Tekst" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Vlg et Frdighedsniveau." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Se din Loom(TM) manual for hjlp." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Trning" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Ekspert" diff --git a/po/de_DE.po b/po/de_DE.po index 60fd903be9..86fa385f28 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -1,5 +1,5 @@ # German translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Simon Sawatzki <SimSaw@gmx.de>, Lothar Serra Mari <scummvm@rootfather.de>, 2015. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2015-10-16 11:00+0200\n" "Last-Translator: Lothar Serra Mari <scummvm@rootfather.de>\n" "Language-Team: Simon Sawatzki <SimSaw@gmx.de>, Lothar Serra Mari " @@ -55,13 +55,13 @@ msgid "Go up" msgstr "Pfad hoch" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -70,7 +70,7 @@ msgid "Cancel" msgstr "Abbrechen" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Auswhlen" @@ -90,6 +90,39 @@ msgstr "Notizen:" msgid "Ok" msgstr "OK" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Mchten Sie diese Aufnahme wirklich lschen?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Ja" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Nein" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -387,7 +420,7 @@ msgstr "Diese Spielkennung ist schon vergeben. Bitte eine andere whlen." msgid "~Q~uit" msgstr "~B~eenden" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "ScummVM beenden" @@ -395,7 +428,7 @@ msgstr "ScummVM beenden" msgid "A~b~out..." msgstr "be~r~" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "ber ScummVM" @@ -495,26 +528,6 @@ msgstr "" "Mchten Sie wirklich den PC nach Spielen durchsuchen? Mglicherweise wird " "dabei eine grere Menge an Spielen hinzugefgt." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Ja" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Nein" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM konnte das gewhlte Verzeichnis nicht ffnen!" @@ -668,7 +681,7 @@ msgstr "" "Spezielle Farbmischungsmethoden werden von manchen Spielen untersttzt." #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Vollbildmodus" @@ -1136,7 +1149,7 @@ msgstr "GFX ausgeschaltet" msgid "Standard Renderer" msgstr "Standard-Renderer" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Standard" @@ -1387,7 +1400,7 @@ msgstr "Zur Spiele~l~iste" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1400,7 +1413,7 @@ msgstr "Speichern:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1742,57 +1755,57 @@ msgstr "Mittelklick" msgid "Right Click" msgstr "Rechtsklick" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "ScummVM ausblenden" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Andere ausblenden" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Alle einblenden" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Fenster" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimieren" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (keine Skalierung)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal ohn.Skalieren" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Seitenverhltniskorrektur an" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Seitenverhltniskorrektur aus" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Aktiver Grafikfilter:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Fenstermodus" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (ohne Filter)" @@ -1842,8 +1855,9 @@ msgstr "Schneller Modus" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Beenden" @@ -2238,13 +2252,13 @@ msgstr "" "und in Mens innerhalb des Spiels." #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Spiel laden:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Laden" @@ -2804,36 +2818,36 @@ msgstr "~Z~urck" msgid "~N~ext" msgstr "~W~eiter" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Nur Sprache" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Sprachausgabe und Untertitel" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Nur Untertitel" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Sprache & Text" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Whle einen Schwierigkeitsgrad." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Fr Hilfe schauen Sie ins Loom-Handbuch." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Anfnger" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Experte" diff --git a/po/es_ES.po b/po/es_ES.po index 9d2e236d46..cc44dae2b8 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -1,5 +1,5 @@ # Spanish translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Toms Maidagan, 2011. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.4.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-07-06 20:39+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -52,13 +52,13 @@ msgid "Go up" msgstr "Arriba" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -67,7 +67,7 @@ msgid "Cancel" msgstr "Cancelar" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Aceptar" @@ -87,6 +87,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Seguro que quieres borrar esta partida?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "S" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "No" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -384,7 +417,7 @@ msgstr "Esta ID ya est siendo usada. Por favor, elige otra." msgid "~Q~uit" msgstr "~S~alir" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Salir de ScummVM" @@ -392,7 +425,7 @@ msgstr "Salir de ScummVM" msgid "A~b~out..." msgstr "Acerca ~d~e" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Acerca de ScummVM" @@ -490,26 +523,6 @@ msgstr "" "Seguro que quieres ejecutar la deteccin masiva? Puede que se aada un gran " "nmero de juegos." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "S" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "No" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM no ha podido abrir el directorio!" @@ -663,7 +676,7 @@ msgid "Special dithering modes supported by some games" msgstr "Modos especiales de expansin compatibles con algunos juegos" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Pantalla completa" @@ -1132,7 +1145,7 @@ msgstr "Grf. desactivados" msgid "Standard Renderer" msgstr "Estndar" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Estndar" @@ -1379,7 +1392,7 @@ msgstr "~V~olver al lanzador" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1392,7 +1405,7 @@ msgstr "Guardar partida" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1733,57 +1746,57 @@ msgstr "Clic central" msgid "Right Click" msgstr "Clic derecho" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Ocultar ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Ocultar otros" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Mostrar todo" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Ventana" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimizar" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (sin reescalado)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Activar la correccin de aspecto" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Desactivar la correccin de aspecto" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Filtro de grficos activo:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Modo ventana" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (sin filtros)" @@ -2228,13 +2241,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Cargar partida:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Cargar" @@ -2774,36 +2787,36 @@ msgstr "~A~nterior" msgid "~N~ext" msgstr "Si~g~uiente" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Solo voces" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Voces y subttulos" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Solo subttulos" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voces y sub." -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Selecciona un nivel de dificultad." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Consulta el manual para obtener ms informacin." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Prctica" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Experto" @@ -1,5 +1,5 @@ # Basque translation for ScummVM. -# Copyright (C) 2012-2015 The ScummVM Team +# Copyright (C) 2012-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Mikel Iturbe Urretxa <mikel@hamahiru.org>, 2012. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.5.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2011-12-15 14:53+0100\n" "Last-Translator: Mikel Iturbe Urretxa <mikel@hamahiru.org>\n" "Language-Team: Librezale <librezale@librezale.org>\n" @@ -52,13 +52,13 @@ msgid "Go up" msgstr "Joan gora" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -67,7 +67,7 @@ msgid "Cancel" msgstr "Utzi" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Aukeratu" @@ -87,6 +87,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Ezabatu partida gorde hau?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Bai" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Ez" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -384,7 +417,7 @@ msgstr "ID hau jada erabilia izaten ari da. Mesedez, aukeratu beste bat." msgid "~Q~uit" msgstr "~I~rten" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Irten ScummVM-tik" @@ -392,7 +425,7 @@ msgstr "Irten ScummVM-tik" msgid "A~b~out..." msgstr "Ho~n~i buruz..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "ScummVM-i buruz" @@ -490,26 +523,6 @@ msgstr "" "Joko detektatzaile masiboa exekutatu nahi al duzu? Honek joko kantitate " "handia gehitu dezake." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Bai" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Ez" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM-k ezin izan du zehazturiko direktorioa ireki!" @@ -667,7 +680,7 @@ msgid "Special dithering modes supported by some games" msgstr "Joko batzuk onarturiko lausotze-modu bereziak" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Pantaila osoa" @@ -1136,7 +1149,7 @@ msgstr "GFX desgaituta" msgid "Standard Renderer" msgstr "Estandarra (16bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Estandarra" @@ -1387,7 +1400,7 @@ msgstr "It~z~uli abiarazlera" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1400,7 +1413,7 @@ msgstr "Gorde jokoa:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1738,58 +1751,58 @@ msgstr "Erdiko klika" msgid "Right Click" msgstr "Eskuin-klika" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "ScummVM ezkutatu" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Besteak ezkutatu" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Denak erakutsi" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Leihoa" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimizatu" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normala (eskalatu gabe)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normala" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Formatu-ratio zuzenketa gaituta" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Formatu-ratio zuzenketa desgaituta" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Filtro grafiko aktiboa:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Leiho modua" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 #, fuzzy msgid "OpenGL" msgstr "Ireki" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "" @@ -2231,13 +2244,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Jokoa kargatu:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Kargatu" @@ -2780,36 +2793,36 @@ msgstr "~A~urrekoa" msgid "~N~ext" msgstr "~H~urrengoa" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Ahotsak bakarrik" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Ahotsak eta azpitituluak" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Azpitituluak bakarrik" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Ahotsak & azpit." -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Zailtasuna aukeratu." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Loom(TM)-ko eskuliburura jo ezazu laguntza lortzeko." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Entrenamendua" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Aditua" diff --git a/po/fi_FI.po b/po/fi_FI.po index aeed76304e..9a4cc49da9 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -1,5 +1,5 @@ # Finnish translation for ScummVM. -# Copyright (c) 2012-2015 The ScummVM Team +# Copyright (c) 2012-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Toni Saarela <saarela@gmail.com>, 2012. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2012-12-01 19:37+0200\n" "Last-Translator: Toni Saarela <saarela@gmail.com>\n" "Language-Team: Finnish\n" @@ -53,13 +53,13 @@ msgid "Go up" msgstr "Siirry yls" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -68,7 +68,7 @@ msgid "Cancel" msgstr "Peruuta" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Valitse" @@ -88,6 +88,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Haluatko varmasti poistaa tmn pelitallennuksen?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Kyll" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Ei" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -385,7 +418,7 @@ msgstr "Pelin tunnus on jo kytss. Valitse jokin muu." msgid "~Q~uit" msgstr "~L~opeta" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Lopeta ScummVM" @@ -393,7 +426,7 @@ msgstr "Lopeta ScummVM" msgid "A~b~out..." msgstr "Tietoa..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Tietoa ScummVM:st" @@ -491,26 +524,6 @@ msgstr "" "Haluatko varmasti list pelej alihakemistoineen? Tm voi list suuren " "mrn pelej." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Kyll" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Ei" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM ei voi avata kyseist hakemistoa!" @@ -668,7 +681,7 @@ msgid "Special dithering modes supported by some games" msgstr "Erityiset dithering asetukset joita jotkut pelit tukevat" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Kokoruututila" @@ -1134,7 +1147,7 @@ msgstr "Disabloitu GFX" msgid "Standard Renderer" msgstr "Standardirenderij (16 bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Standardi" @@ -1387,7 +1400,7 @@ msgstr "Palaa p~e~livalitsimeen" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1400,7 +1413,7 @@ msgstr "Tallenna peli:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1738,58 +1751,58 @@ msgstr "Keskiklikkaus" msgid "Right Click" msgstr "Oikea klikkaus" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Piilota ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Piilota muut" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Nyt kaikki" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Ikkuna" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimoi" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normaali (ei skaalausta)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normaali (ei skaalausta)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Kuvasuhteen korjaus pll" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Kuvasuhteen korjaus pois plt" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Valittu grafiikkafiltteri:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Ikkunoitu tila" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 #, fuzzy msgid "OpenGL" msgstr "Avaa" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "" @@ -2234,13 +2247,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Lataa pelitallenne:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Lataa tallenne" @@ -2774,36 +2787,36 @@ msgstr "E~d~ellinen" msgid "~N~ext" msgstr "Se~u~raava" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Vain puhe" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Puhe ja Tekstitys" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Vain tekstitys" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Puhe & teksti" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Valitse taitotasosi." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Lue Loom(TM) ohjekirjaa saadaksesi ohjeita." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Harjoitus" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Ekspertti" diff --git a/po/fr_FR.po b/po/fr_FR.po index c6b785c794..d1480a3c83 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -1,14 +1,14 @@ # French translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Thierry Crozat <criezy@scummvm.org>, 2011. # msgid "" msgstr "" -"Project-Id-Version: ScummVM 1.3.0svn\n" +"Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" -"PO-Revision-Date: 2014-07-05 13:49-0000\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" +"PO-Revision-Date: 2015-12-26 16:06+0000\n" "Last-Translator: Thierry Crozat <criezy@scummvm.org>\n" "Language-Team: French <scummvm-devel@lists.sf.net>\n" "Language: Francais\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Poedit 1.6.6\n" +"X-Generator: Poedit 1.8.6\n" #: gui/about.cpp:94 #, c-format @@ -25,11 +25,11 @@ msgstr "(compil sur %s)" #: gui/about.cpp:101 msgid "Features compiled in:" -msgstr "Options incluses:" +msgstr "Options incluses :" #: gui/about.cpp:110 msgid "Available engines:" -msgstr "Moteurs disponibles:" +msgstr "Moteurs disponibles :" #: gui/browser.cpp:68 gui/browser_osx.mm:104 msgid "Show hidden files" @@ -53,12 +53,12 @@ msgid "Go up" msgstr "Remonter" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 #: backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 @@ -68,25 +68,57 @@ msgid "Cancel" msgstr "Annuler" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Choisir" #: gui/editrecorddialog.cpp:58 msgid "Author:" -msgstr "" +msgstr "Auteur :" #: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204 msgid "Name:" -msgstr "Nom:" +msgstr "Nom :" #: gui/editrecorddialog.cpp:60 msgid "Notes:" -msgstr "" +msgstr "Notes :" #: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75 msgid "Ok" -msgstr "" +msgstr "Ok" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "Choisir le fichier charger" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "Choisir le nom de fichier pour la sauvegarde" + +#: gui/filebrowser-dialog.cpp:132 +msgid "Do you really want to overwrite the file?" +msgstr "Voulez-vous vraiment remplacer ce fichier ?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Oui" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Non" #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 @@ -151,7 +183,7 @@ msgstr "Touche associe: %s" #: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" -msgstr "Touche associe: aucune" +msgstr "Touche associe : aucune" #: gui/KeysDialog.cpp:90 msgid "Please select an action" @@ -167,7 +199,7 @@ msgstr "Jeu" #: gui/launcher.cpp:197 msgid "ID:" -msgstr "ID:" +msgstr "ID :" #: gui/launcher.cpp:197 gui/launcher.cpp:199 gui/launcher.cpp:200 msgid "" @@ -180,7 +212,7 @@ msgstr "" #: gui/launcher.cpp:199 msgctxt "lowres" msgid "ID:" -msgstr "ID:" +msgstr "ID :" #: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207 msgid "Full title of the game" @@ -189,11 +221,11 @@ msgstr "Nom complet du jeu" #: gui/launcher.cpp:206 msgctxt "lowres" msgid "Name:" -msgstr "Nom:" +msgstr "Nom :" #: gui/launcher.cpp:210 msgid "Language:" -msgstr "Langue:" +msgstr "Langue :" #: gui/launcher.cpp:210 gui/launcher.cpp:211 msgid "" @@ -211,7 +243,7 @@ msgstr "<defaut>" #: gui/launcher.cpp:222 msgid "Platform:" -msgstr "Plateforme:" +msgstr "Systme :" #: gui/launcher.cpp:222 gui/launcher.cpp:224 gui/launcher.cpp:225 msgid "Platform the game was originally designed for" @@ -220,7 +252,7 @@ msgstr "Plateforme pour laquelle votre jeu a t conu" #: gui/launcher.cpp:224 msgctxt "lowres" msgid "Platform:" -msgstr "Systme:" +msgstr "Systme :" #: gui/launcher.cpp:237 msgid "Engine" @@ -311,16 +343,16 @@ msgstr "Chemins" #: gui/launcher.cpp:323 msgid "Game Path:" -msgstr "Chemin du Jeu:" +msgstr "Chemin du Jeu :" #: gui/launcher.cpp:325 msgctxt "lowres" msgid "Game Path:" -msgstr "Chemin du Jeu:" +msgstr "Chemin du Jeu :" #: gui/launcher.cpp:330 gui/options.cpp:1148 msgid "Extra Path:" -msgstr "Extra:" +msgstr "Extra :" #: gui/launcher.cpp:330 gui/launcher.cpp:332 gui/launcher.cpp:333 msgid "Specifies path to additional data used by the game" @@ -329,11 +361,11 @@ msgstr "Dfinie un chemin vers des donnes suplmentaires utilises par le jeu" #: gui/launcher.cpp:332 gui/options.cpp:1150 msgctxt "lowres" msgid "Extra Path:" -msgstr "Extra:" +msgstr "Extra :" #: gui/launcher.cpp:339 gui/options.cpp:1132 msgid "Save Path:" -msgstr "Sauvegardes:" +msgstr "Sauvegardes :" #: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342 #: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135 @@ -343,7 +375,7 @@ msgstr "Dfinie l'emplacement o les fichiers de sauvegarde sont crs" #: gui/launcher.cpp:341 gui/options.cpp:1134 msgctxt "lowres" msgid "Save Path:" -msgstr "Sauvegardes:" +msgstr "Sauvegardes :" #: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517 #: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151 @@ -385,7 +417,7 @@ msgstr "Cet ID est dj utilis par un autre jeu. Choisissez en un autre svp." msgid "~Q~uit" msgstr "~Q~uitter" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Quitter ScummVM" @@ -393,7 +425,7 @@ msgstr "Quitter ScummVM" msgid "A~b~out..." msgstr " ~P~ropos..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr " propos de ScummVM" @@ -467,13 +499,13 @@ msgstr "Recherche dans la liste de jeux" #: gui/launcher.cpp:661 gui/launcher.cpp:1222 msgid "Search:" -msgstr "Filtre:" +msgstr "Filtre :" #: gui/launcher.cpp:685 engines/dialogs.cpp:115 engines/cruise/menu.cpp:214 #: engines/mohawk/myst.cpp:245 engines/mohawk/riven.cpp:718 #: engines/pegasus/pegasus.cpp:353 engines/tsage/scenes.cpp:600 msgid "Load game:" -msgstr "Charger le jeu:" +msgstr "Charger le jeu :" #: gui/launcher.cpp:685 engines/dialogs.cpp:115 #: backends/platform/wince/CEActionsPocket.cpp:267 @@ -492,26 +524,6 @@ msgstr "" "Voulez-vous vraiment lancer la dtection automatique des jeux ? Cela peut " "potentiellement ajouter un grand nombre de jeux." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Oui" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Non" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM n'a pas pu ouvrir le rpertoire slectionn." @@ -522,7 +534,7 @@ msgstr "ScummVM n'a pas trouv de jeux dans le rpertoire slectionn." #: gui/launcher.cpp:867 msgid "Pick the game:" -msgstr "Choisissez le jeu:" +msgstr "Choisissez le jeu :" #: gui/launcher.cpp:941 msgid "Do you really want to remove this game configuration?" @@ -547,7 +559,7 @@ msgstr "Ajout Massif..." #: gui/launcher.cpp:1161 msgid "Record..." -msgstr "" +msgstr "Enregistrer..." #: gui/massadd.cpp:79 gui/massadd.cpp:82 msgid "... progress ..." @@ -555,7 +567,7 @@ msgstr "... en cours ..." #: gui/massadd.cpp:259 msgid "Scan complete!" -msgstr "Examen termin!" +msgstr "Examen termin !" #: gui/massadd.cpp:262 #, c-format @@ -575,21 +587,19 @@ msgstr "" #: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103 msgid "Stop" -msgstr "" +msgstr "Arrter" #: gui/onscreendialog.cpp:106 msgid "Edit record description" -msgstr "" +msgstr "Changer la description de l'enregistrement" #: gui/onscreendialog.cpp:108 -#, fuzzy msgid "Switch to Game" -msgstr "Commuter" +msgstr "Retourner au jeu" #: gui/onscreendialog.cpp:110 -#, fuzzy msgid "Fast replay" -msgstr "Mode rapide" +msgstr "Rejouer rapidement" #: gui/options.cpp:85 msgid "Never" @@ -639,7 +649,7 @@ msgstr "Aucune" #: gui/options.cpp:389 msgid "Failed to apply some of the graphic options changes:" -msgstr "Certaines options graphiques n'ont pu tre changes:" +msgstr "Certaines options graphiques n'ont pu tre changes :" #: gui/options.cpp:401 msgid "the video mode could not be changed." @@ -655,18 +665,18 @@ msgstr "la correction de rapport d'aspect n'a pu tre change." #: gui/options.cpp:732 msgid "Graphics mode:" -msgstr "Mode graphique:" +msgstr "Mode graphique :" #: gui/options.cpp:746 msgid "Render mode:" -msgstr "Mode de rendu:" +msgstr "Mode de rendu :" #: gui/options.cpp:746 gui/options.cpp:747 msgid "Special dithering modes supported by some games" msgstr "Mode spcial de tramage support par certains jeux" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Plein cran" @@ -680,11 +690,11 @@ msgstr "Corrige le rapport d'aspect pour les jeu 320x200" #: gui/options.cpp:769 msgid "Preferred Device:" -msgstr "Sortie Prfr:" +msgstr "Sortie Prfr :" #: gui/options.cpp:769 msgid "Music Device:" -msgstr "Sortie Audio:" +msgstr "Sortie Audio :" #: gui/options.cpp:769 gui/options.cpp:771 msgid "Specifies preferred sound device or sound card emulator" @@ -699,16 +709,16 @@ msgstr "Spcifie le priphrique de sortie audio ou l'mulateur de carte audio" #: gui/options.cpp:771 msgctxt "lowres" msgid "Preferred Dev.:" -msgstr "Sortie Prfr:" +msgstr "Sortie Prfr :" #: gui/options.cpp:771 msgctxt "lowres" msgid "Music Device:" -msgstr "Sortie Audio:" +msgstr "Sortie Audio :" #: gui/options.cpp:798 msgid "AdLib emulator:" -msgstr "mulateur AdLib:" +msgstr "mulateur AdLib :" #: gui/options.cpp:798 gui/options.cpp:799 msgid "AdLib is used for music in many games" @@ -716,7 +726,7 @@ msgstr "AdLib est utilis pour la musique dans de nombreux jeux" #: gui/options.cpp:809 msgid "Output rate:" -msgstr "Frquence:" +msgstr "Frquence :" #: gui/options.cpp:809 gui/options.cpp:810 msgid "" @@ -728,7 +738,7 @@ msgstr "" #: gui/options.cpp:820 msgid "GM Device:" -msgstr "Sortie GM:" +msgstr "Sortie GM :" #: gui/options.cpp:820 msgid "Specifies default sound device for General MIDI output" @@ -744,7 +754,7 @@ msgstr "Utiliser le premier priphrique disponible" #: gui/options.cpp:854 msgid "SoundFont:" -msgstr "Banque de sons:" +msgstr "Banque de sons :" #: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" @@ -755,7 +765,7 @@ msgstr "" #: gui/options.cpp:856 msgctxt "lowres" msgid "SoundFont:" -msgstr "SoundFont:" +msgstr "SoundFont :" #: gui/options.cpp:862 msgid "Mixed AdLib/MIDI mode" @@ -767,7 +777,7 @@ msgstr "Utiliser la fois MIDI et AdLib" #: gui/options.cpp:865 msgid "MIDI gain:" -msgstr "Gain MIDI:" +msgstr "Gain MIDI :" #: gui/options.cpp:872 msgid "FluidSynth Settings" @@ -775,7 +785,7 @@ msgstr "Paramtres FluidSynth" #: gui/options.cpp:879 msgid "MT-32 Device:" -msgstr "Sortie MT-32:" +msgstr "Sortie MT-32 :" #: gui/options.cpp:879 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" @@ -818,7 +828,7 @@ msgstr "Ne pas utiliser la musique Roland MT-32" #: gui/options.cpp:925 msgid "Text and Speech:" -msgstr "Dialogue:" +msgstr "Dialogue :" #: gui/options.cpp:929 gui/options.cpp:939 msgid "Speech" @@ -834,12 +844,12 @@ msgstr "Les deux" #: gui/options.cpp:933 msgid "Subtitle speed:" -msgstr "Vitesse des ST:" +msgstr "Vitesse des ST :" #: gui/options.cpp:935 msgctxt "lowres" msgid "Text and Speech:" -msgstr "Dialogue:" +msgstr "Dialogue :" #: gui/options.cpp:939 msgid "Spch" @@ -861,16 +871,16 @@ msgstr "Affiche les sous-titres et joue les dialogues audio" #: gui/options.cpp:943 msgctxt "lowres" msgid "Subtitle speed:" -msgstr "Vitesse des ST:" +msgstr "Vitesse des ST :" #: gui/options.cpp:959 msgid "Music volume:" -msgstr "Volume Musique:" +msgstr "Volume Musique :" #: gui/options.cpp:961 msgctxt "lowres" msgid "Music volume:" -msgstr "Musique:" +msgstr "Musique :" #: gui/options.cpp:968 msgid "Mute All" @@ -878,7 +888,7 @@ msgstr "Silence" #: gui/options.cpp:971 msgid "SFX volume:" -msgstr "Volume Bruitage:" +msgstr "Volume Bruitage :" #: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974 msgid "Special sound effects volume" @@ -887,25 +897,25 @@ msgstr "Volume des effets spciaux sonores" #: gui/options.cpp:973 msgctxt "lowres" msgid "SFX volume:" -msgstr "Bruitage:" +msgstr "Bruitage :" #: gui/options.cpp:981 msgid "Speech volume:" -msgstr "Volume Dialogues:" +msgstr "Volume Dialogues :" #: gui/options.cpp:983 msgctxt "lowres" msgid "Speech volume:" -msgstr "Dialogues:" +msgstr "Dialogues :" #: gui/options.cpp:1140 msgid "Theme Path:" -msgstr "Thmes:" +msgstr "Thmes :" #: gui/options.cpp:1142 msgctxt "lowres" msgid "Theme Path:" -msgstr "Thmes:" +msgstr "Thmes :" #: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151 msgid "Specifies path to additional data used by all games or ScummVM" @@ -915,12 +925,12 @@ msgstr "" #: gui/options.cpp:1157 msgid "Plugins Path:" -msgstr "Plugins:" +msgstr "Plugins :" #: gui/options.cpp:1159 msgctxt "lowres" msgid "Plugins Path:" -msgstr "Plugins:" +msgstr "Plugins :" #: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138 msgid "Misc" @@ -933,20 +943,20 @@ msgstr "Divers" #: gui/options.cpp:1172 msgid "Theme:" -msgstr "Thme:" +msgstr "Thme :" #: gui/options.cpp:1176 msgid "GUI Renderer:" -msgstr "Interface:" +msgstr "Interface :" #: gui/options.cpp:1188 msgid "Autosave:" -msgstr "Sauvegarde auto:" +msgstr "Sauvegarde auto :" #: gui/options.cpp:1190 msgctxt "lowres" msgid "Autosave:" -msgstr "Sauvegarde:" +msgstr "Sauvegarde :" #: gui/options.cpp:1198 msgid "Keys" @@ -954,7 +964,7 @@ msgstr "Touches" #: gui/options.cpp:1205 msgid "GUI Language:" -msgstr "Langue:" +msgstr "Langue :" #: gui/options.cpp:1205 msgid "Language of ScummVM GUI" @@ -994,29 +1004,28 @@ msgstr "" #. I18N: You must leave "#" as is, only word 'next' is translatable #: gui/predictivedialog.cpp:87 msgid "# next" -msgstr "" +msgstr "# suivant" #: gui/predictivedialog.cpp:88 msgid "add" -msgstr "" +msgstr "ajouter" #: gui/predictivedialog.cpp:92 -#, fuzzy msgid "Delete char" -msgstr "Supprimer" +msgstr "Supprimer le caractre" #: gui/predictivedialog.cpp:96 msgid "<" -msgstr "" +msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is #: gui/predictivedialog.cpp:98 msgid "* Pre" -msgstr "" +msgstr "* Pr" #: gui/recorderdialog.cpp:64 msgid "Recorder or Playback Gameplay" -msgstr "" +msgstr "Enregistreur ou Joueur de Gameplay" #: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 @@ -1025,36 +1034,33 @@ msgstr "Supprimer" #: gui/recorderdialog.cpp:71 msgid "Record" -msgstr "" +msgstr "Enregistrer" #: gui/recorderdialog.cpp:72 -#, fuzzy msgid "Playback" -msgstr "Jouer" +msgstr "Lecture" #: gui/recorderdialog.cpp:74 msgid "Edit" -msgstr "" +msgstr "Editer" #: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 #: gui/recorderdialog.cpp:253 msgid "Author: " -msgstr "" +msgstr "Auteur : " #: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 #: gui/recorderdialog.cpp:254 msgid "Notes: " -msgstr "" +msgstr "Notes : " #: gui/recorderdialog.cpp:155 -#, fuzzy msgid "Do you really want to delete this record?" -msgstr "Voulez-vous vraiment supprimer cette sauvegarde ?" +msgstr "Voulez-vous vraiment supprimer cet enregistrement ?" #: gui/recorderdialog.cpp:174 -#, fuzzy msgid "Unknown Author" -msgstr "Erreur inconnue" +msgstr "Auteur inconnu" #: gui/saveload-dialog.cpp:167 msgid "List view" @@ -1082,15 +1088,15 @@ msgstr "Voulez-vous vraiment supprimer cette sauvegarde ?" #: gui/saveload-dialog.cpp:385 gui/saveload-dialog.cpp:884 msgid "Date: " -msgstr "Date: " +msgstr "Date : " #: gui/saveload-dialog.cpp:389 gui/saveload-dialog.cpp:890 msgid "Time: " -msgstr "Heure: " +msgstr "Heure : " #: gui/saveload-dialog.cpp:395 gui/saveload-dialog.cpp:898 msgid "Playtime: " -msgstr "Dure de jeu: " +msgstr "Dure de jeu : " #: gui/saveload-dialog.cpp:408 gui/saveload-dialog.cpp:496 msgid "Untitled savestate" @@ -1138,7 +1144,7 @@ msgstr "GFX dsactiv" msgid "Standard Renderer" msgstr "Rendu Standard" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Normal" @@ -1164,19 +1170,19 @@ msgstr "Actif" #: gui/fluidsynth-dialog.cpp:72 msgid "Room:" -msgstr "Pice:" +msgstr "Pice :" #: gui/fluidsynth-dialog.cpp:79 msgid "Damp:" -msgstr "Attnuation:" +msgstr "Attnuation :" #: gui/fluidsynth-dialog.cpp:86 msgid "Width:" -msgstr "Largeur:" +msgstr "Largeur :" #: gui/fluidsynth-dialog.cpp:93 gui/fluidsynth-dialog.cpp:111 msgid "Level:" -msgstr "Niveau:" +msgstr "Niveau :" #: gui/fluidsynth-dialog.cpp:100 msgid "Chorus" @@ -1184,19 +1190,19 @@ msgstr "Chorus" #: gui/fluidsynth-dialog.cpp:104 msgid "N:" -msgstr "N:" +msgstr "N :" #: gui/fluidsynth-dialog.cpp:118 msgid "Speed:" -msgstr "Vitesse:" +msgstr "Vitesse :" #: gui/fluidsynth-dialog.cpp:125 msgid "Depth:" -msgstr "Profondeur:" +msgstr "Profondeur :" #: gui/fluidsynth-dialog.cpp:132 msgid "Type:" -msgstr "Type:" +msgstr "Type :" #: gui/fluidsynth-dialog.cpp:135 msgid "Sine" @@ -1208,7 +1214,7 @@ msgstr "Triangle" #: gui/fluidsynth-dialog.cpp:140 msgid "Interpolation:" -msgstr "Interpolation:" +msgstr "Interpolation :" #: gui/fluidsynth-dialog.cpp:143 msgid "None (fastest)" @@ -1266,7 +1272,7 @@ msgstr "Passer la phrase" #: base/main.cpp:507 msgid "Error running game:" -msgstr "Erreur lors de l'xcution du jeu:" +msgstr "Erreur lors de l'xcution du jeu : " #: base/main.cpp:554 msgid "Could not find any engine capable of running the selected game" @@ -1302,7 +1308,7 @@ msgstr "Chemin inexistant" #: common/error.cpp:54 msgid "Path not a directory" -msgstr "Chemin n'est pas un rpertoire" +msgstr "Le chemin n'est pas un rpertoire" #: common/error.cpp:56 msgid "Path not a file" @@ -1314,11 +1320,11 @@ msgstr "Impossible de crer le fichier" #: common/error.cpp:61 msgid "Reading data failed" -msgstr "Echec de la lecture" +msgstr "chec de la lecture" #: common/error.cpp:63 msgid "Writing data failed" -msgstr "Echec de l'criture des donnes" +msgstr "chec de l'criture des donnes" #: common/error.cpp:66 msgid "Could not find suitable engine plugin" @@ -1386,11 +1392,11 @@ msgstr "Retour au ~L~anceur" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" -msgstr "Sauvegarde:" +msgstr "Sauvegarde :" #: engines/dialogs.cpp:116 backends/platform/symbian/src/SymbianActions.cpp:44 #: backends/platform/wince/CEActionsPocket.cpp:43 @@ -1399,7 +1405,7 @@ msgstr "Sauvegarde:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1488,7 +1494,7 @@ msgid "" "Gamestate load failed (%s)! Please consult the README for basic information, " "and for instructions on how to obtain further assistance." msgstr "" -"Echec du chargement (%s)! . Lisez le fichier README pour les informations de " +"Echec du chargement (%s) ! Lisez le fichier README pour les informations de " "base et les instructions pour obtenir de l'aide supplmentaire." #: engines/engine.cpp:480 @@ -1497,7 +1503,7 @@ msgid "" "ScummVM. As such, it is likely to be unstable, and any saves you make might " "not work in future versions of ScummVM." msgstr "" -"Attention:le jeu que vous vous apprtez jouer n'est pas encore " +"Attention : le jeu que vous vous apprtez jouer n'est pas encore " "compltement support par ScummVM. Il est donc instable et les sauvegardes " "peuvent ne pas marcher avec une future version de ScummVM." @@ -1515,7 +1521,7 @@ msgstr "mulateur DOSBox OPL" #: audio/fmopl.cpp:67 msgid "ALSA Direct FM" -msgstr "" +msgstr "ALSA direct-FM" #: audio/mididrv.cpp:209 #, c-format @@ -1537,8 +1543,8 @@ msgid "" "The selected audio device '%s' cannot be used. See log file for more " "information." msgstr "" -"The selected audio device '%s' ne peut pas tre utilis. Voir le fichier de " -"log pour plus de dtails." +"Le priphrique audio slectionn '%s' ne peut pas tre utilis. Voir le " +"fichier de log pour plus de dtails." #: audio/mididrv.cpp:257 #, c-format @@ -1689,7 +1695,7 @@ msgstr "Sans changement d'chelle (vous devez faire dfiler l'cran)" #: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" -msgstr "Luminosit:" +msgstr "Luminosit :" #: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" @@ -1738,57 +1744,57 @@ msgstr "Clic Milieu" msgid "Right Click" msgstr "Clic Droit" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Masquer ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Masquer les autres" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Tout afficher" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Fentre" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Placer dans le Dock" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (chelle d'origine)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Activer la correction du rapport d'aspect" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Dsactiver la correction du rapport d'aspect" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Mode graphique actif:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Mode Fentre" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (sans filtre)" @@ -1838,9 +1844,8 @@ msgstr "Mode rapide" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 -#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 -#: engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 +#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 msgid "Quit" msgstr "Quitter" @@ -1902,7 +1907,7 @@ msgstr "DVD" #: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101 msgid "Status:" -msgstr "Status:" +msgstr "tat :" #: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 msgid "Unknown" @@ -1926,15 +1931,15 @@ msgstr "Serveur:" #: backends/platform/wii/options.cpp:110 msgid "Share:" -msgstr "Disque partag:" +msgstr "Disque partag :" #: backends/platform/wii/options.cpp:114 msgid "Username:" -msgstr "Nom d'utilisateur:" +msgstr "Nom d'utilisateur :" #: backends/platform/wii/options.cpp:118 msgid "Password:" -msgstr "Mot de passe:" +msgstr "Mot de passe :" #: backends/platform/wii/options.cpp:121 msgid "Init network" @@ -2213,34 +2218,36 @@ msgstr "" "ScummVM" #: engines/agi/detection.cpp:157 -#, fuzzy msgid "Use an alternative palette" -msgstr "Utiliser une intro alternative (version CD uniquement)" +msgstr "Utiliser une palette alternative" #: engines/agi/detection.cpp:158 msgid "" "Use an alternative palette, common for all Amiga games. This was the old " "behavior" msgstr "" +"Utiliser une palette de remplacement commune tous les jeux Amiga. C'est " +"l'ancien comportement." #: engines/agi/detection.cpp:167 -#, fuzzy msgid "Mouse support" -msgstr "Support des interruptions" +msgstr "Support de la souris" #: engines/agi/detection.cpp:168 msgid "" "Enables mouse support. Allows to use mouse for movement and in game menus." msgstr "" +"Activer le support de la souris. Cela permet d'utiliser la souris pour les " +"mouvements et la navigation dans les menus." #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" -msgstr "Charger le jeu:" +msgstr "Charger le jeu :" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Charger" @@ -2252,7 +2259,7 @@ msgid "" "\n" "%s" msgstr "" -"chec du chargement de l'tat du jeu depuis le fichier:\n" +"chec du chargement de l'tat du jeu depuis le fichier :\n" "\n" "%s" @@ -2263,7 +2270,7 @@ msgid "" "\n" "%s" msgstr "" -"chec de l'enregistrement de l'tat du jeu dans le fichier:\n" +"chec de l'enregistrement de l'tat du jeu dans le fichier :\n" "\n" "%s" @@ -2274,23 +2281,22 @@ msgid "" "\n" "%s" msgstr "" -"tat du jeu enregistr avec succs dans le fichier:\n" +"tat du jeu enregistr avec succs dans le fichier :\n" "\n" "%s" #: engines/agos/animation.cpp:557 #, c-format msgid "Cutscene file '%s' not found!" -msgstr "Fichier de squence '%s' non trouv!" +msgstr "Fichier de squence '%s' non trouv !" #: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101 -#, fuzzy msgid "Color Blind Mode" -msgstr "Mode Clic" +msgstr "Mode Daltonien" #: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102 msgid "Enable Color Blind Mode by default" -msgstr "" +msgstr "Activer le mode Daltonien par dfaut" #: engines/drascula/saveload.cpp:47 msgid "" @@ -2346,11 +2352,11 @@ msgstr "chec de la sauvegarde." #: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86 msgid "Gore Mode" -msgstr "" +msgstr "Mode Sanglant" #: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87 msgid "Enable Gore Mode when available" -msgstr "" +msgstr "Activer le Mode Sanglant quand il est disponible" #. I18N: Studio audience adds an applause and cheering sounds whenever #. Malcolm makes a joke. @@ -2466,8 +2472,8 @@ msgid "" "General MIDI ones. It is still possible that\n" "some tracks sound incorrect." msgstr "" -"Il semble que vous utilisiez un priphrique General MIDI,\n" -"mais ce jeu ne support que le MIDI Roland MT32. Nous essayons\n" +"Il semble que vous utilisez un priphrique General MIDI,\n" +"mais ce jeu ne supporte que le MIDI Roland MT32. Nous essayons\n" "d'associer les instruments Roland MT32 aux instruments General\n" "MIDI. Cependant il est possible que quelques pistes ne soient\n" " pas joues correctement." @@ -2482,6 +2488,13 @@ msgid "" "Do you wish to use this save game file with ScummVM?\n" "\n" msgstr "" +"Le fichier de sauvegarde original suivant a t trouv dans le rpertoire du " +"jeu :\n" +"\n" +"%s %s\n" +"\n" +"Voulez-vous utiliser cette sauvegarde avec ScummVM ?\n" +"\n" #: engines/kyra/saveload_eob.cpp:590 #, c-format @@ -2489,6 +2502,8 @@ msgid "" "A save game file was found in the specified slot %d. Overwrite?\n" "\n" msgstr "" +"Une sauvegarde existe dj dans l'emplacement %d. craser ?\n" +"\n" #: engines/kyra/saveload_eob.cpp:623 #, c-format @@ -2500,6 +2515,11 @@ msgid "" "'import_savefile'.\n" "\n" msgstr "" +"%d sauvegardes originales ont t importes avec succs. Si vous voulez\n" +"importer d'autre sauvegardes originales plus tard, vous devrez ouvrir la\n" +"console de debug de ScummVM et utiliser la commande 'import_savefile'.\n" +"\n" +" \n" #. I18N: Option for fast scene switching #: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167 @@ -2640,15 +2660,17 @@ msgstr "Utiliser une intro alternative (version CD uniquement)" #: engines/sci/detection.cpp:374 msgid "Skip EGA dithering pass (full color backgrounds)" -msgstr "" +msgstr "Passer l'tape de tramage EGA (fonds de couleurs pleines)" #: engines/sci/detection.cpp:375 msgid "Skip dithering pass in EGA games, graphics are shown with full colors" msgstr "" +"Passer l'tape de tramage dans les jeux EGA ; les images utilisent des " +"couleurs pleines" #: engines/sci/detection.cpp:384 msgid "Prefer digital sound effects" -msgstr "Prfrer les effets sonors digitals" +msgstr "Prfrer les effets sonores digitaux" #: engines/sci/detection.cpp:385 msgid "Prefer digital sound effects instead of synthesized ones" @@ -2719,13 +2741,11 @@ msgstr "Jeu en pause. Appuyer sur Espace pour Reprendre." #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' #: engines/scumm/dialogs.cpp:183 -#, fuzzy msgid "Are you sure you want to restart? (Y/N)Y" msgstr "Voulez-vous vraiment recommencer ? (O/N)O" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment #: engines/scumm/dialogs.cpp:185 -#, fuzzy msgid "Are you sure you want to quit? (Y/N)Y" msgstr "Voulez-vous vraiment quitter ? (O/N)O" @@ -2781,42 +2801,42 @@ msgstr "~P~rcdent" msgid "~N~ext" msgstr "~S~uivant" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Voix" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Voix et Sous-titres" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Sous-titres" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voix & ST" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Slectionnez un niveau de comptence." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Reportez-vous votre manuel d'instruction." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Essai" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Expert" #: engines/scumm/help.cpp:74 msgid "Common keyboard commands:" -msgstr "Commandes clavier communes:" +msgstr "Commandes clavier communes :" #: engines/scumm/help.cpp:75 msgid "Save / Load dialog" @@ -2840,7 +2860,7 @@ msgstr "Espace" #: engines/scumm/help.cpp:79 msgid "Pause game" -msgstr "Mettre en pause:" +msgstr "Mettre en pause" #: engines/scumm/help.cpp:80 engines/scumm/help.cpp:85 #: engines/scumm/help.cpp:96 engines/scumm/help.cpp:97 @@ -2852,7 +2872,7 @@ msgstr "Ctrl" #: engines/scumm/help.cpp:80 msgid "Load game state 1-10" -msgstr "Charger sauvegarde 1-10:" +msgstr "Charger sauvegarde 1-10" #: engines/scumm/help.cpp:81 engines/scumm/help.cpp:85 #: engines/scumm/help.cpp:87 engines/scumm/help.cpp:101 @@ -2862,7 +2882,7 @@ msgstr "Alt" #: engines/scumm/help.cpp:81 msgid "Save game state 1-10" -msgstr "crire sauvegarde 1-10:" +msgstr "crire sauvegarde 1-10" #: engines/scumm/help.cpp:87 engines/scumm/help.cpp:90 msgid "Enter" @@ -2890,7 +2910,7 @@ msgstr "Simuler bouton droit de la souris" #: engines/scumm/help.cpp:94 msgid "Special keyboard commands:" -msgstr "Commandes clavier spciales:" +msgstr "Commandes clavier spciales :" #: engines/scumm/help.cpp:95 msgid "Show / Hide console" @@ -2902,7 +2922,7 @@ msgstr "Ouvrir le dbugger" #: engines/scumm/help.cpp:97 msgid "Show memory consumption" -msgstr "Afficher la consomation de mmoire" +msgstr "Afficher la consommation de mmoire" #: engines/scumm/help.cpp:98 msgid "Run in fast mode (*)" @@ -2946,11 +2966,11 @@ msgstr " ou comportement incorrect du jeu." #: engines/scumm/help.cpp:115 msgid "Spinning drafts on the keyboard:" -msgstr "Filage au clavier:" +msgstr "Filage au clavier :" #: engines/scumm/help.cpp:117 msgid "Main game controls:" -msgstr "Controles principaux du jeu:" +msgstr "Contrles principaux du jeu :" #: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 #: engines/scumm/help.cpp:162 @@ -3235,25 +3255,24 @@ msgid "Third kid" msgstr "Troisime enfant" #: engines/scumm/help.cpp:292 -#, fuzzy msgid "Toggle Inventory/IQ Points display" -msgstr "Basculer l'Affichage Central" +msgstr "Basculer entre Inventaire/Points QI" #: engines/scumm/help.cpp:293 msgid "Toggle Keyboard/Mouse Fighting (*)" -msgstr "" +msgstr "Basculer entre Clavier et Souris pour les combats (*)" #: engines/scumm/help.cpp:295 msgid "* Keyboard Fighting is always on," -msgstr "" +msgstr "* Le clavier peut toujours tre utilis pour les combats," #: engines/scumm/help.cpp:296 msgid " so despite the in-game message this" -msgstr "" +msgstr " donc malgr le message dans le jeu cela simplement" #: engines/scumm/help.cpp:297 msgid " actually toggles Mouse Fighting Off/On" -msgstr "" +msgstr " active/dsactive le combat la souris" #: engines/scumm/help.cpp:304 msgid "Fighting controls (numpad):" @@ -3290,7 +3309,7 @@ msgstr "Frapper bas" #: engines/scumm/help.cpp:315 msgid "Sucker punch" -msgstr "" +msgstr "Sucker punch" #: engines/scumm/help.cpp:318 msgid "These are for Indy on left." @@ -3349,23 +3368,20 @@ msgid "Fly to lower right" msgstr "Voler vers la bas droite" #: engines/scumm/input.cpp:572 -#, fuzzy msgid "Snap scroll on" -msgstr "Dfilement rgulier" +msgstr "Dfilement par -coups" #: engines/scumm/input.cpp:574 msgid "Snap scroll off" -msgstr "" +msgstr "Dfilement rgulier" #: engines/scumm/input.cpp:587 -#, fuzzy msgid "Music volume: " -msgstr "Volume Musique:" +msgstr "Volume Musique :" #: engines/scumm/input.cpp:604 -#, fuzzy msgid "Subtitle speed: " -msgstr "Vitesse des ST:" +msgstr "Vitesse des ST :" #: engines/scumm/scumm.cpp:1832 #, c-format @@ -3377,28 +3393,31 @@ msgstr "" "mais %s manque. Utilise AdLib la place." #: engines/scumm/scumm.cpp:2644 -#, fuzzy msgid "" "Usually, Maniac Mansion would start now. But for that to work, the game " "files for Maniac Mansion have to be in the 'Maniac' directory inside the " "Tentacle game directory, and the game has to be added to ScummVM." msgstr "" -"Normalement, Maniac Mansion devrait dmarrer maintenant. Cependant ScummVM " -"ne supporte pas encore cette fonctionalit. Pour jouer Maniac Mansion, " -"choisissez 'Ajouter...' dans le Lanceur de ScummVM et slectionnez le " -"rpertoire 'Maniac Mansion' dans le rpertoire du jeu Day Of The Tentacle." +"Normalement, Maniac Mansion devrait dmarrer maintenant. Mais pour que cela " +"marche il faut que les fichiers du jeu Maniac Mansion soient dans e " +"rpertoire 'Maniac' l'intrieur du rpertoire du jeu Day of the Tentacle, " +"et le jeu doit tre ajouter ScummVM." #: engines/scumm/players/player_v3m.cpp:129 msgid "" "Could not find the 'Loom' Macintosh executable to read the\n" "instruments from. Music will be disabled." msgstr "" +"L'excutable Macintosh de 'Loom' n'a pas t trouv pour\n" +"y lire les instruments. La musique sera dsactive." #: engines/scumm/players/player_v5m.cpp:107 msgid "" "Could not find the 'Monkey Island' Macintosh executable to read the\n" "instruments from. Music will be disabled." msgstr "" +"L'excutable Macintosh de 'Monkey Island' n'a pas t trouv pour\n" +"y lire les instruments. La musique sera dsactive." #: engines/sky/compact.cpp:130 msgid "" @@ -3519,14 +3538,14 @@ msgstr "" #: engines/wintermute/detection.cpp:58 msgid "Show FPS-counter" -msgstr "" +msgstr "Afficher le compteur FPS" #: engines/wintermute/detection.cpp:59 msgid "Show the current number of frames per second in the upper left corner" msgstr "" +"Affiche le nombre d'images par seconde (FPS) dans le coin en haut gauche" #: engines/zvision/detection_tables.h:52 -#, fuzzy msgid "Use the original save/load screens instead of the ScummVM interface" msgstr "" "Utiliser les dialogues sauvegarde/chargement d'origine plutt que ceux de " @@ -3534,38 +3553,37 @@ msgstr "" #: engines/zvision/detection_tables.h:61 msgid "Double FPS" -msgstr "" +msgstr "Doubler les FPS" #: engines/zvision/detection_tables.h:62 msgid "Increase framerate from 30 to 60 FPS" -msgstr "" +msgstr "Augmente de 30 60 le nombre d'images par seconde" #: engines/zvision/detection_tables.h:71 -#, fuzzy msgid "Enable Venus" -msgstr "Activer le mode helium" +msgstr "Activer Venus" #: engines/zvision/detection_tables.h:72 -#, fuzzy msgid "Enable the Venus help system" -msgstr "Activer le mode helium" +msgstr "Active le systme d'aide Venus" #: engines/zvision/detection_tables.h:81 msgid "Disable animation while turning" -msgstr "" +msgstr "Dsactiver les animations en tournant" #: engines/zvision/detection_tables.h:82 msgid "Disable animation while turning in panorama mode" -msgstr "" +msgstr "Dsactiver les animations en tournant dans le mode panorama" #: engines/zvision/detection_tables.h:91 msgid "Use high resolution MPEG video" -msgstr "" +msgstr "Utiliser les vidos MPEG haute rsolution" #: engines/zvision/detection_tables.h:92 -#, fuzzy msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" -msgstr "Utiliser les curseurs argents au lieu des curseurs normaux dors" +msgstr "" +"Utiliser les vidos MPEG du DVD la place des vidos AVI de plus basse " +"rsolution" #~ msgid "EGA undithering" #~ msgstr "Dtramage EGA" diff --git a/po/gl_ES.po b/po/gl_ES.po index 905c87d316..76c76d492b 100644 --- a/po/gl_ES.po +++ b/po/gl_ES.po @@ -1,5 +1,5 @@ # Galician translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Santiago G. Sanz <s.sanz@uvigo.es>, 2013. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-07-02 09:51+0100\n" "Last-Translator: Santiago G. Sanz <s.sanz@uvigo.es>\n" "Language-Team: Santiago G. Sanz <s.sanz@uvigo.es>\n" @@ -52,13 +52,13 @@ msgid "Go up" msgstr "Arriba" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -67,7 +67,7 @@ msgid "Cancel" msgstr "Cancelar" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Elixir" @@ -87,6 +87,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Seguro que queres eliminar esta partida?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Si" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Non" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -382,7 +415,7 @@ msgstr "Este ID de xogo xa est en uso. Selecciona outro." msgid "~Q~uit" msgstr "~S~ar" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Sar de ScummVM" @@ -390,7 +423,7 @@ msgstr "Sar de ScummVM" msgid "A~b~out..." msgstr "Ace~r~ca de..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Acerca de ScummVM" @@ -488,26 +521,6 @@ msgstr "" "Queres executar o detector de xogos en masa? posible que se engada un gran " "nmero de xogos." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Si" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Non" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM non foi quen de abrir o directorio!" @@ -660,7 +673,7 @@ msgid "Special dithering modes supported by some games" msgstr "Modos de interpolacin de cores compatibles con algns xogos" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Pantalla completa" @@ -1125,7 +1138,7 @@ msgstr "Efectos desactivados" msgid "Standard Renderer" msgstr "Procesamento estndar" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Estndar" @@ -1373,7 +1386,7 @@ msgstr "~V~olver ao Iniciador" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1386,7 +1399,7 @@ msgstr "Gardar partida:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1725,57 +1738,57 @@ msgstr "Botn central" msgid "Right Click" msgstr "Botn secundario" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Ocultar ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Ocultar outros" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Mostrar todo" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Vent" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimizar" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (sen escala)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (sen escala)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Correccin de proporcin activada" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Correccin de proporcin desactivada" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Filtro de grficos activo:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Modo en vent" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (Sen filtraxe)" @@ -2218,13 +2231,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Restaurar xogo:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Restaurar" @@ -2764,36 +2777,36 @@ msgstr "~A~nterior" msgid "~N~ext" msgstr "~S~eguinte" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "S voz" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Voz e subttulos" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "S subttulos" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voz e subs" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Selecciona un nivel de habilidade." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Consulta o manual de Loom(TM) para obter axuda." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Prctica" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Experto" diff --git a/po/hu_HU.po b/po/hu_HU.po index 89538e9f61..c13b1f0434 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -1,5 +1,5 @@ # Hungarian translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # George Kormendi <grubycza@hotmail.com>, 2010. # @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" -"PO-Revision-Date: 2015-10-12 11:10+0200\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" +"PO-Revision-Date: 2015-12-23 05:02+0100\n" "Last-Translator: George Kormendi <grubycza@hotmail.com>\n" "Language-Team: Hungarian\n" "Language: Magyar\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-SourceCharset: iso-8859-1\n" -"X-Generator: Poedit 1.8.5\n" +"X-Generator: Poedit 1.8.6\n" #: gui/about.cpp:94 #, c-format @@ -54,13 +54,13 @@ msgid "Go up" msgstr "Feljebb" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -69,7 +69,7 @@ msgid "Cancel" msgstr "Mgse" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Vlaszt" @@ -89,6 +89,38 @@ msgstr "Megjegyzs:" msgid "Ok" msgstr "Ok" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "Vlassz betltend fjlt" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "rd be a fjlnevet mentshez" + +#: gui/filebrowser-dialog.cpp:132 +msgid "Do you really want to overwrite the file?" +msgstr "Biztos hogy fell akarod rni a fjlt?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Igen" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Nem" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -175,7 +207,8 @@ msgid "" "Short game identifier used for referring to saved games and running the game " "from the command line" msgstr "" -"Rvid jtkazonost a jtkmentsekhez s a jtk parancssori futtatshoz" +"Rvid jtkazonost a jtkmentsekhez s a jtk parancssori " +"futtatshoz" #: gui/launcher.cpp:199 msgctxt "lowres" @@ -200,7 +233,8 @@ msgid "" "Language of the game. This will not turn your Spanish game version into " "English" msgstr "" -"A jtk nyelve. Ne lltsd t a pl. Spanyol nyelv jtkodat Angol nyelvre" +"A jtk nyelve. Ne lltsd t a pl. Spanyol nyelv jtkodat Angol " +"nyelvre" #: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87 #: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208 @@ -384,7 +418,7 @@ msgstr "Ez a jtkazonost ID mr foglalt, Vlassz egy msikat." msgid "~Q~uit" msgstr "Kilps" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "ScummVM bezrsa" @@ -392,7 +426,7 @@ msgstr "ScummVM bezrsa" msgid "A~b~out..." msgstr "Nvjegy" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "ScummVM nvjegy" @@ -487,28 +521,8 @@ msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." msgstr "" -"Biztos hogy futtatod a Masszv jtkdetektort? Ez potencilisan sok jtkot " -"hozzad a listhoz." - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Igen" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Nem" +"Biztos hogy futtatod a Masszv jtkdetektort? Ez potencilisan sok " +"jtkot hozzad a listhoz." #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" @@ -532,12 +546,14 @@ msgstr "Akarod hogy betltsem a jtkllst?" #: gui/launcher.cpp:1048 msgid "This game does not support loading games from the launcher." -msgstr "Ez a jtk nem tmogatja a jtklls betltst az indtbl." +msgstr "" +"Ez a jtk nem tmogatja a jtklls betltst az indtbl." #: gui/launcher.cpp:1052 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" -"ScummVM nem tallt olyan jtkmotort ami a vlasztott jtkot tmogatja!" +"ScummVM nem tallt olyan jtkmotort ami a vlasztott jtkot " +"tmogatja!" #: gui/launcher.cpp:1159 msgid "Mass Add..." @@ -558,7 +574,8 @@ msgstr "Vizsglat ksz!" #: gui/massadd.cpp:262 #, c-format msgid "Discovered %d new games, ignored %d previously added games." -msgstr "%d j jtkot talltam, %d elzleg hozzadott jtk kihagyva..." +msgstr "" +"%d j jtkot talltam, %d elzleg hozzadott jtk kihagyva..." #: gui/massadd.cpp:266 #, c-format @@ -568,7 +585,8 @@ msgstr "%d Mappa tvizsglva..." #: gui/massadd.cpp:269 #, c-format msgid "Discovered %d new games, ignored %d previously added games ..." -msgstr "%d j jtkot talltam, %d elzleg hozzadott jtk kihagyva..." +msgstr "" +"%d j jtkot talltam, %d elzleg hozzadott jtk kihagyva..." #: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103 msgid "Stop" @@ -661,7 +679,7 @@ msgid "Special dithering modes supported by some games" msgstr "Nhny jtk tmogatja a specilis rnyalsi mdokat" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Teljeskpernys md:" @@ -716,7 +734,8 @@ msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" msgstr "" -"Nagyobb rtkek jobb hangminsget adnak, de nem minden hangkrtya tmogatja" +"Nagyobb rtkek jobb hangminsget adnak, de nem minden hangkrtya " +"tmogatja" #: gui/options.cpp:820 msgid "GM Device:" @@ -741,7 +760,8 @@ msgstr "SoundFont:" #: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857 msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity" msgstr "" -"Nhny hangkrya, FluidSynth s Timidyti tmogatja a SoundFont betltst" +"Nhny hangkrya, FluidSynth s Timidyti tmogatja a SoundFont " +"betltst" #: gui/options.cpp:856 msgctxt "lowres" @@ -770,7 +790,8 @@ msgstr "MT-32 Eszkz:" #: gui/options.cpp:879 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" -msgstr "Roland MT-32/LAPC1/CM32l/CM64 alaprtelmezett hangeszkzk belltsa" +msgstr "" +"Roland MT-32/LAPC1/CM32l/CM64 alaprtelmezett hangeszkzk belltsa" #: gui/options.cpp:884 msgid "True Roland MT-32 (disable GM emulation)" @@ -781,8 +802,8 @@ msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" msgstr "" -"Jelld be, ha hardveres Roland-Kompatibilis hangeszkz van csatlakoztatva a " -"gpedhez s hasznlni akarod" +"Jelld be, ha hardveres Roland-Kompatibilis hangeszkz van csatlakoztatva " +"a gpedhez s hasznlni akarod" #: gui/options.cpp:886 msgctxt "lowres" @@ -798,8 +819,8 @@ msgid "" "Check if you want to enable patch mappings to emulate an MT-32 on a Roland " "GS device" msgstr "" -"Ellenrzs ha engedlyezni akarod az emullt MT-32 Folt lekpezst a Roland " -"GS eszkzn" +"Ellenrzs ha engedlyezni akarod az emullt MT-32 Folt lekpezst a " +"Roland GS eszkzn" #: gui/options.cpp:898 msgid "Don't use Roland MT-32 music" @@ -1118,7 +1139,7 @@ msgstr "GFX letiltva" msgid "Standard Renderer" msgstr "Standard lekpez" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "tlagos" @@ -1218,7 +1239,8 @@ msgstr "Minden FluidSynth bellts alaprtelmezett rtkre." msgid "" "Do you really want to reset all FluidSynth settings to their default values?" msgstr "" -"Biztos visszalltassz minden FluidSynth belltst alaprtelmezett rtkre?" +"Biztos visszalltassz minden FluidSynth belltst alaprtelmezett " +"rtkre?" #: base/main.cpp:228 #, c-format @@ -1250,7 +1272,8 @@ msgstr "Hiba a jtk futtatsakor:" #: base/main.cpp:554 msgid "Could not find any engine capable of running the selected game" -msgstr "Nem tallhat olyan jtkmotor ami a vlasztott jtkot tmogatja" +msgstr "" +"Nem tallhat olyan jtkmotor ami a vlasztott jtkot tmogatja" #: common/error.cpp:38 msgid "No error" @@ -1323,7 +1346,8 @@ msgstr "A '%s' jtk ismeretlennek tnik." #: engines/advancedDetector.cpp:318 msgid "Please, report the following data to the ScummVM team along with name" -msgstr "Krlek jelezd a ScummVM csapatnak a kvetkez adatokat, egytt a jtk" +msgstr "" +"Krlek jelezd a ScummVM csapatnak a kvetkez adatokat, egytt a jtk" #: engines/advancedDetector.cpp:320 msgid "of the game you tried to add and its version/language/etc.:" @@ -1364,7 +1388,7 @@ msgstr "Visszatrs az indtba" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1377,7 +1401,7 @@ msgstr "Jtk mentse:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1389,8 +1413,9 @@ msgid "" "the README for basic information, and for instructions on how to obtain " "further assistance." msgstr "" -"Sajnlom, a motor jelenleg nem tartalmaz jtk kzbeni sgt. Olvassd el a " -"README-t az alap informcikrl, s hogy hogyan segthetsz a ksbbiekben." +"Sajnlom, a motor jelenleg nem tartalmaz jtk kzbeni sgt. Olvassd " +"el a README-t az alap informcikrl, s hogy hogyan segthetsz a " +"ksbbiekben." #: engines/dialogs.cpp:234 engines/pegasus/pegasus.cpp:393 #, c-format @@ -1465,8 +1490,8 @@ msgid "" "Gamestate load failed (%s)! Please consult the README for basic information, " "and for instructions on how to obtain further assistance." msgstr "" -"(%s) jtklls betltse nem sikerlt!. Olvassd el a README-t az alap " -"informcikrl, s hogy hogyan segthetsz a ksbbiekben." +"(%s) jtklls betltse nem sikerlt!. Olvassd el a README-t az " +"alap informcikrl, s hogy hogyan segthetsz a ksbbiekben." #: engines/engine.cpp:480 msgid "" @@ -1475,8 +1500,8 @@ msgid "" "not work in future versions of ScummVM." msgstr "" "FIGYELEM: A jtkot amit indtani akarsz mg nem teljesen tmogatotja a " -"ScummVM. Szmts r hogy nem stabilan fut, s a mentsek nem mkdnek a " -"jvbeni ScummVM verzikkal." +"ScummVM. Szmts r hogy nem stabilan fut, s a mentsek nem mkdnek " +"a jvbeni ScummVM verzikkal." #: engines/engine.cpp:483 msgid "Start anyway" @@ -1500,7 +1525,8 @@ msgid "" "The selected audio device '%s' was not found (e.g. might be turned off or " "disconnected)." msgstr "" -"A kivlasztott '%s' hangeszkz nem tallhat (Lekapcsoltad, vagy kihztad)." +"A kivlasztott '%s' hangeszkz nem tallhat (Lekapcsoltad, vagy " +"kihztad)." #: audio/mididrv.cpp:209 audio/mididrv.cpp:221 audio/mididrv.cpp:257 #: audio/mididrv.cpp:272 @@ -1522,7 +1548,8 @@ msgid "" "The preferred audio device '%s' was not found (e.g. might be turned off or " "disconnected)." msgstr "" -"Az elsdleges '%s' hangeszkz nem tallhat (Lekapcsoltad, vagy kihztad)." +"Az elsdleges '%s' hangeszkz nem tallhat (Lekapcsoltad, vagy " +"kihztad)." #: audio/mididrv.cpp:272 #, c-format @@ -1713,57 +1740,57 @@ msgstr "Kzps katt" msgid "Right Click" msgstr "Jobb katt" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "ScummVM elrejtse" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Tbbi elrejtse" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Mutasd mind" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Ablak" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Kis mret" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Norml (nincs tmretezs)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Norml (nincs tmretezs)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Mretarny korrekci engedlyezve" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Mretarny korrekci letiltva" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Aktv grafikus szrk:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Ablakos md" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (Nincs szrs)" @@ -2079,8 +2106,8 @@ msgstr "Kicsinyts mvelet (opcionlis)" msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" -"Ne felejts billentyt trstani az 'Eszkztr rejts' mvelethez, hogy lsd " -"a teljes listt" +"Ne felejts billentyt trstani az 'Eszkztr rejts' mvelethez, hogy " +"lsd a teljes listt" #: backends/events/default/default-events.cpp:196 msgid "Do you really want to return to the Launcher?" @@ -2179,7 +2206,8 @@ msgstr "Eredeti ment/tlt kpernyk hasznlata" #: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161 #: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201 msgid "Use the original save/load screens, instead of the ScummVM ones" -msgstr "Az eredeti ments/betlts kperny hasznlata a ScummVM kpek helyett" +msgstr "" +"Az eredeti ments/betlts kperny hasznlata a ScummVM kpek helyett" #: engines/agi/detection.cpp:157 msgid "Use an alternative palette" @@ -2190,8 +2218,8 @@ msgid "" "Use an alternative palette, common for all Amiga games. This was the old " "behavior" msgstr "" -"Alternatv paletta hasznlat, kzs minden Amiga jtknl. Ez egy rgi " -"megolds" +"Alternatv paletta hasznlat, kzs minden Amiga jtknl. Ez egy " +"rgi megolds" #: engines/agi/detection.cpp:167 msgid "Mouse support" @@ -2201,17 +2229,17 @@ msgstr "Egr tmogats" msgid "" "Enables mouse support. Allows to use mouse for movement and in game menus." msgstr "" -"Egrmd englyezve. Lehetv teszi az egrrel mozgatst jtkban s " -"jtkmenkben." +"Egrmd englyezve. Lehetv teszi az egrrel mozgatst jtkban " +"s jtkmenkben." #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Jtkmenet visszalltsa:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Visszallts" @@ -2272,12 +2300,13 @@ msgid "" "Press OK to convert them now, otherwise you will be asked again the next " "time you start the game.\n" msgstr "" -"ScummVM rgi jtkmentst tallt a Drascula-hoz, ezt t kell alaktani.\n" -"A rgi jtkments forma tbb nem tmogatott, ezrt a jtk mentse nem " -"tltdik be ha nem aktod t azt.\n" +"ScummVM rgi jtkmentst tallt a Drascula-hoz, ezt t kell alak" +"tani.\n" +"A rgi jtkments forma tbb nem tmogatott, ezrt a jtk " +"mentse nem tltdik be ha nem aktod t azt.\n" "\n" -"Nyomj OK-t ha talaktod most, vagy rkrdezek jra ha legkzelebb elindtod " -"a jtkot.\n" +"Nyomj OK-t ha talaktod most, vagy rkrdezek jra ha legkzelebb " +"elindtod a jtkot.\n" #: engines/dreamweb/detection.cpp:57 msgid "Use bright palette mode" @@ -2451,7 +2480,8 @@ msgid "" "Do you wish to use this save game file with ScummVM?\n" "\n" msgstr "" -"A kvetkez eredeti jtkments fjlt talltam a jtkknyvtrban:\n" +"A kvetkez eredeti jtkments fjlt talltam a " +"jtkknyvtrban:\n" "\n" "%s %s\n" "\n" @@ -2478,7 +2508,8 @@ msgid "" "\n" msgstr "" "%d eredeti jtkments fjlt sikeresen importlta a\n" -"ScummVM. Ha ksbb manulisan akarod importlni az eredeti jtkmentseket\n" +"ScummVM. Ha ksbb manulisan akarod importlni az eredeti " +"jtkmentseket\n" "meg kell nyitnod a ScummVM debug konzolt s hasznld az 'import_savefile' " "utastst.\n" "\n" @@ -2516,7 +2547,8 @@ msgstr "Hall of Records storyboard tvezetk tugrsa" #: engines/neverhood/detection.cpp:168 msgid "Allows the player to skip past the Hall of Records storyboard scenes" msgstr "" -"Lehetsg, hogy a jtkos tugorja a Hall of Records storyboard tvezetket" +"Lehetsg, hogy a jtkos tugorja a Hall of Records storyboard " +"tvezetket" #: engines/neverhood/detection.cpp:174 msgid "Scale the making of videos to full screen" @@ -2524,7 +2556,9 @@ msgstr "Hogyan kszlt videk tmretezse teljeskpernyre" #: engines/neverhood/detection.cpp:175 msgid "Scale the making of videos, so that they use the whole screen" -msgstr "Hogyan kszlt videk tmretezse, hogy teljeskpernyt hasznljanak" +msgstr "" +"Hogyan kszlt videk tmretezse, hogy teljeskpernyt " +"hasznljanak" #: engines/parallaction/saveload.cpp:133 #, c-format @@ -2552,12 +2586,13 @@ msgid "" "\n" "Press OK to convert them now, otherwise you will be asked next time.\n" msgstr "" -"ScummVM rgi jtkmentst tallt a Nippon Safes hez ezt t kell nevezni.\n" -"A rgi jtkments nem tmogatott, ezrt a jtk nem tltdik be tnevezs " -"nlkl..\n" +"ScummVM rgi jtkmentst tallt a Nippon Safes hez ezt t kell " +"nevezni.\n" +"A rgi jtkments nem tmogatott, ezrt a jtk nem tltdik be " +"tnevezs nlkl..\n" "\n" -"Nyomj OK-t az talaktshoz, vagy rkrdezzek ha legkzelebb elindtod a " -"jtkot.\n" +"Nyomj OK-t az talaktshoz, vagy rkrdezzek ha legkzelebb elindtod " +"a jtkot.\n" #: engines/parallaction/saveload.cpp:319 msgid "ScummVM successfully converted all your savefiles." @@ -2570,8 +2605,8 @@ msgid "" "\n" "Please report to the team." msgstr "" -"ScummVM kirt nhny figyelmeztetst a konzolablakba s nem biztos hogy az " -"sszes fjlod t lett alaktva.\n" +"ScummVM kirt nhny figyelmeztetst a konzolablakba s nem biztos hogy " +"az sszes fjlod t lett alaktva.\n" "\n" "Lgyszves jelentsd a csapatnak." @@ -2626,7 +2661,8 @@ msgstr "EGA sznmodulci tugrsa (Sznes httereknl)" #: engines/sci/detection.cpp:375 msgid "Skip dithering pass in EGA games, graphics are shown with full colors" msgstr "" -"Sznmodulci tugrsa EGA jtkoknl, grafikk teljes sznben lthatk" +"Sznmodulci tugrsa EGA jtkoknl, grafikk teljes sznben " +"lthatk" #: engines/sci/detection.cpp:384 msgid "Prefer digital sound effects" @@ -2645,8 +2681,8 @@ msgid "" "Use an IBM Music Feature card or a Yamaha FB-01 FM synth module for MIDI " "output" msgstr "" -"IBM Music Feature krtya vagy Yamaha FB-01 FM szintetiztor modul hasznlata " -"MIDI kimenetre" +"IBM Music Feature krtya vagy Yamaha FB-01 FM szintetiztor modul " +"hasznlata MIDI kimenetre" #: engines/sci/detection.cpp:415 msgid "Use CD audio" @@ -2663,7 +2699,8 @@ msgstr "Windows kurzorok hasznlata" #: engines/sci/detection.cpp:427 msgid "" "Use the Windows cursors (smaller and monochrome) instead of the DOS ones" -msgstr "Windows kurzorok hasznlata (kisebb s monokrm) a DOS-osok helyett " +msgstr "" +"Windows kurzorok hasznlata (kisebb s monokrm) a DOS-osok helyett " #: engines/sci/detection.cpp:437 msgid "Use silver cursors" @@ -2757,36 +2794,36 @@ msgstr "~E~lz" msgid "~N~ext" msgstr "Kvetkez" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Csak beszd" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Beszd s felirat" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Csak felirat" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Beszd & Felir" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Vlassz hozzrts szintet." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Segtsgrt nzd meg a Loom(TM) kziknyvedet." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Gyakorls" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Szakrt" @@ -3354,9 +3391,10 @@ msgid "" "files for Maniac Mansion have to be in the 'Maniac' directory inside the " "Tentacle game directory, and the game has to be added to ScummVM." msgstr "" -"ltalban a Maniac Mansion indulna most. De a mkdshez a Maniac Mansion " -"fjljainak, a 'Maniac' mappban kell lenni a Tentacle jtkmappjn bell, " -"s a jtkot gy adja hozz a ScummVM a listhoz." +"ltalban a Maniac Mansion indulna most. De a mkdshez a Maniac " +"Mansion fjljainak, a 'Maniac' mappban kell lenni a Tentacle " +"jtkmappjn bell, s a jtkot gy adja hozz a ScummVM a " +"listhoz." #: engines/scumm/players/player_v3m.cpp:129 msgid "" @@ -3405,14 +3443,15 @@ msgstr "'%s' PSX stream tvezet nem jtszhat le paletta mdban" #: engines/sword1/animation.cpp:545 engines/sword2/animation.cpp:445 msgid "DXA cutscenes found but ScummVM has been built without zlib" -msgstr "DXA tvezet elrhet, de a ScummVM zlib tmogats nincs lefordtva" +msgstr "" +"DXA tvezet elrhet, de a ScummVM zlib tmogats nincs lefordtva" #: engines/sword1/animation.cpp:561 engines/sword2/animation.cpp:461 msgid "" "MPEG-2 cutscenes found but ScummVM has been built without MPEG-2 support" msgstr "" -"MPEG-2 tvezetfilmet talltam, de a ScummVM MPEG-2 tmogats nlkl van " -"lefordtva" +"MPEG-2 tvezetfilmet talltam, de a ScummVM MPEG-2 tmogats nlkl " +"van lefordtva" #: engines/sword1/animation.cpp:568 engines/sword2/animation.cpp:470 #, c-format @@ -3431,11 +3470,11 @@ msgid "" msgstr "" "ScummVM rgi jtkmentst tallt a Broken Sword 1 hez, ezt t kell " "alaktani.\n" -"A rgi jtkments nem tmogatott, ezrt a jtk nem tltdik be talakts " -"nlkl.\n" +"A rgi jtkments nem tmogatott, ezrt a jtk nem tltdik be " +"talakts nlkl.\n" "\n" -"Nyomj OK-t az talaktshoz, vagy rkrdezzek ha legkzelebb elindtod a " -"jtkot.\n" +"Nyomj OK-t az talaktshoz, vagy rkrdezzek ha legkzelebb elindtod " +"a jtkot.\n" #: engines/sword1/control.cpp:1232 #, c-format @@ -3462,8 +3501,8 @@ msgstr "Ez a Broken Sword 1 Demo vge" msgid "" "PSX cutscenes found but ScummVM has been built without RGB color support" msgstr "" -"PSX tvezetfilmet talltam, de ez a ScummVM RGB szntmogats nlkl van " -"lefordtva" +"PSX tvezetfilmet talltam, de ez a ScummVM RGB szntmogats nlkl " +"van lefordtva" #: engines/sword2/sword2.cpp:79 msgid "Show object labels" @@ -3493,11 +3532,13 @@ msgstr "FPS szmll ltszik" #: engines/wintermute/detection.cpp:59 msgid "Show the current number of frames per second in the upper left corner" msgstr "" -"A jelenlegi msodpercenknti kpkocka szm kijelzse a bal fels sarokban" +"A jelenlegi msodpercenknti kpkocka szm kijelzse a bal fels " +"sarokban" #: engines/zvision/detection_tables.h:52 msgid "Use the original save/load screens instead of the ScummVM interface" -msgstr "Hasznld az eredeti ments/tlts kpet a ScummVM fellet helyett" +msgstr "" +"Hasznld az eredeti ments/tlts kpet a ScummVM fellet helyett" #: engines/zvision/detection_tables.h:61 msgid "Double FPS" @@ -3529,7 +3570,8 @@ msgstr "Nagyfelbonts MPEG vide hasznlat" #: engines/zvision/detection_tables.h:92 msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" -msgstr "MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett" +msgstr "" +"MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett" #~ msgid "EGA undithering" #~ msgstr "EGA szinjavts" @@ -3539,7 +3581,8 @@ msgstr "MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett" #~ msgid "MPEG-2 cutscenes found but ScummVM has been built without MPEG-2" #~ msgstr "" -#~ "MPEG-2 tvezetfilmet talltam, de a ScummVM MPEG-2 nlkl van lefordtva" +#~ "MPEG-2 tvezetfilmet talltam, de a ScummVM MPEG-2 nlkl van " +#~ "lefordtva" #~ msgctxt "lowres" #~ msgid "Mass Add..." @@ -3547,7 +3590,8 @@ msgstr "MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett" #~ msgid "" #~ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" -#~ msgstr "General MIDI lekpezs Roland MT-32 zens jtkokhoz kikapcsolva" +#~ msgstr "" +#~ "General MIDI lekpezs Roland MT-32 zens jtkokhoz kikapcsolva" #~ msgid "Standard (16bpp)" #~ msgstr "Standard (16bpp)" @@ -3606,7 +3650,8 @@ msgstr "MPEG videt hasznl DVD verzinl, a kisebb felbonts AVI helyett" #~ msgid "" #~ "Your game version has been detected using filename matching as a variant " #~ "of %s." -#~ msgstr "A felismert jtkverzid a hasznlt fjlnvvel a %s egy vltozata." +#~ msgstr "" +#~ "A felismert jtkverzid a hasznlt fjlnvvel a %s egy vltozata." #~ msgid "If this is an original and unmodified version, please report any" #~ msgstr "Ha ez egy eredeti nem vltoztatott verzi, krlek jelezd minden" diff --git a/po/it_IT.po b/po/it_IT.po index 21c4341570..27ac587e2c 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -1,5 +1,5 @@ # Italian translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Matteo 'Maff' Angelino <matteo.maff at gmail dot com>, 2010. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-07-03 17:59-0600\n" "Last-Translator: Matteo 'Maff' Angelino <matteo.maff at gmail dot com>\n" "Language-Team: Italian\n" @@ -51,13 +51,13 @@ msgid "Go up" msgstr "Su" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -66,7 +66,7 @@ msgid "Cancel" msgstr "Annulla" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Scegli" @@ -86,6 +86,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Sei sicuro di voler eliminare questo salvataggio?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "S" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "No" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -382,7 +415,7 @@ msgstr "Questo ID di gioco gi in uso. Si prega di sceglierne un'altro." msgid "~Q~uit" msgstr "C~h~iudi" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Esci da ScummVM" @@ -390,7 +423,7 @@ msgstr "Esci da ScummVM" msgid "A~b~out..." msgstr "~I~nfo..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Informazioni su ScummVM" @@ -488,26 +521,6 @@ msgstr "" "Vuoi davvero eseguire il rilevatore di giochi in massa? Potrebbe aggiungere " "un numero enorme di giochi." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "S" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "No" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM non ha potuto aprire la cartella specificata!" @@ -664,7 +677,7 @@ msgid "Special dithering modes supported by some games" msgstr "Modalit di resa grafica speciali supportate da alcuni giochi" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Modalit a schermo intero" @@ -1129,7 +1142,7 @@ msgstr "Grafica disattivata" msgid "Standard Renderer" msgstr "Renderer standard" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Medio" @@ -1378,7 +1391,7 @@ msgstr "~V~ai a elenco giochi" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1391,7 +1404,7 @@ msgstr "Salva gioco:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1732,57 +1745,57 @@ msgstr "Clic centrale" msgid "Right Click" msgstr "Clic destro" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Nascondi ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Nascondi altre" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Mostra tutte" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Finestra" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Contrai" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normale (nessun ridimensionamento)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normale (no ridim.)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Correzione proporzioni attivata" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Correzione proporzioni disattivata" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Filtro grafico attivo:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Modalit finestra" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (senza filtri)" @@ -2226,13 +2239,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Ripristina gioco:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Ripristina" @@ -2771,36 +2784,36 @@ msgstr "~P~recedenti" msgid "~N~ext" msgstr "~S~uccessivi" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Solo voci" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Voci e testo" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Solo testo" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voci e testo" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Selezionate un livello di difficolt." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Consultate il manuale delle istruzioni." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Base" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Expert" diff --git a/po/nb_NO.po b/po/nb_NO.po index 086cb488a7..06d1ef8083 100644 --- a/po/nb_NO.po +++ b/po/nb_NO.po @@ -1,5 +1,5 @@ # Norwegian (Bokmaal) translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Einar Johan T. Smen <einarjohants@gmail.com>, 2010. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-07-11 00:02+0100\n" "Last-Translator: Einar Johan Tran Smen <einarjohants@gmail.com>\n" "Language-Team: somaen <einarjohants@gmail.com>\n" @@ -54,13 +54,13 @@ msgid "Go up" msgstr "Oppover" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -69,7 +69,7 @@ msgid "Cancel" msgstr "Avbryt" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Velg" @@ -89,6 +89,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Vil du virkelig slette dette lagrede spillet?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Ja" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Nei" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -386,7 +419,7 @@ msgstr "Denne spill-IDen er allerede i bruk. Vennligst velg en annen." msgid "~Q~uit" msgstr "~A~vslutt" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Avslutt ScummVM" @@ -394,7 +427,7 @@ msgstr "Avslutt ScummVM" msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Om ScummVM" @@ -492,26 +525,6 @@ msgstr "" "Vil du virkelig kjre flerspill-finneren? Dette kan potensielt legge til et " "stort antall spill." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Ja" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Nei" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikke pne den valgte mappen!" @@ -667,7 +680,7 @@ msgid "Special dithering modes supported by some games" msgstr "Spesiel dithering-modus stttet av enkelte spill" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Fullskjermsmodus" @@ -1126,7 +1139,7 @@ msgstr "Deaktivert GFX" msgid "Standard Renderer" msgstr "Standard tegner" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Standard" @@ -1373,7 +1386,7 @@ msgstr "~T~ilbake til oppstarter" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1386,7 +1399,7 @@ msgstr "Lagret spill:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1725,57 +1738,57 @@ msgstr "Midtklikk" msgid "Right Click" msgstr "Hyreklikk" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Skjul ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Skjul andre" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Vis alle" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Vindu" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimer" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (ingen skalering)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (ingen skalering)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Aspekt-rate korrigering aktivert" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Aspekt-rate korrigering deaktivert" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Aktivt grafikkfilter:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Vindusmodus" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (Ingen filtrering)" @@ -2218,13 +2231,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Gjennopprett spill:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Gjenopprett" @@ -2762,36 +2775,36 @@ msgstr "~F~orrige" msgid "~N~ext" msgstr "~N~este" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Kun tale" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Tale og undertekster" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Kun undertekster" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tekst & Tale" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Velg ferdighetsniv" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Referer til Loom(TM)-hndboka di for hjelp." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Trening" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Ekspert" diff --git a/po/nl_NL.po b/po/nl_NL.po index 0f4548951d..c6a133ce4d 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -1,5 +1,5 @@ -# LANGUAGE translation for ScummVM. -# Copyright (C) 2014-2015 The ScummVM Team +# Dutch translation for ScummVM. +# Copyright (C) 2014-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # FIRST AUTHOR scummvm@bencastricum.nl, 2014. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-11-25 20:46+0100\n" "Last-Translator: Ben Castricum <scummvm@bencastricum.nl>\n" "Language-Team: Ben Castricum <scummvm@bencastricum.nl>\n" @@ -54,13 +54,13 @@ msgid "Go up" msgstr "Ga omhoog" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -69,7 +69,7 @@ msgid "Cancel" msgstr "Annuleren" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Selecteer" @@ -89,6 +89,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Wilt u dit opgeslagen spel echt verwijderen?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Ja" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Nee" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -386,7 +419,7 @@ msgstr "Dit spel-ID is al in gebruik. Kies a.u.b. een andere." msgid "~Q~uit" msgstr "~S~toppen" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Hiermee verlaat u ScummVM." @@ -394,7 +427,7 @@ msgstr "Hiermee verlaat u ScummVM." msgid "A~b~out..." msgstr "O~v~er..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Geeft informatie over ScummVM." @@ -494,26 +527,6 @@ msgstr "" "Wilt u echt de mass game detector draaien? Dit voegt potentieel een groot " "aantal spellen toe." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Ja" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Nee" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kon de opgegeven map niet openen!" @@ -672,7 +685,7 @@ msgid "Special dithering modes supported by some games" msgstr "Speciale ditheringmodi die door sommige games ondersteund worden." #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Volledig-scherm modus" @@ -1138,7 +1151,7 @@ msgstr "GFX uitgeschakeld" msgid "Standard Renderer" msgstr "Standaard Renderer" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Standaard" @@ -1387,7 +1400,7 @@ msgstr "S~t~artmenu" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1400,7 +1413,7 @@ msgstr "Spel opslaan:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1742,57 +1755,57 @@ msgstr "Middelste Klik" msgid "Right Click" msgstr "Rechter klik" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Verberg ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Verberg Anderen" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Toon Alles" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Venster" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimaliseer" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normaal (niet schalen)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normaal (niet schalen)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Pixelverhoudingcorrectie ingeschakeld" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Pixelverhoudingcorrectie uitgeschakeld" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Actieve grafische filter:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Venstermodus" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (geen filters)" @@ -2238,13 +2251,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Laad opgeslagen spel:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Laad" @@ -2797,36 +2810,36 @@ msgstr "~V~orige" msgid "~N~ext" msgstr "~V~olgende" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Alleen Spraak" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Spraak and Subtitels" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Alleen subtitels" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tekst en Spraak" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Selecteer een vakkundigheidsniveau." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Raadpleeg uw Loom(TM) handleiding voor hulp." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Oefenen" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Expert" diff --git a/po/nn_NO.po b/po/nn_NO.po index a6af5e4b60..73cb0b33e2 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -1,5 +1,5 @@ # Norwegian (Nynorsk) translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Einar Johan T. Smen <einarjohants@gmail.com>, 2010. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-07-11 00:04+0100\n" "Last-Translator: Einar Johan Tran Smen <einarjohants@gmail.com>\n" "Language-Team: somaen <einarjohants@gmail.com>\n" @@ -54,13 +54,13 @@ msgid "Go up" msgstr "Oppover" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -69,7 +69,7 @@ msgid "Cancel" msgstr "Avbryt" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Vel" @@ -89,6 +89,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Vil du verkeleg slette det lagra spelet?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Ja" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Nei" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -387,7 +420,7 @@ msgstr "" msgid "~Q~uit" msgstr "~A~vslutt" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Avslutt ScummVM" @@ -395,7 +428,7 @@ msgstr "Avslutt ScummVM" msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Om ScummVM" @@ -491,26 +524,6 @@ msgid "" "a huge number of games." msgstr "" -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Ja" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Nei" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikkje pne den velde mappa!" @@ -665,7 +678,7 @@ msgid "Special dithering modes supported by some games" msgstr "Spesielle dithering-modus som stttast av nokre spel" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Fullskjermsmodus" @@ -1125,7 +1138,7 @@ msgstr "Deaktivert GFX" msgid "Standard Renderer" msgstr "Standardteiknar" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Standard" @@ -1372,7 +1385,7 @@ msgstr "Tilbake til Oppsta~r~tar" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1385,7 +1398,7 @@ msgstr "Lagra spel:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1704,59 +1717,59 @@ msgstr "Midtklikk" msgid "Right Click" msgstr "Hgreklikk" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Skjul ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Skjul Andre" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Syn alle" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Vindu" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimer" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (ikkje skaler)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (ikkje skaler)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 #, fuzzy msgid "Enabled aspect ratio correction" msgstr "Aspekt-korrigering" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 #, fuzzy msgid "Disabled aspect ratio correction" msgstr "Aspekt-korrigering" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Aktivt grafikkfilter:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Vindusmodus" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (Ingen filtrering)" @@ -2212,13 +2225,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Gjenopprett spel:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Gjenopprett" @@ -2742,37 +2755,37 @@ msgstr "~F~orrige" msgid "~N~ext" msgstr "~N~este" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Berre Tale" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Tale og undertekstar" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Berre undertekstar" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tekst & Tale" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 #, fuzzy msgid "Select a Proficiency Level." msgstr "G til forrige mappeniv" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Sj i Loom(TM)-manualen for hjelp." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Ekspert" diff --git a/po/pl_PL.po b/po/pl_PL.po index 477ecb6e69..2bfa4077b9 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -1,5 +1,5 @@ # Polish translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Grajpopolsku.pl <grajpopolsku@gmail.com>, 2011-2013. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-07-02 12:28+0100\n" "Last-Translator: Micha Zibkowski <mziab@o2.pl>\n" "Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n" @@ -55,13 +55,13 @@ msgid "Go up" msgstr "W gr" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -70,7 +70,7 @@ msgid "Cancel" msgstr "Anuluj" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Wybierz" @@ -90,6 +90,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Na pewno chcesz skasowa ten zapis?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Tak" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Nie" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -385,7 +418,7 @@ msgstr "Identyfikator jest ju zajty. Wybierz inny." msgid "~Q~uit" msgstr "~Z~akocz" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Zakocz ScummVM" @@ -393,7 +426,7 @@ msgstr "Zakocz ScummVM" msgid "A~b~out..." msgstr "I~n~formacje..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Ksika ScummVM" @@ -490,26 +523,6 @@ msgid "" msgstr "" "Chcesz uruchomi masowy detektor gier? Moe doda wiele tytuw do listy" -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Tak" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Nie" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nie moe otworzy katalogu!" @@ -662,7 +675,7 @@ msgid "Special dithering modes supported by some games" msgstr "Specjalne tryby ditheringu wspierane przez niektre gry" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Peny ekran" @@ -1126,7 +1139,7 @@ msgstr "Wyczona grafika" msgid "Standard Renderer" msgstr "Standardowy renderer" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Standardowy" @@ -1372,7 +1385,7 @@ msgstr "~P~owrt do launchera" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1385,7 +1398,7 @@ msgstr "Zapis:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1720,57 +1733,57 @@ msgstr "rodkowy przycisk" msgid "Right Click" msgstr "Kliknicie PPM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Ukryj ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Ukryj pozostae" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Poka wszystkie" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Okno" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Miniaturka" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Zwyky (bez skalowania)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Zwyky (bez skalowania)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Wczono korekcj formatu obrazu" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Wyczono korekcj formatu obrazu" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Aktywny filtr graficzny:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Okno" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (bez filtrowania)" @@ -2210,13 +2223,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Wznw gr:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Wznw" @@ -2751,36 +2764,36 @@ msgstr "~P~oprzednia" msgid "~N~ext" msgstr "~N~astpna" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Tylko mowa" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Mowa i napisy" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Tylko napisy" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Mowa i napisy" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Wybierz poziom umiejtnoci." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Pomocy szukaj w instrukcji doczonej do Loom(TM)." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "Trening" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Ekspert" diff --git a/po/pt_BR.po b/po/pt_BR.po index a406d5e096..5ab75cf0a9 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,5 +1,5 @@ # Portuguese (Brazilian) translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Saulo Benigno <saulobenigno@gmail.com>, 2010. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2011-10-21 21:30-0300\n" "Last-Translator: Saulo Benigno <saulobenigno@gmail.com>\n" "Language-Team: ScummBR (www.scummbr.com) <scummbr@yahoo.com.br>\n" @@ -56,13 +56,13 @@ msgid "Go up" msgstr "Acima" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -71,7 +71,7 @@ msgid "Cancel" msgstr "Cancelar" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Escolher" @@ -91,6 +91,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Voc realmente quer excluir este jogo salvo?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Sim" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "No" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -388,7 +421,7 @@ msgstr "Este cdigo j esta sendo utilizado. Por favor, escolha outro." msgid "~Q~uit" msgstr "~S~air" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Sair do ScummVM" @@ -396,7 +429,7 @@ msgstr "Sair do ScummVM" msgid "A~b~out..." msgstr "So~b~re..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Sobre o ScumnmVM" @@ -495,26 +528,6 @@ msgstr "" "Voc realmente deseja adicionar vrios jogos ao mesmo tempo? Isso poder " "resultar em uma adio gigantesca de jogos." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Sim" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "No" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM no conseguiu abrir a pasta especificada!" @@ -674,7 +687,7 @@ msgid "Special dithering modes supported by some games" msgstr "Modos especiais de dithering suportados por alguns jogos" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Modo Tela Cheia" @@ -1142,7 +1155,7 @@ msgstr "GFX desabilitado" msgid "Standard Renderer" msgstr "Renderizador padro (16bpp)" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 #, fuzzy msgid "Standard" msgstr "Padro (16bpp)" @@ -1397,7 +1410,7 @@ msgstr "~V~oltar ao menu" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1410,7 +1423,7 @@ msgstr "Salvar jogo:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1753,58 +1766,58 @@ msgstr "Item do meio na esquerda" msgid "Right Click" msgstr "Clique com o boto direito" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Ocultar ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Ocultar Outros" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Mostrar Tudo" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Janela" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimizar" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normal (sem escala)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (sem escala)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Correo de proporo habilitada" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Correo de proporo desabilitada" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Ativa os filtros grficos" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Modo janela" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 #, fuzzy msgid "OpenGL" msgstr "Abrir" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "" @@ -2246,13 +2259,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "Restaurar jogo:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "Restaurar" @@ -2806,36 +2819,36 @@ msgstr "~A~nterior" msgid "~N~ext" msgstr "~P~rximo" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Somente Voz" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Voz e Legendas" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Somente Legendas" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Voz e Legendas" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "" -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "" diff --git a/po/ru_RU.po b/po/ru_RU.po index 5fbb8dcb24..fae8ff711f 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -1,13 +1,13 @@ # Russian translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. -# Eugene Sandulenko <sev@scummvm.org>, 2010-2015 +# Eugene Sandulenko <sev@scummvm.org>, 2010-2016 # msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2015-11-06 09:23+0300\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Russian\n" @@ -15,7 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-5\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Poedit 1.5.5\n" #: gui/about.cpp:94 @@ -53,13 +54,13 @@ msgid "Go up" msgstr "" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -68,7 +69,7 @@ msgid "Cancel" msgstr "" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "" @@ -88,6 +89,39 @@ msgstr ":" msgid "Ok" msgstr "Ok" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr " ?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -384,7 +418,7 @@ msgstr " ID . , ." msgid "~Q~uit" msgstr "~~" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr " ScummVM" @@ -392,7 +426,7 @@ msgstr " ScummVM" msgid "A~b~out..." msgstr " ~~..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr " ScummVM" @@ -490,26 +524,6 @@ msgstr "" " ? " " ." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM !" @@ -660,7 +674,7 @@ msgid "Special dithering modes supported by some games" msgstr " , " #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr " " @@ -1124,7 +1138,7 @@ msgstr " " msgid "Standard Renderer" msgstr " " -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "" @@ -1372,7 +1386,7 @@ msgstr "~~ " #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1385,7 +1399,7 @@ msgstr " :" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1727,57 +1741,57 @@ msgstr " " msgid "Right Click" msgstr " " -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr " ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr " " -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr " " -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr " Dock" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr " " -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr " " -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr " " -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr " " -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr " :" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr " " -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL ( )" @@ -2206,7 +2220,8 @@ msgid "" "Use an alternative palette, common for all Amiga games. This was the old " "behavior" msgstr "" -" Amiga. " +" Amiga. " +"" #: engines/agi/detection.cpp:167 msgid "Mouse support" @@ -2216,16 +2231,17 @@ msgstr " " msgid "" "Enables mouse support. Allows to use mouse for movement and in game menus." msgstr "" -" . ." +" . " +" ." #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr " :" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "" @@ -2467,7 +2483,8 @@ msgid "" "Do you wish to use this save game file with ScummVM?\n" "\n" msgstr "" -" :\n" +" " +" :\n" "\n" "%s %s\n" "\n" @@ -2639,7 +2656,9 @@ msgstr " EGA ( )" #: engines/sci/detection.cpp:375 msgid "Skip dithering pass in EGA games, graphics are shown with full colors" -msgstr " EGA, " +msgstr "" +" EGA, " +"" #: engines/sci/detection.cpp:384 msgid "Prefer digital sound effects" @@ -2776,36 +2795,36 @@ msgstr "~~" msgid "~N~ext" msgstr "~~" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr " " -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr " " -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr " " -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr " " -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr " ." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr " Loom(TM)" -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "" @@ -3550,7 +3569,8 @@ msgstr " MPEG " #: engines/zvision/detection_tables.h:92 msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" msgstr "" -" MPEG DVD , AVI" +" MPEG DVD , " +" AVI" #~ msgid "EGA undithering" #~ msgstr "EGA " diff --git a/po/scummvm.pot b/po/scummvm.pot index 1d6b4028bc..0445534008 100644 --- a/po/scummvm.pot +++ b/po/scummvm.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -52,13 +52,13 @@ msgid "Go up" msgstr "" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -67,7 +67,7 @@ msgid "Cancel" msgstr "" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "" @@ -87,6 +87,38 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +msgid "Do you really want to overwrite the file?" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -380,7 +412,7 @@ msgstr "" msgid "~Q~uit" msgstr "" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "" @@ -388,7 +420,7 @@ msgstr "" msgid "A~b~out..." msgstr "" -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "" @@ -484,26 +516,6 @@ msgid "" "a huge number of games." msgstr "" -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "" @@ -654,7 +666,7 @@ msgid "Special dithering modes supported by some games" msgstr "" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "" @@ -1103,7 +1115,7 @@ msgstr "" msgid "Standard Renderer" msgstr "" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "" @@ -1348,7 +1360,7 @@ msgstr "" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1361,7 +1373,7 @@ msgstr "" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1672,57 +1684,57 @@ msgstr "" msgid "Right Click" msgstr "" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "" @@ -2158,13 +2170,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "" @@ -2661,36 +2673,36 @@ msgstr "" msgid "~N~ext" msgstr "" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "" -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "" -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "" diff --git a/po/se_SE.po b/po/se_SE.po index 814a5b1e86..d757d28240 100644 --- a/po/se_SE.po +++ b/po/se_SE.po @@ -1,5 +1,5 @@ # Swedish translation for ScummVM. -# Copyright (C) 2011-2015 The ScummVM Team +# Copyright (C) 2011-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Hampus Flink <hampus.flink@gmail.com>, 2011. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.5.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2014-07-02 16:30+0100\n" "Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n" "Language-Team: \n" @@ -54,13 +54,13 @@ msgid "Go up" msgstr "Uppt" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -69,7 +69,7 @@ msgid "Cancel" msgstr "Avbryt" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "Vlj" @@ -89,6 +89,39 @@ msgstr "" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr "Vill du verkligen radera den hr spardatan?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "Ja" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "Nej" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -386,7 +419,7 @@ msgstr "Detta ID-namn r upptaget. Var god vlj ett annat." msgid "~Q~uit" msgstr "~A~vsluta" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr "Avsluta ScummVM" @@ -394,7 +427,7 @@ msgstr "Avsluta ScummVM" msgid "A~b~out..." msgstr "O~m~..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr "Om ScummVM" @@ -492,26 +525,6 @@ msgstr "" "Vill du verkligen anvnda mass-speldetektorn? Processen kan potentiellt " "lgga till ett enormt antal spel." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "Ja" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "Nej" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunde inte ppna den valda katalogen!" @@ -665,7 +678,7 @@ msgid "Special dithering modes supported by some games" msgstr "Speciella gitterlgen stdda av vissa spel" #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr "Fullskrmslge" @@ -1129,7 +1142,7 @@ msgstr "Inaktiverad GFX" msgid "Standard Renderer" msgstr "Standard rendering" -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "Standard" @@ -1378,7 +1391,7 @@ msgstr "te~r~vnd till launcher" #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1391,7 +1404,7 @@ msgstr "Spara spelet:" #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1730,57 +1743,57 @@ msgstr "Mittenklick" msgid "Right Click" msgstr "Hgerklick" -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr "Gm ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr "Gm vriga" -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr "Visa alla" -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "Fnster" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "Minimera" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr "Normalt (ingen skalning)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normalt (ingen skalning)" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr "Korrektion av bildfrhllande p" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr "Korrektion av bildfrhllande av" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr "Aktivt grafikfilter:" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr "Fnsterlge" -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL (ingen filtrering)" @@ -2223,13 +2236,13 @@ msgid "" msgstr "" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr "terstll spel:" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "terstll" @@ -2767,36 +2780,36 @@ msgstr "~F~regende" msgid "~N~ext" msgstr "~N~sta" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr "Endast tal" -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr "Tal och undertexter" -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr "Endast undertexter" -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr "Tal & text" -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr "Vlj en skicklighetsniv." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr "Hnvisa till din Loom(TM)-manual fr hjlp." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "vning" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "Expert" diff --git a/po/uk_UA.po b/po/uk_UA.po index c4264f84c2..cc4c29228a 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -1,14 +1,14 @@ # Ukrainian translation for ScummVM. -# Copyright (C) 2010-2015 The ScummVM Team +# Copyright (C) 2010-2016 The ScummVM Team # This file is distributed under the same license as the ScummVM package. # Lubomyr Lisen, 2010. -# Eugene Sandulenko <sev@scummvm.org>, 2010-2015 +# Eugene Sandulenko <sev@scummvm.org>, 2010-2016 # msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"POT-Creation-Date: 2015-12-23 00:28+0000\n" "PO-Revision-Date: 2015-11-06 10:07+0300\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Ukrainian\n" @@ -16,7 +16,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-5\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: gui/about.cpp:94 #, c-format @@ -53,13 +54,13 @@ msgid "Go up" msgstr "" #: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67 -#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95 -#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70 -#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216 -#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547 -#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55 -#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483 -#: backends/platform/wii/options.cpp:48 +#: gui/filebrowser-dialog.cpp:64 gui/KeysDialog.cpp:43 gui/launcher.cpp:351 +#: gui/massadd.cpp:95 gui/options.cpp:1237 gui/predictivedialog.cpp:74 +#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156 +#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276 +#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931 +#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 +#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48 #: backends/events/default/default-events.cpp:196 #: backends/events/default/default-events.cpp:218 #: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274 @@ -68,7 +69,7 @@ msgid "Cancel" msgstr "" #: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47 -#: gui/themebrowser.cpp:56 +#: gui/filebrowser-dialog.cpp:65 gui/themebrowser.cpp:56 msgid "Choose" msgstr "" @@ -88,6 +89,39 @@ msgstr ":" msgid "Ok" msgstr "" +#: gui/filebrowser-dialog.cpp:49 +msgid "Choose file for loading" +msgstr "" + +#: gui/filebrowser-dialog.cpp:49 +msgid "Enter filename for saving" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 +#, fuzzy +msgid "Do you really want to overwrite the file?" +msgstr " ?" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "Yes" +msgstr "" + +#: gui/filebrowser-dialog.cpp:132 gui/launcher.cpp:793 gui/launcher.cpp:941 +#: gui/launcher.cpp:1000 gui/fluidsynth-dialog.cpp:217 +#: backends/events/symbiansdl/symbiansdl-events.cpp:186 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 +msgid "No" +msgstr "" + #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 #: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192 @@ -385,7 +419,7 @@ msgstr " ID . , ." msgid "~Q~uit" msgstr "~~" -#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:95 +#: gui/launcher.cpp:626 backends/platform/sdl/macosx/appmenu_osx.mm:106 msgid "Quit ScummVM" msgstr " ScummVM" @@ -393,7 +427,7 @@ msgstr " ScummVM" msgid "A~b~out..." msgstr " ~~..." -#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:69 +#: gui/launcher.cpp:627 backends/platform/sdl/macosx/appmenu_osx.mm:80 msgid "About ScummVM" msgstr " ScummVM" @@ -491,26 +525,6 @@ msgstr "" " ? " " ." -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "Yes" -msgstr "" - -#: gui/launcher.cpp:793 gui/launcher.cpp:941 gui/launcher.cpp:1000 -#: gui/fluidsynth-dialog.cpp:217 -#: backends/events/symbiansdl/symbiansdl-events.cpp:186 -#: backends/platform/wince/CEActionsPocket.cpp:326 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:83 -#: engines/kyra/saveload_eob.cpp:557 engines/kyra/saveload_eob.cpp:590 -msgid "No" -msgstr "" - #: gui/launcher.cpp:841 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM !" @@ -661,7 +675,7 @@ msgid "Special dithering modes supported by some games" msgstr " , " #: gui/options.cpp:758 -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2313 msgid "Fullscreen mode" msgstr " " @@ -1123,7 +1137,7 @@ msgstr " " msgid "Standard Renderer" msgstr " " -#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:661 +#: gui/ThemeEngine.cpp:348 engines/scumm/dialogs.cpp:663 msgid "Standard" msgstr "" @@ -1370,7 +1384,7 @@ msgstr "~~. " #: engines/dialogs.cpp:116 engines/agi/saveload.cpp:803 #: engines/cruise/menu.cpp:212 engines/drascula/saveload.cpp:336 -#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:873 +#: engines/dreamweb/saveload.cpp:261 engines/neverhood/menumodule.cpp:877 #: engines/pegasus/pegasus.cpp:377 engines/sci/engine/kfile.cpp:759 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save game:" @@ -1383,7 +1397,7 @@ msgstr " : " #: backends/platform/wince/CEActionsSmartphone.cpp:231 #: engines/agi/saveload.cpp:803 engines/cruise/menu.cpp:212 #: engines/drascula/saveload.cpp:336 engines/dreamweb/saveload.cpp:261 -#: engines/neverhood/menumodule.cpp:873 engines/pegasus/pegasus.cpp:377 +#: engines/neverhood/menumodule.cpp:877 engines/pegasus/pegasus.cpp:377 #: engines/sci/engine/kfile.cpp:759 engines/scumm/dialogs.cpp:188 #: engines/toltecs/menu.cpp:281 engines/tsage/scenes.cpp:598 msgid "Save" @@ -1722,57 +1736,57 @@ msgstr " " msgid "Right Click" msgstr " " -#: backends/platform/sdl/macosx/appmenu_osx.mm:77 +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 msgid "Hide ScummVM" msgstr " ScummVM" -#: backends/platform/sdl/macosx/appmenu_osx.mm:82 +#: backends/platform/sdl/macosx/appmenu_osx.mm:93 msgid "Hide Others" msgstr " " -#: backends/platform/sdl/macosx/appmenu_osx.mm:87 +#: backends/platform/sdl/macosx/appmenu_osx.mm:98 msgid "Show All" msgstr " " -#: backends/platform/sdl/macosx/appmenu_osx.mm:109 #: backends/platform/sdl/macosx/appmenu_osx.mm:120 +#: backends/platform/sdl/macosx/appmenu_osx.mm:131 msgid "Window" msgstr "" -#: backends/platform/sdl/macosx/appmenu_osx.mm:114 +#: backends/platform/sdl/macosx/appmenu_osx.mm:125 msgid "Minimize" msgstr "" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:46 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:47 msgid "Normal (no scaling)" msgstr " " -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:65 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:66 msgctxt "lowres" msgid "Normal (no scaling)" msgstr " " -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2197 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2212 msgid "Enabled aspect ratio correction" msgstr " " -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2203 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2218 msgid "Disabled aspect ratio correction" msgstr " " -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2258 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2273 msgid "Active graphics filter:" msgstr " :" -#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2300 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2315 msgid "Windowed mode" msgstr " " -#: backends/graphics/opengl/opengl-graphics.cpp:118 +#: backends/graphics/opengl/opengl-graphics.cpp:119 msgid "OpenGL" msgstr "OpenGL" -#: backends/graphics/opengl/opengl-graphics.cpp:119 +#: backends/graphics/opengl/opengl-graphics.cpp:120 msgid "OpenGL (No filtering)" msgstr "OpenGL ( )" @@ -2202,7 +2216,8 @@ msgid "" "Use an alternative palette, common for all Amiga games. This was the old " "behavior" msgstr "" -" , Amiga. ." +" , Amiga. " +" ." #: engines/agi/detection.cpp:167 msgid "Mouse support" @@ -2212,16 +2227,17 @@ msgstr " " msgid "" "Enables mouse support. Allows to use mouse for movement and in game menus." msgstr "" -" . ." +" . " +" ." #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore game:" msgstr " :" #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 -#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 +#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:890 #: engines/sci/engine/kfile.cpp:858 engines/toltecs/menu.cpp:256 msgid "Restore" msgstr "" @@ -2488,7 +2504,8 @@ msgid "" "\n" msgstr "" "%d \n" -"ScummVM. , \n" +"ScummVM. " +", \n" " 'import_savefile'.\n" "\n" @@ -2766,36 +2783,36 @@ msgstr "~~" msgid "~N~ext" msgstr "~~" -#: engines/scumm/dialogs.cpp:600 +#: engines/scumm/dialogs.cpp:602 msgid "Speech Only" msgstr " " -#: engines/scumm/dialogs.cpp:601 +#: engines/scumm/dialogs.cpp:603 msgid "Speech and Subtitles" msgstr " " -#: engines/scumm/dialogs.cpp:602 +#: engines/scumm/dialogs.cpp:604 msgid "Subtitles Only" msgstr " " -#: engines/scumm/dialogs.cpp:610 +#: engines/scumm/dialogs.cpp:612 msgctxt "lowres" msgid "Speech & Subs" msgstr " " -#: engines/scumm/dialogs.cpp:656 +#: engines/scumm/dialogs.cpp:658 msgid "Select a Proficiency Level." msgstr " ." -#: engines/scumm/dialogs.cpp:658 +#: engines/scumm/dialogs.cpp:660 msgid "Refer to your Loom(TM) manual for help." msgstr " Loom(TM)." -#: engines/scumm/dialogs.cpp:662 +#: engines/scumm/dialogs.cpp:664 msgid "Practice" msgstr "" -#: engines/scumm/dialogs.cpp:663 +#: engines/scumm/dialogs.cpp:665 msgid "Expert" msgstr "" @@ -3537,4 +3554,5 @@ msgstr " MPEG " #: engines/zvision/detection_tables.h:92 msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" msgstr "" -" MPEG DVD-, AVI " +" MPEG DVD-, AVI " +" " @@ -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 |