diff options
192 files changed, 9944 insertions, 17586 deletions
diff --git a/COPYING.BSD b/COPYING.BSD new file mode 100644 index 0000000000..e67b79359a --- /dev/null +++ b/COPYING.BSD @@ -0,0 +1,93 @@ +NOTE: Only certain parts of the ScummVM project are under the BSD license. +The majority of the files are under the GNU GPL. See the headers of the +individual files to find out the exact license. + +The term "BSD license" refers to any BSD-like license, as they are sometimes +hard to tell apart. No slight against other licenses is intended. + + +Parts of the Nintendo DS port use the following license: + +Copyright (c) 2006 Michael "Chishm" Chisholm + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +Parts of the MPEG decoder use the following license: + +Copyright (c) 1995 The Regents of the University of California. +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose, without fee, and without written agreement is +hereby granted, provided that the above copyright notice and the following +two paragraphs appear in all copies of this software. + +IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF +CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +Copyright (c) 1995 Erik Corry +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose, without fee, and without written agreement is +hereby granted, provided that the above copyright notice and the following +two paragraphs appear in all copies of this software. + +IN NO EVENT SHALL ERIK CORRY BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF +THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF ERIK CORRY HAS BEEN ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +ERIK CORRY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" +BASIS, AND ERIK CORRY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, +UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +Portions of this software Copyright (c) 1995 Brown University. +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose, without fee, and without written agreement +is hereby granted, provided that the above copyright notice and the +following two paragraphs appear in all copies of this software. + +IN NO EVENT SHALL BROWN UNIVERSITY BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF BROWN +UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +BROWN UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" +BASIS, AND BROWN UNIVERSITY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, +SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. diff --git a/COPYING.LGPL b/COPYING.LGPL index 00b4fedfe7..56a87b85ed 100644 --- a/COPYING.LGPL +++ b/COPYING.LGPL @@ -1,3 +1,9 @@ +NOTE: Only certain parts of the ScummVM project are under the GNU LGPL. +The majority of the files are under the GNU GPL. See the headers of the +individual files to find out the exact license. + + + GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 @@ -42,6 +42,10 @@ ifeq "$(HAVE_CLANG)" "1" CXXFLAGS+= -Wno-conversion -Wno-shorten-64-to-32 -Wno-sign-compare -Wno-four-char-constants endif +# Warn if global constructors are used. Only available in GCC with LLVM backend +# (and maybe clang?), hence off by default. +#CXXFLAGS+= -Wglobal-constructors + ####################################################################### # Default commands - put the necessary replacements in config.mk # ####################################################################### diff --git a/Makefile.common b/Makefile.common index e2f14810b2..6f1d4183e2 100644 --- a/Makefile.common +++ b/Makefile.common @@ -172,12 +172,11 @@ SVNROOT := https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/ endif # Define the Subversion revision if available, either autodetected or -# specified by the user +# specified by the user, but only for base/version.cpp. ifneq ($(origin VER_SVNREV), undefined) -CXXFLAGS+= -DSCUMMVM_SVN_REVISION=\"$(VER_SVNREV)\" +base/version.o: CXXFLAGS:=$(CXXFLAGS) -DSCUMMVM_SVN_REVISION=\"$(VER_SVNREV)\" endif - ###################################################################### # Distribution settings ###################################################################### @@ -224,7 +223,7 @@ dist-src: \ @#DEB-src? # Common files -DIST_FILES_DOCS:=$(addprefix $(srcdir)/,AUTHORS COPYING COPYING.LGPL COPYRIGHT NEWS README) +DIST_FILES_DOCS:=$(addprefix $(srcdir)/,AUTHORS COPYING COPYING.BSD COPYING.LGPL COPYRIGHT NEWS README) # Themes files DIST_FILES_THEMES:=$(addprefix $(srcdir)/gui/themes/,scummmodern.zip) @@ -49,6 +49,13 @@ For a more comprehensive changelog for the latest experimental SVN code, see: - Enabled playback of MP3 files using the hardware decoder (ME). This means that the port is now optimized for MP3 playback (as opposed to OGG). + Wii port: + - Added support for USB2 mass storage devices (requires The Homebrew Channel + >= v1.0.8 with IOS58). + + GameCube port: + - Added support for DVDs with the ISO9660 file system. + 1.1.2 (????-??-??) Broken Sword 2 - Fixed missing speech in some cutscenes. @@ -1541,12 +1541,12 @@ order to combine MIDI music with AdLib sound effects. 7.6) Playing sound with Sequencer MIDI: [UNIX ONLY] ---- ---------------------------------- -If your soundcard driver supports a sequencer, you may set the environment -variable "SCUMMVM_MIDI" to your sequencer device -- for example, to -/dev/sequencer +If your soundcard driver supports a sequencer, you may set the +environment variable "SCUMMVM_MIDI" to your sequencer device -- for +example, to /dev/sequencer -If you have problems with not hearing audio in this configuration, it is -possible you will need to set the "SCUMMVM_MIDIPORT" variable to 1 or 2. +If you have problems with not hearing audio in this configuration, you +may need to set the environment variable "SCUMMVM_MIDIPORT" to 1 or 2. This selects the port on the selected sequencer to use. Then start scummvm with the -eseq parameter. This should work on several cards, and may offer better performance and quality than AdLib emulation. However, @@ -1556,13 +1556,13 @@ fall back on AdLib emulation. 7.6.1) Playing sound with ALSA sequencer: [UNIX ONLY] ------ ---------------------------------- -If you have installed the ALSA driver with the sequencer support, then -set the environment variable SCUMMVM_PORT or the config file parameter -alsa_port to your sequencer port. The default is to try both "65:0" and -"17:0". +If you have installed the ALSA driver with sequencer support, then you +may set the environment variable "SCUMMVM_PORT" or the config file +variable "alsa_port" to specify your sequencer port. If neither is set, +the default behavior is to try both "65:0" and "17:0". -Here is a little howto on how to use the ALSA sequencer with your -soundcard. In all cases, to have a list of all the sequencer ports you +Here is a brief guide on how to use the ALSA sequencer with your +soundcard. In all cases, to obtain a list of all the sequencer ports you have, try the command "aconnect -o -l". This should give output similar to: @@ -1619,12 +1619,13 @@ command as described earlier in this section. 7.6.2) Playing sound with IRIX dmedia sequencer: [UNIX ONLY] ---- ------------------------------------------ -If you are using IRIX, driver with the sequencer support, you can -set the environment variable SCUMMVM_PORT or the config file parameter -dmedia_port to your sequencer port. The default is to use the first port. +If you are using IRIX and the dmedia driver with sequencer support, you +can set the environment variable "SCUMMVM_MIDIPORT" or the config file +variable "dmedia_port" to specify your sequencer port. The default is to +use the first port. -To get a list of configured midi interfaces on your system, run startmidi -without parameters. Example output: +To get a list of configured midi interfaces on your system, run +"startmidi" without parameters. Example output: 2 MIDI interfaces configured: Serial Port 2 @@ -1642,9 +1643,9 @@ SCUMMVM_PORT=Software Synth in your environment. 7.7) Using TiMidity++ MIDI server: ---- ----------------------------- If you system lacks any MIDI sequencer, but you still want better MIDI -quality than default AdLib emulation can offer, you can try TiMidity++ -MIDI server. See http://timidity.sourceforge.net/ for download and -install instructions. +quality than default AdLib emulation can offer, you can try the +TiMidity++ MIDI server. See http://timidity.sourceforge.net/ for +download and install instructions. First, you need to start a daemon: @@ -1652,7 +1653,8 @@ First, you need to start a daemon: Now you can start scummvm and try selection TiMidity music output. By default, it will connect to localhost:7777, but you can change host/port -by defining "TIMIDITY_HOST" environment variable. +via the "TIMIDITY_HOST" environment variable. You can also specify +a "device number" using the "SCUMMVM_MIDIPORT" environment variable. 7.8) Using compressed audio files diff --git a/backends/fs/wii/wii-fs-factory.cpp b/backends/fs/wii/wii-fs-factory.cpp index 5bc8ba56f5..2e8051029d 100644 --- a/backends/fs/wii/wii-fs-factory.cpp +++ b/backends/fs/wii/wii-fs-factory.cpp @@ -29,6 +29,7 @@ #ifdef USE_WII_DI #include <di/di.h> +#include <iso9660.h> #endif #ifdef USE_WII_SMB @@ -71,8 +72,10 @@ void WiiFilesystemFactory::asyncInit() { void WiiFilesystemFactory::asyncDeinit() { #ifdef USE_WII_DI umount(kDVD); +#ifndef GAMECUBE DI_Close(); #endif +#endif #ifdef USE_WII_SMB umount(kSMB); net_deinit(); @@ -125,24 +128,11 @@ void WiiFilesystemFactory::mount(FileSystemType type) { break; printf("mount dvd\n"); - DI_Mount(); - - while (DI_GetStatus() & DVD_INIT) - usleep(20 * 1000); - - if (!(DI_GetStatus() & DVD_READY)) { - DI_StopMotor(); - printf("error mounting dvd\n"); - break; - } - - printf("mount ISO9660\n"); if (ISO9660_Mount()) { _dvdMounted = true; _dvdError = false; printf("ISO9660 mounted\n"); } else { - DI_StopMotor(); _dvdError = true; printf("ISO9660 mount failed\n"); } @@ -185,7 +175,6 @@ void WiiFilesystemFactory::umount(FileSystemType type) { printf("umount dvd\n"); ISO9660_Unmount(); - DI_StopMotor(); _dvdMounted = false; _dvdError = false; @@ -199,10 +188,7 @@ void WiiFilesystemFactory::umount(FileSystemType type) { printf("umount smb\n"); - if (smbClose("smb:")) - printf("smb umounted\n"); - else - printf("error umounting smb\n"); + smbClose("smb:"); _smbMounted = false; _smbError = false; diff --git a/backends/platform/psp/mp3.cpp b/backends/platform/psp/mp3.cpp index e25891396b..a2fe9a62f3 100644 --- a/backends/platform/psp/mp3.cpp +++ b/backends/platform/psp/mp3.cpp @@ -213,7 +213,6 @@ int Mp3PspStream::initStream() { bool Mp3PspStream::initStreamME() { // The following will eventually go into the thread - sceAudiocodecReleaseEDRAM(_codecParams); // do we need this? memset(_codecParams, 0, sizeof(_codecParams)); diff --git a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl index 3543dc8d19..62fcef0275 100644 --- a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl +++ b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl @@ -61,6 +61,7 @@ $ftp_url = "FTP://$FTP_User\@$FTP_Host/$FTP_Dir/"; $ExtraMacros = "MACRO NONSTANDARD_PORT\n"; $ExtraMacros .= "MACRO ENABLE_VKEYBD\n"; $ExtraMacros .= "MACRO DISABLE_FANCY_THEMES\n"; +$ExtraMacros .= "MACRO USE_TRANSLATION\n"; # prep nice list of SDKs #while( ($SDK, $RootDir) = each(%SDK_RootDirs) ) diff --git a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in index e706612c72..7b28f83aba 100644 --- a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in +++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in @@ -109,10 +109,11 @@ SOURCEPATH ..\..\..\..\base //STOP_AUTO_OBJECTS_BASE_// -SOURCEPATH ..\..\..\..\ +SOURCEPATH ..\..\..\.. // backend EPOC/SDL/ESDL specific includes SOURCE backends\platform\sdl\hardwarekeys.cpp +SOURCE backends\platform\sdl\hardwarekeys.cpp SOURCE backends\platform\sdl\sdl.cpp SOURCE backends\fs\symbian\symbian-fs-factory.cpp SOURCE backends\platform\symbian\src\SymbianOS.cpp diff --git a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in index c1ecc22ebb..7a68e757cd 100644 --- a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in +++ b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in @@ -110,10 +110,11 @@ SOURCEPATH ..\..\..\..\base //STOP_AUTO_OBJECTS_BASE_// -SOURCEPATH ..\..\..\..\ +SOURCEPATH ..\..\..\.. // backend EPOC/SDL/ESDL specific includes SOURCE backends\platform\sdl\hardwarekeys.cpp +SOURCE backends\platform\sdl\hardwarekeys.cpp SOURCE backends\platform\sdl\sdl.cpp SOURCE backends\fs\symbian\symbian-fs-factory.cpp SOURCE backends\platform\symbian\src\SymbianOS.cpp diff --git a/backends/platform/wii/main.cpp b/backends/platform/wii/main.cpp index 627cc7d1db..7f141f2339 100644 --- a/backends/platform/wii/main.cpp +++ b/backends/platform/wii/main.cpp @@ -37,8 +37,7 @@ #ifdef DEBUG_WII_GDB #include <debug.h> #endif -#include <gfx/gfx.h> -#include <gfx/gfx_con.h> +#include <gxflux/gfx_con.h> #ifdef __cplusplus extern "C" { @@ -51,7 +50,6 @@ void reset_cb(void) { #ifdef DEBUG_WII_GDB printf("attach gdb now\n"); _break(); - SYS_SetResetCallback(reset_cb); #else reset_btn_pressed = true; #endif @@ -78,6 +76,11 @@ static void show_console(int code) { for (i = 0; i < 60 * 3; ++i) VIDEO_WaitVSync(); +#ifdef DEBUG_WII_GDB + printf("attach gdb now\n"); + _break(); +#endif + printf("Press any key to continue.\n"); if (!gfx_frame_start()) @@ -157,12 +160,13 @@ void wii_memstats(void) { int main(int argc, char *argv[]) { s32 res; -#ifdef USE_WII_DI +#if defined(USE_WII_DI) && !defined(GAMECUBE) DI_Init(); #endif VIDEO_Init(); PAD_Init(); + DSP_Init(); AUDIO_Init(NULL); gfx_video_init(NULL); diff --git a/backends/platform/wii/options.cpp b/backends/platform/wii/options.cpp index 295856d564..0a21b45561 100644 --- a/backends/platform/wii/options.cpp +++ b/backends/platform/wii/options.cpp @@ -22,7 +22,7 @@ #include <errno.h> #include <network.h> -#include <gfx/gfx.h> +#include <gxflux/gfx.h> #include "common/config-manager.h" #include "gui/dialog.h" @@ -133,11 +133,9 @@ WiiOptionsDialog::~WiiOptionsDialog() { } void WiiOptionsDialog::handleTickle() { -#ifndef GAMECUBE WiiFilesystemFactory &fsf = WiiFilesystemFactory::instance(); int tab = _tab->getActiveTab(); -#endif #ifdef USE_WII_DI if (tab == _tabDVD) { @@ -198,9 +196,7 @@ void WiiOptionsDialog::handleTickle() { void WiiOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { -#ifndef GAMECUBE WiiFilesystemFactory &fsf = WiiFilesystemFactory::instance(); -#endif switch (cmd) { case 'x': diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h index 8180d5727f..eaaf616538 100644 --- a/backends/platform/wii/osystem.h +++ b/backends/platform/wii/osystem.h @@ -26,7 +26,7 @@ #include <gccore.h> #include <ogcsys.h> -#include <gfx/gfx.h> +#include <gxflux/gfx.h> #include "base/main.h" #include "common/fs.h" diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp index 19190048a0..3ce6343800 100644 --- a/backends/platform/wii/osystem_gfx.cpp +++ b/backends/platform/wii/osystem_gfx.cpp @@ -21,8 +21,7 @@ #include <malloc.h> -#include <gfx/gfx.h> -#include <gfx/gfx_con.h> +#include <gxflux/gfx_con.h> #include "common/config-manager.h" #include "graphics/conversion.h" diff --git a/backends/platform/wii/osystem_sfx.cpp b/backends/platform/wii/osystem_sfx.cpp index d2e884aa22..6efb47ff33 100644 --- a/backends/platform/wii/osystem_sfx.cpp +++ b/backends/platform/wii/osystem_sfx.cpp @@ -25,7 +25,8 @@ #define SFX_THREAD_STACKSIZE (1024 * 128) #define SFX_THREAD_PRIO 80 -#define SFX_THREAD_FRAG_SIZE 4096 +#define SFX_THREAD_FRAG_SIZE 2048 +#define SFX_BUFFERS 3 static lwpq_t sfx_queue; static lwp_t sfx_thread; @@ -33,20 +34,18 @@ static u8 *sfx_stack; static bool sfx_thread_running = false; static bool sfx_thread_quit = false; -static u8 sb = 0; -static u8 *sound_buffer[2]; +static u32 sb_hw; +static u8 *sound_buffer[SFX_BUFFERS]; static void audio_switch_buffers() { - AUDIO_StopDMA(); - AUDIO_InitDMA((u32) sound_buffer[sb], SFX_THREAD_FRAG_SIZE); - AUDIO_StartDMA(); - + sb_hw = (sb_hw + 1) % SFX_BUFFERS; + AUDIO_InitDMA((u32) sound_buffer[sb_hw], SFX_THREAD_FRAG_SIZE); LWP_ThreadSignal(sfx_queue); } static void * sfx_thread_func(void *arg) { Audio::MixerImpl *mixer = (Audio::MixerImpl *) arg; - u8 next_sb; + u8 sb_sw; while (true) { LWP_ThreadSleep(sfx_queue); @@ -54,11 +53,15 @@ static void * sfx_thread_func(void *arg) { if (sfx_thread_quit) break; - next_sb = sb ^ 1; - mixer->mixCallback(sound_buffer[next_sb], SFX_THREAD_FRAG_SIZE); - DCFlushRange(sound_buffer[next_sb], SFX_THREAD_FRAG_SIZE); - - sb = next_sb; + // the hardware uses two buffers: a front and a back buffer + // we use 3 buffers here: two are beeing pushed to the DSP, + // and the free one is where our mixer writes to + // thus the latency of our steam is: + // 2048 [frag size] / 48000 / 2 [16bit] / 2 [stereo] * 2 [hw buffers] + // -> 21.3ms + sb_sw = (sb_hw + 1) % SFX_BUFFERS; + mixer->mixCallback(sound_buffer[sb_sw], SFX_THREAD_FRAG_SIZE); + DCFlushRange(sound_buffer[sb_sw], SFX_THREAD_FRAG_SIZE); } return NULL; @@ -89,21 +92,20 @@ void OSystem_Wii::initSfx() { sfx_thread_running = true; } - sound_buffer[0] = (u8 *) memalign(32, SFX_THREAD_FRAG_SIZE); - sound_buffer[1] = (u8 *) memalign(32, SFX_THREAD_FRAG_SIZE); - - memset(sound_buffer[0], 0, SFX_THREAD_FRAG_SIZE); - memset(sound_buffer[1], 0, SFX_THREAD_FRAG_SIZE); - - DCFlushRange(sound_buffer[0], SFX_THREAD_FRAG_SIZE); - DCFlushRange(sound_buffer[1], SFX_THREAD_FRAG_SIZE); + for (u32 i = 0; i < SFX_BUFFERS; ++i) { + sound_buffer[i] = (u8 *) memalign(32, SFX_THREAD_FRAG_SIZE); + memset(sound_buffer[i], 0, SFX_THREAD_FRAG_SIZE); + DCFlushRange(sound_buffer[i], SFX_THREAD_FRAG_SIZE); + } _mixer->setReady(true); + sb_hw = 0; + AUDIO_SetDSPSampleRate(AI_SAMPLERATE_48KHZ); AUDIO_RegisterDMACallback(audio_switch_buffers); - - audio_switch_buffers(); + AUDIO_InitDMA((u32) sound_buffer[sb_hw], SFX_THREAD_FRAG_SIZE); + AUDIO_StartDMA(); } void OSystem_Wii::deinitSfx() { @@ -123,8 +125,8 @@ void OSystem_Wii::deinitSfx() { free(sfx_stack); sfx_thread_running = false; - free(sound_buffer[0]); - free(sound_buffer[1]); + for (u32 i = 0; i < SFX_BUFFERS; ++i) + free(sound_buffer[i]); } } diff --git a/base/internal_version.h b/base/internal_version.h index 2e6b7a24ad..5fd0535142 100644 --- a/base/internal_version.h +++ b/base/internal_version.h @@ -1,3 +1,7 @@ +#ifndef INCLUDED_FROM_BASE_VERSION_CPP +#error This file may only be included by base/version.cpp +#endif + #ifndef SCUMMVM_SVN_REVISION #define SCUMMVM_SVN_REVISION #endif diff --git a/base/internal_version.h.in b/base/internal_version.h.in index 4eecf90d87..adf5f94d21 100644 --- a/base/internal_version.h.in +++ b/base/internal_version.h.in @@ -1,3 +1,7 @@ +#ifndef INCLUDED_FROM_BASE_VERSION_CPP +#error This file may only be included by base/version.cpp +#endif + #ifndef SCUMMVM_SVN_REVISION #define SCUMMVM_SVN_REVISION #endif diff --git a/base/plugins.cpp b/base/plugins.cpp index 5d0be11065..ea3c65684a 100644 --- a/base/plugins.cpp +++ b/base/plugins.cpp @@ -200,6 +200,11 @@ public: LINK_PLUGIN(ADLIB) LINK_PLUGIN(PCSPK) LINK_PLUGIN(PCJR) + #ifndef DISABLE_SID + LINK_PLUGIN(C64) + #endif + LINK_PLUGIN(AMIGA) + LINK_PLUGIN(APPLEIIGS) LINK_PLUGIN(TOWNS) #if defined (UNIX) LINK_PLUGIN(TIMIDITY) diff --git a/base/version.cpp b/base/version.cpp index 17058d4a03..055067a656 100644 --- a/base/version.cpp +++ b/base/version.cpp @@ -24,9 +24,11 @@ */ #include "common/scummsys.h" -#include "base/internal_version.h" #include "base/version.h" +#define INCLUDED_FROM_BASE_VERSION_CPP +#include "base/internal_version.h" + /* * Version string and build date string. These can be used by anything that * wants to display this information to the user (e.g. about dialog). diff --git a/common/macresman.cpp b/common/macresman.cpp index df7351d55a..eb6a5939b6 100644 --- a/common/macresman.cpp +++ b/common/macresman.cpp @@ -557,6 +557,7 @@ void MacResManager::convertCrsrCursor(byte *data, int datasize, byte **cursor, i *hotspot_y = dis.readUint16BE(); *hotspot_x = dis.readUint16BE(); *w = *h = 16; + *keycolor = 0xff; // Use b/w cursor on backends which don't support cursor palettes if (!colored) diff --git a/common/macresman.h b/common/macresman.h index c067b6d2b8..2168235670 100644 --- a/common/macresman.h +++ b/common/macresman.h @@ -94,7 +94,7 @@ public: * The memory will be malloc()'ed * @param palSize Pointer to integer where the palette size will be stored. */ - void convertCrsrCursor(byte *data, int datasize, byte **cursor, int *w, int *h, + static void convertCrsrCursor(byte *data, int datasize, byte **cursor, int *w, int *h, int *hotspot_x, int *hotspot_y, int *keycolor, bool colored, byte **palette, int *palSize); /** diff --git a/common/messages.cpp b/common/messages.cpp index b21454d02d..7fc7f9c814 100644 --- a/common/messages.cpp +++ b/common/messages.cpp @@ -21,302 +21,305 @@ static const char * const _messageIds[] = { /* 17 */ "AdLib emulator:", /* 18 */ "AdLib is used for music in many games", /* 19 */ "Add Game...", - /* 20 */ "Antialiased Renderer (16bpp)", - /* 21 */ "Aspect ratio correction", - /* 22 */ "Associated key : %s", - /* 23 */ "Associated key : none", - /* 24 */ "Audio", - /* 25 */ "Autosave:", - /* 26 */ "Available engines:", - /* 27 */ "A~b~out...", - /* 28 */ "Bind Keys", - /* 29 */ "Both", - /* 30 */ "Brightness:", - /* 31 */ "Cancel", - /* 32 */ "Cannot create file", - /* 33 */ "Change game options", - /* 34 */ "Change global ScummVM options", - /* 35 */ "Check if you want to use your real hardware Roland-compatible sound device connected to your computer", - /* 36 */ "Choose", - /* 37 */ "Choose an action to map", - /* 38 */ "Clear value", - /* 39 */ "Close", - /* 40 */ "Correct aspect ratio for 320x200 games", - /* 41 */ "Could not find any engine capable of running the selected game", - /* 42 */ "Current video mode:", - /* 43 */ "Cursor Down", - /* 44 */ "Cursor Left", - /* 45 */ "Cursor Right", - /* 46 */ "Cursor Up", - /* 47 */ "DOSBox OPL emulator", - /* 48 */ "DVD", - /* 49 */ "DVD Mounted successfully", - /* 50 */ "DVD not mounted", - /* 51 */ "Date: ", - /* 52 */ "Debugger", - /* 53 */ "Default", - /* 54 */ "Delete", - /* 55 */ "Disable power off", - /* 56 */ "Disabled GFX", - /* 57 */ "Discovered %d new games ...", - /* 58 */ "Discovered %d new games.", - /* 59 */ "Display ", - /* 60 */ "Display keyboard", - /* 61 */ "Do you really want to delete this savegame?", - /* 62 */ "Do you really want to remove this game configuration?", - /* 63 */ "Do you really want to run the mass game detector? This could potentially add a huge number of games.", - /* 64 */ "Do you want to load or save the game?", - /* 65 */ "Do you want to perform an automatic scan ?", - /* 66 */ "Do you want to quit ?", - /* 67 */ "Double-strike", - /* 68 */ "Down", - /* 69 */ "Enable Roland GS Mode", - /* 70 */ "Engine does not support debug level '%s'", - /* 71 */ "English", - /* 72 */ "Error running game:", - /* 73 */ "Error while mounting the DVD", - /* 74 */ "Extra Path:", - /* 75 */ "FM Towns Emulator", - /* 76 */ "Fast mode", - /* 77 */ "Features compiled in:", - /* 78 */ "Free look", - /* 79 */ "Full title of the game", - /* 80 */ "Fullscreen mode", - /* 81 */ "GC Pad acceleration:", - /* 82 */ "GC Pad sensitivity:", - /* 83 */ "GFX", - /* 84 */ "GM Device:", - /* 85 */ "GUI Language:", - /* 86 */ "GUI Renderer:", - /* 87 */ "Game", - /* 88 */ "Game Data not found", - /* 89 */ "Game Id not supported", - /* 90 */ "Game Path:", - /* 91 */ "Global menu", - /* 92 */ "Go to previous directory level", - /* 93 */ "Go up", - /* 94 */ "Graphics", - /* 95 */ "Graphics mode:", - /* 96 */ "Hardware scale (fast, but low quality)", - /* 97 */ "Hercules Amber", - /* 98 */ "Hercules Green", - /* 99 */ "Hide Toolbar", - /* 100 */ "High quality audio (slower) (reboot)", - /* 101 */ "Higher value specifies better sound quality but may be not supported by your soundcard", - /* 102 */ "Hold Shift for Mass Add", - /* 103 */ "Horizontal underscan:", - /* 104 */ "IBM PCjr Emulator", - /* 105 */ "ID:", - /* 106 */ "Init network", - /* 107 */ "Initial top screen scale:", - /* 108 */ "Initialising MT-32 Emulator", - /* 109 */ "Initialising network", - /* 110 */ "Input", - /* 111 */ "Invalid Path", - /* 112 */ "Key mapper", - /* 113 */ "Keyboard", - /* 114 */ "Keymap:", - /* 115 */ "Keys", - /* 116 */ "Language of ScummVM GUI", - /* 117 */ "Language of the game. This will not turn your Spanish game version into English", - /* 118 */ "Language:", - /* 119 */ "Left", - /* 120 */ "Left Click", - /* 121 */ "Load", - /* 122 */ "Load game:", - /* 123 */ "Load savegame for selected game", - /* 124 */ "MAME OPL emulator", - /* 125 */ "MIDI", - /* 126 */ "MIDI gain:", - /* 127 */ "MT-32", - /* 128 */ "MT-32 Device:", - /* 129 */ "MT-32 Emulator", - /* 130 */ "Main screen scaling:", - /* 131 */ "Map", - /* 132 */ "Mass Add...", - /* 133 */ "Menu", - /* 134 */ "Misc", - /* 135 */ "Mixed AdLib/MIDI mode", - /* 136 */ "Mount DVD", - /* 137 */ "Mount SMB", - /* 138 */ "Mouse click", - /* 139 */ "Multi Function", - /* 140 */ "Music Device:", - /* 141 */ "Music volume:", - /* 142 */ "Mute All", - /* 143 */ "Name:", - /* 144 */ "Network down", - /* 145 */ "Network not initialsed (%d)", - /* 146 */ "Network up", - /* 147 */ "Network up, share mounted", - /* 148 */ "Never", - /* 149 */ "No", - /* 150 */ "No date saved", - /* 151 */ "No music", - /* 152 */ "No playtime saved", - /* 153 */ "No time saved", - /* 154 */ "None", - /* 155 */ "Normal (no scaling)", - /* 156 */ "OK", - /* 157 */ "Output rate:", - /* 158 */ "Override global MIDI settings", - /* 159 */ "Override global MT-32 settings", - /* 160 */ "Override global audio settings", - /* 161 */ "Override global graphic settings", - /* 162 */ "Override global volume settings", - /* 163 */ "PC Speaker Emulator", - /* 164 */ "Password:", - /* 165 */ "Path not a directory", - /* 166 */ "Path not a file", - /* 167 */ "Path not exists", - /* 168 */ "Paths", - /* 169 */ "Pause", - /* 170 */ "Pick the game:", - /* 171 */ "Platform the game was originally designed for", - /* 172 */ "Platform:", - /* 173 */ "Playtime: ", - /* 174 */ "Please select an action", - /* 175 */ "Plugins Path:", - /* 176 */ "Preferred Device:", - /* 177 */ "Press the key to associate", - /* 178 */ "Quit", - /* 179 */ "Quit ScummVM", - /* 180 */ "Read permission denied", - /* 181 */ "Reading failed", - /* 182 */ "Remap keys", - /* 183 */ "Remove game from the list. The game data files stay intact", - /* 184 */ "Render mode:", - /* 185 */ "Right", - /* 186 */ "Right Click", - /* 187 */ "Right click", - /* 188 */ "Rotate", - /* 189 */ "SFX volume:", - /* 190 */ "SMB", - /* 191 */ "Save", - /* 192 */ "Save Path:", - /* 193 */ "Save Path: ", - /* 194 */ "Save game:", - /* 195 */ "Scan complete!", - /* 196 */ "Scanned %d directories ...", - /* 197 */ "ScummVM Main Menu", - /* 198 */ "ScummVM could not find any engine capable of running the selected game!", - /* 199 */ "ScummVM could not find any game in the specified directory!", - /* 200 */ "ScummVM couldn't open the specified directory!", - /* 201 */ "Search in game list", - /* 202 */ "Search:", - /* 203 */ "Select SoundFont", - /* 204 */ "Select a Theme", - /* 205 */ "Select additional game directory", - /* 206 */ "Select an action and click 'Map'", - /* 207 */ "Select directory for GUI themes", - /* 208 */ "Select directory for extra files", - /* 209 */ "Select directory for plugins", - /* 210 */ "Select directory for saved games", - /* 211 */ "Select directory for savegames", - /* 212 */ "Select directory with game data", - /* 213 */ "Sensitivity", - /* 214 */ "Server:", - /* 215 */ "Share:", - /* 216 */ "Short game identifier used for referring to savegames and running the game from the command line", - /* 217 */ "Show Keyboard", - /* 218 */ "Show mouse cursor", - /* 219 */ "Show subtitles and play speech", - /* 220 */ "Show/Hide Cursor", - /* 221 */ "Skip", - /* 222 */ "Skip line", - /* 223 */ "Skip text", - /* 224 */ "Snap to edges", - /* 225 */ "Software scale (good quality, but slower)", - /* 226 */ "Sound on/off", - /* 227 */ "SoundFont is supported by some audio cards, Fluidsynth and Timidity", - /* 228 */ "SoundFont:", - /* 229 */ "Spch", - /* 230 */ "Special dithering modes supported by some games", - /* 231 */ "Special sound effects volume", - /* 232 */ "Specifies default sound device for General MIDI output", - /* 233 */ "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output", - /* 234 */ "Specifies output sound device or sound card emulator", - /* 235 */ "Specifies path to additional data used by all games or ScummVM", - /* 236 */ "Specifies path to additional data used the game", - /* 237 */ "Specifies preferred sound device or sound card emulator", - /* 238 */ "Specifies where your savegames are put", - /* 239 */ "Speech", - /* 240 */ "Speech volume:", - /* 241 */ "Standard Renderer (16bpp)", - /* 242 */ "Start selected game", - /* 243 */ "Status:", - /* 244 */ "Subs", - /* 245 */ "Subtitle speed:", - /* 246 */ "Subtitles", - /* 247 */ "Swap character", - /* 248 */ "Tap for left click, double tap right click", - /* 249 */ "Text and Speech:", - /* 250 */ "The chosen directory cannot be written to. Please select another one.", - /* 251 */ "Theme Path:", - /* 252 */ "Theme:", - /* 253 */ "This game ID is already taken. Please choose another one.", - /* 254 */ "This game does not support loading games from the launcher.", - /* 255 */ "Time: ", - /* 256 */ "Timeout while initialising network", - /* 257 */ "Touch X Offset", - /* 258 */ "Touch Y Offset", - /* 259 */ "Touchpad mode disabled.", - /* 260 */ "Touchpad mode enabled.", - /* 261 */ "True Roland MT-32 (disable GM emulation)", - /* 262 */ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack", - /* 263 */ "Unknown", - /* 264 */ "Unknown Error", - /* 265 */ "Unmount DVD", - /* 266 */ "Unmount SMB", - /* 267 */ "Unscaled (you must scroll left and right)", - /* 268 */ "Unsupported Color Mode", - /* 269 */ "Untitled savestate", - /* 270 */ "Up", - /* 271 */ "Use both MIDI and AdLib sound generation", - /* 272 */ "Use laptop trackpad-style cursor control", - /* 273 */ "Username:", - /* 274 */ "Using SDL driver ", - /* 275 */ "Vertical underscan:", - /* 276 */ "Video", - /* 277 */ "Virtual keyboard", - /* 278 */ "Volume", - /* 279 */ "Windows MIDI", - /* 280 */ "Write permission denied", - /* 281 */ "Writing data failed", - /* 282 */ "Yes", - /* 283 */ "You have to restart ScummVM to take the effect.", - /* 284 */ "Zone", - /* 285 */ "Zoom down", - /* 286 */ "Zoom up", - /* 287 */ "every 10 mins", - /* 288 */ "every 15 mins", - /* 289 */ "every 30 mins", - /* 290 */ "every 5 mins", - /* 291 */ "~A~bout", - /* 292 */ "~A~dd Game...", - /* 293 */ "~C~ancel", - /* 294 */ "~C~lose", - /* 295 */ "~E~dit Game...", - /* 296 */ "~H~elp", - /* 297 */ "~I~ndy fight controls", - /* 298 */ "~K~eys", - /* 299 */ "~L~eft handed mode", - /* 300 */ "~L~oad", - /* 301 */ "~L~oad...", - /* 302 */ "~N~ext", - /* 303 */ "~O~K", - /* 304 */ "~O~ptions", - /* 305 */ "~O~ptions...", - /* 306 */ "~P~revious", - /* 307 */ "~Q~uit", - /* 308 */ "~R~emove Game", - /* 309 */ "~R~esume", - /* 310 */ "~R~eturn to Launcher", - /* 311 */ "~S~ave", - /* 312 */ "~S~tart", - /* 313 */ "~T~ransitions Enabled", - /* 314 */ "~W~ater Effect Enabled", - /* 315 */ "~Z~ip Mode Activated", + /* 20 */ "Amiga Audio Emulator", + /* 21 */ "Antialiased Renderer (16bpp)", + /* 22 */ "Apple II GS Emulator (NOT IMPLEMENTED)", + /* 23 */ "Aspect ratio correction", + /* 24 */ "Associated key : %s", + /* 25 */ "Associated key : none", + /* 26 */ "Audio", + /* 27 */ "Autosave:", + /* 28 */ "Available engines:", + /* 29 */ "A~b~out...", + /* 30 */ "Bind Keys", + /* 31 */ "Both", + /* 32 */ "Brightness:", + /* 33 */ "C64 Audio Emulator", + /* 34 */ "Cancel", + /* 35 */ "Cannot create file", + /* 36 */ "Change game options", + /* 37 */ "Change global ScummVM options", + /* 38 */ "Check if you want to use your real hardware Roland-compatible sound device connected to your computer", + /* 39 */ "Choose", + /* 40 */ "Choose an action to map", + /* 41 */ "Clear value", + /* 42 */ "Close", + /* 43 */ "Correct aspect ratio for 320x200 games", + /* 44 */ "Could not find any engine capable of running the selected game", + /* 45 */ "Current video mode:", + /* 46 */ "Cursor Down", + /* 47 */ "Cursor Left", + /* 48 */ "Cursor Right", + /* 49 */ "Cursor Up", + /* 50 */ "DOSBox OPL emulator", + /* 51 */ "DVD", + /* 52 */ "DVD Mounted successfully", + /* 53 */ "DVD not mounted", + /* 54 */ "Date: ", + /* 55 */ "Debugger", + /* 56 */ "Default", + /* 57 */ "Delete", + /* 58 */ "Disable power off", + /* 59 */ "Disabled GFX", + /* 60 */ "Discovered %d new games ...", + /* 61 */ "Discovered %d new games.", + /* 62 */ "Display ", + /* 63 */ "Display keyboard", + /* 64 */ "Do you really want to delete this savegame?", + /* 65 */ "Do you really want to remove this game configuration?", + /* 66 */ "Do you really want to run the mass game detector? This could potentially add a huge number of games.", + /* 67 */ "Do you want to load or save the game?", + /* 68 */ "Do you want to perform an automatic scan ?", + /* 69 */ "Do you want to quit ?", + /* 70 */ "Double-strike", + /* 71 */ "Down", + /* 72 */ "Enable Roland GS Mode", + /* 73 */ "Engine does not support debug level '%s'", + /* 74 */ "English", + /* 75 */ "Error running game:", + /* 76 */ "Error while mounting the DVD", + /* 77 */ "Extra Path:", + /* 78 */ "FM Towns Emulator", + /* 79 */ "Fast mode", + /* 80 */ "Features compiled in:", + /* 81 */ "Free look", + /* 82 */ "Full title of the game", + /* 83 */ "Fullscreen mode", + /* 84 */ "GC Pad acceleration:", + /* 85 */ "GC Pad sensitivity:", + /* 86 */ "GFX", + /* 87 */ "GM Device:", + /* 88 */ "GUI Language:", + /* 89 */ "GUI Renderer:", + /* 90 */ "Game", + /* 91 */ "Game Data not found", + /* 92 */ "Game Id not supported", + /* 93 */ "Game Path:", + /* 94 */ "Global menu", + /* 95 */ "Go to previous directory level", + /* 96 */ "Go up", + /* 97 */ "Graphics", + /* 98 */ "Graphics mode:", + /* 99 */ "Hardware scale (fast, but low quality)", + /* 100 */ "Hercules Amber", + /* 101 */ "Hercules Green", + /* 102 */ "Hide Toolbar", + /* 103 */ "High quality audio (slower) (reboot)", + /* 104 */ "Higher value specifies better sound quality but may be not supported by your soundcard", + /* 105 */ "Hold Shift for Mass Add", + /* 106 */ "Horizontal underscan:", + /* 107 */ "IBM PCjr Emulator", + /* 108 */ "ID:", + /* 109 */ "Init network", + /* 110 */ "Initial top screen scale:", + /* 111 */ "Initialising MT-32 Emulator", + /* 112 */ "Initialising network", + /* 113 */ "Input", + /* 114 */ "Invalid Path", + /* 115 */ "Key mapper", + /* 116 */ "Keyboard", + /* 117 */ "Keymap:", + /* 118 */ "Keys", + /* 119 */ "Language of ScummVM GUI", + /* 120 */ "Language of the game. This will not turn your Spanish game version into English", + /* 121 */ "Language:", + /* 122 */ "Left", + /* 123 */ "Left Click", + /* 124 */ "Load", + /* 125 */ "Load game:", + /* 126 */ "Load savegame for selected game", + /* 127 */ "MAME OPL emulator", + /* 128 */ "MIDI", + /* 129 */ "MIDI gain:", + /* 130 */ "MT-32", + /* 131 */ "MT-32 Device:", + /* 132 */ "MT-32 Emulator", + /* 133 */ "Main screen scaling:", + /* 134 */ "Map", + /* 135 */ "Mass Add...", + /* 136 */ "Menu", + /* 137 */ "Misc", + /* 138 */ "Mixed AdLib/MIDI mode", + /* 139 */ "Mount DVD", + /* 140 */ "Mount SMB", + /* 141 */ "Mouse click", + /* 142 */ "Multi Function", + /* 143 */ "Music Device:", + /* 144 */ "Music volume:", + /* 145 */ "Mute All", + /* 146 */ "Name:", + /* 147 */ "Network down", + /* 148 */ "Network not initialsed (%d)", + /* 149 */ "Network up", + /* 150 */ "Network up, share mounted", + /* 151 */ "Never", + /* 152 */ "No", + /* 153 */ "No date saved", + /* 154 */ "No music", + /* 155 */ "No playtime saved", + /* 156 */ "No time saved", + /* 157 */ "None", + /* 158 */ "Normal (no scaling)", + /* 159 */ "OK", + /* 160 */ "Output rate:", + /* 161 */ "Override global MIDI settings", + /* 162 */ "Override global MT-32 settings", + /* 163 */ "Override global audio settings", + /* 164 */ "Override global graphic settings", + /* 165 */ "Override global volume settings", + /* 166 */ "PC Speaker Emulator", + /* 167 */ "Password:", + /* 168 */ "Path not a directory", + /* 169 */ "Path not a file", + /* 170 */ "Path not exists", + /* 171 */ "Paths", + /* 172 */ "Pause", + /* 173 */ "Pick the game:", + /* 174 */ "Platform the game was originally designed for", + /* 175 */ "Platform:", + /* 176 */ "Playtime: ", + /* 177 */ "Please select an action", + /* 178 */ "Plugins Path:", + /* 179 */ "Preferred Device:", + /* 180 */ "Press the key to associate", + /* 181 */ "Quit", + /* 182 */ "Quit ScummVM", + /* 183 */ "Read permission denied", + /* 184 */ "Reading failed", + /* 185 */ "Remap keys", + /* 186 */ "Remove game from the list. The game data files stay intact", + /* 187 */ "Render mode:", + /* 188 */ "Right", + /* 189 */ "Right Click", + /* 190 */ "Right click", + /* 191 */ "Rotate", + /* 192 */ "SFX volume:", + /* 193 */ "SMB", + /* 194 */ "Save", + /* 195 */ "Save Path:", + /* 196 */ "Save Path: ", + /* 197 */ "Save game:", + /* 198 */ "Scan complete!", + /* 199 */ "Scanned %d directories ...", + /* 200 */ "ScummVM Main Menu", + /* 201 */ "ScummVM could not find any engine capable of running the selected game!", + /* 202 */ "ScummVM could not find any game in the specified directory!", + /* 203 */ "ScummVM couldn't open the specified directory!", + /* 204 */ "Search in game list", + /* 205 */ "Search:", + /* 206 */ "Select SoundFont", + /* 207 */ "Select a Theme", + /* 208 */ "Select additional game directory", + /* 209 */ "Select an action and click 'Map'", + /* 210 */ "Select directory for GUI themes", + /* 211 */ "Select directory for extra files", + /* 212 */ "Select directory for plugins", + /* 213 */ "Select directory for saved games", + /* 214 */ "Select directory for savegames", + /* 215 */ "Select directory with game data", + /* 216 */ "Sensitivity", + /* 217 */ "Server:", + /* 218 */ "Share:", + /* 219 */ "Short game identifier used for referring to savegames and running the game from the command line", + /* 220 */ "Show Keyboard", + /* 221 */ "Show mouse cursor", + /* 222 */ "Show subtitles and play speech", + /* 223 */ "Show/Hide Cursor", + /* 224 */ "Skip", + /* 225 */ "Skip line", + /* 226 */ "Skip text", + /* 227 */ "Snap to edges", + /* 228 */ "Software scale (good quality, but slower)", + /* 229 */ "Sound on/off", + /* 230 */ "SoundFont is supported by some audio cards, Fluidsynth and Timidity", + /* 231 */ "SoundFont:", + /* 232 */ "Spch", + /* 233 */ "Special dithering modes supported by some games", + /* 234 */ "Special sound effects volume", + /* 235 */ "Specifies default sound device for General MIDI output", + /* 236 */ "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output", + /* 237 */ "Specifies output sound device or sound card emulator", + /* 238 */ "Specifies path to additional data used by all games or ScummVM", + /* 239 */ "Specifies path to additional data used the game", + /* 240 */ "Specifies preferred sound device or sound card emulator", + /* 241 */ "Specifies where your savegames are put", + /* 242 */ "Speech", + /* 243 */ "Speech volume:", + /* 244 */ "Standard Renderer (16bpp)", + /* 245 */ "Start selected game", + /* 246 */ "Status:", + /* 247 */ "Subs", + /* 248 */ "Subtitle speed:", + /* 249 */ "Subtitles", + /* 250 */ "Swap character", + /* 251 */ "Tap for left click, double tap right click", + /* 252 */ "Text and Speech:", + /* 253 */ "The chosen directory cannot be written to. Please select another one.", + /* 254 */ "Theme Path:", + /* 255 */ "Theme:", + /* 256 */ "This game ID is already taken. Please choose another one.", + /* 257 */ "This game does not support loading games from the launcher.", + /* 258 */ "Time: ", + /* 259 */ "Timeout while initialising network", + /* 260 */ "Touch X Offset", + /* 261 */ "Touch Y Offset", + /* 262 */ "Touchpad mode disabled.", + /* 263 */ "Touchpad mode enabled.", + /* 264 */ "True Roland MT-32 (disable GM emulation)", + /* 265 */ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack", + /* 266 */ "Unknown", + /* 267 */ "Unknown Error", + /* 268 */ "Unmount DVD", + /* 269 */ "Unmount SMB", + /* 270 */ "Unscaled (you must scroll left and right)", + /* 271 */ "Unsupported Color Mode", + /* 272 */ "Untitled savestate", + /* 273 */ "Up", + /* 274 */ "Use both MIDI and AdLib sound generation", + /* 275 */ "Use laptop trackpad-style cursor control", + /* 276 */ "Username:", + /* 277 */ "Using SDL driver ", + /* 278 */ "Vertical underscan:", + /* 279 */ "Video", + /* 280 */ "Virtual keyboard", + /* 281 */ "Volume", + /* 282 */ "Windows MIDI", + /* 283 */ "Write permission denied", + /* 284 */ "Writing data failed", + /* 285 */ "Yes", + /* 286 */ "You have to restart ScummVM to take the effect.", + /* 287 */ "Zone", + /* 288 */ "Zoom down", + /* 289 */ "Zoom up", + /* 290 */ "every 10 mins", + /* 291 */ "every 15 mins", + /* 292 */ "every 30 mins", + /* 293 */ "every 5 mins", + /* 294 */ "~A~bout", + /* 295 */ "~A~dd Game...", + /* 296 */ "~C~ancel", + /* 297 */ "~C~lose", + /* 298 */ "~E~dit Game...", + /* 299 */ "~H~elp", + /* 300 */ "~I~ndy fight controls", + /* 301 */ "~K~eys", + /* 302 */ "~L~eft handed mode", + /* 303 */ "~L~oad", + /* 304 */ "~L~oad...", + /* 305 */ "~N~ext", + /* 306 */ "~O~K", + /* 307 */ "~O~ptions", + /* 308 */ "~O~ptions...", + /* 309 */ "~P~revious", + /* 310 */ "~Q~uit", + /* 311 */ "~R~emove Game", + /* 312 */ "~R~esume", + /* 313 */ "~R~eturn to Launcher", + /* 314 */ "~S~ave", + /* 315 */ "~S~tart", + /* 316 */ "~T~ransitions Enabled", + /* 317 */ "~W~ater Effect Enabled", + /* 318 */ "~Z~ip Mode Activated", NULL }; @@ -325,8 +328,645 @@ struct PoMessageEntry { const char *msgstr; }; +static const PoMessageEntry _translation_ca_ES[] = { + { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-08-11 22:12+0100\nPO-Revision-Date: 2010-06-26 16:45+0100\nLast-Translator: Jordi Vilalta Prat <jvprat@gmail.com>\nLanguage-Team: Catalan <scummvm-devel@lists.sf.net>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Catalan\n" }, + { 2, " (Actiu)" }, + { 3, " (Joc)" }, + { 4, " (Global)" }, + { 5, "(compilat el %s)" }, + { 6, ", error al muntar la compartici\363" }, + { 7, ", compartici\363 no muntada" }, + { 8, "... progr\351s ..." }, + { 9, "11kHz" }, + { 10, "22 kHz" }, + { 11, "44 kHz" }, + { 12, "48 kHz" }, + { 13, "8 kHz" }, + { 14, "<per defecte>" }, + { 15, "Quant a ScummVM" }, + { 16, "Emulador d'AdLib" }, + { 17, "Emulador d'AdLib:" }, + { 18, "AdLib s'utilitza per la m\372sica de molts jocs" }, + { 19, "Afegeix Joc..." }, + { 20, "Emulador d'AdLib" }, + { 21, "Pintat amb antialias (16bpp)" }, + { 23, "Correcci\363 del rati d'aspecte" }, + { 24, "Tecla associada : %s" }, + { 25, "Tecla associada : cap" }, + { 26, "\300udio" }, + { 27, "Desat autom\340tic:" }, + { 28, "Motors disponibles:" }, + { 29, "~Q~uant a..." }, + { 30, "Mapeja tecles" }, + { 31, "Ambd\363s" }, + { 32, "Brillantor:" }, + { 33, "Emulador d'AdLib" }, + { 34, "Cancel\267la" }, + { 35, "No s'ha pogut crear el fitxer" }, + { 36, "Canvia les opcions del joc" }, + { 37, "Canvia les opcions globals de ScummVM" }, + { 38, "Marqueu si voleu utilitzar el vostre dispositiu hardware real de so compatible amb Roland connectat al vostre ordinador" }, + { 39, "Escull" }, + { 40, "Sel\267leccioneu una acci\363 per mapejar" }, + { 41, "Neteja el valor" }, + { 42, "Tanca" }, + { 43, "Corregeix la relaci\363 d'aspecte per jocs de 320x200" }, + { 44, "No s'ha pogut trobar cap motor capa\347 d'executar el joc seleccionat" }, + { 45, "Mode de v\355deo actual:" }, + { 46, "Cursor Avall" }, + { 47, "Cursor Esquerra" }, + { 48, "Cursor Dreta" }, + { 49, "Cursor Amunt" }, + { 50, "Emulador OPL de DOSBox" }, + { 51, "DVD" }, + { 52, "El DVD s'ha muntat satisfact\362riament" }, + { 53, "El DVD no est\340 muntat" }, + { 54, "Data: " }, + { 55, "Depurador" }, + { 56, "Per defecte" }, + { 57, "Suprimeix" }, + { 58, "Desactiva l'apagat autom\340tic" }, + { 59, "GFX desactivats" }, + { 60, "S'han descobert %d jocs nous ..." }, + { 61, "S'han descobert %d jocs nous." }, + { 62, "Pantalla" }, + { 63, "Mostra el teclat" }, + { 64, "Realment voleu suprimir aquesta partida?" }, + { 65, "Realment voleu suprimir la configuraci\363 d'aquest joc?" }, + { 66, "Esteu segur que voleu executar el detector massiu de jocs? Aix\362 pot afegir una gran quantitat de jocs." }, + { 67, "Voleu carregar o desar el joc?" }, + { 68, "Voleu fer una cerca autom\340tica?" }, + { 69, "Vols sortir?" }, + { 71, "Avall" }, + { 72, "Activa el Mode Roland GS" }, + { 73, "El motor no suporta el nivell de depuraci\363 '%s'" }, + { 74, "Angl\350s" }, + { 75, "Error al executar el joc:" }, + { 76, "Error al muntar el DVD" }, + { 77, "Cam\355 Extra:" }, + { 78, "Emulador de FM Towns" }, + { 79, "Mode r\340pid" }, + { 80, "Caracter\355stiques compilades:" }, + { 81, "Vista lliure" }, + { 82, "T\355tol complet del joc" }, + { 83, "Mode pantalla completa" }, + { 84, "Acceleraci\363 del Pad GC:" }, + { 85, "Sensibilitat del Pad GC:" }, + { 86, "GFX" }, + { 87, "Dispositiu GM:" }, + { 88, "Idioma de la interf\355cie d'usuari:" }, + { 89, "Mode de pintat de la interf\355cie d'usuari:" }, + { 90, "Joc" }, + { 91, "No s'han trobat les dades del joc" }, + { 92, "Identificador de joc no suportat" }, + { 93, "Cam\355 del Joc:" }, + { 94, "Men\372 global" }, + { 95, "Torna al nivell de directoris anterior" }, + { 96, "Amunt" }, + { 97, "Gr\340fics" }, + { 98, "Mode gr\340fic:" }, + { 99, "Escalat per hardware (r\340pid, per\362 de baixa qualitat)" }, + { 100, "Hercules \300mbar" }, + { 101, "Hercules Verd" }, + { 102, "Oculta la barra d'eines" }, + { 103, "Alta qualitat d'\340udio (m\351s lent) (reiniciar)" }, + { 104, "Valors m\351s alts especifiquen millor qualitat de so per\362 pot ser que la vostra tarja de so no ho suporti" }, + { 105, "Mantingueu premut Shift per a l'Addici\363 Massiva" }, + { 107, "Emulador d'IBM PCjr" }, + { 108, "Identificador:" }, + { 109, "Inicia la xarxa" }, + { 110, "Escalat inicial de la pantalla superior:" }, + { 111, "Iniciant l'Emulador de MT-32" }, + { 112, "Iniciant la xarxa" }, + { 113, "Entrada" }, + { 114, "Cam\355 incorrecte" }, + { 115, "Mapejador de tecles" }, + { 116, "Teclat" }, + { 117, "Mapa de teclat:" }, + { 118, "Tecles" }, + { 119, "Idioma de la interf\355cie d'usuari de ScummVM" }, + { 120, "Idioma del joc. Aix\362 no convertir\340 la vostra versi\363 Espanyola del joc a Angl\350s" }, + { 121, "Idioma:" }, + { 122, "Esquerra" }, + { 123, "Clic esquerre" }, + { 124, "Carrega" }, + { 125, "Carrega partida:" }, + { 126, "Carrega una partida pel joc seleccionat" }, + { 127, "Emulador OPL de MAME" }, + { 128, "MIDI" }, + { 129, "Guany MIDI:" }, + { 131, "Dispositiu MT32:" }, + { 132, "Emulador de MT-32" }, + { 133, "Escalat de la pantalla principal:" }, + { 134, "Mapeja" }, + { 135, "Addici\363 Massiva..." }, + { 136, "Men\372" }, + { 137, "Misc" }, + { 138, "Mode combinat AdLib/MIDI" }, + { 139, "Munta el DVD" }, + { 140, "Munta SMB" }, + { 141, "Clic del ratol\355" }, + { 142, "Funci\363 M\372ltiple" }, + { 143, "Dispositiu GM:" }, + { 144, "Volum de la m\372sica:" }, + { 145, "Silenciar tot" }, + { 146, "Nom:" }, + { 147, "Xarxa inactiva" }, + { 148, "Xarxa no iniciada (%d)" }, + { 149, "Xarxa activa" }, + { 150, "Xarxa activa, compartici\363 muntada" }, + { 151, "Mai" }, + { 152, "No" }, + { 153, "No hi ha data desada" }, + { 154, "Sense m\372sica" }, + { 155, "No hi ha temps de joc desat" }, + { 156, "No hi ha hora desada" }, + { 157, "Cap" }, + { 158, "Normal (sense escalar)" }, + { 159, "D'acord" }, + { 160, "Freq\374\350ncia de sortida:" }, + { 161, "Fer canvis sobre les opcions globals de MIDI" }, + { 162, "Fer canvis sobre les opcions globals de MIDI" }, + { 163, "Fer canvis sobre les opcions globals d'\340udio" }, + { 164, "Fer canvis sobre les opcions globals de gr\340fics" }, + { 165, "Fer canvis sobre les opcions globals de volum" }, + { 166, "Emulador d'Altaveu de PC" }, + { 167, "Contrasenya:" }, + { 168, "El cam\355 no \351s un directori" }, + { 169, "El cam\355 no \351s un fitxer" }, + { 170, "El cam\355 no existeix" }, + { 171, "Camins" }, + { 172, "Pausa" }, + { 173, "Seleccioneu el joc:" }, + { 174, "Plataforma per la que el joc es va dissenyar originalment" }, + { 175, "Plataforma:" }, + { 176, "Temps de joc: " }, + { 177, "Seleccioneu una acci\363" }, + { 178, "Cam\355 dels connectors:" }, + { 179, "Dispositiu Preferit:" }, + { 180, "Premeu la tecla a associar" }, + { 181, "Surt" }, + { 182, "Surt de ScummVM" }, + { 183, "S'ha denegat el perm\355s de lectura" }, + { 184, "Ha fallat la lectura" }, + { 185, "Remapeja les tecles" }, + { 186, "Elimina un joc de la llista. Els fitxers de dades del joc es mantenen intactes" }, + { 187, "Mode de pintat:" }, + { 188, "Dreta" }, + { 189, "Clic dret" }, + { 190, "Clic dret" }, + { 191, "Rotar" }, + { 192, "Volum dels efectes:" }, + { 193, "SMB" }, + { 194, "Desa" }, + { 195, "Cam\355 de les Partides:" }, + { 196, "Cam\355 de les Partides: " }, + { 197, "Desa la partida:" }, + { 198, "S'ha acabat la cerca!" }, + { 199, "S'han cercat %d directoris ..." }, + { 200, "Men\372 Principal de ScummVM" }, + { 201, "ScummVM no ha pogut trobar cap motor capa\347 d'executar el joc seleccionat!" }, + { 202, "ScummVM no ha pogut trobar cap joc al directori especificat!" }, + { 203, "ScummVM no ha pogut obrir el directori especificat!" }, + { 204, "Cerca a la llista de jocs" }, + { 205, "Cerca:" }, + { 206, "Seleccioneu el fitxer SoundFont" }, + { 207, "Seleccioneu un Tema" }, + { 208, "Seleccioneu el directori addicional del joc" }, + { 209, "Seleccioneu una acci\363 i cliqueu 'Mapeja'" }, + { 210, "Seleccioneu el directori dels temes de la Interf\355cie d'Usuari" }, + { 211, "Seleccioneu el directori dels fitxers extra" }, + { 212, "Seleccioneu el directori dels connectors" }, + { 213, "Seleccioneu el directori de les partides desades" }, + { 214, "Seleccioneu el directori de les partides desades" }, + { 215, "Seleccioneu el directori amb les dades del joc" }, + { 216, "Sensibilitat" }, + { 217, "Servidor:" }, + { 218, "Compartici\363:" }, + { 219, "Identificador de joc curt utilitzat per referir-se a les partides i per executar el joc des de la l\355nia de comandes" }, + { 220, "Mostra el teclat" }, + { 221, "Mostra el cursor del ratol\355" }, + { 222, "Mostra els subt\355tols i reprodueix la veu" }, + { 223, "Mostra/Oculta el cursor" }, + { 224, "Salta" }, + { 225, "Salta la l\355nia" }, + { 226, "Salta el text" }, + { 228, "Escalat per software (bona qualitat, per\362 m\351s lent)" }, + { 229, "So engegat/parat" }, + { 230, "Algunes targes de so, Fluidsynth i Timidity suporten SoundFont" }, + { 231, "Fitxer SoundFont:" }, + { 232, "Veus" }, + { 233, "Modes de dispersi\363 especials suportats per alguns jocs" }, + { 234, "Volum dels sons d'efectes especials" }, + { 235, "Especifica el dispositiu de so per defecte per a la sortida General MIDI" }, + { 236, "Especifica el dispositiu de so per defecte per a la sortida de Roland MT-32/LAPC1/CM32l/CM64" }, + { 237, "Especifica el dispositiu de so o l'emulador de tarja de so de sortida" }, + { 238, "Especifica el cam\355 de les dades addicionals utilitzades per tots els jocs o pel ScummVM" }, + { 239, "Especifica el cam\355 de dades addicionals utilitzades pel joc" }, + { 240, "Especifica el dispositiu de so o l'emulador de tarja de so preferit" }, + { 241, "Especifica on es desaran les partides" }, + { 242, "Veus" }, + { 243, "Volum de la veu:" }, + { 244, "Pintat est\340ndard (16bpp)" }, + { 245, "Iniciant el joc seleccionat" }, + { 246, "Estat:" }, + { 247, "Subt" }, + { 248, "Velocitat dels subt\355tols:" }, + { 249, "Subt\355tols" }, + { 250, "Commuta el personatge" }, + { 251, "Toc per a clic esquerre, doble toc per a clic dret" }, + { 252, "Text i Veus:" }, + { 253, "No es pot escriure al directori seleccionat. Si us plau, escolliu-ne un altre." }, + { 254, "Cam\355 dels Temes:" }, + { 255, "Tema:" }, + { 256, "Aquest identificador de joc ja est\340 usat. Si us plau, trieu-ne un altre." }, + { 257, "Aquest joc no suporta la c\340rrega de partides des del llan\347ador." }, + { 258, "Hora: " }, + { 260, "Despla\347ament X del toc" }, + { 261, "Despla\347ament Y del toc" }, + { 262, "Mode Touchpad desactivat." }, + { 263, "Mode Touchpad activat." }, + { 264, "Roland MT-32 real (desactiva l'emulaci\363 GM)" }, + { 265, "Desactiva la conversi\363 General MIDI pels jocs que tenen banda sonora per a Roland MT-32" }, + { 266, "Desconegut" }, + { 267, "Error desconegut" }, + { 268, "Desmunta el DVD" }, + { 269, "Desmunta SMB" }, + { 270, "Sense escalar (haureu de despla\347ar-vos a esquerra i dreta)" }, + { 271, "Mode de color no suportat" }, + { 272, "Partida sense t\355tol" }, + { 273, "Amunt" }, + { 274, "Utilitza MIDI i la generaci\363 de so AdLib alhora" }, + { 275, "Utilitza el control del cursor a l'estil del trackpad dels port\340tils" }, + { 276, "Nom d'usuari:" }, + { 277, "Utilitzant el controlador SDL " }, + { 279, "V\355deo" }, + { 280, "Teclat virtual" }, + { 281, "Volum" }, + { 282, "MIDI de Windows" }, + { 283, "S'ha denegat el perm\355s d'escriptura" }, + { 284, "Ha fallat l'escriptura de dades" }, + { 285, "S\355" }, + { 286, "Heu de reiniciar ScummVM perqu\350 tots els canvis tingui efecte." }, + { 287, "Zona" }, + { 288, "Redueix" }, + { 289, "Amplia" }, + { 290, "cada 10 minuts" }, + { 291, "cada 15 minuts" }, + { 292, "cada 30 minuts" }, + { 293, "cada 5 minuts" }, + { 294, "~Q~uant a" }, + { 295, "~A~fegeix Joc..." }, + { 296, "~C~ancel\267la" }, + { 297, "~T~anca" }, + { 298, "~E~dita Joc..." }, + { 299, "~A~juda" }, + { 300, "Controls de lluita de l'~I~ndy" }, + { 301, "~T~ecles" }, + { 302, "Mode ~e~squerr\340" }, + { 303, "C~a~rrega" }, + { 304, "~C~arrega..." }, + { 305, "~S~eg\374ent" }, + { 306, "~D~'acord" }, + { 307, "~O~pcions" }, + { 308, "~O~pcions..." }, + { 309, "~A~nterior" }, + { 310, "~T~anca" }, + { 311, "~S~uprimeix Joc" }, + { 312, "~C~ontinua" }, + { 313, "~R~etorna al Llan\347ador" }, + { 314, "~D~esa" }, + { 315, "~I~nicia" }, + { 316, "~T~ransicions activades" }, + { 317, "~E~fecte de l'aigua activat" }, + { 318, "Mode ~Z~ip activat" }, + { -1, NULL } +}; + +static const PoMessageEntry _translation_uk_UA[] = { + { 0, "Project-Id-Version: ScummVM VERSION\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-08-11 22:12+0100\nPO-Revision-Date: 2010-07-30 22:19+0100\nLast-Translator: Lubomyr Lisen\nLanguage-Team: Ukrainian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-5\nContent-Transfer-Encoding: 8bit\nLanguage: Ukrainian\nPlural-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" }, + { 1, " \262\330 \343\337\325\322\335\325\335\366, \351\336 \345\336\347\325\342\325 \322\330\331\342\330? " }, + { 2, " (\260\332\342\330\322\335\320)" }, + { 3, " (\246\323\340\330)" }, + { 4, " (\263\333\336\321\320\333\354\335\320)" }, + { 5, "(\327\366\321\340\320\335\330\331 %s)" }, + { 6, ", \337\336\334\330\333\332\320 \337\366\324 \347\320\341 \337\366\324\332\333\356\347\325\335\335\357 \337\320\337\332\330" }, + { 7, ", \337\320\337\332\320 \335\325 \337\366\324\332\333\356\347\325\335\320" }, + { 8, "... \337\336\350\343\332 ..." }, + { 9, "11 \332\263\346" }, + { 10, "22 \332\263\346" }, + { 11, "44 \332\263\346" }, + { 12, "48 \332\263\346" }, + { 13, "8 \332\263\346" }, + { 14, "<\327\320 \343\334\336\322\347\320\335\335\357\334>" }, + { 15, "\277\340\336 ScummVM" }, + { 16, "\265\334\343\333\357\342\336\340 AdLib" }, + { 17, "\265\334\343\333\357\342\336\340 AdLib:" }, + { 18, "\267\322\343\332\336\322\320 \332\320\340\342\320 AdLib \322\330\332\336\340\330\341\342\336\322\343\364\342\354\341\357 \321\320\323\320\342\354\334\320 \366\323\340\320\334\330" }, + { 19, "\264\336\324. \323\340\343..." }, + { 20, "\265\334\343\333\357\342\336\340 AdLib" }, + { 21, "\300\320\341\342\325\340\330\327\320\342\336\340 \327\366 \327\323\333\320\324\326\343\322\320\335\335\357\334 (16bpp)" }, + { 23, "\272\336\340\325\332\346\366\357 \341\337\366\322\322\366\324\335\336\350\325\335\335\357 \341\342\336\340\366\335" }, + { 24, "\277\340\330\327\335\320\347\325\335\320 \332\333\320\322\366\350\320 : %s" }, + { 25, "\277\340\330\327\335\320\347\325\335\320 \332\333\320\322\366\350\320 : \335\325\334\320\364" }, + { 26, "\260\343\324\366\336" }, + { 27, "\260\322\342\336\327\321\325\340\325\326\325\335\335\357:" }, + { 28, "\264\336\341\342\343\337\335\366 \324\322\330\326\332\330:" }, + { 29, "\277\340\336 \337~\340~\336\323\340\320\334\343..." }, + { 30, "\337\340\330\327\335\320\347\330\342\330 \332\333\320\322\366\350\366" }, + { 31, "\262\341\325" }, + { 32, "\317\341\332\340\320\322\366\341\342\354:" }, + { 33, "\265\334\343\333\357\342\336\340 AdLib" }, + { 34, "\262\366\324\334\366\335\320" }, + { 35, "\275\325 \334\336\326\343 \341\342\322\336\340\330\342\330 \344\320\331\333" }, + { 36, "\267\334\366\335\330\342\330 \336\337\346\366\367 \323\340\330" }, + { 37, "\267\334\366\335\330\342\330 \323\333\336\321\320\333\354\335\366 \336\337\346\366\367 ScummVM" }, + { 38, "\262\366\324\334\366\342\354\342\325, \357\332\351\336 \343 \322\320\341 \337\366\324\332\333\356\347\325\335\330\331 Roland-\341\343\334\366\341\335\330\331 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \366 \322\330 \345\336\347\325\342\325 \331\336\323\336 \322\330\332\336\340\330\341\342\320\342\330" }, + { 39, "\262\330\321\340\320\342\330" }, + { 40, "\262\330\321\325\340\366\342\354 \324\366\356 \324\333\357 \337\340\330\327\335\320\347\325\335\335\357" }, + { 41, "\276\347\330\341\342\330\342\330 \327\335\320\347\325\335\335\357" }, + { 42, "\267\320\332\340\330\342\330" }, + { 43, "\272\336\340\330\323\343\322\320\342\330 \341\337\366\322\322\366\324\335\336\350\325\335\335\357 \341\342\336\340\366\335 \324\333\357 \366\323\336\340 \327 \323\340\320\344\366\332\336\356 320x200" }, + { 44, "\275\325 \334\336\326\343 \327\335\320\331\342\330 \324\322\330\326\336\332 \324\333\357 \327\320\337\343\341\332\343 \322\330\321\340\320\335\336\367 \323\340\330" }, + { 45, "\302\325\332\343\347\330\331 \322\366\324\325\336\340\325\326\330\334:" }, + { 46, "\272\343\340\341\336\340 \322\335\330\327" }, + { 47, "\272\343\340\341\336\340 \322\333\366\322\336" }, + { 48, "\272\343\340\341\336\340 \322\337\340\320\322\336" }, + { 49, "\272\343\340\341\336\340 \322\322\325\340\345" }, + { 50, "\265\334\343\333\357\342\336\340 DOSBox OPL" }, + { 51, "DVD" }, + { 52, "DVD \337\366\324\332\333\356\347\325\335\330\331 \343\341\337\366\350\335\336" }, + { 53, "DVD \335\325 \337\366\324\332\333\356\347\325\335\330\331" }, + { 54, "\264\320\342\320: " }, + { 55, "\262\366\324\333\320\324\347\330\332" }, + { 56, "\267\320 \343\334\336\322\347\320\335\335\357\334" }, + { 57, "\262\330\324\320\333\330\342\330" }, + { 58, "\267\320\321\336\340\336\335\330\342\330 \322\330\334\332\335\325\335\335\357" }, + { 59, "\261\325\327 \323\340\320\344\366\332\330" }, + { 60, "\267\335\320\331\324\325\335\336 %d \335\336\322\330\345 \366\323\336\340 ..." }, + { 61, "\267\335\320\331\324\325\335\336 %d \335\336\322\330\345 \366\323\336\340." }, + { 62, "\277\336\332\320\327\320\342\330 " }, + { 63, "\277\336\332\320\327\320\342\330 \332\333\320\322\366\320\342\343\340\343" }, + { 64, "\262\330 \324\366\331\341\335\336 \345\336\347\325\342\325 \322\330\324\320\333\330\342\330 \346\325 \327\321\325\340\325\326\325\335\335\357?" }, + { 65, "\262\330 \324\366\331\341\335\336 \345\336\347\325\342\325 \322\330\324\320\333\330\342\330 \343\341\342\320\335\336\322\332\330 \324\333\357 \346\366\364\367 \323\340\330?" }, + { 66, "\262\330 \324\366\331\341\335\336 \345\336\347\325\342\325 \327\320\337\343\341\342\330\342\330 \324\325\342\325\332\342\336\340 \343\341\366\345 \366\323\336\340? \306\325 \337\336\342\325\335\346\366\331\335\336 \334\336\326\325 \324\336\324\320\342\330 \322\325\333\330\332\343 \332\366\333\354\332\366\341\342\354 \366\323\336\340." }, + { 67, "\262\330 \345\336\347\325\342\325 \327\320\322\320\335\342\320\326\330\342\330 \320\321\336 \327\321\325\340\325\323\342\330 \323\340\343?" }, + { 68, "\262\330 \345\336\347\325\342\325 \327\324\366\331\341\335\330\342\330 \320\322\342\336\334\320\342\330\347\335\330\331 \337\336\350\343\332?" }, + { 69, "\262\330 \345\336\347\330\342\325 \322\330\331\342\330?" }, + { 70, "\277\336\324\322\366\331\335\330\331 \343\324\320\340" }, + { 71, "\262\335\330\327" }, + { 72, "\303\322\366\334\332\335\343\342\330 \340\325\326\330\334 Roland GS" }, + { 73, "\264\322\330\326\336\332 \335\325 \337\366\324\342\340\330\334\343\364 \340\366\322\325\335\354 \322\366\324\333\320\324\332\330 '%s'" }, + { 74, "English" }, + { 75, "\277\336\334\330\333\332\320 \327\320\337\343\341\332\343 \323\340\330:" }, + { 76, "\277\336\334\330\333\332\320 \337\366\324 \347\320\341 \337\366\324\332\333\356\347\325\335\335\357 DVD" }, + { 77, "\264\336\324. \350\333\357\345:" }, + { 78, "\265\334\343\333\357\342\336\340 FM Towns" }, + { 79, "\310\322\330\324\332\330\331 \340\325\326\330\334" }, + { 80, "\262\332\333\356\347\325\335\366 \322 \321\366\333\324 \336\337\346\366\367:" }, + { 81, "\262\366\333\354\335\330\331 \336\323\333\357\324" }, + { 82, "\277\336\322\335\320 \335\320\327\322\320 \323\340\330" }, + { 83, "\277\336\322\335\336\325\332\340\320\335\335\330\331 \340\325\326\330\334" }, + { 84, "\277\340\330\341\332\336\340\325\335\335\357 GC \337\320\324\343:" }, + { 85, "\307\343\342\333\330\322\366\341\342\354 GC \337\320\324\343:" }, + { 86, "\263\340\344" }, + { 87, "\277\340\330\341\342\340\366\331 GM:" }, + { 88, "\274\336\322\320 \366\335\342\325\340\344\325\331\341\343:" }, + { 89, "\300\320\341\342\325\340\330\327\320\342\336\340 GUI:" }, + { 90, "\263\340\320" }, + { 91, "\275\325\334\320\364 \344\320\331\333\366\322 \323\340\330" }, + { 92, "Game Id \335\325 \337\366\324\342\340\330\334\343\364\342\354\341\357" }, + { 93, "\310\333\357\345 \324\336 \323\340\330: " }, + { 94, "\263\333\336\321\320\333\354\335\325 \334\325\335\356" }, + { 95, "\277\325\340\325\331\342\330 \335\320 \337\320\337\332\343 \340\366\322\335\325\334 \322\330\351\325" }, + { 96, "\262\322\325\340\345" }, + { 97, "\263\340\320\344\366\332\320" }, + { 98, "\263\340\320\344\366\347\335\330\331 \340\325\326\330\334:" }, + { 99, "\305\320\340\324\322\320\340\335\336\325 \334\320\341\350\342\320\321\343\322\320\335\335\357 (\350\322\330\324\332\336, \320\333\325 \335\330\327\354\332\336\367 \357\332\336\341\342\366)" }, + { 100, "Hercules \317\335\342\320\340\335\330\331" }, + { 101, "Hercules \267\325\333\325\335\330\331" }, + { 102, "\267\320\345\336\322\320\342\330 \337\320\335\325\333\354 \366\335\341\342\340\343\334\325\335\342\366\322" }, + { 103, "\262\330\341\336\332\320 \357\332\366\341\342\354 \327\322\343\332\343 (\337\336\322\366\333\354\335\366\350\325) (\340\325\321\343\342)" }, + { 104, "\262\325\333\330\332\366 \327\335\320\347\325\335\335\357 \327\320\324\320\356\342\354 \332\340\320\351\343 \357\332\366\341\342\354 \327\322\343\332\343, \337\340\336\342\325 \322\336\335\330 \334\336\326\343\342\354 \335\325 \337\366\324\342\340\330\334\343\322\320\342\330\341\357 \322\320\350\336\356 \327\322\343\332\336\322\336\356 \332\320\340\342\336\356" }, + { 105, "\303\342\340\330\334\343\331\342\325 \332\333\320\322\366\350\343 Shift \324\333\357 \342\336\323\336, \351\336\321 \324\336\324\320\342\330 \324\325\332\366\333\354\332\320 \366\323\336\340" }, + { 106, "\263\336\340\330\327\336\335\342\320\333\354\335\330\331 underscan:" }, + { 107, "\265\334\343\333\357\342\336\340 IBM PCjr" }, + { 108, "ID:" }, + { 109, "\246\335\366\346\366\320\333\366\327\320\346\366\357 \334\325\340\325\326\366" }, + { 110, "\277\336\347\320\342\332\336\322\330\331 \334\320\341\350\342\320\321 \322\325\340\345\335\354\336\323\336 \325\332\340\320\335\343:" }, + { 111, "\275\320\341\342\340\336\356\356 \325\334\343\333\357\342\336\340 MT-32" }, + { 112, "\275\320\333\320\350\342\336\322\343\356 \334\325\340\325\326\343" }, + { 113, "\262\322\366\324" }, + { 114, "\275\325\337\340\320\322\330\333\354\335\330\331 \350\333\357\345" }, + { 115, "\277\340\330\327\335\320\347\325\335\335\357 \332\333\320\322\366\350" }, + { 116, "\272\333\320\322\366\320\342\343\340\320" }, + { 117, "\302\320\321\333\330\346\357 \332\333\320\322\366\350:" }, + { 118, "\272\333\320\322\366\350\366" }, + { 119, "\274\336\322\320 \323\340\320\344\366\347\335\336\323\336 \366\335\342\325\340\344\325\331\341\343 ScummVM" }, + { 120, "\274\336\322\320 \323\340\330. \267\334\366\335\320 \346\354\336\323\336 \337\320\340\320\334\325\342\340\343 \335\325 \337\325\340\325\342\322\336\340\330\342\354 \323\340\343 \335\320 \320\335\323\333\366\331\341\354\332\366\331 \322 \343\332\340\320\367\335\341\354\332\343" }, + { 121, "\274\336\322\320:" }, + { 122, "\262\333\366\322\336" }, + { 123, "\273\366\322\330\331 \332\333\366\332" }, + { 124, "\267\320\322\320\335\342\320\326\330\342\330" }, + { 125, "\267\320\322\320\335\342\320\326\330\342\330 \323\340\343:" }, + { 126, "\267\320\322\320\335\342\320\326\330\342\330 \327\321\325\340\325\326\325\335\335\357 \324\333\357 \322\330\321\340\320\335\336\367 \323\340\330" }, + { 127, "\265\334\343\333\357\342\336\340 MAME OPL:" }, + { 128, "MIDI" }, + { 129, "\277\336\341\330\333\325\335\335\357 MIDI:" }, + { 130, "MT-32" }, + { 131, "\277\340\330\341\342\340\366\331 MT-32:" }, + { 132, "\265\334\343\333\357\342\336\340 MT-32" }, + { 133, "\274\320\341\350\342\320\321 \323\336\333\336\322\335\336\323\336 \325\332\340\320\335\343:" }, + { 134, "\277\340\330\327\335\320\347\330\342\330" }, + { 135, "\264\336\324. \321\320\323\320\342\336..." }, + { 136, "\274\325\335\356" }, + { 137, "\300\366\327\335\325" }, + { 138, "\267\334\366\350\320\335\330\331 \340\325\326\330\334 AdLib/MIDI" }, + { 139, "\277\366\324\332\333\356\347\330\342\330 DVD" }, + { 140, "\277\366\324\332\333\356\347\330\342\330 SMB" }, + { 141, "\272\333\366\332 \334\330\350\332\336\356" }, + { 142, "\274\343\333\354\342\366\344\343\335\332\346\366\357" }, + { 143, "\274\343\327\330\347\335\330\331 \277\340\330\341\342\340\366\331:" }, + { 144, "\263\343\347\335\366\341\342\354 \334\343\327\330\332\330:" }, + { 145, "\262\330\334\332\335\343\342\330 \343\341\325" }, + { 146, "\275\320\327\322\320:" }, + { 147, "\274\325\340\325\326\320 \322\330\334\332\335\325\335\320" }, + { 148, "\274\325\340\325\326\320 \335\325 \335\320\333\320\323\336\324\326\325\335\320 (%d)" }, + { 149, "\274\325\340\325\326\320 \337\340\320\346\356\364" }, + { 150, "\274\325\340\325\326\320 \337\340\320\346\356\364, \337\320\337\332\320 \337\366\324\332\333\356\347\325\335\320" }, + { 151, "\275\366\332\336\333\330" }, + { 152, "\275\366" }, + { 153, "\264\320\342\320 \335\325 \327\320\337\330\341\320\335\320" }, + { 154, "\261\325\327 \334\343\327\330\332\330" }, + { 155, "\307\320\341 \323\340\330 \335\325 \327\320\337\330\341\320\335\336" }, + { 156, "\307\320\341 \335\325 \327\320\337\330\341\320\335\330\331" }, + { 157, "\275\325 \327\320\324\320\335\330\331" }, + { 158, "\261\325\327 \327\321\366\333\354\350\325\335\335\357" }, + { 159, "OK" }, + { 160, "\262\330\345\366\324\335\320 \347\320\341\342\336\342\320:" }, + { 161, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 MIDI" }, + { 162, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 MT-32" }, + { 163, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 \320\343\324\366\336" }, + { 164, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 \323\340\320\344\366\332\330" }, + { 165, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 \323\343\347\335\336\341\342\366" }, + { 166, "\265\334\343\333\357\342\336\340 PC \341\337\366\332\325\340\320" }, + { 167, "\277\320\340\336\333\354:" }, + { 168, "\310\333\357\345 \335\325 \364 \337\320\337\332\336\356" }, + { 169, "\310\333\357\345 \335\325 \364 \344\320\331\333\336\334" }, + { 170, "\310\333\357\345 \335\325 \327\335\320\331\324\325\335\330\331" }, + { 171, "\310\333\357\345\330" }, + { 172, "\277\320\343\327\320" }, + { 173, "\262\330\321\325\340\366\342\354 \323\340\343:" }, + { 174, "\277\333\320\342\344\336\340\334\320, \324\333\357 \357\332\336\367 \323\340\320 \321\343\333\320 \341\337\336\347\320\342\332\343 \340\336\327\340\336\321\333\325\335\320" }, + { 175, "\277\333\320\342\344\336\340\334\320:" }, + { 176, "\307\320\341 \323\340\330: " }, + { 177, "\261\343\324\354 \333\320\341\332\320, \322\330\321\325\340\366\342\354 \324\366\356" }, + { 178, "\310\333\357\345 \324\336 \337\333\320\323\366\335\366\322:" }, + { 179, "\277\340\330\341\342\340\366\331 \357\332\336\334\343 \322\366\324\324\320\364\342\354\341\357 \337\325\340\325\322\320\323\320:" }, + { 180, "\275\320\342\330\341\335\366\342\354 \332\333\320\322\366\350\343 \324\333\357 \337\340\330\327\335\320\347\325\335\335\357" }, + { 181, "\262\330\345\366\324" }, + { 182, "\262\330\345\366\324 \327 ScummVM" }, + { 183, "\275\325\324\336\341\342\320\342\335\354\336 \337\340\320\322 \324\333\357 \347\330\342\320\335\335\357" }, + { 184, "\277\336\334\330\333\332\320 \347\330\342\320\335\335\357" }, + { 185, "\277\325\340\325\337\340\330\327\335\320\347\330\342\330 \332\333\320\322\366\350\366" }, + { 186, "\262\330\324\320\333\330\342\330 \323\340\343 \327\366 \341\337\330\341\332\343. \275\325 \322\330\324\320\333\357\364 \323\340\343 \327 \326\336\340\341\342\332\336\323\336 \324\330\341\332\320" }, + { 187, "\300\325\326\330\334 \340\320\341\342\340\343\322\320\335\335\357:" }, + { 188, "\262\337\340\320\322\336" }, + { 189, "\277\340\320\322\330\331 \332\333\366\332" }, + { 190, "\277\340\320\322\330\331 \332\333\366\332" }, + { 191, "\277\336\322\325\340\335\343\342\330" }, + { 192, "\263\343\347\335\366\341\342\354 \325\344\325\332\342\366\322:" }, + { 193, "SMB" }, + { 194, "\267\320\337\330\341\320\342\330" }, + { 195, "\310\333\357\345 \327\321\325\340.: " }, + { 196, "\310\333\357\345 \324\333\357 \327\321\325\340\325\326\325\335\354: " }, + { 197, "\267\321\325\340\325\323\342\330 \323\340\343: " }, + { 198, "\277\336\350\343\332 \327\320\332\366\335\347\325\335\330\331!" }, + { 199, "\277\340\336\323\333\357\335\343\342\336 %d \337\320\337\336\332 ..." }, + { 200, "\263\336\333\336\322\335\325 \334\325\335\356 ScummVM" }, + { 201, "ScummVM \335\325 \327\334\366\323 \327\335\320\331\342\330 \324\322\330\326\336\332 \324\333\357 \327\320\337\343\341\332\343 \322\330\321\340\320\335\336\367 \323\340\330!" }, + { 202, "ScummVM \335\325 \334\336\326\325 \327\335\320\331\342\330 \323\340\343 \343 \322\332\320\327\320\335\366\331 \337\320\337\346\366!" }, + { 203, "ScummVM \335\325 \334\336\326\325 \322\366\324\332\340\330\342\330 \322\332\320\327\320\335\343 \337\320\337\332\343!" }, + { 204, "\277\336\350\343\332 \322 \341\337\330\341\332\343 \366\323\336\340" }, + { 205, "\277\336\350\343\332:" }, + { 206, "\262\330\321\325\340\366\342\354 SoundFont" }, + { 207, "\262\330\321\325\340\366\342\354 \342\325\334\343" }, + { 208, "\262\330\321\325\340\366\342\354 \324\336\324\320\342\332\336\322\343 \337\320\337\332\343 \323\340\330" }, + { 209, "\262\330\321\325\340\366\342\354 \324\366\356 \366 \332\333\366\332\335\366\342\354 '\277\340\330\327\335\320\347\330\342\330'" }, + { 210, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \324\333\357 \342\325\334 GUI" }, + { 211, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \327 \324\336\324\320\342\332\336\322\330\334\330 \344\320\331\333\320\334\330" }, + { 212, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \327 \337\333\320\323\330\335\320\334\330" }, + { 213, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \324\333\357 \327\321\325\340\325\326\325\335\354" }, + { 214, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \324\333\357 \327\321\325\340\325\326\325\335\354" }, + { 215, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \327 \344\320\331\333\320\334\330 \323\340\330" }, + { 216, "\307\343\342\333\330\322\366\341\342\354" }, + { 217, "\301\325\340\322\325\340:" }, + { 218, "\274\325\340\325\326\325\322\320 \337\320\337\332\320:" }, + { 219, "\272\336\340\336\342\332\330\331 \366\324\325\335\342\330\344\366\332\320\342\336\340, \357\332\330\331 \322\330\332\336\340\330\341\342\336\322\343\364\342\354\341\357 \324\333\357 \335\320\327\322 \327\321\325\340\325\326\325\335\330\345 \366\323\336\340 \366 \324\333\357 \327\320\337\343\341\332\343 \327 \332\336\334\320\335\324\335\336\367 \341\342\340\366\347\332\330" }, + { 220, "\277\336\332\320\327\320\342\330 \332\333\320\322\366\320\342\343\340\343" }, + { 221, "\277\336\332\320\327\343\322\320\342\330 \332\343\340\341\336\340 \334\330\350\366" }, + { 222, "\277\336\332\320\327\343\322\320\342\330 \341\343\321\342\330\342\340\330 \366 \322\366\324\342\322\336\340\356\322\320\342\330 \334\336\322\343" }, + { 223, "\277\336\332\320\327\320\342\330/\301\345\336\322\320\342\330 \332\343\340\341\336\340" }, + { 224, "\277\340\336\337\343\341\342\330\342\330" }, + { 225, "\277\340\336\337\343\341\342\330\342\330 \340\357\324\336\332" }, + { 226, "\277\340\336\337\343\341\342\330\342\330 \342\325\332\341\342" }, + { 227, "\277\340\330\332\340\366\337\330\342\330 \324\336 \332\340\320\367\322" }, + { 228, "\277\340\336\323\340\320\334\335\325 \334\320\341\350\342\320\321\343\322\320\335\335\357 (\345\336\340\336\350\320 \357\332\366\341\342\354, \320\333\325 \337\336\322\366\333\354\335\366\350\325)" }, + { 229, "\267\322\343\332 \343\322\366\334/\322\330\334\332" }, + { 230, "SoundFont \337\366\324\342\340\330\334\343\364\342\354\341\357 \324\325\357\332\330\334\330 \327\322\343\332\336\322\330\334\330 \332\320\340\342\320\334\330, Fluidsynth \366 Timidity" }, + { 231, "SoundFont:" }, + { 232, "\276\327\322" }, + { 233, "\301\337\325\346\366\320\333\354\335\366 \340\325\326\330\334\330 \340\325\335\324\325\340\330\335\323\343, \357\332\366 \337\366\324\342\340\330\334\343\356\342\354 \324\325\357\332\366 \366\323\340\330" }, + { 234, "\263\343\347\335\366\341\342\354 \341\337\325\346\366\320\333\354\335\330\345 \327\322\343\332\336\322\330\345 \325\344\325\332\342\366\322" }, + { 235, "\262\332\320\327\343\364 \322\330\345\366\324\335\330\331 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \324\333\357 MIDI" }, + { 236, "\262\332\320\327\343\364 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \337\336 \343\334\336\322\347\320\335\335\356 \324\333\357 \322\330\322\336\324\343 \335\320 Roland MT-32/LAPC1/CM32l/CM64" }, + { 237, "\262\332\320\327\343\364 \322\330\345\366\324\335\330\331 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \320\321\336 \325\334\343\333\357\342\336\340 \327\322\343\332\336\322\336\367 \332\320\340\342\330" }, + { 238, "\262\332\320\327\343\364 \350\333\357\345 \324\336 \324\336\324\320\342\332\336\322\330\345 \344\320\331\333\366\322 \324\320\335\330\345, \322\330\332\336\340\330\341\342\336\322\343\322\320\335\330\345 \343\341\366\334\320 \366\323\340\320\334\330, \320\321\336 ScummVM" }, + { 239, "\262\332\320\327\343\364 \350\333\357\345 \324\336 \324\336\324\320\342\332\336\322\330\345 \344\320\331\333\366\322 \324\320\335\330\345 \324\333\357 \323\340\330" }, + { 240, "\262\332\320\327\343\364 \322\330\345\366\324\335\330\331 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \320\321\336 \325\334\343\333\357\342\336\340 \327\322\343\332\336\322\336\367 \332\320\340\342\330" }, + { 241, "\262\332\320\327\343\364 \350\333\357\345 \324\336 \327\321\325\340\325\326\325\335\354 \323\340\330" }, + { 242, "\276\327\322\343\347\325\335\335\357" }, + { 243, "\263\343\347\335\366\341\342\354 \336\327\322\343\347\325\335\335\357:" }, + { 244, "\301\342\320\335\324\320\340\342\335\330\331 \340\320\341\342\325\340\330\327\320\342\336\340 (16bpp)" }, + { 245, "\267\320\337\343\341\342\330\342\330 \322\330\321\340\320\335\343 \323\340\343" }, + { 246, "\301\342\320\335:" }, + { 247, "\301\343\321" }, + { 248, "\310\322\330\324\332\366\341\342\354 \341\343\321\342\330\342\340\366\322:" }, + { 249, "\301\343\321\342\330\342\340\330" }, + { 250, "\267\334\366\335\330\342\330 \323\325\340\336\357" }, + { 251, "\302\320\337 \324\333\357 \333\366\322\336\323\336 \332\333\320\346\320\335\335\357, \337\336\324\322\366\331\335\330\331 \342\320\337 \324\333\357 \337\340\320\322\336\323\336 \332\333\320\346\320\335\335\357" }, + { 252, "\302\325\332\341\342 \366 \336\327\322\343\347\325\335\335\357:" }, + { 253, "\275\325 \334\336\326\343 \337\330\341\320\342\330 \343 \322\330\321\340\320\335\343 \337\320\337\332\343. \261\343\324\354 \333\320\341\332\320, \322\332\320\326\366\342\354 \366\335\350\343." }, + { 254, "\310\333\357\345 \324\336 \342\325\334:" }, + { 255, "\302\325\334\320:" }, + { 256, "\306\325\331 ID \323\340\330 \322\326\325 \322\330\332\336\340\330\341\342\336\322\343\364\342\354\341\357. \261\343\324\354 \333\320\341\332\320, \322\330\321\325\340\366\342\354 \366\335\350\330\331." }, + { 257, "\306\357 \323\340\320 \335\325 \337\366\324\342\340\330\334\343\364 \327\320\322\320\335\342\320\326\325\335\335\357 \327\321\325\340\325\326\325\335\354 \347\325\340\325\327 \323\336\333\336\322\335\325 \334\325\335\356." }, + { 258, "\307\320\341: " }, + { 259, "\307\320\341 \337\366\324\332\333\356\347\325\335\335\357 \324\336 \334\325\340\325\326\366 \322\330\342\366\332" }, + { 260, "\267\334\366\351\325\335\335\357 \342\336\340\332\320\335\354 \337\336 \336\341\366 X" }, + { 261, "\267\334\366\351\325\335\335\357 \342\336\340\332\320\335\354 \337\336 \336\341\366 Y" }, + { 262, "\300\325\326\330\334 \342\320\347\337\320\324\343 \322\330\334\332\335\325\335\330\331." }, + { 263, "\300\325\326\330\334 \342\320\347\337\320\324\343 \343\322\366\334\332\335\325\335\330\331." }, + { 264, "\301\337\340\320\322\326\335\366\331 Roland MT-32 (\322\330\334\332\335\343\342\330 \325\334\343\333\357\346\330\356 GM)" }, + { 265, "\262\330\334\330\332\320\364 \334\320\337\337\366\335\323 General MIDI \324\333\357 \366\323\336\340 \366\327 \327\322\343\332\336\322\336\356 \324\336\340\366\326\332\336\356 \324\333\357 Roland MT-32" }, + { 266, "\275\325\322\366\324\336\334\336" }, + { 267, "\275\325\322\366\324\336\334\320 \337\336\334\330\333\332\320" }, + { 268, "\262\366\324\332\333\356\347\330\342\330 DVD" }, + { 269, "\262\366\324\332\333\356\347\342\330 SMB" }, + { 270, "\261\325\327 \334\320\341\350\342\320\321\343\322\320\335\335\357 (\342\340\325\321\320 \321\343\324\325 \337\340\336\332\340\343\347\343\322\320\342\330 \335\320\333\366\322\336 \366 \335\320\337\340\320\322\336)" }, + { 271, "\300\325\326\330\334 \272\336\333\354\336\340\343 \335\325 \337\366\324\342\340\330\334\343\364\342\354\341\357" }, + { 272, "\267\321\325\340\325\326\325\335\335\357 \321\325\327 \366\334\325\335\366" }, + { 273, "\262\322\325\340\345" }, + { 274, "\262\330\332\336\340\330\341\342\336\322\343\322\320\342\330 \366 MIDI \366 AdLib \324\333\357 \323\325\335\325\340\320\346\366\367 \327\322\343\332\343" }, + { 275, "\262\330\332\336\340\330\341\342\336\322\343\322\320\342\330 \343\337\340\320\322\333\366\335\335\357 \332\343\340\341\336\340\336\334 \357\332 \335\320 \342\340\325\332\337\320\324\366 \333\320\337\342\336\337\366\322" }, + { 276, "\272\336\340\330\341\342\343\322\320\347:" }, + { 277, "\262\330\332\336\340\330\341\342\336\322\343\356 \324\340\320\331\322\325\340 SDL " }, + { 278, "\262\325\340\342\330\332\320\333\354\335\330\331 underscan:" }, + { 279, "\262\366\324\325\336" }, + { 280, "\262\366\340\342\343\320\333\354\335\320 \332\333\320\322\366\320\342\343\340\320" }, + { 281, "\263\343\347\335\366\341\342\354" }, + { 282, "Windows MIDI" }, + { 283, "\275\325\324\336\341\342\320\342\335\354\336 \337\340\320\322 \324\333\357 \327\320\337\330\341\343" }, + { 284, "\277\336\334\330\333\332\320 \327\320\337\330\341\343 \324\320\335\330\345" }, + { 285, "\302\320\332" }, + { 286, "\262\330 \337\336\322\330\335\335\366 \337\325\340\325\327\320\337\343\341\342\330\342\330 ScummVM \351\336\321 \327\320\341\342\336\341\343\322\320\342\330 \327\334\366\335\330." }, + { 287, "\267\336\335\320" }, + { 288, "\267\334\335\350. \334\320\350\342\320\321" }, + { 289, "\267\321\366\333. \334\320\350\342\320\321" }, + { 290, "\332\336\326\335\366 10 \345\322" }, + { 291, "\332\336\326\335\366 15 \345\322" }, + { 292, "\332\336\326\335\366 30 \345\322" }, + { 293, "\332\336\326\335\366 5 \345\322" }, + { 294, "\277\340\336 \337\340\336~\323~\340\320\334\343" }, + { 295, "~\264~\336\324. \323\340\343..." }, + { 296, "\262\366~\324~\334\366\335\320" }, + { 297, "~\267~\320\332\340\330\342\330" }, + { 298, "\300\325\324\320~\323~. \323\340\343..." }, + { 299, "~\264~\336\337\336\334\336\323\320" }, + { 300, "\272\325\340\343\322\320\335\335\357 \321\336\357\334\330 \322 Indy" }, + { 301, "~\272~\333\320\322\366\350\366" }, + { 302, "\273\366\322\336\340\343\332\330\331 \340\325\326\330\334" }, + { 303, "~\267~\320\322\320\335\342\320\326\330\342\330" }, + { 304, "~\267~\320\322\320\335..." }, + { 305, "~\275~\320\341\342" }, + { 306, "~O~K" }, + { 307, "~\276~\337\346\366\367" }, + { 308, "~\276~\337\346\366\367..." }, + { 309, "~\277~\336\337\325\340" }, + { 310, "~\262~\330\345\366\324" }, + { 311, "~\262~\330\324\320\333\330\342\330 \323\340\343" }, + { 312, "\277\340\336\324\336\322~\326~\330\342\330" }, + { 313, "~\277~\336\322\325\340\335\343\342\330\341\354 \322 \323\336\333\336\322\335\325 \334\325\335\356" }, + { 314, "~\267~\320\337\330\341\320\342\330" }, + { 315, "\267~\320~\337\343\341\332" }, + { 316, "\277\325\340\325\345\336\324\330 \320\332\342\330\322\336\322\320\335\366" }, + { 317, "\265\344\325\332\342\330 \322\336\324\330 \322\332\333\356\347\325\335\366" }, + { 318, "\300\325\326\330\334 \350\322\330\324\332\336\323\336 \337\325\340\325\345\336\324\343 \320\332\342\330\322\336\322\320\335\330\331" }, + { -1, NULL } +}; + static const PoMessageEntry _translation_ru_RU[] = { - { 0, "Project-Id-Version: ScummVM VERSION\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-07-30 22:14+0100\nPO-Revision-Date: 2010-06-13 20:55+0300\nLast-Translator: Eugene Sandulenko <sev@scummvm.org>\nLanguage-Team: Russian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-5\nContent-Transfer-Encoding: 8bit\nLanguage: Russian\nPlural-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" }, + { 0, "Project-Id-Version: ScummVM VERSION\nReport-Msgid-Bugs-To: scummvm-devel@li\nPOT-Creation-Date: 2010-08-13 12:49+0300\nPO-Revision-Date: 2010-06-13 20:55+0300\nLast-Translator: Eugene Sandulenko <sev@scummvm.org>\nLanguage-Team: Russian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-5\nContent-Transfer-Encoding: 8bit\nLanguage: Russian\nPlural-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" }, { 1, " \262\353 \343\322\325\340\325\335\353, \347\342\336 \345\336\342\330\342\325 \322\353\331\342\330? " }, { 2, " (\260\332\342\330\322\335\320\357)" }, { 3, " (\270\323\340\353)" }, @@ -346,307 +986,693 @@ static const PoMessageEntry _translation_ru_RU[] = { { 17, "\315\334\343\333\357\342\336\340 AdLib:" }, { 18, "\267\322\343\332\336\322\320\357 \332\320\340\342\320 AdLib \330\341\337\336\333\354\327\343\325\342\341\357 \334\335\336\323\330\334\330 \330\323\340\320\334\330" }, { 19, "\275\336\322\320\357 \330\323\340\320..." }, - { 20, "\300\320\341\342\325\340\330\327\320\342\336\340 \341\336 \341\323\333\320\326\330\322\320\335\330\325\334 (16bpp)" }, - { 21, "\272\336\340\340\325\332\346\330\357 \341\336\336\342\335\336\350\325\335\330\357 \341\342\336\340\336\335" }, - { 22, "\275\320\327\335\320\347\325\335\335\320\357 \332\333\320\322\330\350\320 : %s" }, - { 23, "\275\320\327\335\320\347\325\335\335\320\357 \332\333\320\322\330\350\320 : \335\325\342" }, - { 24, "\260\343\324\330\336" }, - { 25, "\260\322\342\336\341\336\345\340\320\335\325\335\330\325:" }, - { 26, "\264\336\341\342\343\337\335\353\325 \324\322\330\326\332\330:" }, - { 27, "\276 \337~\340~\336\323\340\320\334\334\325..." }, - { 28, "\275\320\327\335\320\347\330\342\354 \332\333\320\322\330\350\330" }, - { 29, "\262\341\361" }, - { 30, "\317\340\332\336\341\342\354:" }, - { 31, "\276\342\334\325\335\320" }, - { 32, "\275\325 \334\336\323\343 \341\336\327\324\320\342\354 \344\320\331\333" }, - { 33, "\270\327\334\325\335\330\342\354 \336\337\346\330\330 \330\323\340\353" }, - { 34, "\270\327\334\325\335\330\342\354 \323\333\336\321\320\333\354\335\353\325 \336\337\346\330\330 ScummVM" }, - { 35, "\276\342\334\325\342\354\342\325, \325\341\333\330 \343 \322\320\341 \337\336\324\332\333\356\347\325\335\336 Roland-\341\336\322\334\325\341\342\330\334\336\325 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \330 \322\353 \345\336\342\330\342\325 \325\323\336 \330\341\337\336\333\354\327\336\322\320\342\354" }, - { 36, "\262\353\321\340\320\342\354" }, - { 37, "\262\353\321\325\340\330\342\325 \324\325\331\341\342\322\330\325 \324\333\357 \335\320\327\335\320\347\325\335\330\357" }, - { 38, "\276\347\330\341\342\330\342\354 \327\335\320\347\325\335\330\325" }, - { 39, "\267\320\332\340\353\342\354" }, - { 40, "\272\336\340\340\325\332\342\330\340\336\322\320\342\354 \341\336\336\342\335\336\350\325\335\330\325 \341\342\336\340\336\335 \324\333\357 \330\323\340 \341 \340\320\327\340\325\350\325\335\330\325\334 320x200" }, - { 41, "\275\325 \334\336\323\343 \335\320\331\342\330 \324\322\330\326\336\332 \324\333\357 \327\320\337\343\341\332\320 \322\353\321\340\320\335\335\336\331 \330\323\340\353" }, - { 42, "\302\325\332\343\351\330\331 \322\330\324\325\336\340\325\326\330\334:" }, - { 43, "\272\343\340\341\336\340 \322\335\330\327" }, - { 44, "\272\343\340\341\336\340 \322\333\325\322\336" }, - { 45, "\272\343\340\341\336\340 \322\337\340\320\322\336" }, - { 46, "\272\343\340\341\336\340 \322\322\325\340\345" }, - { 47, "\315\334\343\333\357\342\336\340 DOSBox OPL" }, - { 48, "DVD" }, - { 49, "DVD \337\336\324\332\333\356\347\325\335 \343\341\337\325\350\335\336" }, - { 50, "DVD \335\325 \337\336\324\332\333\356\347\325\335" }, - { 51, "\264\320\342\320: " }, - { 52, "\276\342\333\320\324\347\330\332" }, - { 53, "\277\336 \343\334\336\333\347\320\335\330\356" }, - { 54, "\303\324\320\333\330\342\354" }, - { 55, "\267\320\337\340\325\342\330\342\354 \322\353\332\333\356\347\325\335\330\325" }, - { 56, "\261\325\327 \323\340\320\344\330\332\330" }, - { 57, "\275\320\331\324\325\335\336 %d \335\336\322\353\345 \330\323\340 ..." }, - { 58, "\275\320\331\324\325\335\336 %d \335\336\322\353\345 \330\323\340." }, - { 59, "\277\336\332\320\327\320\342\354 " }, - { 60, "\277\336\332\320\327\320\342\354 \332\333\320\322\330\320\342\343\340\343" }, - { 61, "\262\353 \324\325\331\341\342\322\330\342\325\333\354\335\336 \345\336\342\330\342\325 \343\324\320\333\330\342\354 \355\342\336 \341\336\345\340\320\335\325\335\330\325?" }, - { 62, "\262\353 \324\325\331\341\342\322\330\342\325\333\354\335\336 \345\336\342\330\342\325 \343\324\320\333\330\342\354 \343\341\342\320\335\336\322\332\330 \324\333\357 \355\342\336\331 \330\323\340\353?" }, - { 63, "\262\353 \324\325\331\341\342\322\330\342\325\333\354\335\336 \345\336\342\330\342\325 \327\320\337\343\341\342\330\342\354 \324\325\342\325\332\342\336\340 \322\341\325\345 \330\323\340? \315\342\336 \337\336\342\325\335\346\330\320\333\354\335\336 \334\336\326\325\342 \324\336\321\320\322\330\342\354 \321\336\333\354\350\336\325 \332\336\333\330\347\325\341\342\322\336 \330\323\340." }, - { 64, "\262\353 \345\336\342\330\342\325 \327\320\323\340\343\327\330\342\354 \333\330\321\336 \341\336\345\340\320\335\330\342\354 \330\323\340\343?" }, - { 65, "\262\353 \345\336\342\330\342\325 \337\340\336\330\327\322\325\341\342\330 \320\322\342\336\334\320\342\330\347\325\341\332\330\331 \337\336\330\341\332?" }, - { 66, "\262\353 \345\336\342\330\342\325 \322\353\331\342\330?" }, - { 67, "\264\322\336\331\335\336\331 \343\324\320\340" }, - { 68, "\262\335\330\327" }, - { 69, "\262\332\333\356\347\330\342\354 \340\325\326\330\334 Roland GS" }, - { 70, "\264\322\330\326\336\332 \335\325 \337\336\324\324\325\340\326\330\322\320\325\342 \343\340\336\322\325\335\354 \336\342\333\320\324\332\330 '%s'" }, - { 71, "English" }, - { 72, "\276\350\330\321\332\320 \327\320\337\343\341\332\320 \330\323\340\353:" }, - { 73, "\276\350\330\321\332\320 \322\336 \322\340\325\334\357 \337\336\324\332\333\356\347\325\335\330\357 DVD" }, - { 74, "\264\336\337. \337\343\342\354:" }, - { 75, "\315\334\343\333\357\342\336\340 FM Towns" }, - { 76, "\261\353\341\342\340\353\331 \340\325\326\330\334" }, - { 77, "\262\332\333\356\347\325\335\335\353\325 \322 \321\330\333\324 \336\337\346\330\330:" }, - { 78, "\301\322\336\321\336\324\335\353\331 \336\321\327\336\340" }, - { 79, "\277\336\333\335\336\325 \335\320\327\322\320\335\330\325 \330\323\340\353" }, - { 80, "\277\336\333\335\336\355\332\340\320\335\335\353\331 \340\325\326\330\334" }, - { 81, "\303\341\332\336\340\325\335\330\325 GC \337\320\324\320:" }, - { 82, "\307\343\322\341\342\322\330\342\325\333\354\335\336\341\342\354 GC \337\320\324\320:" }, - { 83, "\263\340\344" }, - { 84, "\303\341\342\340\336\331\341\342\322\336 GM:" }, - { 85, "\317\327\353\332 GUI:" }, - { 86, "\300\330\341\336\322\320\333\332\320 GUI:" }, - { 87, "\270\323\340\320" }, - { 88, "\275\325\342 \344\320\331\333\336\322 \330\323\340\353" }, - { 89, "Game Id \335\325 \337\336\324\324\325\340\326\330\322\320\325\342\341\357" }, - { 90, "\263\324\325 \330\323\340\320: " }, - { 91, "\263\333\336\321\320\333\354\335\336\325 \334\325\335\356" }, - { 92, "\277\325\340\325\331\342\330 \335\320 \324\330\340\325\332\342\336\340\330\356 \343\340\336\322\335\325\334 \322\353\350\325" }, - { 93, "\262\322\325\340\345" }, - { 94, "\263\340\320\344\330\332\320" }, - { 95, "\263\340\320\344. \340\325\326\330\334:" }, - { 96, "\305\320\340\324\322\320\340\335\336\325 \334\320\341\350\342\320\321\330\340\336\322\320\335\330\325 (\321\353\341\342\340\336, \335\336 \335\330\327\332\336\323\336 \332\320\347\325\341\342\322\320)" }, - { 97, "Hercules \317\335\342\320\340\335\353\331" }, - { 98, "Hercules \267\325\333\325\335\353\331" }, - { 99, "\301\337\340\357\342\320\342\354 \337\320\335\325\333\354 \330\335\341\342\340\343\334\325\335\342\336\322" }, - { 100, "\262\353\341\336\332\336\325 \332\320\347\325\341\342\322\336 \327\322\343\332\320 (\334\325\324\333\325\335\335\325\325) (\340\325\321\343\342)" }, - { 101, "\261\276\333\354\350\330\325 \327\335\320\347\325\335\330\357 \327\320\324\320\356\342 \333\343\347\350\325\325 \332\320\347\325\341\342\322\336 \327\322\343\332\320, \336\324\335\320\332\336 \336\335\330 \334\336\323\343\342 \335\325 \337\336\324\324\325\340\326\330\322\320\342\354\341\357 \322\320\350\325\331 \327\322\343\332\336\322\336\331 \332\320\340\342\336\331" }, - { 102, "\303\324\325\340\326\330\322\320\331\342\325 \332\333\320\322\330\350\343 Shift \324\333\357 \342\336\323\336, \347\342\336\321\353 \324\336\321\320\322\330\342\354 \335\325\341\332\336\333\354\332\336 \330\323\340" }, - { 103, "\263\336\340\330\327\336\335\342\320\333\354\335\353\331 underscan:" }, - { 104, "\315\334\343\333\357\342\336\340 IBM PCjr" }, - { 105, "ID:" }, - { 106, "\270\335\330\346\330\320\333\330\327\320\346\330\357 \341\325\342\330" }, - { 107, "\275\320\347\320\333\354\335\353\331 \334\320\341\350\342\320\321 \322\325\340\345\335\325\323\336 \355\332\340\320\335\320:" }, - { 108, "\275\320\341\342\340\320\330\322\320\356 \355\334\343\333\357\342\336\340 MT-32" }, - { 109, "\275\320\341\342\340\320\330\322\320\356 \341\325\342\354" }, - { 110, "\262\322\336\324" }, - { 111, "\275\325\322\325\340\335\353\331 \337\343\342\354" }, - { 112, "\275\320\327\335\320\347\325\335\330\325 \332\333\320\322\330\350" }, - { 113, "\272\333\320\322\330\320\342\343\340\320" }, - { 114, "\302\320\321\333\330\346\320 \332\333\320\322\330\350:" }, - { 115, "\272\333\320\322\330\350\330" }, - { 116, "\317\327\353\332 \323\340\320\344\330\347\325\341\332\336\323\336 \330\335\342\325\340\344\325\331\341\320 ScummVM" }, - { 117, "\317\327\353\332 \330\323\340\353. \270\327\334\325\335\325\335\330\325 \355\342\336\323\336 \337\320\340\320\334\325\342\340\320 \335\325 \337\340\325\322\340\320\342\330\342 \330\323\340\343 \335\320 \320\335\323\333\330\331\341\332\336\334 \322 \340\343\341\341\332\343\356" }, - { 118, "\317\327\353\332:" }, - { 119, "\262\333\325\322\336" }, - { 120, "\273\325\322\353\331 \351\325\333\347\336\332" }, - { 121, "\267\320\323\340\343\327\330\342\354" }, - { 122, "\267\320\323\340\343\327\330\342\354 \330\323\340\343:" }, - { 123, "\267\320\323\340\343\327\330\342\354 \341\336\345\340\335\325\335\330\325 \324\333\357 \322\353\321\340\320\335\335\336\331 \330\323\340\353" }, - { 124, "\315\334\343\333\357\342\336\340 MAME OPL" }, - { 125, "MIDI" }, - { 126, "\303\341\330\333\325\335\330\325 MIDI:" }, - { 127, "MT-32" }, - { 128, "\303\341\342\340. MT-32:" }, - { 129, "\315\334\343\333\357\342\336\340 MT-32" }, - { 130, "\274\320\341\350\342\320\321 \323\333\320\322\335\336\323\336 \355\332\340\320\335\320:" }, - { 131, "\275\320\327\335\320\347\330\342\354" }, - { 132, "\274\335\336\323\336 \330\323\340..." }, - { 133, "\274\325\335\356" }, - { 134, "\300\320\327\335\336\325" }, - { 135, "\301\334\325\350\320\335\335\353\331 \340\325\326\330\334 AdLib/MIDI" }, - { 136, "\277\336\324\332\333\356\347\330\342\354 DVD" }, - { 137, "\277\336\324\332\333\356\347\330\342\354 SMB" }, - { 138, "\272\333\330\332 \334\353\350\354\356" }, - { 139, "\274\343\333\354\342\330\344\343\335\332\346\330\357" }, - { 140, "\267\322\343\332\336\322\336\325 \343\341\342-\322\336:" }, - { 141, "\263\340\336\334\332. \334\343\327\353\332\330:" }, - { 142, "\262\353\332\333. \322\341\361" }, - { 143, "\275\320\327\322:" }, - { 144, "\301\325\342\354 \322\353\332\333\356\347\325\335\320" }, - { 145, "\301\325\342\354 \335\325 \335\320\341\342\340\336\325\335\320 (%d)" }, - { 146, "\301\325\342\354 \340\320\321\336\342\320\325\342" }, - { 147, "\301\325\342\354 \340\320\321\336\342\320\325\342, \337\320\337\332\320 \337\336\324\332\333\356\347\325\335\320" }, - { 148, "\275\330\332\336\323\324\320" }, - { 149, "\275\325\342" }, - { 150, "\264\320\342\320 \335\325 \327\320\337\330\341\320\335\320" }, - { 151, "\261\325\327 \334\343\327\353\332\330" }, - { 152, "\262\340\325\334\357 \330\323\340\353 \335\325 \327\320\337\330\341\320\335\336" }, - { 153, "\262\340\325\334\357 \335\325 \327\320\337\330\341\320\335\336" }, - { 154, "\275\325 \327\320\324\320\335" }, - { 155, "\261\325\327 \343\322\325\333\330\347\325\335\330\357" }, - { 156, "OK" }, - { 157, "\307\320\341\342\336\342\320 \327\322\343\332\320:" }, - { 158, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 MIDI" }, - { 159, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 MT-32" }, - { 160, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 \320\343\324\330\336" }, - { 161, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 \323\340\320\344\330\332\330" }, - { 162, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 \323\340\336\334\332\336\341\342\330" }, - { 163, "\315\334\343\333\357\342\336\340 PC \341\337\330\332\325\340\320" }, - { 164, "\277\320\340\336\333\354:" }, - { 165, "\277\343\342\354 \335\325 \357\322\333\357\325\342\341\357 \324\330\340\325\332\342\336\340\330\325\331" }, - { 166, "\277\343\342\354 \335\325 \357\322\333\357\325\342\341\357 \344\320\331\333\336\334" }, - { 167, "\277\343\342\354 \335\325 \335\320\331\324\325\335" }, - { 168, "\277\343\342\330" }, - { 169, "\277\320\343\327\320" }, - { 170, "\262\353\321\325\340\330\342\325 \330\323\340\343:" }, - { 171, "\277\333\320\342\344\336\340\334\320, \324\333\357 \332\336\342\336\340\336\331 \330\323\340\320 \321\353\333\320 \330\327\335\320\347\320\333\354\335\336 \340\320\327\340\320\321\336\342\320\335\320" }, - { 172, "\277\333\320\342\344\336\340\334\320:" }, - { 173, "\262\340\325\334\357 \330\323\340\353: " }, - { 174, "\277\336\326\320\333\343\331\341\342\320, \322\353\321\325\340\330\342\325 \324\325\331\341\342\322\330\325" }, - { 175, "\277\343\342\354 \332 \337\333\320\323\330\335\320\334:" }, - { 176, "\267\322\343\332\336\322\336\325 \343\341\342-\322\336:" }, - { 177, "\275\320\326\334\330\342\325 \332\333\320\322\330\350\343 \324\333\357 \335\320\327\335\320\347\325\335\330\357" }, - { 178, "\262\353\345\336\324" }, - { 179, "\262\353\345\336\324 \330\327 ScummVM" }, - { 180, "\275\325\324\336\341\342\320\342\336\347\335\336 \337\340\320\322 \324\333\357 \347\342\325\335\330\357" }, - { 181, "\276\350\330\321\332\320 \347\342\325\335\330\357" }, - { 182, "\277\325\340\325\335\320\327\335\320\347\330\342\354 \332\333\320\322\330\350\330" }, - { 183, "\303\324\320\333\330\342\354 \330\323\340\343 \330\327 \341\337\330\341\332\320. \275\325 \343\324\320\333\357\325\342 \330\323\340\343 \341 \326\325\341\342\332\336\323\336 \324\330\341\332\320" }, - { 184, "\300\325\326\330\334 \340\320\341\342\340\320:" }, - { 185, "\262\337\340\320\322\336" }, - { 186, "\277\340\320\322\353\331 \351\325\333\347\336\332" }, - { 187, "\277\340\320\322\353\331 \351\325\333\347\336\332" }, - { 188, "\277\336\322\325\340\335\343\342\354" }, - { 189, "\263\340\336\334\332. SFX:" }, - { 190, "SMB" }, - { 191, "\267\320\337\330\341\320\342\354" }, - { 192, "\277\343\342\354 \341\336\345\340: " }, - { 193, "\301\336\345\340\320\335\325\335\330\357 \330\323\340:" }, - { 194, "\301\336\345\340\320\335\330\342\354 \330\323\340\343: " }, - { 195, "\277\336\330\341\332 \327\320\332\336\335\347\325\335!" }, - { 196, "\277\340\336\341\334\336\342\340\325\335\336 %d \324\330\340\325\332\342\336\340\330\331 ..." }, - { 197, "\263\333\320\322\335\336\325 \334\325\335\356 ScummVM" }, - { 198, "ScummVM \335\325 \341\334\336\323 \335\320\331\342\330 \324\322\330\326\336\332 \324\333\357 \327\320\337\343\341\332\320 \322\353\321\340\320\335\335\336\331 \330\323\340\353!" }, - { 199, "ScummVM \335\325 \334\336\326\325\342 \335\320\331\342\330 \330\323\340\343 \322 \343\332\320\327\320\335\335\336\331 \324\330\340\325\332\342\336\340\330\330!" }, - { 200, "ScummVM \335\325 \334\336\326\325\342 \336\342\332\340\353\342\354 \343\332\320\327\320\335\335\343\356 \324\330\340\325\332\342\336\340\330\356!" }, - { 201, "\277\336\330\341\332 \322 \341\337\330\341\332\325 \330\323\340" }, - { 202, "\277\336\330\341\332:" }, - { 203, "\262\353\321\325\340\330\342\325 SoundFont" }, - { 204, "\262\353\321\325\340\330\342\325 \342\325\334\343" }, - { 205, "\262\353\321\325\340\330\342\325 \324\336\337\336\333\335\330\342\325\333\354\335\343\356 \324\330\340\325\332\342\336\340\330\356 \330\323\340\353" }, - { 206, "\262\353\321\325\340\330\342\325 \324\325\331\341\342\322\330\325 \330 \332\333\330\332\335\330\342\325 '\275\320\327\335\320\347\330\342\354'" }, - { 207, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \324\333\357 \342\325\334 GUI" }, - { 208, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \341 \324\336\337\336\333\335\330\342\325\333\354\335\353\334\330 \344\320\331\333\320\334\330" }, - { 209, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \341 \337\333\320\323\330\335\320\334\330" }, - { 210, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \324\333\357 \341\336\345\340\320\335\325\335\330\331" }, - { 211, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \324\333\357 \341\336\345\340\320\335\325\335\330\331" }, - { 212, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \341 \344\320\331\333\320\334\330 \330\323\340\353" }, - { 213, "\307\343\322\341\342\322\330\342\325\333\354\335\336\341\342\354" }, - { 214, "\301\325\340\322\325\340:" }, - { 215, "\301\325\342\325\322\320\357 \337\320\337\332\320:" }, - { 216, "\272\336\340\336\342\332\330\331 \330\324\325\335\342\330\344\330\332\320\342\336\340, \330\341\337\336\333\354\327\343\325\334\353\331 \324\333\357 \330\334\325\335 \341\336\345\340\320\335\325\335\330\331 \330\323\340 \330 \324\333\357 \327\320\337\343\341\332\320 \330\327 \332\336\334\320\335\324\335\336\331 \341\342\340\336\332\330" }, - { 217, "\277\336\332\320\327\320\342\354 \332\333\320\322\330\320\342\343\340\343" }, - { 218, "\277\336\332\320\327\353\322\320\342\354 \332\343\340\341\336\340 \334\353\350\330" }, - { 219, "\277\336\332\320\327\353\322\320\342\354 \341\343\321\342\330\342\340\353 \330 \322\336\341\337\340\336\330\327\322\336\324\330\342\354 \340\325\347\354" }, - { 220, "\277\336\332\320\327\320\342\354/\303\321\340\320\342\354 \332\343\340\341\336\340" }, - { 221, "\277\340\336\337\343\341\342\330\342\354" }, - { 222, "\277\340\336\337\343\341\342\330\342\354 \341\342\340\336\332\343" }, - { 223, "\277\340\336\337\343\341\342\330\342\354 \342\325\332\341\342" }, - { 224, "\277\340\330\332\340\325\337\330\342\354 \332 \323\340\320\335\330\346\320\334" }, - { 225, "\277\340\336\323\340\320\334\334\335\336\325 \334\320\341\350\342\320\321\330\340\336\322\320\335\330\325 (\345\336\340\336\350\325\325 \332\320\347\325\341\342\322\336, \335\336 \334\325\324\333\325\335\335\325\325)" }, - { 226, "\267\322\343\332 \322\332\333/\322\353\332\333" }, - { 227, "SoundFont\353 \337\336\324\324\325\340\324\326\330\322\320\356\342\341\357 \335\325\332\336\342\336\340\353\334\330 \327\322\343\332\336\322\353\334\330 \332\320\340\342\320\334\330, Fluidsynth \330 Timidity" }, - { 228, "SoundFont:" }, - { 229, "\276\327\322" }, - { 230, "\301\337\325\346\330\320\333\354\335\353\325 \340\325\326\330\334\353 \340\325\335\324\325\340\330\335\323\320, \337\336\324\324\325\340\326\330\322\320\325\334\353\325 \335\325\332\336\342\336\340\353\334\330 \330\323\340\320\334\330" }, - { 231, "\263\340\336\334\332\336\341\342\354 \341\337\325\346\330\320\333\354\335\353\345 \327\322\343\332\336\322\353\345 \355\344\344\325\332\342\336\322" }, - { 232, "\303\332\320\327\353\322\320\325\342 \322\353\345\336\324\335\336\325 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \324\333\357 MIDI" }, - { 233, "\303\332\320\327\353\322\320\325\342 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \337\336 \343\334\336\333\347\320\335\330\357 \324\333\357 \322\353\322\336\324\320 \335\320 Roland MT-32/LAPC1/CM32l/CM64" }, - { 234, "\303\332\320\327\353\322\320\325\342 \322\353\345\336\324\335\336\325 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \330\333\330 \355\334\343\333\357\342\336\340 \327\322\343\332\336\322\336\331 \332\320\340\342\353" }, - { 235, "\303\332\320\327\353\322\320\325\342 \337\343\342\354 \332 \324\336\337\336\333\335\330\342\325\333\354\335\353\334 \344\320\331\333\320\334 \324\320\335\335\353\345, \330\341\337\336\333\354\327\343\325\334\353\345 \322\341\325\334\330 \330\323\340\320\334\330, \333\330\321\336 ScummVM" }, - { 236, "\303\332\320\327\353\322\320\325\342 \337\343\342\354 \332 \324\336\337\336\333\335\330\342\325\333\354\335\353\334 \344\320\331\333\320\334 \324\320\335\335\353\345 \324\333\357 \330\323\340\353" }, + { 20, "\315\334\343\333\357\342\336\340 \327\322\343\332\320 Amiga" }, + { 21, "\300\320\341\342\325\340\330\327\320\342\336\340 \341\336 \341\323\333\320\326\330\322\320\335\330\325\334 (16bpp)" }, + { 22, "\315\334\343\333\357\342\336\340 Apple II GS (\336\342\341\343\342\341\342\322\343\325\342)" }, + { 23, "\272\336\340\340\325\332\346\330\357 \341\336\336\342\335\336\350\325\335\330\357 \341\342\336\340\336\335" }, + { 24, "\275\320\327\335\320\347\325\335\335\320\357 \332\333\320\322\330\350\320 : %s" }, + { 25, "\275\320\327\335\320\347\325\335\335\320\357 \332\333\320\322\330\350\320 : \335\325\342" }, + { 26, "\260\343\324\330\336" }, + { 27, "\260\322\342\336\341\336\345\340\320\335\325\335\330\325:" }, + { 28, "\264\336\341\342\343\337\335\353\325 \324\322\330\326\332\330:" }, + { 29, "\276 \337~\340~\336\323\340\320\334\334\325..." }, + { 30, "\275\320\327\335\320\347\330\342\354 \332\333\320\322\330\350\330" }, + { 31, "\262\341\361" }, + { 32, "\317\340\332\336\341\342\354:" }, + { 33, "\315\334\343\333\357\342\336\340 \327\322\343\332\320 C64" }, + { 34, "\276\342\334\325\335\320" }, + { 35, "\275\325 \334\336\323\343 \341\336\327\324\320\342\354 \344\320\331\333" }, + { 36, "\270\327\334\325\335\330\342\354 \336\337\346\330\330 \330\323\340\353" }, + { 37, "\270\327\334\325\335\330\342\354 \323\333\336\321\320\333\354\335\353\325 \336\337\346\330\330 ScummVM" }, + { 38, "\276\342\334\325\342\354\342\325, \325\341\333\330 \343 \322\320\341 \337\336\324\332\333\356\347\325\335\336 Roland-\341\336\322\334\325\341\342\330\334\336\325 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \330 \322\353 \345\336\342\330\342\325 \325\323\336 \330\341\337\336\333\354\327\336\322\320\342\354" }, + { 39, "\262\353\321\340\320\342\354" }, + { 40, "\262\353\321\325\340\330\342\325 \324\325\331\341\342\322\330\325 \324\333\357 \335\320\327\335\320\347\325\335\330\357" }, + { 41, "\276\347\330\341\342\330\342\354 \327\335\320\347\325\335\330\325" }, + { 42, "\267\320\332\340\353\342\354" }, + { 43, "\272\336\340\340\325\332\342\330\340\336\322\320\342\354 \341\336\336\342\335\336\350\325\335\330\325 \341\342\336\340\336\335 \324\333\357 \330\323\340 \341 \340\320\327\340\325\350\325\335\330\325\334 320x200" }, + { 44, "\275\325 \334\336\323\343 \335\320\331\342\330 \324\322\330\326\336\332 \324\333\357 \327\320\337\343\341\332\320 \322\353\321\340\320\335\335\336\331 \330\323\340\353" }, + { 45, "\302\325\332\343\351\330\331 \322\330\324\325\336\340\325\326\330\334:" }, + { 46, "\272\343\340\341\336\340 \322\335\330\327" }, + { 47, "\272\343\340\341\336\340 \322\333\325\322\336" }, + { 48, "\272\343\340\341\336\340 \322\337\340\320\322\336" }, + { 49, "\272\343\340\341\336\340 \322\322\325\340\345" }, + { 50, "\315\334\343\333\357\342\336\340 DOSBox OPL" }, + { 51, "DVD" }, + { 52, "DVD \337\336\324\332\333\356\347\325\335 \343\341\337\325\350\335\336" }, + { 53, "DVD \335\325 \337\336\324\332\333\356\347\325\335" }, + { 54, "\264\320\342\320: " }, + { 55, "\276\342\333\320\324\347\330\332" }, + { 56, "\277\336 \343\334\336\333\347\320\335\330\356" }, + { 57, "\303\324\320\333\330\342\354" }, + { 58, "\267\320\337\340\325\342\330\342\354 \322\353\332\333\356\347\325\335\330\325" }, + { 59, "\261\325\327 \323\340\320\344\330\332\330" }, + { 60, "\275\320\331\324\325\335\336 %d \335\336\322\353\345 \330\323\340 ..." }, + { 61, "\275\320\331\324\325\335\336 %d \335\336\322\353\345 \330\323\340." }, + { 62, "\277\336\332\320\327\320\342\354 " }, + { 63, "\277\336\332\320\327\320\342\354 \332\333\320\322\330\320\342\343\340\343" }, + { 64, "\262\353 \324\325\331\341\342\322\330\342\325\333\354\335\336 \345\336\342\330\342\325 \343\324\320\333\330\342\354 \355\342\336 \341\336\345\340\320\335\325\335\330\325?" }, + { 65, "\262\353 \324\325\331\341\342\322\330\342\325\333\354\335\336 \345\336\342\330\342\325 \343\324\320\333\330\342\354 \343\341\342\320\335\336\322\332\330 \324\333\357 \355\342\336\331 \330\323\340\353?" }, + { 66, "\262\353 \324\325\331\341\342\322\330\342\325\333\354\335\336 \345\336\342\330\342\325 \327\320\337\343\341\342\330\342\354 \324\325\342\325\332\342\336\340 \322\341\325\345 \330\323\340? \315\342\336 \337\336\342\325\335\346\330\320\333\354\335\336 \334\336\326\325\342 \324\336\321\320\322\330\342\354 \321\336\333\354\350\336\325 \332\336\333\330\347\325\341\342\322\336 \330\323\340." }, + { 67, "\262\353 \345\336\342\330\342\325 \327\320\323\340\343\327\330\342\354 \333\330\321\336 \341\336\345\340\320\335\330\342\354 \330\323\340\343?" }, + { 68, "\262\353 \345\336\342\330\342\325 \337\340\336\330\327\322\325\341\342\330 \320\322\342\336\334\320\342\330\347\325\341\332\330\331 \337\336\330\341\332?" }, + { 69, "\262\353 \345\336\342\330\342\325 \322\353\331\342\330?" }, + { 70, "\264\322\336\331\335\336\331 \343\324\320\340" }, + { 71, "\262\335\330\327" }, + { 72, "\262\332\333\356\347\330\342\354 \340\325\326\330\334 Roland GS" }, + { 73, "\264\322\330\326\336\332 \335\325 \337\336\324\324\325\340\326\330\322\320\325\342 \343\340\336\322\325\335\354 \336\342\333\320\324\332\330 '%s'" }, + { 74, "English" }, + { 75, "\276\350\330\321\332\320 \327\320\337\343\341\332\320 \330\323\340\353:" }, + { 76, "\276\350\330\321\332\320 \322\336 \322\340\325\334\357 \337\336\324\332\333\356\347\325\335\330\357 DVD" }, + { 77, "\264\336\337. \337\343\342\354:" }, + { 78, "\315\334\343\333\357\342\336\340 FM Towns" }, + { 79, "\261\353\341\342\340\353\331 \340\325\326\330\334" }, + { 80, "\262\332\333\356\347\325\335\335\353\325 \322 \321\330\333\324 \336\337\346\330\330:" }, + { 81, "\301\322\336\321\336\324\335\353\331 \336\321\327\336\340" }, + { 82, "\277\336\333\335\336\325 \335\320\327\322\320\335\330\325 \330\323\340\353" }, + { 83, "\277\336\333\335\336\355\332\340\320\335\335\353\331 \340\325\326\330\334" }, + { 84, "\303\341\332\336\340\325\335\330\325 GC \337\320\324\320:" }, + { 85, "\307\343\322\341\342\322\330\342\325\333\354\335\336\341\342\354 GC \337\320\324\320:" }, + { 86, "\263\340\344" }, + { 87, "\303\341\342\340\336\331\341\342\322\336 GM:" }, + { 88, "\317\327\353\332 GUI:" }, + { 89, "\300\330\341\336\322\320\333\332\320 GUI:" }, + { 90, "\270\323\340\320" }, + { 91, "\275\325\342 \344\320\331\333\336\322 \330\323\340\353" }, + { 92, "Game Id \335\325 \337\336\324\324\325\340\326\330\322\320\325\342\341\357" }, + { 93, "\263\324\325 \330\323\340\320: " }, + { 94, "\263\333\336\321\320\333\354\335\336\325 \334\325\335\356" }, + { 95, "\277\325\340\325\331\342\330 \335\320 \324\330\340\325\332\342\336\340\330\356 \343\340\336\322\335\325\334 \322\353\350\325" }, + { 96, "\262\322\325\340\345" }, + { 97, "\263\340\320\344\330\332\320" }, + { 98, "\263\340\320\344. \340\325\326\330\334:" }, + { 99, "\305\320\340\324\322\320\340\335\336\325 \334\320\341\350\342\320\321\330\340\336\322\320\335\330\325 (\321\353\341\342\340\336, \335\336 \335\330\327\332\336\323\336 \332\320\347\325\341\342\322\320)" }, + { 100, "Hercules \317\335\342\320\340\335\353\331" }, + { 101, "Hercules \267\325\333\325\335\353\331" }, + { 102, "\301\337\340\357\342\320\342\354 \337\320\335\325\333\354 \330\335\341\342\340\343\334\325\335\342\336\322" }, + { 103, "\262\353\341\336\332\336\325 \332\320\347\325\341\342\322\336 \327\322\343\332\320 (\334\325\324\333\325\335\335\325\325) (\340\325\321\343\342)" }, + { 104, "\261\276\333\354\350\330\325 \327\335\320\347\325\335\330\357 \327\320\324\320\356\342 \333\343\347\350\325\325 \332\320\347\325\341\342\322\336 \327\322\343\332\320, \336\324\335\320\332\336 \336\335\330 \334\336\323\343\342 \335\325 \337\336\324\324\325\340\326\330\322\320\342\354\341\357 \322\320\350\325\331 \327\322\343\332\336\322\336\331 \332\320\340\342\336\331" }, + { 105, "\303\324\325\340\326\330\322\320\331\342\325 \332\333\320\322\330\350\343 Shift \324\333\357 \342\336\323\336, \347\342\336\321\353 \324\336\321\320\322\330\342\354 \335\325\341\332\336\333\354\332\336 \330\323\340" }, + { 106, "\263\336\340\330\327\336\335\342\320\333\354\335\353\331 underscan:" }, + { 107, "\315\334\343\333\357\342\336\340 IBM PCjr" }, + { 108, "ID:" }, + { 109, "\270\335\330\346\330\320\333\330\327\320\346\330\357 \341\325\342\330" }, + { 110, "\275\320\347\320\333\354\335\353\331 \334\320\341\350\342\320\321 \322\325\340\345\335\325\323\336 \355\332\340\320\335\320:" }, + { 111, "\275\320\341\342\340\320\330\322\320\356 \355\334\343\333\357\342\336\340 MT-32" }, + { 112, "\275\320\341\342\340\320\330\322\320\356 \341\325\342\354" }, + { 113, "\262\322\336\324" }, + { 114, "\275\325\322\325\340\335\353\331 \337\343\342\354" }, + { 115, "\275\320\327\335\320\347\325\335\330\325 \332\333\320\322\330\350" }, + { 116, "\272\333\320\322\330\320\342\343\340\320" }, + { 117, "\302\320\321\333\330\346\320 \332\333\320\322\330\350:" }, + { 118, "\272\333\320\322\330\350\330" }, + { 119, "\317\327\353\332 \323\340\320\344\330\347\325\341\332\336\323\336 \330\335\342\325\340\344\325\331\341\320 ScummVM" }, + { 120, "\317\327\353\332 \330\323\340\353. \270\327\334\325\335\325\335\330\325 \355\342\336\323\336 \337\320\340\320\334\325\342\340\320 \335\325 \337\340\325\322\340\320\342\330\342 \330\323\340\343 \335\320 \320\335\323\333\330\331\341\332\336\334 \322 \340\343\341\341\332\343\356" }, + { 121, "\317\327\353\332:" }, + { 122, "\262\333\325\322\336" }, + { 123, "\273\325\322\353\331 \351\325\333\347\336\332" }, + { 124, "\267\320\323\340\343\327\330\342\354" }, + { 125, "\267\320\323\340\343\327\330\342\354 \330\323\340\343:" }, + { 126, "\267\320\323\340\343\327\330\342\354 \341\336\345\340\335\325\335\330\325 \324\333\357 \322\353\321\340\320\335\335\336\331 \330\323\340\353" }, + { 127, "\315\334\343\333\357\342\336\340 MAME OPL" }, + { 128, "MIDI" }, + { 129, "\303\341\330\333\325\335\330\325 MIDI:" }, + { 130, "MT-32" }, + { 131, "\303\341\342\340. MT-32:" }, + { 132, "\315\334\343\333\357\342\336\340 MT-32" }, + { 133, "\274\320\341\350\342\320\321 \323\333\320\322\335\336\323\336 \355\332\340\320\335\320:" }, + { 134, "\275\320\327\335\320\347\330\342\354" }, + { 135, "\274\335\336\323\336 \330\323\340..." }, + { 136, "\274\325\335\356" }, + { 137, "\300\320\327\335\336\325" }, + { 138, "\301\334\325\350\320\335\335\353\331 \340\325\326\330\334 AdLib/MIDI" }, + { 139, "\277\336\324\332\333\356\347\330\342\354 DVD" }, + { 140, "\277\336\324\332\333\356\347\330\342\354 SMB" }, + { 141, "\272\333\330\332 \334\353\350\354\356" }, + { 142, "\274\343\333\354\342\330\344\343\335\332\346\330\357" }, + { 143, "\267\322\343\332\336\322\336\325 \343\341\342-\322\336:" }, + { 144, "\263\340\336\334\332. \334\343\327\353\332\330:" }, + { 145, "\262\353\332\333. \322\341\361" }, + { 146, "\275\320\327\322:" }, + { 147, "\301\325\342\354 \322\353\332\333\356\347\325\335\320" }, + { 148, "\301\325\342\354 \335\325 \335\320\341\342\340\336\325\335\320 (%d)" }, + { 149, "\301\325\342\354 \340\320\321\336\342\320\325\342" }, + { 150, "\301\325\342\354 \340\320\321\336\342\320\325\342, \337\320\337\332\320 \337\336\324\332\333\356\347\325\335\320" }, + { 151, "\275\330\332\336\323\324\320" }, + { 152, "\275\325\342" }, + { 153, "\264\320\342\320 \335\325 \327\320\337\330\341\320\335\320" }, + { 154, "\261\325\327 \334\343\327\353\332\330" }, + { 155, "\262\340\325\334\357 \330\323\340\353 \335\325 \327\320\337\330\341\320\335\336" }, + { 156, "\262\340\325\334\357 \335\325 \327\320\337\330\341\320\335\336" }, + { 157, "\275\325 \327\320\324\320\335" }, + { 158, "\261\325\327 \343\322\325\333\330\347\325\335\330\357" }, + { 159, "OK" }, + { 160, "\307\320\341\342\336\342\320 \327\322\343\332\320:" }, + { 161, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 MIDI" }, + { 162, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 MT-32" }, + { 163, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 \320\343\324\330\336" }, + { 164, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 \323\340\320\344\330\332\330" }, + { 165, "\277\325\340\325\332\340\353\342\354 \323\333\336\321\320\333\354\335\353\325 \343\341\342\320\335\336\322\332\330 \323\340\336\334\332\336\341\342\330" }, + { 166, "\315\334\343\333\357\342\336\340 PC \341\337\330\332\325\340\320" }, + { 167, "\277\320\340\336\333\354:" }, + { 168, "\277\343\342\354 \335\325 \357\322\333\357\325\342\341\357 \324\330\340\325\332\342\336\340\330\325\331" }, + { 169, "\277\343\342\354 \335\325 \357\322\333\357\325\342\341\357 \344\320\331\333\336\334" }, + { 170, "\277\343\342\354 \335\325 \335\320\331\324\325\335" }, + { 171, "\277\343\342\330" }, + { 172, "\277\320\343\327\320" }, + { 173, "\262\353\321\325\340\330\342\325 \330\323\340\343:" }, + { 174, "\277\333\320\342\344\336\340\334\320, \324\333\357 \332\336\342\336\340\336\331 \330\323\340\320 \321\353\333\320 \330\327\335\320\347\320\333\354\335\336 \340\320\327\340\320\321\336\342\320\335\320" }, + { 175, "\277\333\320\342\344\336\340\334\320:" }, + { 176, "\262\340\325\334\357 \330\323\340\353: " }, + { 177, "\277\336\326\320\333\343\331\341\342\320, \322\353\321\325\340\330\342\325 \324\325\331\341\342\322\330\325" }, + { 178, "\277\343\342\354 \332 \337\333\320\323\330\335\320\334:" }, + { 179, "\267\322\343\332\336\322\336\325 \343\341\342-\322\336:" }, + { 180, "\275\320\326\334\330\342\325 \332\333\320\322\330\350\343 \324\333\357 \335\320\327\335\320\347\325\335\330\357" }, + { 181, "\262\353\345\336\324" }, + { 182, "\262\353\345\336\324 \330\327 ScummVM" }, + { 183, "\275\325\324\336\341\342\320\342\336\347\335\336 \337\340\320\322 \324\333\357 \347\342\325\335\330\357" }, + { 184, "\276\350\330\321\332\320 \347\342\325\335\330\357" }, + { 185, "\277\325\340\325\335\320\327\335\320\347\330\342\354 \332\333\320\322\330\350\330" }, + { 186, "\303\324\320\333\330\342\354 \330\323\340\343 \330\327 \341\337\330\341\332\320. \275\325 \343\324\320\333\357\325\342 \330\323\340\343 \341 \326\325\341\342\332\336\323\336 \324\330\341\332\320" }, + { 187, "\300\325\326\330\334 \340\320\341\342\340\320:" }, + { 188, "\262\337\340\320\322\336" }, + { 189, "\277\340\320\322\353\331 \351\325\333\347\336\332" }, + { 190, "\277\340\320\322\353\331 \351\325\333\347\336\332" }, + { 191, "\277\336\322\325\340\335\343\342\354" }, + { 192, "\263\340\336\334\332. SFX:" }, + { 193, "SMB" }, + { 194, "\267\320\337\330\341\320\342\354" }, + { 195, "\277\343\342\354 \341\336\345\340: " }, + { 196, "\301\336\345\340\320\335\325\335\330\357 \330\323\340:" }, + { 197, "\301\336\345\340\320\335\330\342\354 \330\323\340\343: " }, + { 198, "\277\336\330\341\332 \327\320\332\336\335\347\325\335!" }, + { 199, "\277\340\336\341\334\336\342\340\325\335\336 %d \324\330\340\325\332\342\336\340\330\331 ..." }, + { 200, "\263\333\320\322\335\336\325 \334\325\335\356 ScummVM" }, + { 201, "ScummVM \335\325 \341\334\336\323 \335\320\331\342\330 \324\322\330\326\336\332 \324\333\357 \327\320\337\343\341\332\320 \322\353\321\340\320\335\335\336\331 \330\323\340\353!" }, + { 202, "ScummVM \335\325 \334\336\326\325\342 \335\320\331\342\330 \330\323\340\343 \322 \343\332\320\327\320\335\335\336\331 \324\330\340\325\332\342\336\340\330\330!" }, + { 203, "ScummVM \335\325 \334\336\326\325\342 \336\342\332\340\353\342\354 \343\332\320\327\320\335\335\343\356 \324\330\340\325\332\342\336\340\330\356!" }, + { 204, "\277\336\330\341\332 \322 \341\337\330\341\332\325 \330\323\340" }, + { 205, "\277\336\330\341\332:" }, + { 206, "\262\353\321\325\340\330\342\325 SoundFont" }, + { 207, "\262\353\321\325\340\330\342\325 \342\325\334\343" }, + { 208, "\262\353\321\325\340\330\342\325 \324\336\337\336\333\335\330\342\325\333\354\335\343\356 \324\330\340\325\332\342\336\340\330\356 \330\323\340\353" }, + { 209, "\262\353\321\325\340\330\342\325 \324\325\331\341\342\322\330\325 \330 \332\333\330\332\335\330\342\325 '\275\320\327\335\320\347\330\342\354'" }, + { 210, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \324\333\357 \342\325\334 GUI" }, + { 211, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \341 \324\336\337\336\333\335\330\342\325\333\354\335\353\334\330 \344\320\331\333\320\334\330" }, + { 212, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \341 \337\333\320\323\330\335\320\334\330" }, + { 213, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \324\333\357 \341\336\345\340\320\335\325\335\330\331" }, + { 214, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \324\333\357 \341\336\345\340\320\335\325\335\330\331" }, + { 215, "\262\353\321\325\340\330\342\325 \324\330\340\325\332\342\336\340\330\356 \341 \344\320\331\333\320\334\330 \330\323\340\353" }, + { 216, "\307\343\322\341\342\322\330\342\325\333\354\335\336\341\342\354" }, + { 217, "\301\325\340\322\325\340:" }, + { 218, "\301\325\342\325\322\320\357 \337\320\337\332\320:" }, + { 219, "\272\336\340\336\342\332\330\331 \330\324\325\335\342\330\344\330\332\320\342\336\340, \330\341\337\336\333\354\327\343\325\334\353\331 \324\333\357 \330\334\325\335 \341\336\345\340\320\335\325\335\330\331 \330\323\340 \330 \324\333\357 \327\320\337\343\341\332\320 \330\327 \332\336\334\320\335\324\335\336\331 \341\342\340\336\332\330" }, + { 220, "\277\336\332\320\327\320\342\354 \332\333\320\322\330\320\342\343\340\343" }, + { 221, "\277\336\332\320\327\353\322\320\342\354 \332\343\340\341\336\340 \334\353\350\330" }, + { 222, "\277\336\332\320\327\353\322\320\342\354 \341\343\321\342\330\342\340\353 \330 \322\336\341\337\340\336\330\327\322\336\324\330\342\354 \340\325\347\354" }, + { 223, "\277\336\332\320\327\320\342\354/\303\321\340\320\342\354 \332\343\340\341\336\340" }, + { 224, "\277\340\336\337\343\341\342\330\342\354" }, + { 225, "\277\340\336\337\343\341\342\330\342\354 \341\342\340\336\332\343" }, + { 226, "\277\340\336\337\343\341\342\330\342\354 \342\325\332\341\342" }, + { 227, "\277\340\330\332\340\325\337\330\342\354 \332 \323\340\320\335\330\346\320\334" }, + { 228, "\277\340\336\323\340\320\334\334\335\336\325 \334\320\341\350\342\320\321\330\340\336\322\320\335\330\325 (\345\336\340\336\350\325\325 \332\320\347\325\341\342\322\336, \335\336 \334\325\324\333\325\335\335\325\325)" }, + { 229, "\267\322\343\332 \322\332\333/\322\353\332\333" }, + { 230, "SoundFont\353 \337\336\324\324\325\340\324\326\330\322\320\356\342\341\357 \335\325\332\336\342\336\340\353\334\330 \327\322\343\332\336\322\353\334\330 \332\320\340\342\320\334\330, Fluidsynth \330 Timidity" }, + { 231, "SoundFont:" }, + { 232, "\276\327\322" }, + { 233, "\301\337\325\346\330\320\333\354\335\353\325 \340\325\326\330\334\353 \340\325\335\324\325\340\330\335\323\320, \337\336\324\324\325\340\326\330\322\320\325\334\353\325 \335\325\332\336\342\336\340\353\334\330 \330\323\340\320\334\330" }, + { 234, "\263\340\336\334\332\336\341\342\354 \341\337\325\346\330\320\333\354\335\353\345 \327\322\343\332\336\322\353\345 \355\344\344\325\332\342\336\322" }, + { 235, "\303\332\320\327\353\322\320\325\342 \322\353\345\336\324\335\336\325 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \324\333\357 MIDI" }, + { 236, "\303\332\320\327\353\322\320\325\342 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \337\336 \343\334\336\333\347\320\335\330\357 \324\333\357 \322\353\322\336\324\320 \335\320 Roland MT-32/LAPC1/CM32l/CM64" }, { 237, "\303\332\320\327\353\322\320\325\342 \322\353\345\336\324\335\336\325 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \330\333\330 \355\334\343\333\357\342\336\340 \327\322\343\332\336\322\336\331 \332\320\340\342\353" }, - { 238, "\303\332\320\327\353\322\320\325\342 \337\343\342\354 \332 \341\336\345\340\320\335\325\335\330\357\334 \330\323\340\353" }, - { 239, "\276\327\322\343\347\332\320" }, - { 240, "\263\340\336\334\332. \336\327\322\343\347\332\330:" }, - { 241, "\301\342\320\335\324\320\340\342\335\353\331 \340\320\341\342\325\340\330\327\320\342\336\340 (16bpp)" }, - { 242, "\267\320\337\343\341\342\330\342\354 \322\353\321\340\320\335\335\343\356 \330\323\340\343" }, - { 243, "\301\336\341\342\336\357\335\330\325:" }, - { 244, "\301\343\321" }, - { 245, "\301\332\336\340\336\341\342\354 \342\330\342\340\336\322:" }, - { 246, "\301\343\321\342\330\342\340\353" }, - { 247, "\301\334\325\335\330\342\354 \323\325\340\336\357" }, - { 248, "\302\320\337 \324\333\357 \333\325\322\336\323\336 \351\325\333\347\332\320, \324\322\336\331\335\336\331 \342\320\337 \324\333\357 \337\340\320\322\336\323\336 \351\325\333\347\332\320" }, - { 249, "\302\325\332\341\342 \330 \336\327\322\343\347\332\320:" }, - { 250, "\275\325 \334\336\323\343 \337\330\341\320\342\354 \322 \322\353\321\340\320\335\335\343\356 \324\330\340\325\332\342\336\340\330\356. \277\336\326\320\333\343\331\341\342\320, \343\332\320\326\330\342\325 \324\340\343\323\343\356." }, - { 251, "\263\324\325 \342\325\334\353:" }, - { 252, "\302\325\334\320:" }, - { 253, "\315\342\336\342 ID \330\323\340\353 \343\326\325 \330\341\337\336\333\354\327\343\325\342\341\357. \277\336\326\320\333\343\331\341\342\320, \322\353\321\325\340\330\342\325 \324\340\343\323\336\331." }, - { 254, "\315\342\320 \330\323\340\320 \335\325 \337\336\324\324\325\340\326\330\322\320\325\342 \327\320\323\340\343\327\332\343 \341\336\345\340\320\335\325\335\330\331 \347\325\340\325\327 \323\333\320\322\335\336\325 \334\325\335\356." }, - { 255, "\262\340\325\334\357: " }, - { 256, "\262\340\325\334\357 \337\336\324\332\333\356\347\325\335\330\357 \332 \341\325\342\330 \330\341\342\325\332\333\336" }, - { 257, "\301\334\325\351\325\335\330\325 \332\320\341\320\335\330\331 \337\336 \336\341\330 X" }, - { 258, "\301\334\325\351\325\335\330\325 \332\320\341\320\335\330\331 \337\336 \336\341\330 Y" }, - { 259, "\300\325\326\330\334 \342\320\347\337\320\324\320 \322\353\332\333\356\347\325\335." }, - { 260, "\300\325\326\330\334 \342\320\347\337\320\324\320 \322\332\333\356\347\325\335." }, - { 261, "\275\320\341\342\336\357\351\330\331 Roland MT-32 (\327\320\337\340\325\342\330\342\354 \355\334\343\333\357\346\330\356 GM)" }, - { 262, "\262\353\332\333\356\347\320\325\342 \334\320\337\337\330\335\323 General MIDI \324\333\357 \330\323\340 \341 \327\322\343\332\336\322\336\331 \324\336\340\336\326\332\336\331 \324\333\357 Roland MT-32" }, - { 263, "\275\325\330\327\322\325\341\342\335\336" }, - { 264, "\275\325\330\327\322\325\341\342\335\320\357 \336\350\330\321\332\320" }, - { 265, "\276\342\332\333\356\347\330\342\354 DVD" }, - { 266, "\276\342\332\333\356\347\342\354 SMB" }, - { 267, "\261\325\327 \334\320\341\350\342\320\321\330\340\336\322\320\335\330\357 (\335\343\326\335\336 \321\343\324\325\342 \337\340\336\332\340\343\347\330\322\320\342\354 \322\333\325\322\336 \330 \322\337\340\320\322\336)" }, - { 268, "\275\325\337\336\324\324\325\340\326\330\322\320\325\334\353\331 \340\325\326\330\334 \346\322\325\342\320" }, - { 269, "\301\336\345\340\320\335\325\335\330\325 \321\325\327 \330\334\325\335\330" }, - { 270, "\262\322\325\340\345" }, - { 271, "\270\341\337\336\333\354\327\336\322\320\342\354 \330 MIDI \330 AdLib \324\333\357 \323\325\335\325\340\320\346\330\330 \327\322\343\332\320" }, - { 272, "\270\341\337\336\333\354\327\336\322\320\342\354 \343\337\340\320\322\333\325\335\330\325 \332\343\340\341\336\340\336\334 \332\320\332 \335\320 \342\340\325\332\337\320\324\325 \333\325\337\342\336\337\336\322" }, - { 273, "\277\336\333\354\327\336\322\320\342\325\333\354:" }, - { 274, "\270\341\337\336\333\354\327\343\356 \324\340\320\331\322\325\340 SDL " }, - { 275, "\262\325\340\342\330\332\320\333\354\335\353\331 underscan:" }, - { 276, "\262\330\324\325\336" }, - { 277, "\262\330\340\342\343\320\333\354\335\320\357 \332\333\320\322\330\320\342\343\340\320" }, - { 278, "\263\340\336\334\332\336\341\342\354" }, - { 279, "Windows MIDI" }, - { 280, "\275\325\324\336\341\342\320\342\336\347\335\336 \337\340\320\322 \324\333\357 \327\320\337\330\341\330" }, - { 281, "\276\350\330\321\332\320 \327\320\337\330\341\330 \324\320\335\335\353\345" }, - { 282, "\264\320" }, - { 283, "\262\353 \324\336\333\326\335\353 \337\325\340\325\327\320\337\343\341\342\330\342\354 ScummVM \347\342\336\321\353 \337\340\330\334\325\335\330\342\354 \330\327\334\325\335\325\335\330\357." }, - { 284, "\267\336\335\320" }, - { 285, "\303\334\325\335\354\350. \334\320\341\350\342\320\321" }, - { 286, "\303\322\325\333. \334\320\341\350\342\320\321" }, - { 287, "\332\320\326\324\353\325 10 \334\330\335\343\342" }, - { 288, "\332\320\326\324\353\325 15 \334\330\335\343\342" }, - { 289, "\332\320\326\324\353\325 30 \334\330\335\343\342" }, - { 290, "\332\320\326\324\353\325 5 \334\330\335\343\342" }, - { 291, "\276 \337\340\336~\323~\340\320\334\334\325" }, - { 292, "~\264~\336\321. \330\323\340\343..." }, - { 293, "\276~\342~\334\325\335\320" }, - { 294, "~\267~\320\332\340\353\342\354" }, - { 295, "\276~\337~\346\330\330 \330\323\340\353..." }, - { 296, "~\277~\336\334\336\351\354" }, - { 297, "\303\337\340\320\322\333\325\335\330\325 \321\336\357\334\330 \322 Indy" }, - { 298, "~\272~\333\320\322\330\350\330" }, - { 299, "\273\325\322\336\340\343\332\330\331 \340\325\326\330\334" }, - { 300, "~\267~\320\323\340\343\327\330\342\354" }, - { 301, "~\267~\320\323\340\343\327\330\342\354..." }, - { 302, "~\301~\333\325\324" }, - { 303, "~O~K" }, - { 304, "~\276~\337\346\330\330" }, - { 305, "~\276~\337\346\330\330..." }, - { 306, "~\277~\340\325\324" }, - { 307, "~\262~\353\345\336\324" }, - { 308, "~\303~\324\320\333\330\342\354 \330\323\340\343" }, - { 309, "\277\340\336\324\336\333~\326~\330\342\354" }, - { 310, "~\262~\353\331\342\330 \322 \323\333\320\322\335\336\325 \334\325\335\356" }, - { 311, "~\267~\320\337\330\341\320\342\354" }, - { 312, "\277~\343~\341\332" }, - { 313, "\277\325\340\325\345\336\324\353 \320\332\342\330\322\330\340\336\322\320\335\353" }, - { 314, "\315\344\344\325\332\342\353 \322\336\324\353 \322\332\333\356\347\325\335\353" }, - { 315, "\300\325\326\330\334 \321\353\341\342\340\336\323\336 \337\325\340\325\345\336\324\320 \320\332\342\330\322\330\340\336\322\320\335" }, + { 238, "\303\332\320\327\353\322\320\325\342 \337\343\342\354 \332 \324\336\337\336\333\335\330\342\325\333\354\335\353\334 \344\320\331\333\320\334 \324\320\335\335\353\345, \330\341\337\336\333\354\327\343\325\334\353\345 \322\341\325\334\330 \330\323\340\320\334\330, \333\330\321\336 ScummVM" }, + { 239, "\303\332\320\327\353\322\320\325\342 \337\343\342\354 \332 \324\336\337\336\333\335\330\342\325\333\354\335\353\334 \344\320\331\333\320\334 \324\320\335\335\353\345 \324\333\357 \330\323\340\353" }, + { 240, "\303\332\320\327\353\322\320\325\342 \322\353\345\336\324\335\336\325 \327\322\343\332\336\322\336\325 \343\341\342\340\336\331\341\342\322\336 \330\333\330 \355\334\343\333\357\342\336\340 \327\322\343\332\336\322\336\331 \332\320\340\342\353" }, + { 241, "\303\332\320\327\353\322\320\325\342 \337\343\342\354 \332 \341\336\345\340\320\335\325\335\330\357\334 \330\323\340\353" }, + { 242, "\276\327\322\343\347\332\320" }, + { 243, "\263\340\336\334\332. \336\327\322\343\347\332\330:" }, + { 244, "\301\342\320\335\324\320\340\342\335\353\331 \340\320\341\342\325\340\330\327\320\342\336\340 (16bpp)" }, + { 245, "\267\320\337\343\341\342\330\342\354 \322\353\321\340\320\335\335\343\356 \330\323\340\343" }, + { 246, "\301\336\341\342\336\357\335\330\325:" }, + { 247, "\301\343\321" }, + { 248, "\301\332\336\340\336\341\342\354 \342\330\342\340\336\322:" }, + { 249, "\301\343\321\342\330\342\340\353" }, + { 250, "\301\334\325\335\330\342\354 \323\325\340\336\357" }, + { 251, "\302\320\337 \324\333\357 \333\325\322\336\323\336 \351\325\333\347\332\320, \324\322\336\331\335\336\331 \342\320\337 \324\333\357 \337\340\320\322\336\323\336 \351\325\333\347\332\320" }, + { 252, "\302\325\332\341\342 \330 \336\327\322\343\347\332\320:" }, + { 253, "\275\325 \334\336\323\343 \337\330\341\320\342\354 \322 \322\353\321\340\320\335\335\343\356 \324\330\340\325\332\342\336\340\330\356. \277\336\326\320\333\343\331\341\342\320, \343\332\320\326\330\342\325 \324\340\343\323\343\356." }, + { 254, "\263\324\325 \342\325\334\353:" }, + { 255, "\302\325\334\320:" }, + { 256, "\315\342\336\342 ID \330\323\340\353 \343\326\325 \330\341\337\336\333\354\327\343\325\342\341\357. \277\336\326\320\333\343\331\341\342\320, \322\353\321\325\340\330\342\325 \324\340\343\323\336\331." }, + { 257, "\315\342\320 \330\323\340\320 \335\325 \337\336\324\324\325\340\326\330\322\320\325\342 \327\320\323\340\343\327\332\343 \341\336\345\340\320\335\325\335\330\331 \347\325\340\325\327 \323\333\320\322\335\336\325 \334\325\335\356." }, + { 258, "\262\340\325\334\357: " }, + { 259, "\262\340\325\334\357 \337\336\324\332\333\356\347\325\335\330\357 \332 \341\325\342\330 \330\341\342\325\332\333\336" }, + { 260, "\301\334\325\351\325\335\330\325 \332\320\341\320\335\330\331 \337\336 \336\341\330 X" }, + { 261, "\301\334\325\351\325\335\330\325 \332\320\341\320\335\330\331 \337\336 \336\341\330 Y" }, + { 262, "\300\325\326\330\334 \342\320\347\337\320\324\320 \322\353\332\333\356\347\325\335." }, + { 263, "\300\325\326\330\334 \342\320\347\337\320\324\320 \322\332\333\356\347\325\335." }, + { 264, "\275\320\341\342\336\357\351\330\331 Roland MT-32 (\327\320\337\340\325\342\330\342\354 \355\334\343\333\357\346\330\356 GM)" }, + { 265, "\262\353\332\333\356\347\320\325\342 \334\320\337\337\330\335\323 General MIDI \324\333\357 \330\323\340 \341 \327\322\343\332\336\322\336\331 \324\336\340\336\326\332\336\331 \324\333\357 Roland MT-32" }, + { 266, "\275\325\330\327\322\325\341\342\335\336" }, + { 267, "\275\325\330\327\322\325\341\342\335\320\357 \336\350\330\321\332\320" }, + { 268, "\276\342\332\333\356\347\330\342\354 DVD" }, + { 269, "\276\342\332\333\356\347\342\354 SMB" }, + { 270, "\261\325\327 \334\320\341\350\342\320\321\330\340\336\322\320\335\330\357 (\335\343\326\335\336 \321\343\324\325\342 \337\340\336\332\340\343\347\330\322\320\342\354 \322\333\325\322\336 \330 \322\337\340\320\322\336)" }, + { 271, "\275\325\337\336\324\324\325\340\326\330\322\320\325\334\353\331 \340\325\326\330\334 \346\322\325\342\320" }, + { 272, "\301\336\345\340\320\335\325\335\330\325 \321\325\327 \330\334\325\335\330" }, + { 273, "\262\322\325\340\345" }, + { 274, "\270\341\337\336\333\354\327\336\322\320\342\354 \330 MIDI \330 AdLib \324\333\357 \323\325\335\325\340\320\346\330\330 \327\322\343\332\320" }, + { 275, "\270\341\337\336\333\354\327\336\322\320\342\354 \343\337\340\320\322\333\325\335\330\325 \332\343\340\341\336\340\336\334 \332\320\332 \335\320 \342\340\325\332\337\320\324\325 \333\325\337\342\336\337\336\322" }, + { 276, "\277\336\333\354\327\336\322\320\342\325\333\354:" }, + { 277, "\270\341\337\336\333\354\327\343\356 \324\340\320\331\322\325\340 SDL " }, + { 278, "\262\325\340\342\330\332\320\333\354\335\353\331 underscan:" }, + { 279, "\262\330\324\325\336" }, + { 280, "\262\330\340\342\343\320\333\354\335\320\357 \332\333\320\322\330\320\342\343\340\320" }, + { 281, "\263\340\336\334\332\336\341\342\354" }, + { 282, "Windows MIDI" }, + { 283, "\275\325\324\336\341\342\320\342\336\347\335\336 \337\340\320\322 \324\333\357 \327\320\337\330\341\330" }, + { 284, "\276\350\330\321\332\320 \327\320\337\330\341\330 \324\320\335\335\353\345" }, + { 285, "\264\320" }, + { 286, "\262\353 \324\336\333\326\335\353 \337\325\340\325\327\320\337\343\341\342\330\342\354 ScummVM \347\342\336\321\353 \337\340\330\334\325\335\330\342\354 \330\327\334\325\335\325\335\330\357." }, + { 287, "\267\336\335\320" }, + { 288, "\303\334\325\335\354\350. \334\320\341\350\342\320\321" }, + { 289, "\303\322\325\333. \334\320\341\350\342\320\321" }, + { 290, "\332\320\326\324\353\325 10 \334\330\335\343\342" }, + { 291, "\332\320\326\324\353\325 15 \334\330\335\343\342" }, + { 292, "\332\320\326\324\353\325 30 \334\330\335\343\342" }, + { 293, "\332\320\326\324\353\325 5 \334\330\335\343\342" }, + { 294, "\276 \337\340\336~\323~\340\320\334\334\325" }, + { 295, "~\264~\336\321. \330\323\340\343..." }, + { 296, "\276~\342~\334\325\335\320" }, + { 297, "~\267~\320\332\340\353\342\354" }, + { 298, "\276~\337~\346\330\330 \330\323\340\353..." }, + { 299, "~\277~\336\334\336\351\354" }, + { 300, "\303\337\340\320\322\333\325\335\330\325 \321\336\357\334\330 \322 Indy" }, + { 301, "~\272~\333\320\322\330\350\330" }, + { 302, "\273\325\322\336\340\343\332\330\331 \340\325\326\330\334" }, + { 303, "~\267~\320\323\340\343\327\330\342\354" }, + { 304, "~\267~\320\323\340\343\327\330\342\354..." }, + { 305, "~\301~\333\325\324" }, + { 306, "~O~K" }, + { 307, "~\276~\337\346\330\330" }, + { 308, "~\276~\337\346\330\330..." }, + { 309, "~\277~\340\325\324" }, + { 310, "~\262~\353\345\336\324" }, + { 311, "~\303~\324\320\333\330\342\354 \330\323\340\343" }, + { 312, "\277\340\336\324\336\333~\326~\330\342\354" }, + { 313, "~\262~\353\331\342\330 \322 \323\333\320\322\335\336\325 \334\325\335\356" }, + { 314, "~\267~\320\337\330\341\320\342\354" }, + { 315, "\277~\343~\341\332" }, + { 316, "\277\325\340\325\345\336\324\353 \320\332\342\330\322\330\340\336\322\320\335\353" }, + { 317, "\315\344\344\325\332\342\353 \322\336\324\353 \322\332\333\356\347\325\335\353" }, + { 318, "\300\325\326\330\334 \321\353\341\342\340\336\323\336 \337\325\340\325\345\336\324\320 \320\332\342\330\322\330\340\336\322\320\335" }, + { -1, NULL } +}; + +static const PoMessageEntry _translation_hu_HU[] = { + { 0, "Project-Id-Version: ScummVM VERSION\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-08-11 22:12+0100\nPO-Revision-Date: 2009-11-25 07:42-0500\nLast-Translator: Alex Bevilacqua <alexbevi@gmail.com>\nLanguage-Team: Hungarian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=cp1250\nContent-Transfer-Encoding: 8bit\nLanguage: \nPlural-Forms: nplurals=2; plural=(n != 1);\n" }, + { 14, "<alap\351rtelmezett>" }, + { 16, "AdLib vezet :" }, + { 17, "AdLib vezet :" }, + { 20, "AdLib vezet :" }, + { 23, "Aspect adag korrekci\363" }, + { 26, "Hang" }, + { 27, "Automatikus ment\351s:" }, + { 30, "Kulcsok" }, + { 33, "AdLib vezet :" }, + { 45, "Renderel\351si m\363d:" }, + { 56, "<alap\351rtelmezett>" }, + { 72, "K\351pess\351 Roland GS Mode" }, + { 77, "Extra \332tvonal:" }, + { 79, "Grafikus m\363d:" }, + { 83, "Teljes k\351perny s m\363d:" }, + { 89, "Lek\351pez eszk\366z GUI:" }, + { 93, "Extra \332tvonal:" }, + { 97, "Grafik\341val" }, + { 98, "Grafikus m\363d:" }, + { 118, "Kulcsok" }, + { 127, "AdLib vezet :" }, + { 129, "MIDI nyeres\351g:" }, + { 131, "Zene mennyis\351g:" }, + { 138, "Vegyes AdLib/MIDI m\363d" }, + { 143, "Zene mennyis\351g:" }, + { 144, "Zene mennyis\351g:" }, + { 145, "Muta \326sszes" }, + { 151, "Soha" }, + { 152, "Semmi" }, + { 157, "Semmi" }, + { 159, "Igen" }, + { 160, "Kimeneti teljes\355tm\351ny:" }, + { 171, "\326sv\351nyek" }, + { 172, "\326sv\351nyek" }, + { 187, "Renderel\351si m\363d:" }, + { 192, "SFX mennyis\351ge" }, + { 195, "Extra \332tvonal:" }, + { 217, "Soha" }, + { 242, "Csak a besz\351d" }, + { 243, "Besz\351d mennyis\351g:" }, + { 248, "Felirat sebess\351g:" }, + { 249, "Csak feliratok" }, + { 252, "Sz\366veg \351s besz\351d:" }, + { 255, "T\351ma:" }, + { 258, "T\351ma:" }, + { 264, "Igaz Roland MT-32 (megb\351n\355t GM emul\341ci\363)" }, + { 277, "Zenei vezet :" }, + { 281, "Volumene" }, + { 287, "Semmi" }, + { 290, "10 percenk\351nt" }, + { 291, "15 percenk\351nt" }, + { 292, "30 percenk\351nt" }, + { 293, "5 percenk\351nt" }, + { 301, "Kulcsok" }, + { 302, "Renderel\351si m\363d:" }, + { 306, "Igen" }, + { -1, NULL } +}; + +static const PoMessageEntry _translation_es_ES[] = { + { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-08-11 22:12+0100\nPO-Revision-Date: 2010-07-30 22:17+0100\nLast-Translator: Tom\341s Maidagan\nLanguage-Team: \nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Espanol\n" }, + { 1, "\277Seguro que quieres salir?" }, + { 2, "(Activa)" }, + { 3, "(Juego)" }, + { 4, "(General)" }, + { 5, "(compilado el %s)" }, + { 6, ", error al montar el disco compartido" }, + { 7, ", disco compartido no montado" }, + { 8, "... progreso..." }, + { 9, "11kHz" }, + { 10, "22 kHz" }, + { 11, "44 kHz" }, + { 12, "48 kHz" }, + { 13, "8 kHz" }, + { 14, "<por defecto>" }, + { 15, "Acerca de ScummVM" }, + { 16, "Emulador de AdLib" }, + { 17, "Emulador de AdLib:" }, + { 18, "AdLib se usa para la m\372sica en muchos juegos" }, + { 19, "A\361adir juego..." }, + { 20, "Emulador de AdLib" }, + { 21, "Antialiasing (16bpp)" }, + { 23, "Correcci\363n de aspecto" }, + { 24, "Tecla asociada: %s" }, + { 25, "Tecla asociada: ninguna" }, + { 26, "Sonido" }, + { 27, "Autoguardado:" }, + { 28, "Motores disponibles:" }, + { 29, "Acerca ~d~e" }, + { 30, "Asignar teclas" }, + { 31, "Ambos" }, + { 32, "Brillo:" }, + { 33, "Emulador de AdLib" }, + { 34, "Cancelar" }, + { 35, "Imposible crear el archivo" }, + { 36, "Cambiar opciones de juego" }, + { 37, "Cambiar opciones generales de ScummVM" }, + { 38, "Marcar si se quiere usar un dispositivo de sonido real conectado al ordenador y compatible con Roland" }, + { 39, "Elegir" }, + { 40, "Elige la acci\363n a asociar" }, + { 41, "Eliminar valor" }, + { 42, "Cerrar" }, + { 43, "Corregir relaci\363n de aspecto en juegos 320x200" }, + { 44, "No se ha podido encontrar ning\372n motor capaz de ejecutar el juego" }, + { 45, "Modo de v\355deo actual:" }, + { 46, "Abajo" }, + { 47, "Izquierda" }, + { 48, "Derecha" }, + { 49, "Arriba" }, + { 50, "Emulador de DOSBox OPL" }, + { 51, "DVD" }, + { 52, "DVD montado con \351xito" }, + { 53, "DVD no montado" }, + { 54, "Fecha:" }, + { 55, "Debugger" }, + { 56, "Por defecto" }, + { 57, "Borrar" }, + { 58, "Desactivar apagado" }, + { 59, "GFX desactivados" }, + { 60, "Se han encontrado %d juegos nuevos..." }, + { 61, "Se han encontrado %d juegos nuevos." }, + { 62, "Pantalla" }, + { 63, "Mostrar el teclado" }, + { 64, "\277Seguro que quieres borrar esta partida?" }, + { 65, "\277Seguro que quieres eliminar la configuraci\363n de este juego?" }, + { 66, "\277Seguro que quieres ejecutar la detecci\363n masiva? Puede que se a\361ada un gran n\372mero de juegos." }, + { 67, "\277Quieres cargar o guardar el juego?" }, + { 68, "\277Quieres realizar una b\372squeda autom\341tica?" }, + { 69, "\277Quieres salir?" }, + { 70, "Doble golpe" }, + { 71, "Abajo" }, + { 72, "Activar modo Roland GS" }, + { 73, "El motor no soporta el nivel de debug '%s'" }, + { 74, "Ingl\351s" }, + { 75, "Error al ejecutar el juego:" }, + { 76, "Error al montar el DVD" }, + { 77, "Adicional:" }, + { 78, "Emulador de FM Towns" }, + { 79, "Modo r\341pido" }, + { 80, "Caracter\355sticas compiladas:" }, + { 81, "Vista libre" }, + { 82, "T\355tulo completo del juego" }, + { 83, "Pantalla completa" }, + { 84, "Aceleraci\363n del pad GC:" }, + { 85, "Sensibilidad del pad GC:" }, + { 86, "GFX" }, + { 87, "Dispositivo GM:" }, + { 88, "Idioma de la interfaz:" }, + { 89, "Render de la interfaz" }, + { 90, "Juego" }, + { 91, "No se han encontrado datos de juego" }, + { 92, "ID del juego no soportada" }, + { 93, "Juego:" }, + { 94, "Men\372 general" }, + { 95, "Ir al directorio anterior" }, + { 96, "Arriba" }, + { 97, "Gr\341ficos" }, + { 98, "Modo gr\341fico:" }, + { 99, "Escalado por hardware (r\341pido, pero de baja calidad)" }, + { 100, "Hercules \341mbar" }, + { 101, "Hercules verde" }, + { 102, "Ocultar barra de tareas" }, + { 103, "Sonido de alta calidad (m\341s lento) (reinicio)" }, + { 104, "Los valores m\341s altos ofrecen mayor calidad, pero puede que tu tarjeta de sonido no sea compatible" }, + { 105, "Mant\351n pulsado May\372s para a\361adir varios" }, + { 106, "Underscan horizontal" }, + { 107, "Emulador de IBM PCjr" }, + { 108, "ID:" }, + { 109, "Inicializar red" }, + { 110, "Escalado de la pantalla inicial superior:" }, + { 111, "Iniciando emulador de MT-32" }, + { 112, "Inicializando red" }, + { 113, "Entrada" }, + { 114, "Ruta no v\341lida" }, + { 115, "Asignaci\363n de teclas" }, + { 116, "Teclado" }, + { 117, "Asignaci\363n de teclas:" }, + { 118, "Teclas" }, + { 119, "Idioma de la interfaz de ScummVM" }, + { 120, "Idioma del juego. No sirve para pasar al ingl\351s la versi\363n espa\361ola de un juego" }, + { 121, "Idioma:" }, + { 122, "Izquierda" }, + { 123, "Clic izquierdo" }, + { 124, "Cargar" }, + { 125, "Cargar juego:" }, + { 126, "Cargar partida del juego seleccionado" }, + { 127, "Emulador de MAME OPL" }, + { 128, "MIDI" }, + { 129, "Ganancia MIDI:" }, + { 130, "MT-32" }, + { 131, "Dispositivo MT-32:" }, + { 132, "Emulador de MT-32" }, + { 133, "Escalado de la pantalla principal:" }, + { 134, "Asignar" }, + { 135, "A\361adir varios..." }, + { 136, "Men\372" }, + { 137, "Otros" }, + { 138, "Modo AdLib/MIDI" }, + { 139, "Montar DVD" }, + { 140, "Montar SMB" }, + { 141, "Clic de rat\363n" }, + { 142, "Multifunci\363n" }, + { 143, "Dispositivo de m\372sica:" }, + { 144, "Volumen de la m\372sica:" }, + { 145, "Silenciar" }, + { 146, "Nombre:" }, + { 147, "Red desconectada" }, + { 148, "Red no inicializada (%d)" }, + { 149, "Red conectada" }, + { 150, "Red conectada, disco compartido montado" }, + { 151, "Nunca" }, + { 152, "No" }, + { 153, "No hay fecha guardada" }, + { 154, "Sin m\372sica" }, + { 155, "No hay tiempo de juego guardado" }, + { 156, "No hay hora guardada" }, + { 157, "Ninguno" }, + { 158, "Normal (sin escalado)" }, + { 159, "De acuerdo" }, + { 160, "Frecuencia de salida:" }, + { 161, "Ignorar opciones MIDI generales" }, + { 162, "Ignorar opciones MT-32 generales" }, + { 163, "Ignorar opciones de sonido generales" }, + { 164, "Ignorar opciones gr\341ficas generales" }, + { 165, "Ignorar opciones de volumen generales" }, + { 166, "Emulador del altavoz de PC" }, + { 167, "Contrase\361a:" }, + { 168, "La ruta no es un directorio" }, + { 169, "La ruta no es un archivo" }, + { 170, "La ruta no existe" }, + { 171, "Rutas" }, + { 172, "Pausar" }, + { 173, "Elige el juego:" }, + { 174, "Plataforma para la que se dise\361\363 el juego" }, + { 175, "Plataforma:" }, + { 176, "Tiempo de juego:" }, + { 177, "Por favor, selecciona una acci\363n" }, + { 178, "Plugins:" }, + { 179, "Dispositivo preferido:" }, + { 180, "Pulsa la tecla a asignar" }, + { 181, "Salir" }, + { 182, "Cerrar ScummVM" }, + { 183, "Permiso de lectura denegado" }, + { 184, "Lectura fallida" }, + { 185, "Asignar teclas" }, + { 186, "Elimina el juego de la lista. Los archivos no se borran" }, + { 187, "Modo de renderizado:" }, + { 188, "Derecha" }, + { 189, "Clic derecho" }, + { 190, "Clic derecho" }, + { 191, "Rotar" }, + { 192, "Volumen de los efectos" }, + { 193, "SMB" }, + { 194, "Guardar" }, + { 195, "Partidas:" }, + { 196, "Partidas:" }, + { 197, "Guardar partida" }, + { 198, "\241B\372squeda completada!" }, + { 199, "Se ha buscado en %d directorios..." }, + { 200, "Men\372 principal de ScummVM" }, + { 201, "\241ScummVM no ha podido encontrar ning\372n motor capaz de ejecutar el juego!" }, + { 202, "\241ScummVM no ha encontrado ning\372n juego en el directorio!" }, + { 203, "\241ScummVM no ha podido abrir el directorio!" }, + { 204, "Buscar en la lista de juegos" }, + { 205, "Buscar:" }, + { 206, "Seleccionar SoundFont" }, + { 207, "Selecciona un tema" }, + { 208, "Seleccionar directorio de juego adicional" }, + { 209, "Selecciona una acci\363n y pulsa \"Asignar\"" }, + { 210, "Selecciona el directorio para temas de interfaz" }, + { 211, "Selecciona el directorio para archivos adicionales" }, + { 212, "Selecciona el directorio para plugins" }, + { 213, "Seleccionar directorio para partidas guardadas" }, + { 214, "Selecciona el directorio para partidas guardadas." }, + { 215, "Seleccionar directorio con los archivos del juego" }, + { 216, "Sensibilidad" }, + { 217, "Servidor:" }, + { 218, "Disco compartido:" }, + { 219, "Identificador usado para las partidas guardadas y para ejecutar el juego desde la l\355nea de comando" }, + { 220, "Mostrar teclado" }, + { 221, "Mostrar el cursor" }, + { 222, "Reproducir voces y subt\355tulos" }, + { 223, "Mostrar/ocultar cursor" }, + { 224, "Saltar" }, + { 225, "Saltar frase" }, + { 226, "Saltar texto" }, + { 227, "Pegar a los bordes" }, + { 228, "Escalado por software (buena calidad, pero m\341s lento)" }, + { 229, "Sonido activado/desactivado" }, + { 230, "Algunas tarjetas de sonido, Fluidsynth y Timidity soportan SoundFont" }, + { 231, "SoundFont:" }, + { 232, "Voces" }, + { 233, "Modos especiales de expansi\363n soportados por algunos juegos" }, + { 234, "Volumen de los efectos de sonido" }, + { 235, "Especifica el dispositivo de salida General MIDI por defecto" }, + { 236, "Especifica el dispositivo de sonido para la salida Roland MT-32/LAPC1/CM32l/CM64 por defecto" }, + { 237, "Especifica el dispositivo de sonido o emulador de tarjeta de sonido de salida" }, + { 238, "Especifica el directorio adicional usado por los juegos y ScummVM" }, + { 239, "Especifica un directorio para datos adicionales del juego" }, + { 240, "Especifica qu\351 dispositivo de sonido o emulador de tarjeta de sonido prefieres" }, + { 241, "Especifica d\363nde guardar tus partidas" }, + { 242, "Voces" }, + { 243, "Volumen de las voces" }, + { 244, "Est\341ndar (16bpp)" }, + { 245, "Jugar al juego seleccionado" }, + { 246, "Estado:" }, + { 247, "Subt." }, + { 248, "Velocidad de los subt\355tulos:" }, + { 249, "Subt\355tulos" }, + { 250, "Cambiar personaje" }, + { 251, "Un toque para clic izquierdo, dos para clic derecho" }, + { 252, "Texto y voces:" }, + { 253, "No se puede escribir en el directorio elegido. Por favor, selecciona otro." }, + { 254, "Temas:" }, + { 255, "Tema:" }, + { 256, "Esta ID ya est\341 siendo usada. Por favor, elige otra." }, + { 257, "Este juego no permite cargar partidas desde el lanzador." }, + { 258, "Hora:" }, + { 259, "Se ha excedido el tiempo de inicializaci\363n de red" }, + { 260, "Compensaci\363n X del toque" }, + { 261, "Compensaci\363n Y del toque" }, + { 262, "Modo Touchpad desactivado." }, + { 263, "Modo Touchpad activado." }, + { 264, "Roland MT-32 aut\351ntica (desactivar emulaci\363n GM)" }, + { 265, "Desactiva la conversi\363n General MIDI en juegos con sonido Roland MT-32" }, + { 266, "Desconocido" }, + { 267, "Error desconocido" }, + { 268, "Desmontar DVD" }, + { 269, "Desmontar SMB" }, + { 270, "Sin escalado (debes desplazar la pantalla a los lados)" }, + { 271, "Modo de color no soportado" }, + { 272, "Partida sin nombre" }, + { 273, "Arriba" }, + { 274, "Usar tanto MIDI como AdLib en la generaci\363n de sonido" }, + { 275, "Activar el sistema de control tipo trackpad de los port\341tiles" }, + { 276, "Usuario:" }, + { 277, "Usando driver SDL" }, + { 278, "Underscan vertical:" }, + { 279, "V\355deo" }, + { 280, "Teclado virtual" }, + { 281, "Volumen" }, + { 282, "Windows MIDI" }, + { 283, "Permiso de escritura denegado" }, + { 284, "Escritura de datos fallida" }, + { 285, "S\355" }, + { 286, "Tienes que reiniciar ScummVM para aplicar los cambios." }, + { 287, "Zona" }, + { 288, "Disminuir zoom" }, + { 289, "Aumentar zoom" }, + { 290, "cada 10 minutos" }, + { 291, "cada 15 minutos" }, + { 292, "cada 30 minutos" }, + { 293, "cada 5 minutos" }, + { 294, "Acerca ~d~e" }, + { 295, "~A~\361adir juego..." }, + { 296, "~C~ancelar" }, + { 297, "Cerra~r~" }, + { 298, "~E~ditar juego..." }, + { 299, "~A~yuda" }, + { 300, "Controles para pelear de ~I~ndy" }, + { 301, "~T~eclas" }, + { 302, "Modo para ~z~urdos" }, + { 303, "~C~argar" }, + { 304, "~C~argar..." }, + { 305, "Si~g~uiente" }, + { 306, "~S~\355" }, + { 307, "~O~opciones" }, + { 308, "~O~opciones..." }, + { 309, "~A~nterior" }, + { 310, "~S~alir" }, + { 311, "E~l~iminar juego" }, + { 312, "~R~eanudar" }, + { 313, "~V~olver al lanzador" }, + { 314, "~G~uardar" }, + { 315, "~J~ugar" }, + { 316, "Tra~n~siciones activadas" }, + { 317, "Efecto ag~u~a activado" }, + { 318, "Modo ~Z~ip activado" }, { -1, NULL } }; static const PoMessageEntry _translation_it_IT[] = { - { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-07-30 22:14+0100\nPO-Revision-Date: 2010-06-30 23:56+0100\nLast-Translator: Maff <matteo.maff at gmail dot com>\nLanguage-Team: Italian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Italiano\n" }, + { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-08-11 22:12+0100\nPO-Revision-Date: 2010-06-30 23:56+0100\nLast-Translator: Maff <matteo.maff at gmail dot com>\nLanguage-Team: Italian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Italiano\n" }, { 1, " Sei sicuro di voler uscire? " }, { 2, " (Attivo)" }, { 3, " (Gioco)" }, @@ -666,365 +1692,308 @@ static const PoMessageEntry _translation_it_IT[] = { { 17, "Emulatore AdLib:" }, { 18, "AdLib \350 utilizzato per la musica in molti giochi" }, { 19, "Aggiungi gioco..." }, - { 20, "Renderer con antialiasing (16bpp)" }, - { 21, "Correzione proporzioni" }, - { 22, "Tasto associato: %s" }, - { 23, "Tasto associato: nessuno" }, - { 24, "Audio" }, - { 25, "Autosalva:" }, - { 26, "Motori disponibili:" }, - { 27, "~I~nfo..." }, - { 28, "Associa tasti" }, - { 29, "Entrambi" }, - { 30, "Luminosit\340:" }, - { 31, "Annulla" }, - { 32, "Impossibile creare il file" }, - { 33, "Modifica le opzioni di gioco" }, - { 34, "Modifica le opzioni globali di ScummVM" }, - { 35, "Seleziona se vuoi usare il dispositivo hardware audio compatibile con Roland che \350 connesso al tuo computer" }, - { 36, "Scegli" }, - { 37, "Scegli un'azione da mappare" }, - { 38, "Cancella" }, - { 39, "Chiudi" }, - { 40, "Corregge le proporzioni dei giochi 320x200" }, - { 41, "Impossibile trovare un motore in grado di eseguire il gioco selezionato" }, - { 42, "Modalit\340 video attuale:" }, - { 43, "Cursore gi\371" }, - { 44, "Cursore a sinistra" }, - { 45, "Cursore a destra" }, - { 46, "Cursore su" }, - { 47, "Emulatore OPL DOSBox" }, - { 48, "DVD" }, - { 49, "DVD montato con successo" }, - { 50, "DVD non montato" }, - { 51, "Data: " }, - { 52, "Debugger" }, - { 53, "Predefinito" }, - { 54, "Elimina" }, - { 55, "Disattiva spegnimento in chiusura" }, - { 56, "Grafica disattivata" }, - { 57, "Rilevati %d nuovi giochi..." }, - { 58, "Rilevati %d nuovi giochi." }, - { 59, "Visualizza " }, - { 60, "Mostra tastiera" }, - { 61, "Sei sicuro di voler eliminare questo salvataggio?" }, - { 62, "Sei sicuro di voler rimuovere questa configurazione di gioco?" }, - { 63, "Vuoi davvero eseguire il rilevatore di giochi in massa? Potrebbe aggiungere un numero enorme di giochi." }, - { 64, "Vuoi caricare o salvare il gioco?" }, - { 65, "Vuoi eseguire una scansione automatica?" }, - { 66, "Sei sicuro di voler uscire?" }, - { 67, "Double-strike" }, - { 68, "Gi\371" }, - { 69, "Attiva la modalit\340 Roland GS" }, - { 70, "Il motore non supporta il livello di debug '%s'" }, - { 71, "Inglese" }, - { 72, "Errore nell'esecuzione del gioco:" }, - { 73, "Errore nel montare il DVD" }, - { 74, "Percorso extra:" }, - { 75, "Emulatore FM Towns" }, - { 76, "Modalit\340 veloce" }, - { 77, "Funzionalit\340 compilate in:" }, - { 78, "Osservazione libera" }, - { 79, "Titolo completo del gioco" }, - { 80, "Modalit\340 a schermo intero" }, - { 81, "Accelerazione pad GC:" }, - { 82, "Sensibilit\340 pad GC:" }, - { 83, "Grafica" }, - { 84, "Dispositivo GM:" }, - { 85, "Lingua GUI:" }, - { 86, "Renderer GUI:" }, - { 87, "Gioco" }, - { 88, "Dati di gioco non trovati" }, - { 89, "ID di gioco non supportato" }, - { 90, "Percorso gioco:" }, - { 91, "Menu globale" }, - { 92, "Vai alla cartella superiore" }, - { 93, "Cartella superiore" }, - { 94, "Grafica" }, - { 95, "Modalit\340:" }, - { 96, "Ridimensionamento hardware (veloce, ma di bassa qualit\340)" }, - { 97, "Hercules ambra" }, - { 98, "Hercules verde" }, - { 99, "Nascondi la barra degli strumenti" }, - { 100, "Audio ad alta qualit\340 (pi\371 lento) (riavviare)" }, - { 101, "Valori pi\371 alti restituiscono un suono di maggior qualit\340, ma potrebbero non essere supportati dalla tua scheda audio" }, - { 102, "Tieni premuto Shift per l'aggiunta in massa" }, - { 103, "Underscan orizzontale:" }, - { 104, "Emulatore IBM PCjr" }, - { 105, "ID:" }, - { 106, "Avvia rete" }, - { 107, "Schermo in primo piano:" }, - { 108, "Avvio in corso dell'emulatore MT-32" }, - { 109, "Avvio rete in corso" }, - { 110, "Input" }, - { 111, "Percorso non valido" }, - { 112, "Programmatore tasti" }, - { 113, "Tastiera" }, - { 114, "Mappa tasti:" }, - { 115, "Tasti" }, - { 116, "Lingua dell'interfaccia grafica di ScummVM" }, - { 117, "Lingua del gioco. Un gioco inglese non potr\340 risultare tradotto in italiano" }, - { 118, "Lingua:" }, - { 119, "Sinistra" }, - { 120, "Clic sinistro" }, - { 121, "Carica" }, - { 122, "Carica gioco:" }, - { 123, "Carica un salvataggio del gioco selezionato" }, - { 124, "Emulatore OPL MAME" }, - { 125, "MIDI" }, - { 126, "Guadagno MIDI:" }, - { 128, "Disposit. MT32:" }, - { 129, "Emulatore MT-32" }, - { 130, "Schermo principale:" }, - { 131, "Mappa" }, - { 132, "Agg. in massa..." }, - { 133, "Menu" }, - { 134, "Varie" }, - { 135, "Modalit\340 mista AdLib/MIDI" }, - { 136, "Monta DVD" }, - { 137, "Monta SMB" }, - { 138, "Clic del mouse" }, - { 139, "Multifunzione" }, - { 140, "Dispositivo GM:" }, - { 141, "Volume musica:" }, - { 142, "Disattiva audio" }, - { 143, "Nome:" }, - { 144, "Rete disattivata" }, - { 145, "Rete non avviata (%d)" }, - { 146, "Rete attiva" }, - { 147, "Rete attiva, condivisione montata" }, - { 148, "Mai" }, - { 149, "No" }, - { 150, "Nessuna data salvata" }, - { 151, "Nessuna musica" }, - { 152, "Nessun tempo salvato" }, - { 153, "Nessun orario salvato" }, - { 154, "Nessuno" }, - { 155, "Normale (nessun ridimensionamento)" }, - { 156, "OK" }, - { 157, "Frequenza:" }, - { 158, "Ignora le impostazioni MIDI globali" }, - { 159, "Ignora le impostazioni MIDI globali" }, - { 160, "Ignora le impostazioni audio globali" }, - { 161, "Ignora le impostazioni grafiche globali" }, - { 162, "Ignora le impostazioni globali di volume" }, - { 163, "Emulatore PC Speaker" }, - { 164, "Password:" }, - { 165, "Il percorso non \350 una cartella" }, - { 166, "Il percorso non \350 un file" }, - { 167, "Il percorso non esiste" }, - { 168, "Percorsi" }, - { 169, "Pausa" }, - { 170, "Scegli il gioco:" }, - { 171, "La piattaforma per la quale il gioco \350 stato concepito" }, - { 172, "Piattaforma:" }, - { 173, "Tempo di gioco: " }, - { 174, "Seleziona un'azione" }, - { 175, "Percorso plugin:" }, - { 176, "Disp. preferito:" }, - { 177, "Premi il tasto da associare" }, - { 178, "Esci" }, - { 179, "Chiudi ScummVM" }, - { 180, "Autorizzazione di lettura negata" }, - { 181, "Lettura fallita" }, - { 182, "Riprogramma tasti" }, - { 183, "Rimuove il gioco dalla lista. I file del gioco rimarranno intatti" }, - { 184, "Resa grafica:" }, - { 185, "Destra" }, - { 186, "Clic destro" }, - { 187, "Clic destro" }, - { 188, "Rotazione" }, - { 189, "Volume effetti:" }, - { 190, "SMB" }, - { 191, "Salva" }, - { 192, "Salvataggi:" }, - { 193, "Salvataggi:" }, - { 194, "Salva gioco:" }, - { 195, "Scansione completa!" }, - { 196, "%d cartelle analizzate..." }, - { 197, "Menu principale di ScummVM" }, - { 198, "ScummVM non ha potuto trovare un motore in grado di eseguire il gioco selezionato!" }, - { 199, "ScummVM non ha potuto trovare nessun gioco nella cartella specificata!" }, - { 200, "ScummVM non ha potuto aprire la cartella specificata!" }, - { 201, "Cerca nella lista dei giochi" }, - { 202, "Cerca:" }, - { 203, "Seleziona SoundFont" }, - { 204, "Seleziona un tema" }, - { 205, "Seleziona la cartella di gioco aggiuntiva" }, - { 206, "Seleziona un'azione e clicca 'Mappa'" }, - { 207, "Seleziona la cartella dei temi dell'interfaccia" }, - { 208, "Seleziona la cartella dei file aggiuntivi" }, - { 209, "Seleziona la cartella dei plugin" }, - { 210, "Seleziona la cartella dei salvataggi" }, - { 211, "Seleziona la cartella per i salvataggi" }, - { 212, "Seleziona la cartella contenente i file di gioco" }, - { 213, "Sensibilit\340" }, - { 214, "Server:" }, - { 215, "Condivisione:" }, - { 216, "Breve identificatore di gioco utilizzato per il riferimento a salvataggi e per l'esecuzione del gioco dalla riga di comando" }, - { 217, "Mostra tastiera" }, - { 218, "Mostra cursore del mouse" }, - { 219, "Mostra i sottotitoli e attiva le voci" }, - { 220, "Mostra/nascondi cursore" }, - { 221, "Salta" }, - { 222, "Salta battuta" }, - { 223, "Salta testo" }, - { 224, "Aggancia ai bordi" }, - { 225, "Ridimensionamento software (di buona qualit\340, ma pi\371 lento)" }, - { 226, "Suono on/off" }, - { 227, "SoundFont \350 supportato da alcune schede audio, Fluidsynth e Timidity" }, - { 228, "SoundFont:" }, - { 229, "Voci" }, - { 230, "Modalit\340 di resa grafica speciali supportate da alcuni giochi" }, - { 231, "Volume degli effetti sonori" }, - { 232, "Specifica il dispositivo audio predefinito per l'output General MIDI" }, - { 233, "Specifica il dispositivo audio predefinito per l'output Roland MT-32/LAPC1/CM32l/CM64" }, - { 234, "Specifica il dispositivo di output audio o l'emulatore della scheda audio" }, - { 235, "Specifica il percorso di ulteriori dati usati dai giochi o da ScummVM" }, - { 236, "Specifica il percorso di ulteriori dati usati dal gioco" }, - { 237, "Specifica il dispositivo audio o l'emulatore della scheda audio preferiti" }, - { 238, "Specifica dove archiviare i salvataggi" }, - { 239, "Voci" }, - { 240, "Volume voci:" }, - { 241, "Renderer standard (16bpp)" }, - { 242, "Esegue il gioco selezionato" }, - { 243, "Stato:" }, - { 244, "Sub" }, - { 245, "Velocit\340 testo:" }, - { 246, "Sottotitoli" }, - { 247, "Cambia personaggio" }, - { 248, "Un tocco per il clic sinistro, doppio tocco per il clic destro" }, - { 249, "Testo e voci:" }, - { 250, "La cartella scelta \350 in sola lettura. Si prega di sceglierne un'altra." }, - { 251, "Percorso tema:" }, - { 252, "Tema:" }, - { 253, "Questo ID di gioco \350 gi\340 in uso. Si prega di sceglierne un'altro." }, - { 254, "Questo gioco non supporta il caricamento di salvataggi dalla schermata di avvio." }, - { 255, "Ora: " }, - { 256, "Attesa per l'avvio della rete" }, - { 257, "Compensa X del tocco" }, - { 258, "Compensa Y del tocco" }, - { 259, "Modalit\340 touchpad disattivata." }, - { 260, "Modalit\340 touchpad attivata." }, - { 261, "Roland MT-32 effettivo (disattiva emulazione GM)" }, - { 262, "Disattiva la mappatura General MIDI per i giochi con colonna sonora Roland MT-32" }, - { 263, "Sconosciuto" }, - { 264, "Errore sconosciuto" }, - { 265, "Smonta DVD" }, - { 266, "Smonta SMB" }, - { 267, "Non ridimensionato (devi scorrere a sinistra e a destra)" }, - { 268, "Modalit\340 colore non supportata" }, - { 269, "Salvataggio senza titolo" }, - { 270, "Su" }, - { 271, "Utilizza generazione di suono sia MIDI che AdLib" }, - { 272, "Utilizza il controllo del cursore stile trackpad del portatile" }, - { 273, "Nome utente:" }, - { 274, "Utilizzo del driver SDL " }, - { 275, "Underscan verticale:" }, - { 276, "Video" }, - { 277, "Tastiera virtuale" }, - { 278, "Volume" }, - { 279, "MIDI Windows" }, - { 280, "Autorizzazione di scrittura negata" }, - { 281, "Scrittura dati fallita" }, - { 282, "S\354" }, - { 283, "Devi riavviare ScummVM affinch\351 le modifiche abbiano effetto." }, - { 284, "Zona" }, - { 285, "Zoom indietro" }, - { 286, "Zoom avanti" }, - { 287, "ogni 10 minuti" }, - { 288, "ogni 15 minuti" }, - { 289, "ogni 30 minuti" }, - { 290, "ogni 5 minuti" }, - { 291, "~I~nfo" }, - { 292, "~A~ggiungi gioco..." }, - { 293, "~A~nnulla" }, - { 294, "~C~hiudi" }, - { 295, "~M~odifica gioco..." }, - { 296, "~A~iuto" }, - { 297, "Controlli combattimento di ~I~ndy" }, - { 298, "~T~asti" }, - { 299, "~M~odalit\340 mancini" }, - { 300, "~C~arica" }, - { 301, "~C~arica..." }, - { 302, "~S~uccessivi" }, - { 303, "~O~K" }, - { 304, "~O~pzioni" }, - { 305, "~O~pzioni..." }, - { 306, "~P~recedenti" }, - { 307, "C~h~iudi" }, - { 308, "~R~imuovi gioco" }, - { 309, "~R~ipristina" }, - { 310, "~V~ai a schermata di avvio" }, - { 311, "~S~alva" }, - { 312, "~G~ioca" }, - { 313, "~T~ransizioni attive" }, - { 314, "~E~ffetto acqua attivo" }, - { 315, "Modalit\340 ~Z~ip attivata" }, - { -1, NULL } -}; - -static const PoMessageEntry _translation_hu_HU[] = { - { 0, "Project-Id-Version: ScummVM VERSION\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-07-30 22:14+0100\nPO-Revision-Date: 2009-11-25 07:42-0500\nLast-Translator: Alex Bevilacqua <alexbevi@gmail.com>\nLanguage-Team: Hungarian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=cp1250\nContent-Transfer-Encoding: 8bit\nLanguage: \nPlural-Forms: nplurals=2; plural=(n != 1);\n" }, - { 14, "<alap\351rtelmezett>" }, - { 16, "AdLib vezet :" }, - { 17, "AdLib vezet :" }, - { 21, "Aspect adag korrekci\363" }, - { 24, "Hang" }, - { 25, "Automatikus ment\351s:" }, - { 28, "Kulcsok" }, - { 42, "Renderel\351si m\363d:" }, - { 53, "<alap\351rtelmezett>" }, - { 69, "K\351pess\351 Roland GS Mode" }, - { 74, "Extra \332tvonal:" }, - { 76, "Grafikus m\363d:" }, - { 80, "Teljes k\351perny s m\363d:" }, - { 86, "Lek\351pez eszk\366z GUI:" }, - { 90, "Extra \332tvonal:" }, - { 94, "Grafik\341val" }, - { 95, "Grafikus m\363d:" }, - { 115, "Kulcsok" }, - { 124, "AdLib vezet :" }, - { 126, "MIDI nyeres\351g:" }, - { 128, "Zene mennyis\351g:" }, - { 135, "Vegyes AdLib/MIDI m\363d" }, - { 140, "Zene mennyis\351g:" }, - { 141, "Zene mennyis\351g:" }, - { 142, "Muta \326sszes" }, - { 148, "Soha" }, - { 149, "Semmi" }, - { 154, "Semmi" }, - { 156, "Igen" }, - { 157, "Kimeneti teljes\355tm\351ny:" }, - { 168, "\326sv\351nyek" }, - { 169, "\326sv\351nyek" }, - { 184, "Renderel\351si m\363d:" }, - { 189, "SFX mennyis\351ge" }, - { 192, "Extra \332tvonal:" }, - { 214, "Soha" }, - { 239, "Csak a besz\351d" }, - { 240, "Besz\351d mennyis\351g:" }, - { 245, "Felirat sebess\351g:" }, - { 246, "Csak feliratok" }, - { 249, "Sz\366veg \351s besz\351d:" }, - { 252, "T\351ma:" }, - { 255, "T\351ma:" }, - { 261, "Igaz Roland MT-32 (megb\351n\355t GM emul\341ci\363)" }, - { 274, "Zenei vezet :" }, - { 278, "Volumene" }, - { 284, "Semmi" }, - { 287, "10 percenk\351nt" }, - { 288, "15 percenk\351nt" }, - { 289, "30 percenk\351nt" }, - { 290, "5 percenk\351nt" }, - { 298, "Kulcsok" }, - { 299, "Renderel\351si m\363d:" }, - { 303, "Igen" }, + { 20, "Emulatore AdLib" }, + { 21, "Renderer con antialiasing (16bpp)" }, + { 23, "Correzione proporzioni" }, + { 24, "Tasto associato: %s" }, + { 25, "Tasto associato: nessuno" }, + { 26, "Audio" }, + { 27, "Autosalva:" }, + { 28, "Motori disponibili:" }, + { 29, "~I~nfo..." }, + { 30, "Associa tasti" }, + { 31, "Entrambi" }, + { 32, "Luminosit\340:" }, + { 33, "Emulatore AdLib" }, + { 34, "Annulla" }, + { 35, "Impossibile creare il file" }, + { 36, "Modifica le opzioni di gioco" }, + { 37, "Modifica le opzioni globali di ScummVM" }, + { 38, "Seleziona se vuoi usare il dispositivo hardware audio compatibile con Roland che \350 connesso al tuo computer" }, + { 39, "Scegli" }, + { 40, "Scegli un'azione da mappare" }, + { 41, "Cancella" }, + { 42, "Chiudi" }, + { 43, "Corregge le proporzioni dei giochi 320x200" }, + { 44, "Impossibile trovare un motore in grado di eseguire il gioco selezionato" }, + { 45, "Modalit\340 video attuale:" }, + { 46, "Cursore gi\371" }, + { 47, "Cursore a sinistra" }, + { 48, "Cursore a destra" }, + { 49, "Cursore su" }, + { 50, "Emulatore OPL DOSBox" }, + { 51, "DVD" }, + { 52, "DVD montato con successo" }, + { 53, "DVD non montato" }, + { 54, "Data: " }, + { 55, "Debugger" }, + { 56, "Predefinito" }, + { 57, "Elimina" }, + { 58, "Disattiva spegnimento in chiusura" }, + { 59, "Grafica disattivata" }, + { 60, "Rilevati %d nuovi giochi..." }, + { 61, "Rilevati %d nuovi giochi." }, + { 62, "Visualizza " }, + { 63, "Mostra tastiera" }, + { 64, "Sei sicuro di voler eliminare questo salvataggio?" }, + { 65, "Sei sicuro di voler rimuovere questa configurazione di gioco?" }, + { 66, "Vuoi davvero eseguire il rilevatore di giochi in massa? Potrebbe aggiungere un numero enorme di giochi." }, + { 67, "Vuoi caricare o salvare il gioco?" }, + { 68, "Vuoi eseguire una scansione automatica?" }, + { 69, "Sei sicuro di voler uscire?" }, + { 70, "Double-strike" }, + { 71, "Gi\371" }, + { 72, "Attiva la modalit\340 Roland GS" }, + { 73, "Il motore non supporta il livello di debug '%s'" }, + { 74, "Inglese" }, + { 75, "Errore nell'esecuzione del gioco:" }, + { 76, "Errore nel montare il DVD" }, + { 77, "Percorso extra:" }, + { 78, "Emulatore FM Towns" }, + { 79, "Modalit\340 veloce" }, + { 80, "Funzionalit\340 compilate in:" }, + { 81, "Osservazione libera" }, + { 82, "Titolo completo del gioco" }, + { 83, "Modalit\340 a schermo intero" }, + { 84, "Accelerazione pad GC:" }, + { 85, "Sensibilit\340 pad GC:" }, + { 86, "Grafica" }, + { 87, "Dispositivo GM:" }, + { 88, "Lingua GUI:" }, + { 89, "Renderer GUI:" }, + { 90, "Gioco" }, + { 91, "Dati di gioco non trovati" }, + { 92, "ID di gioco non supportato" }, + { 93, "Percorso gioco:" }, + { 94, "Menu globale" }, + { 95, "Vai alla cartella superiore" }, + { 96, "Cartella superiore" }, + { 97, "Grafica" }, + { 98, "Modalit\340:" }, + { 99, "Ridimensionamento hardware (veloce, ma di bassa qualit\340)" }, + { 100, "Hercules ambra" }, + { 101, "Hercules verde" }, + { 102, "Nascondi la barra degli strumenti" }, + { 103, "Audio ad alta qualit\340 (pi\371 lento) (riavviare)" }, + { 104, "Valori pi\371 alti restituiscono un suono di maggior qualit\340, ma potrebbero non essere supportati dalla tua scheda audio" }, + { 105, "Tieni premuto Shift per l'aggiunta in massa" }, + { 106, "Underscan orizzontale:" }, + { 107, "Emulatore IBM PCjr" }, + { 108, "ID:" }, + { 109, "Avvia rete" }, + { 110, "Schermo in primo piano:" }, + { 111, "Avvio in corso dell'emulatore MT-32" }, + { 112, "Avvio rete in corso" }, + { 113, "Input" }, + { 114, "Percorso non valido" }, + { 115, "Programmatore tasti" }, + { 116, "Tastiera" }, + { 117, "Mappa tasti:" }, + { 118, "Tasti" }, + { 119, "Lingua dell'interfaccia grafica di ScummVM" }, + { 120, "Lingua del gioco. Un gioco inglese non potr\340 risultare tradotto in italiano" }, + { 121, "Lingua:" }, + { 122, "Sinistra" }, + { 123, "Clic sinistro" }, + { 124, "Carica" }, + { 125, "Carica gioco:" }, + { 126, "Carica un salvataggio del gioco selezionato" }, + { 127, "Emulatore OPL MAME" }, + { 128, "MIDI" }, + { 129, "Guadagno MIDI:" }, + { 131, "Disposit. MT32:" }, + { 132, "Emulatore MT-32" }, + { 133, "Schermo principale:" }, + { 134, "Mappa" }, + { 135, "Agg. in massa..." }, + { 136, "Menu" }, + { 137, "Varie" }, + { 138, "Modalit\340 mista AdLib/MIDI" }, + { 139, "Monta DVD" }, + { 140, "Monta SMB" }, + { 141, "Clic del mouse" }, + { 142, "Multifunzione" }, + { 143, "Dispositivo GM:" }, + { 144, "Volume musica:" }, + { 145, "Disattiva audio" }, + { 146, "Nome:" }, + { 147, "Rete disattivata" }, + { 148, "Rete non avviata (%d)" }, + { 149, "Rete attiva" }, + { 150, "Rete attiva, condivisione montata" }, + { 151, "Mai" }, + { 152, "No" }, + { 153, "Nessuna data salvata" }, + { 154, "Nessuna musica" }, + { 155, "Nessun tempo salvato" }, + { 156, "Nessun orario salvato" }, + { 157, "Nessuno" }, + { 158, "Normale (nessun ridimensionamento)" }, + { 159, "OK" }, + { 160, "Frequenza:" }, + { 161, "Ignora le impostazioni MIDI globali" }, + { 162, "Ignora le impostazioni MIDI globali" }, + { 163, "Ignora le impostazioni audio globali" }, + { 164, "Ignora le impostazioni grafiche globali" }, + { 165, "Ignora le impostazioni globali di volume" }, + { 166, "Emulatore PC Speaker" }, + { 167, "Password:" }, + { 168, "Il percorso non \350 una cartella" }, + { 169, "Il percorso non \350 un file" }, + { 170, "Il percorso non esiste" }, + { 171, "Percorsi" }, + { 172, "Pausa" }, + { 173, "Scegli il gioco:" }, + { 174, "La piattaforma per la quale il gioco \350 stato concepito" }, + { 175, "Piattaforma:" }, + { 176, "Tempo di gioco: " }, + { 177, "Seleziona un'azione" }, + { 178, "Percorso plugin:" }, + { 179, "Disp. preferito:" }, + { 180, "Premi il tasto da associare" }, + { 181, "Esci" }, + { 182, "Chiudi ScummVM" }, + { 183, "Autorizzazione di lettura negata" }, + { 184, "Lettura fallita" }, + { 185, "Riprogramma tasti" }, + { 186, "Rimuove il gioco dalla lista. I file del gioco rimarranno intatti" }, + { 187, "Resa grafica:" }, + { 188, "Destra" }, + { 189, "Clic destro" }, + { 190, "Clic destro" }, + { 191, "Rotazione" }, + { 192, "Volume effetti:" }, + { 193, "SMB" }, + { 194, "Salva" }, + { 195, "Salvataggi:" }, + { 196, "Salvataggi:" }, + { 197, "Salva gioco:" }, + { 198, "Scansione completa!" }, + { 199, "%d cartelle analizzate..." }, + { 200, "Menu principale di ScummVM" }, + { 201, "ScummVM non ha potuto trovare un motore in grado di eseguire il gioco selezionato!" }, + { 202, "ScummVM non ha potuto trovare nessun gioco nella cartella specificata!" }, + { 203, "ScummVM non ha potuto aprire la cartella specificata!" }, + { 204, "Cerca nella lista dei giochi" }, + { 205, "Cerca:" }, + { 206, "Seleziona SoundFont" }, + { 207, "Seleziona un tema" }, + { 208, "Seleziona la cartella di gioco aggiuntiva" }, + { 209, "Seleziona un'azione e clicca 'Mappa'" }, + { 210, "Seleziona la cartella dei temi dell'interfaccia" }, + { 211, "Seleziona la cartella dei file aggiuntivi" }, + { 212, "Seleziona la cartella dei plugin" }, + { 213, "Seleziona la cartella dei salvataggi" }, + { 214, "Seleziona la cartella per i salvataggi" }, + { 215, "Seleziona la cartella contenente i file di gioco" }, + { 216, "Sensibilit\340" }, + { 217, "Server:" }, + { 218, "Condivisione:" }, + { 219, "Breve identificatore di gioco utilizzato per il riferimento a salvataggi e per l'esecuzione del gioco dalla riga di comando" }, + { 220, "Mostra tastiera" }, + { 221, "Mostra cursore del mouse" }, + { 222, "Mostra i sottotitoli e attiva le voci" }, + { 223, "Mostra/nascondi cursore" }, + { 224, "Salta" }, + { 225, "Salta battuta" }, + { 226, "Salta testo" }, + { 227, "Aggancia ai bordi" }, + { 228, "Ridimensionamento software (di buona qualit\340, ma pi\371 lento)" }, + { 229, "Suono on/off" }, + { 230, "SoundFont \350 supportato da alcune schede audio, Fluidsynth e Timidity" }, + { 231, "SoundFont:" }, + { 232, "Voci" }, + { 233, "Modalit\340 di resa grafica speciali supportate da alcuni giochi" }, + { 234, "Volume degli effetti sonori" }, + { 235, "Specifica il dispositivo audio predefinito per l'output General MIDI" }, + { 236, "Specifica il dispositivo audio predefinito per l'output Roland MT-32/LAPC1/CM32l/CM64" }, + { 237, "Specifica il dispositivo di output audio o l'emulatore della scheda audio" }, + { 238, "Specifica il percorso di ulteriori dati usati dai giochi o da ScummVM" }, + { 239, "Specifica il percorso di ulteriori dati usati dal gioco" }, + { 240, "Specifica il dispositivo audio o l'emulatore della scheda audio preferiti" }, + { 241, "Specifica dove archiviare i salvataggi" }, + { 242, "Voci" }, + { 243, "Volume voci:" }, + { 244, "Renderer standard (16bpp)" }, + { 245, "Esegue il gioco selezionato" }, + { 246, "Stato:" }, + { 247, "Sub" }, + { 248, "Velocit\340 testo:" }, + { 249, "Sottotitoli" }, + { 250, "Cambia personaggio" }, + { 251, "Un tocco per il clic sinistro, doppio tocco per il clic destro" }, + { 252, "Testo e voci:" }, + { 253, "La cartella scelta \350 in sola lettura. Si prega di sceglierne un'altra." }, + { 254, "Percorso tema:" }, + { 255, "Tema:" }, + { 256, "Questo ID di gioco \350 gi\340 in uso. Si prega di sceglierne un'altro." }, + { 257, "Questo gioco non supporta il caricamento di salvataggi dalla schermata di avvio." }, + { 258, "Ora: " }, + { 259, "Attesa per l'avvio della rete" }, + { 260, "Compensa X del tocco" }, + { 261, "Compensa Y del tocco" }, + { 262, "Modalit\340 touchpad disattivata." }, + { 263, "Modalit\340 touchpad attivata." }, + { 264, "Roland MT-32 effettivo (disattiva emulazione GM)" }, + { 265, "Disattiva la mappatura General MIDI per i giochi con colonna sonora Roland MT-32" }, + { 266, "Sconosciuto" }, + { 267, "Errore sconosciuto" }, + { 268, "Smonta DVD" }, + { 269, "Smonta SMB" }, + { 270, "Non ridimensionato (devi scorrere a sinistra e a destra)" }, + { 271, "Modalit\340 colore non supportata" }, + { 272, "Salvataggio senza titolo" }, + { 273, "Su" }, + { 274, "Utilizza generazione di suono sia MIDI che AdLib" }, + { 275, "Utilizza il controllo del cursore stile trackpad del portatile" }, + { 276, "Nome utente:" }, + { 277, "Utilizzo del driver SDL " }, + { 278, "Underscan verticale:" }, + { 279, "Video" }, + { 280, "Tastiera virtuale" }, + { 281, "Volume" }, + { 282, "MIDI Windows" }, + { 283, "Autorizzazione di scrittura negata" }, + { 284, "Scrittura dati fallita" }, + { 285, "S\354" }, + { 286, "Devi riavviare ScummVM affinch\351 le modifiche abbiano effetto." }, + { 287, "Zona" }, + { 288, "Zoom indietro" }, + { 289, "Zoom avanti" }, + { 290, "ogni 10 minuti" }, + { 291, "ogni 15 minuti" }, + { 292, "ogni 30 minuti" }, + { 293, "ogni 5 minuti" }, + { 294, "~I~nfo" }, + { 295, "~A~ggiungi gioco..." }, + { 296, "~A~nnulla" }, + { 297, "~C~hiudi" }, + { 298, "~M~odifica gioco..." }, + { 299, "~A~iuto" }, + { 300, "Controlli combattimento di ~I~ndy" }, + { 301, "~T~asti" }, + { 302, "~M~odalit\340 mancini" }, + { 303, "~C~arica" }, + { 304, "~C~arica..." }, + { 305, "~S~uccessivi" }, + { 306, "~O~K" }, + { 307, "~O~pzioni" }, + { 308, "~O~pzioni..." }, + { 309, "~P~recedenti" }, + { 310, "C~h~iudi" }, + { 311, "~R~imuovi gioco" }, + { 312, "~R~ipristina" }, + { 313, "~V~ai a schermata di avvio" }, + { 314, "~S~alva" }, + { 315, "~G~ioca" }, + { 316, "~T~ransizioni attive" }, + { 317, "~E~ffetto acqua attivo" }, + { 318, "Modalit\340 ~Z~ip attivata" }, { -1, NULL } }; static const PoMessageEntry _translation_fr_FR[] = { - { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-07-30 22:14+0100\nPO-Revision-Date: 2010-07-30 22:18+0100\nLast-Translator: Thierry Crozat <criezy@scummvm.org>\nLanguage-Team: French <scummvm-devel@lists.sf.net>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Francais\nPlural-Forms: nplurals=2; plural=n>1;\n" }, + { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-08-11 22:12+0100\nPO-Revision-Date: 2010-08-11 22:14+0100\nLast-Translator: Thierry Crozat <criezy@scummvm.org>\nLanguage-Team: French <scummvm-devel@lists.sf.net>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Francais\nPlural-Forms: nplurals=2; plural=n>1;\n" }, { 1, "Voulez-vous vraiment quitter?" }, { 2, "(Actif)" }, { 3, "(Jeu)" }, @@ -1044,1260 +2013,310 @@ static const PoMessageEntry _translation_fr_FR[] = { { 17, "\311mulateur AdLib:" }, { 18, "AdLib est utilis\351 pour la musique dans de nombreux jeux" }, { 19, "Ajouter..." }, - { 20, "Anti-cr\351nel\351 (16 bpp)" }, - { 21, "Correction du rapport d'aspect" }, - { 22, "Touche associ\351e: %s" }, - { 23, "Touche associ\351e: aucune" }, - { 24, "Audio" }, - { 25, "Sauvegarde auto:" }, - { 26, "Moteurs disponibles:" }, - { 27, "\300 ~P~ropos..." }, - { 28, "Affecter les touches" }, - { 29, "Les deux" }, - { 30, "Luminosit\351:" }, - { 31, "Annuler" }, - { 32, "Impossible de cr\351er le fichier" }, - { 33, "Change les options du jeu" }, - { 34, "Change les options globales de ScummVM" }, - { 35, "V\351rifie si vous voulez utiliser un p\351riph\351rique audio compatible Roland connect\351 \340 l'ordinateur" }, - { 36, "Choisir" }, - { 37, "S\351lectionnez une action \340 affecter" }, - { 38, "Effacer la valeur" }, - { 39, "Fermer" }, - { 40, "Corrige le rapport d'aspect pour les jeu 320x200" }, - { 41, "Impossible de trouver un moteur pour ex\351cuter le jeu s\351lectionn\351" }, - { 42, "Mode vid\351o actuel" }, - { 43, "Bas" }, - { 44, "Gauche" }, - { 45, "Droit" }, - { 46, "Haut" }, - { 47, "\311mulateur DOSBox OPL" }, - { 48, "DVD" }, - { 49, "DVD mont\351 avec succ\350s" }, - { 50, "DVD non mont\351" }, - { 51, "Date:" }, - { 52, "Debugger" }, - { 53, "D\351faut" }, - { 54, "Supprimer" }, - { 55, "D\351sactiv\351 l'extinction" }, - { 56, "GFX d\351sactiv\351" }, - { 57, "%d nouveaux jeux trouv\351s ..." }, - { 58, "%d nouveaux jeux trouv\351s." }, - { 59, "Affichage" }, - { 60, "Afficher le clavier" }, - { 61, "Voulez-vous vraiment supprimer cette sauvegarde?" }, - { 62, "Voulez-vous vraiment supprimer ce jeu?" }, - { 63, "Voulez-vous vraiment lancer la d\351tection automatique des jeux? Cela peut potentiellement ajouter un grand nombre de jeux." }, - { 64, "Voulez-vous charger ou sauver le jeu?" }, - { 65, "Voulez-vous ex\351cuter une recherche automatique?" }, - { 66, "Voulez-vous quitter?" }, - { 67, "Coup double" }, - { 68, "Bas" }, - { 69, "Activer le mode Roland GS" }, - { 70, "Le niveau de debug '%s' n'est pas support\351 par ce moteur de jeu" }, - { 71, "Anglais" }, - { 72, "Erreur lors de l'\351x\351cution du jeu:" }, - { 73, "\311chec du montage du DVD" }, - { 74, "Extra:" }, - { 75, "\311mulateur FM Towns" }, - { 76, "Mode rapide" }, - { 77, "Options incluses:" }, - { 78, "Regarder autour" }, - { 79, "Nom complet du jeu" }, - { 80, "Plein \351cran" }, - { 81, "Acceleration du pad GC:" }, - { 82, "Sensibilit\351 du pad GC:" }, - { 83, "GFX" }, - { 84, "Sortie GM:" }, - { 85, "Langue:" }, - { 86, "Interface:" }, - { 87, "Jeu" }, - { 88, "Fichier de don\351es introuvable" }, - { 89, "ID de jeu non support\351" }, - { 90, "Chemin du Jeu:" }, - { 91, "Menu global" }, - { 92, "Remonte d'un niveau dans la hi\351rarchie de r\351pertoire" }, - { 93, "Remonter" }, - { 94, "Graphique" }, - { 95, "Mode graphique:" }, - { 96, "Mise \340 l'echelle mat\351rielle (rapide mais qualit\351 faible)" }, - { 97, "Hercules Ambre" }, - { 98, "Hercules Vert" }, - { 99, "Cach\351 la barre d'outils" }, - { 100, "Audio haute qualit\351 (plus lent) (red\351marrer)" }, - { 101, "Une valeur plus \351lev\351e donne une meilleure qualit\351 audio mais peut ne pas \352tre support\351 par votre carte son" }, - { 102, "Ajoute un jeu \340 la Liste. Maintenez Shift enfonc\351e pour un Ajout Massif" }, - { 103, "Underscan horizontal:" }, - { 104, "\311mulateur IBM PCjr" }, - { 105, "ID:" }, - { 106, "Initialiser le r\351seau" }, - { 107, "\311chelle initiale de l'\351cran du haut" }, - { 108, "Initialisation de l'\311mulateur MT-32" }, - { 109, "Initialisation du r\351seau" }, - { 110, "Entr\351e" }, - { 111, "Chemin Invalide" }, - { 112, "Affectation des touches" }, - { 113, "Clavier" }, - { 114, "Affectation des touches:" }, - { 115, "Touches" }, - { 116, "Langue de l'interface graphique de ScummVM" }, - { 117, "Langue du jeu. Cela ne traduira pas en anglais par magie votre version espagnole du jeu." }, - { 118, "Langue:" }, - { 119, "Gauche" }, - { 120, "Clic Gauche" }, - { 121, "Charger" }, - { 122, "Charger le jeu:" }, - { 123, "Charge une sauvegarde pour le jeu s\351lectionn\351" }, - { 124, "\311mulateur MAME OPL" }, - { 125, "MIDI" }, - { 126, "Gain MIDI:" }, - { 127, "MT-32" }, - { 128, "Sortie MT-32:" }, - { 129, "\311mulateur MT-32" }, - { 130, "\311chelle de l'\351cran principal" }, - { 131, "Affecter" }, - { 132, "Ajout Massif..." }, - { 133, "Menu" }, - { 134, "Divers" }, - { 135, "Mode mixe AdLib/MIDI" }, - { 136, "Monter le DVD" }, - { 137, "Monter SMB" }, - { 138, "Clic de souris" }, - { 139, "Fonction Multiple" }, - { 140, "Sortie Audio:" }, - { 141, "Volume Musique:" }, - { 142, "Silence" }, - { 143, "Nom:" }, - { 144, "R\351seau d\351connect\351" }, - { 145, "R\351seau non initialis\351 (%d)" }, - { 146, "R\351seau connect\351" }, - { 147, "R\351seau connect\351, disque partag\351 mont\351" }, - { 148, "Jamais" }, - { 149, "Non" }, - { 150, "Date non sauv\351e" }, - { 151, "Pas de musique" }, - { 152, "Dur\351e de jeu non sauv\351e" }, - { 153, "Heure non sauv\351e" }, - { 154, "Aucun" }, - { 155, "Normal (\351chelle d'origine)" }, - { 156, "OK" }, - { 157, "Fr\351quence:" }, - { 158, "Utiliser des r\351glages MIDI sp\351cifiques \340 ce jeux" }, - { 159, "Utiliser des r\351glages MT-32 sp\351cifiques \340 ce jeux" }, - { 160, "Utiliser des r\351glages audio sp\351cifiques \340 ce jeux" }, - { 161, "Utiliser des r\351glages graphiques sp\351cifiques \340 ce jeux" }, - { 162, "Utiliser des r\351glages de volume sonore sp\351cifiques \340 ce jeux" }, - { 163, "\311mulateur Haut Parleur PC" }, - { 164, "Mot de passe:" }, - { 165, "Chemin n'est pas un r\351pertoire" }, - { 166, "Chemin n'est pas un fichier" }, - { 167, "Chemin inexistant" }, - { 168, "Chemins" }, - { 169, "Mettre en pause" }, - { 170, "Choisissez le jeu:" }, - { 171, "Plateforme pour laquelle votre jeu a \351t\351 con\347u" }, - { 172, "Plateforme:" }, - { 173, "Dur\351e de jeu:" }, - { 174, "Selectionnez une action" }, - { 175, "Plugins:" }, - { 176, "Sortie Pr\351f\351r\351:" }, - { 177, "Appuyez sur la touche \340 associer" }, - { 178, "Quitter" }, - { 179, "Quitter ScummVM" }, - { 180, "V\351roulli\351 en lecture" }, - { 181, "Echec de la lecture" }, - { 182, "Changer l'affectation des touches" }, - { 183, "Supprime le jeu de la liste. Les fichiers sont conserv\351s" }, - { 184, "Mode de rendu:" }, - { 185, "Droite" }, - { 186, "Clic Droit" }, - { 187, "Clic droit" }, - { 188, "Pivoter" }, - { 189, "Volume Bruitage:" }, - { 190, "SMB" }, - { 191, "Sauver" }, - { 192, "Sauvegardes:" }, - { 193, "Sauvegardes:" }, - { 194, "Sauvegarde:" }, - { 195, "Examen termin\351!" }, - { 196, "%d r\351pertoires examin\351s ..." }, - { 197, "Menu Principal ScummVM" }, - { 198, "ScummVM n'a pas pu trouv\351 de moteur pour lancer le jeu s\351lectionn\351." }, - { 199, "ScummVM n'a pas trouv\351 de jeux dans le r\351pertoire s\351lectionn\351." }, - { 200, "ScummVM n'a pas pu ouvrir le r\351pertoire s\351lectionn\351." }, - { 201, "Recherche dans la liste de jeux" }, - { 202, "Filtre:" }, - { 203, "Choisir une banque de sons" }, - { 204, "S\351lectionnez un Th\350me" }, - { 205, "S\351lectionner un r\351pertoire suppl\351mentaire" }, - { 206, "Selectionez une action et cliquez 'Affecter'" }, - { 207, "S\351lectionner le r\351pertoire des th\350mes d'interface" }, - { 208, "S\351lectionner le r\351pertoire pour les fichiers supl\351mentaires" }, - { 209, "S\351lectionner le r\351pertoire des plugins" }, - { 210, "S\351lectionner le r\351pertoire pour les sauvegardes" }, - { 211, "S\351lectionner le r\351pertoire pour les sauvegardes" }, - { 212, "S\351lectionner le r\351pertoire contenant les donn\351es du jeu" }, - { 213, "Sensibilit\351" }, - { 214, "Serveur:" }, - { 215, "Disque partag\351:" }, - { 216, "ID compact du jeu utilis\351 pour identifier les sauvegardes et d\351marrer le jeu depuis la ligne de commande" }, - { 217, "Afficher le clavier" }, - { 218, "Afficher le curseur de la souris" }, - { 219, "Affiche les sous-titres et joue les dialogues audio" }, - { 220, "Afficher/Cacher le curseur" }, - { 221, "Passer" }, - { 222, "Passer la phrase" }, - { 223, "Sauter le texte" }, - { 224, "Aligner sur les bords" }, - { 225, "Mise \340 l'\351chelle logicielle (bonne qualit\351 mais plus lent)" }, - { 226, "Audio marche/arr\352t" }, - { 227, "La banque de sons est utilis\351e par certaines cartes audio, Fluidsynth et Timidity" }, - { 228, "Banque de sons:" }, - { 229, "Audio" }, - { 230, "Mode sp\351cial de tramage support\351 par certains jeux" }, - { 231, "Volume des effets sp\351ciaux sonores" }, - { 232, "Sp\351cifie le p\351riph\351rique audio par d\351faut pour la sortie General MIDI" }, - { 233, "Sp\351cifie le p\351riph\351rique audio par d\351faut pour la sortie Roland MT-32/LAPC1/CM32l/CM64" }, - { 234, "Sp\351cifie le p\351riph\351rique de sortie audio ou l'\351mulateur de carte audio" }, - { 235, "Sp\351cifie un chemin vers des donn\351es suppl\351mentaires utilis\351es par tous les jeux ou ScummVM" }, - { 236, "D\351finie un chemin vers des donn\351es supl\351mentaires utilis\351es par le jeu" }, - { 237, "Sp\351cifie le p\351riph\351rique de sortie audio ou l'\351mulateur de carte audio pr\351f\351r\351" }, - { 238, "D\351finie l'emplacement o\371 les fichiers de sauvegarde sont cr\351\351s" }, - { 239, "Audio" }, - { 240, "Volume Dialogues:" }, - { 241, "Standard (16bpp)" }, - { 242, "D\351marre le jeu s\351lectionn\351" }, - { 243, "Status:" }, - { 244, "Subs" }, - { 245, "Vitesse des ST:" }, - { 246, "Sous-titres" }, - { 247, "Changement de personnage" }, - { 248, "Toucher pour un clic gauche, toucher deux fois pour un clic droit" }, - { 249, "Dialogue:" }, - { 250, "Le r\351pertoire s\351lectionn\351 est v\351rouill\351 en \351criture. S\351lectionnez un autre r\351pertoire." }, - { 251, "Th\350mes:" }, - { 252, "Th\350me:" }, - { 253, "Cet ID est d\351j\340 utilis\351 par un autre jeu. Choisissez en un autre svp." }, - { 254, "Le chargement de sauvegarde depuis le lanceur n'est pas support\351 pour ce jeu." }, - { 255, "Heure:" }, - { 256, "D\351passement du d\351lai lors de l'initialisation du r\351seau" }, - { 257, "D\351calage X du toucher" }, - { 258, "D\351callage Y du toucher" }, - { 259, "Mode touchpad d\351sactiv\351" }, - { 260, "Mode touchpad activ\351" }, - { 261, "Roland MT-32 exacte (d\351sactive l'\351mulation GM)" }, - { 262, "D\351sactiver la conversion des pistes MT-32 en General MIDI" }, - { 263, "Inconue" }, - { 264, "Erreur inconnue" }, - { 265, "D\351monter le DVD" }, - { 266, "D\351monter SMB" }, - { 267, "Sans changement d'\351chelle (vous devez faire d\351filer l'\351cran)" }, - { 268, "Mode de couleurs non support\351" }, - { 269, "Sauvegarde sans nom" }, - { 270, "Haut" }, - { 271, "Utiliser \340 la fois MIDI et AdLib" }, - { 272, "Activer le contr\364le du curseur de type trackpad" }, - { 273, "Nom d'utilisateur:" }, - { 274, "Utilise le pilote SDL" }, - { 275, "Underscan vertical:" }, - { 276, "Vid\351o" }, - { 277, "Clavier virtuel" }, - { 278, "Volume" }, - { 279, "MIDI Windows" }, - { 280, "Verrouill\351 en \351criture" }, - { 281, "Echec de l'\351criture des donn\351es" }, - { 282, "Oui" }, - { 283, "Vous devez relancer ScummVM pour que le changement soit pris en compte." }, - { 284, "Zone" }, - { 285, "Zoomer" }, - { 286, "D\351zoomer" }, - { 287, "Toutes les 10 mins" }, - { 288, "Toutes les 15 mins" }, - { 289, "Toutes les 30 mins" }, - { 290, "Toutes les 5 mins" }, - { 291, "\300 ~P~ropos" }, - { 292, "~A~jouter..." }, - { 293, "~A~nnuler" }, - { 294, "~F~ermer" }, - { 295, "~E~diter..." }, - { 296, "~A~ide" }, - { 297, "Contr\364le des combats d'~I~ndy" }, - { 298, "~T~ouches" }, - { 299, "Mode ~G~aucher" }, - { 300, "~C~harger" }, - { 301, "~C~harger" }, - { 302, "~S~uivant" }, - { 303, "~O~K" }, - { 304, "~O~ptions" }, - { 305, "~O~ptions..." }, - { 306, "~P~r\351c\351dent" }, - { 307, "~Q~uitter" }, - { 308, "~S~upprimer" }, - { 309, "~R~eprendre" }, - { 310, "Retour au ~L~anceur" }, - { 311, "~S~auver" }, - { 312, "~D~\351marrer" }, - { 313, "T~r~ansitions activ\351" }, - { 314, "~E~ffets de l'Eau Activ\351s" }, - { 315, "Mode ~Z~ip Activ\351" }, - { -1, NULL } -}; - -static const PoMessageEntry _translation_uk_UA[] = { - { 0, "Project-Id-Version: ScummVM VERSION\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-07-30 22:14+0100\nPO-Revision-Date: 2010-07-30 22:19+0100\nLast-Translator: Lubomyr Lisen\nLanguage-Team: Ukrainian\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-5\nContent-Transfer-Encoding: 8bit\nLanguage: Ukrainian\nPlural-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" }, - { 1, " \262\330 \343\337\325\322\335\325\335\366, \351\336 \345\336\347\325\342\325 \322\330\331\342\330? " }, - { 2, " (\260\332\342\330\322\335\320)" }, - { 3, " (\246\323\340\330)" }, - { 4, " (\263\333\336\321\320\333\354\335\320)" }, - { 5, "(\327\366\321\340\320\335\330\331 %s)" }, - { 6, ", \337\336\334\330\333\332\320 \337\366\324 \347\320\341 \337\366\324\332\333\356\347\325\335\335\357 \337\320\337\332\330" }, - { 7, ", \337\320\337\332\320 \335\325 \337\366\324\332\333\356\347\325\335\320" }, - { 8, "... \337\336\350\343\332 ..." }, - { 9, "11 \332\263\346" }, - { 10, "22 \332\263\346" }, - { 11, "44 \332\263\346" }, - { 12, "48 \332\263\346" }, - { 13, "8 \332\263\346" }, - { 14, "<\327\320 \343\334\336\322\347\320\335\335\357\334>" }, - { 15, "\277\340\336 ScummVM" }, - { 16, "\265\334\343\333\357\342\336\340 AdLib" }, - { 17, "\265\334\343\333\357\342\336\340 AdLib:" }, - { 18, "\267\322\343\332\336\322\320 \332\320\340\342\320 AdLib \322\330\332\336\340\330\341\342\336\322\343\364\342\354\341\357 \321\320\323\320\342\354\334\320 \366\323\340\320\334\330" }, - { 19, "\264\336\324. \323\340\343..." }, - { 20, "\300\320\341\342\325\340\330\327\320\342\336\340 \327\366 \327\323\333\320\324\326\343\322\320\335\335\357\334 (16bpp)" }, - { 21, "\272\336\340\325\332\346\366\357 \341\337\366\322\322\366\324\335\336\350\325\335\335\357 \341\342\336\340\366\335" }, - { 22, "\277\340\330\327\335\320\347\325\335\320 \332\333\320\322\366\350\320 : %s" }, - { 23, "\277\340\330\327\335\320\347\325\335\320 \332\333\320\322\366\350\320 : \335\325\334\320\364" }, - { 24, "\260\343\324\366\336" }, - { 25, "\260\322\342\336\327\321\325\340\325\326\325\335\335\357:" }, - { 26, "\264\336\341\342\343\337\335\366 \324\322\330\326\332\330:" }, - { 27, "\277\340\336 \337~\340~\336\323\340\320\334\343..." }, - { 28, "\337\340\330\327\335\320\347\330\342\330 \332\333\320\322\366\350\366" }, - { 29, "\262\341\325" }, - { 30, "\317\341\332\340\320\322\366\341\342\354:" }, - { 31, "\262\366\324\334\366\335\320" }, - { 32, "\275\325 \334\336\326\343 \341\342\322\336\340\330\342\330 \344\320\331\333" }, - { 33, "\267\334\366\335\330\342\330 \336\337\346\366\367 \323\340\330" }, - { 34, "\267\334\366\335\330\342\330 \323\333\336\321\320\333\354\335\366 \336\337\346\366\367 ScummVM" }, - { 35, "\262\366\324\334\366\342\354\342\325, \357\332\351\336 \343 \322\320\341 \337\366\324\332\333\356\347\325\335\330\331 Roland-\341\343\334\366\341\335\330\331 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \366 \322\330 \345\336\347\325\342\325 \331\336\323\336 \322\330\332\336\340\330\341\342\320\342\330" }, - { 36, "\262\330\321\340\320\342\330" }, - { 37, "\262\330\321\325\340\366\342\354 \324\366\356 \324\333\357 \337\340\330\327\335\320\347\325\335\335\357" }, - { 38, "\276\347\330\341\342\330\342\330 \327\335\320\347\325\335\335\357" }, - { 39, "\267\320\332\340\330\342\330" }, - { 40, "\272\336\340\330\323\343\322\320\342\330 \341\337\366\322\322\366\324\335\336\350\325\335\335\357 \341\342\336\340\366\335 \324\333\357 \366\323\336\340 \327 \323\340\320\344\366\332\336\356 320x200" }, - { 41, "\275\325 \334\336\326\343 \327\335\320\331\342\330 \324\322\330\326\336\332 \324\333\357 \327\320\337\343\341\332\343 \322\330\321\340\320\335\336\367 \323\340\330" }, - { 42, "\302\325\332\343\347\330\331 \322\366\324\325\336\340\325\326\330\334:" }, - { 43, "\272\343\340\341\336\340 \322\335\330\327" }, - { 44, "\272\343\340\341\336\340 \322\333\366\322\336" }, - { 45, "\272\343\340\341\336\340 \322\337\340\320\322\336" }, - { 46, "\272\343\340\341\336\340 \322\322\325\340\345" }, - { 47, "\265\334\343\333\357\342\336\340 DOSBox OPL" }, - { 48, "DVD" }, - { 49, "DVD \337\366\324\332\333\356\347\325\335\330\331 \343\341\337\366\350\335\336" }, - { 50, "DVD \335\325 \337\366\324\332\333\356\347\325\335\330\331" }, - { 51, "\264\320\342\320: " }, - { 52, "\262\366\324\333\320\324\347\330\332" }, - { 53, "\267\320 \343\334\336\322\347\320\335\335\357\334" }, - { 54, "\262\330\324\320\333\330\342\330" }, - { 55, "\267\320\321\336\340\336\335\330\342\330 \322\330\334\332\335\325\335\335\357" }, - { 56, "\261\325\327 \323\340\320\344\366\332\330" }, - { 57, "\267\335\320\331\324\325\335\336 %d \335\336\322\330\345 \366\323\336\340 ..." }, - { 58, "\267\335\320\331\324\325\335\336 %d \335\336\322\330\345 \366\323\336\340." }, - { 59, "\277\336\332\320\327\320\342\330 " }, - { 60, "\277\336\332\320\327\320\342\330 \332\333\320\322\366\320\342\343\340\343" }, - { 61, "\262\330 \324\366\331\341\335\336 \345\336\347\325\342\325 \322\330\324\320\333\330\342\330 \346\325 \327\321\325\340\325\326\325\335\335\357?" }, - { 62, "\262\330 \324\366\331\341\335\336 \345\336\347\325\342\325 \322\330\324\320\333\330\342\330 \343\341\342\320\335\336\322\332\330 \324\333\357 \346\366\364\367 \323\340\330?" }, - { 63, "\262\330 \324\366\331\341\335\336 \345\336\347\325\342\325 \327\320\337\343\341\342\330\342\330 \324\325\342\325\332\342\336\340 \343\341\366\345 \366\323\336\340? \306\325 \337\336\342\325\335\346\366\331\335\336 \334\336\326\325 \324\336\324\320\342\330 \322\325\333\330\332\343 \332\366\333\354\332\366\341\342\354 \366\323\336\340." }, - { 64, "\262\330 \345\336\347\325\342\325 \327\320\322\320\335\342\320\326\330\342\330 \320\321\336 \327\321\325\340\325\323\342\330 \323\340\343?" }, - { 65, "\262\330 \345\336\347\325\342\325 \327\324\366\331\341\335\330\342\330 \320\322\342\336\334\320\342\330\347\335\330\331 \337\336\350\343\332?" }, - { 66, "\262\330 \345\336\347\330\342\325 \322\330\331\342\330?" }, - { 67, "\277\336\324\322\366\331\335\330\331 \343\324\320\340" }, - { 68, "\262\335\330\327" }, - { 69, "\303\322\366\334\332\335\343\342\330 \340\325\326\330\334 Roland GS" }, - { 70, "\264\322\330\326\336\332 \335\325 \337\366\324\342\340\330\334\343\364 \340\366\322\325\335\354 \322\366\324\333\320\324\332\330 '%s'" }, - { 71, "English" }, - { 72, "\277\336\334\330\333\332\320 \327\320\337\343\341\332\343 \323\340\330:" }, - { 73, "\277\336\334\330\333\332\320 \337\366\324 \347\320\341 \337\366\324\332\333\356\347\325\335\335\357 DVD" }, - { 74, "\264\336\324. \350\333\357\345:" }, - { 75, "\265\334\343\333\357\342\336\340 FM Towns" }, - { 76, "\310\322\330\324\332\330\331 \340\325\326\330\334" }, - { 77, "\262\332\333\356\347\325\335\366 \322 \321\366\333\324 \336\337\346\366\367:" }, - { 78, "\262\366\333\354\335\330\331 \336\323\333\357\324" }, - { 79, "\277\336\322\335\320 \335\320\327\322\320 \323\340\330" }, - { 80, "\277\336\322\335\336\325\332\340\320\335\335\330\331 \340\325\326\330\334" }, - { 81, "\277\340\330\341\332\336\340\325\335\335\357 GC \337\320\324\343:" }, - { 82, "\307\343\342\333\330\322\366\341\342\354 GC \337\320\324\343:" }, - { 83, "\263\340\344" }, - { 84, "\277\340\330\341\342\340\366\331 GM:" }, - { 85, "\274\336\322\320 \366\335\342\325\340\344\325\331\341\343:" }, - { 86, "\300\320\341\342\325\340\330\327\320\342\336\340 GUI:" }, - { 87, "\263\340\320" }, - { 88, "\275\325\334\320\364 \344\320\331\333\366\322 \323\340\330" }, - { 89, "Game Id \335\325 \337\366\324\342\340\330\334\343\364\342\354\341\357" }, - { 90, "\310\333\357\345 \324\336 \323\340\330: " }, - { 91, "\263\333\336\321\320\333\354\335\325 \334\325\335\356" }, - { 92, "\277\325\340\325\331\342\330 \335\320 \337\320\337\332\343 \340\366\322\335\325\334 \322\330\351\325" }, - { 93, "\262\322\325\340\345" }, - { 94, "\263\340\320\344\366\332\320" }, - { 95, "\263\340\320\344\366\347\335\330\331 \340\325\326\330\334:" }, - { 96, "\305\320\340\324\322\320\340\335\336\325 \334\320\341\350\342\320\321\343\322\320\335\335\357 (\350\322\330\324\332\336, \320\333\325 \335\330\327\354\332\336\367 \357\332\336\341\342\366)" }, - { 97, "Hercules \317\335\342\320\340\335\330\331" }, - { 98, "Hercules \267\325\333\325\335\330\331" }, - { 99, "\267\320\345\336\322\320\342\330 \337\320\335\325\333\354 \366\335\341\342\340\343\334\325\335\342\366\322" }, - { 100, "\262\330\341\336\332\320 \357\332\366\341\342\354 \327\322\343\332\343 (\337\336\322\366\333\354\335\366\350\325) (\340\325\321\343\342)" }, - { 101, "\262\325\333\330\332\366 \327\335\320\347\325\335\335\357 \327\320\324\320\356\342\354 \332\340\320\351\343 \357\332\366\341\342\354 \327\322\343\332\343, \337\340\336\342\325 \322\336\335\330 \334\336\326\343\342\354 \335\325 \337\366\324\342\340\330\334\343\322\320\342\330\341\357 \322\320\350\336\356 \327\322\343\332\336\322\336\356 \332\320\340\342\336\356" }, - { 102, "\303\342\340\330\334\343\331\342\325 \332\333\320\322\366\350\343 Shift \324\333\357 \342\336\323\336, \351\336\321 \324\336\324\320\342\330 \324\325\332\366\333\354\332\320 \366\323\336\340" }, - { 103, "\263\336\340\330\327\336\335\342\320\333\354\335\330\331 underscan:" }, - { 104, "\265\334\343\333\357\342\336\340 IBM PCjr" }, - { 105, "ID:" }, - { 106, "\246\335\366\346\366\320\333\366\327\320\346\366\357 \334\325\340\325\326\366" }, - { 107, "\277\336\347\320\342\332\336\322\330\331 \334\320\341\350\342\320\321 \322\325\340\345\335\354\336\323\336 \325\332\340\320\335\343:" }, - { 108, "\275\320\341\342\340\336\356\356 \325\334\343\333\357\342\336\340 MT-32" }, - { 109, "\275\320\333\320\350\342\336\322\343\356 \334\325\340\325\326\343" }, - { 110, "\262\322\366\324" }, - { 111, "\275\325\337\340\320\322\330\333\354\335\330\331 \350\333\357\345" }, - { 112, "\277\340\330\327\335\320\347\325\335\335\357 \332\333\320\322\366\350" }, - { 113, "\272\333\320\322\366\320\342\343\340\320" }, - { 114, "\302\320\321\333\330\346\357 \332\333\320\322\366\350:" }, - { 115, "\272\333\320\322\366\350\366" }, - { 116, "\274\336\322\320 \323\340\320\344\366\347\335\336\323\336 \366\335\342\325\340\344\325\331\341\343 ScummVM" }, - { 117, "\274\336\322\320 \323\340\330. \267\334\366\335\320 \346\354\336\323\336 \337\320\340\320\334\325\342\340\343 \335\325 \337\325\340\325\342\322\336\340\330\342\354 \323\340\343 \335\320 \320\335\323\333\366\331\341\354\332\366\331 \322 \343\332\340\320\367\335\341\354\332\343" }, - { 118, "\274\336\322\320:" }, - { 119, "\262\333\366\322\336" }, - { 120, "\273\366\322\330\331 \332\333\366\332" }, - { 121, "\267\320\322\320\335\342\320\326\330\342\330" }, - { 122, "\267\320\322\320\335\342\320\326\330\342\330 \323\340\343:" }, - { 123, "\267\320\322\320\335\342\320\326\330\342\330 \327\321\325\340\325\326\325\335\335\357 \324\333\357 \322\330\321\340\320\335\336\367 \323\340\330" }, - { 124, "\265\334\343\333\357\342\336\340 MAME OPL:" }, - { 125, "MIDI" }, - { 126, "\277\336\341\330\333\325\335\335\357 MIDI:" }, - { 127, "MT-32" }, - { 128, "\277\340\330\341\342\340\366\331 MT-32:" }, - { 129, "\265\334\343\333\357\342\336\340 MT-32" }, - { 130, "\274\320\341\350\342\320\321 \323\336\333\336\322\335\336\323\336 \325\332\340\320\335\343:" }, - { 131, "\277\340\330\327\335\320\347\330\342\330" }, - { 132, "\264\336\324. \321\320\323\320\342\336..." }, - { 133, "\274\325\335\356" }, - { 134, "\300\366\327\335\325" }, - { 135, "\267\334\366\350\320\335\330\331 \340\325\326\330\334 AdLib/MIDI" }, - { 136, "\277\366\324\332\333\356\347\330\342\330 DVD" }, - { 137, "\277\366\324\332\333\356\347\330\342\330 SMB" }, - { 138, "\272\333\366\332 \334\330\350\332\336\356" }, - { 139, "\274\343\333\354\342\366\344\343\335\332\346\366\357" }, - { 140, "\274\343\327\330\347\335\330\331 \277\340\330\341\342\340\366\331:" }, - { 141, "\263\343\347\335\366\341\342\354 \334\343\327\330\332\330:" }, - { 142, "\262\330\334\332\335\343\342\330 \343\341\325" }, - { 143, "\275\320\327\322\320:" }, - { 144, "\274\325\340\325\326\320 \322\330\334\332\335\325\335\320" }, - { 145, "\274\325\340\325\326\320 \335\325 \335\320\333\320\323\336\324\326\325\335\320 (%d)" }, - { 146, "\274\325\340\325\326\320 \337\340\320\346\356\364" }, - { 147, "\274\325\340\325\326\320 \337\340\320\346\356\364, \337\320\337\332\320 \337\366\324\332\333\356\347\325\335\320" }, - { 148, "\275\366\332\336\333\330" }, - { 149, "\275\366" }, - { 150, "\264\320\342\320 \335\325 \327\320\337\330\341\320\335\320" }, - { 151, "\261\325\327 \334\343\327\330\332\330" }, - { 152, "\307\320\341 \323\340\330 \335\325 \327\320\337\330\341\320\335\336" }, - { 153, "\307\320\341 \335\325 \327\320\337\330\341\320\335\330\331" }, - { 154, "\275\325 \327\320\324\320\335\330\331" }, - { 155, "\261\325\327 \327\321\366\333\354\350\325\335\335\357" }, - { 156, "OK" }, - { 157, "\262\330\345\366\324\335\320 \347\320\341\342\336\342\320:" }, - { 158, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 MIDI" }, - { 159, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 MT-32" }, - { 160, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 \320\343\324\366\336" }, - { 161, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 \323\340\320\344\366\332\330" }, - { 162, "\277\325\340\325\332\340\330\342\330 \323\333\336\321\320\333\354\335\366 \343\341\342\320\335\336\322\332\330 \323\343\347\335\336\341\342\366" }, - { 163, "\265\334\343\333\357\342\336\340 PC \341\337\366\332\325\340\320" }, - { 164, "\277\320\340\336\333\354:" }, - { 165, "\310\333\357\345 \335\325 \364 \337\320\337\332\336\356" }, - { 166, "\310\333\357\345 \335\325 \364 \344\320\331\333\336\334" }, - { 167, "\310\333\357\345 \335\325 \327\335\320\331\324\325\335\330\331" }, - { 168, "\310\333\357\345\330" }, - { 169, "\277\320\343\327\320" }, - { 170, "\262\330\321\325\340\366\342\354 \323\340\343:" }, - { 171, "\277\333\320\342\344\336\340\334\320, \324\333\357 \357\332\336\367 \323\340\320 \321\343\333\320 \341\337\336\347\320\342\332\343 \340\336\327\340\336\321\333\325\335\320" }, - { 172, "\277\333\320\342\344\336\340\334\320:" }, - { 173, "\307\320\341 \323\340\330: " }, - { 174, "\261\343\324\354 \333\320\341\332\320, \322\330\321\325\340\366\342\354 \324\366\356" }, - { 175, "\310\333\357\345 \324\336 \337\333\320\323\366\335\366\322:" }, - { 176, "\277\340\330\341\342\340\366\331 \357\332\336\334\343 \322\366\324\324\320\364\342\354\341\357 \337\325\340\325\322\320\323\320:" }, - { 177, "\275\320\342\330\341\335\366\342\354 \332\333\320\322\366\350\343 \324\333\357 \337\340\330\327\335\320\347\325\335\335\357" }, - { 178, "\262\330\345\366\324" }, - { 179, "\262\330\345\366\324 \327 ScummVM" }, - { 180, "\275\325\324\336\341\342\320\342\335\354\336 \337\340\320\322 \324\333\357 \347\330\342\320\335\335\357" }, - { 181, "\277\336\334\330\333\332\320 \347\330\342\320\335\335\357" }, - { 182, "\277\325\340\325\337\340\330\327\335\320\347\330\342\330 \332\333\320\322\366\350\366" }, - { 183, "\262\330\324\320\333\330\342\330 \323\340\343 \327\366 \341\337\330\341\332\343. \275\325 \322\330\324\320\333\357\364 \323\340\343 \327 \326\336\340\341\342\332\336\323\336 \324\330\341\332\320" }, - { 184, "\300\325\326\330\334 \340\320\341\342\340\343\322\320\335\335\357:" }, - { 185, "\262\337\340\320\322\336" }, - { 186, "\277\340\320\322\330\331 \332\333\366\332" }, - { 187, "\277\340\320\322\330\331 \332\333\366\332" }, - { 188, "\277\336\322\325\340\335\343\342\330" }, - { 189, "\263\343\347\335\366\341\342\354 \325\344\325\332\342\366\322:" }, - { 190, "SMB" }, - { 191, "\267\320\337\330\341\320\342\330" }, - { 192, "\310\333\357\345 \327\321\325\340.: " }, - { 193, "\310\333\357\345 \324\333\357 \327\321\325\340\325\326\325\335\354: " }, - { 194, "\267\321\325\340\325\323\342\330 \323\340\343: " }, - { 195, "\277\336\350\343\332 \327\320\332\366\335\347\325\335\330\331!" }, - { 196, "\277\340\336\323\333\357\335\343\342\336 %d \337\320\337\336\332 ..." }, - { 197, "\263\336\333\336\322\335\325 \334\325\335\356 ScummVM" }, - { 198, "ScummVM \335\325 \327\334\366\323 \327\335\320\331\342\330 \324\322\330\326\336\332 \324\333\357 \327\320\337\343\341\332\343 \322\330\321\340\320\335\336\367 \323\340\330!" }, - { 199, "ScummVM \335\325 \334\336\326\325 \327\335\320\331\342\330 \323\340\343 \343 \322\332\320\327\320\335\366\331 \337\320\337\346\366!" }, - { 200, "ScummVM \335\325 \334\336\326\325 \322\366\324\332\340\330\342\330 \322\332\320\327\320\335\343 \337\320\337\332\343!" }, - { 201, "\277\336\350\343\332 \322 \341\337\330\341\332\343 \366\323\336\340" }, - { 202, "\277\336\350\343\332:" }, - { 203, "\262\330\321\325\340\366\342\354 SoundFont" }, - { 204, "\262\330\321\325\340\366\342\354 \342\325\334\343" }, - { 205, "\262\330\321\325\340\366\342\354 \324\336\324\320\342\332\336\322\343 \337\320\337\332\343 \323\340\330" }, - { 206, "\262\330\321\325\340\366\342\354 \324\366\356 \366 \332\333\366\332\335\366\342\354 '\277\340\330\327\335\320\347\330\342\330'" }, - { 207, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \324\333\357 \342\325\334 GUI" }, - { 208, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \327 \324\336\324\320\342\332\336\322\330\334\330 \344\320\331\333\320\334\330" }, - { 209, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \327 \337\333\320\323\330\335\320\334\330" }, - { 210, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \324\333\357 \327\321\325\340\325\326\325\335\354" }, - { 211, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \324\333\357 \327\321\325\340\325\326\325\335\354" }, - { 212, "\262\330\321\325\340\366\342\354 \337\320\337\332\343 \327 \344\320\331\333\320\334\330 \323\340\330" }, - { 213, "\307\343\342\333\330\322\366\341\342\354" }, - { 214, "\301\325\340\322\325\340:" }, - { 215, "\274\325\340\325\326\325\322\320 \337\320\337\332\320:" }, - { 216, "\272\336\340\336\342\332\330\331 \366\324\325\335\342\330\344\366\332\320\342\336\340, \357\332\330\331 \322\330\332\336\340\330\341\342\336\322\343\364\342\354\341\357 \324\333\357 \335\320\327\322 \327\321\325\340\325\326\325\335\330\345 \366\323\336\340 \366 \324\333\357 \327\320\337\343\341\332\343 \327 \332\336\334\320\335\324\335\336\367 \341\342\340\366\347\332\330" }, - { 217, "\277\336\332\320\327\320\342\330 \332\333\320\322\366\320\342\343\340\343" }, - { 218, "\277\336\332\320\327\343\322\320\342\330 \332\343\340\341\336\340 \334\330\350\366" }, - { 219, "\277\336\332\320\327\343\322\320\342\330 \341\343\321\342\330\342\340\330 \366 \322\366\324\342\322\336\340\356\322\320\342\330 \334\336\322\343" }, - { 220, "\277\336\332\320\327\320\342\330/\301\345\336\322\320\342\330 \332\343\340\341\336\340" }, - { 221, "\277\340\336\337\343\341\342\330\342\330" }, - { 222, "\277\340\336\337\343\341\342\330\342\330 \340\357\324\336\332" }, - { 223, "\277\340\336\337\343\341\342\330\342\330 \342\325\332\341\342" }, - { 224, "\277\340\330\332\340\366\337\330\342\330 \324\336 \332\340\320\367\322" }, - { 225, "\277\340\336\323\340\320\334\335\325 \334\320\341\350\342\320\321\343\322\320\335\335\357 (\345\336\340\336\350\320 \357\332\366\341\342\354, \320\333\325 \337\336\322\366\333\354\335\366\350\325)" }, - { 226, "\267\322\343\332 \343\322\366\334/\322\330\334\332" }, - { 227, "SoundFont \337\366\324\342\340\330\334\343\364\342\354\341\357 \324\325\357\332\330\334\330 \327\322\343\332\336\322\330\334\330 \332\320\340\342\320\334\330, Fluidsynth \366 Timidity" }, - { 228, "SoundFont:" }, - { 229, "\276\327\322" }, - { 230, "\301\337\325\346\366\320\333\354\335\366 \340\325\326\330\334\330 \340\325\335\324\325\340\330\335\323\343, \357\332\366 \337\366\324\342\340\330\334\343\356\342\354 \324\325\357\332\366 \366\323\340\330" }, - { 231, "\263\343\347\335\366\341\342\354 \341\337\325\346\366\320\333\354\335\330\345 \327\322\343\332\336\322\330\345 \325\344\325\332\342\366\322" }, - { 232, "\262\332\320\327\343\364 \322\330\345\366\324\335\330\331 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \324\333\357 MIDI" }, - { 233, "\262\332\320\327\343\364 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \337\336 \343\334\336\322\347\320\335\335\356 \324\333\357 \322\330\322\336\324\343 \335\320 Roland MT-32/LAPC1/CM32l/CM64" }, - { 234, "\262\332\320\327\343\364 \322\330\345\366\324\335\330\331 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \320\321\336 \325\334\343\333\357\342\336\340 \327\322\343\332\336\322\336\367 \332\320\340\342\330" }, - { 235, "\262\332\320\327\343\364 \350\333\357\345 \324\336 \324\336\324\320\342\332\336\322\330\345 \344\320\331\333\366\322 \324\320\335\330\345, \322\330\332\336\340\330\341\342\336\322\343\322\320\335\330\345 \343\341\366\334\320 \366\323\340\320\334\330, \320\321\336 ScummVM" }, - { 236, "\262\332\320\327\343\364 \350\333\357\345 \324\336 \324\336\324\320\342\332\336\322\330\345 \344\320\331\333\366\322 \324\320\335\330\345 \324\333\357 \323\340\330" }, - { 237, "\262\332\320\327\343\364 \322\330\345\366\324\335\330\331 \327\322\343\332\336\322\330\331 \337\340\330\341\342\340\366\331 \320\321\336 \325\334\343\333\357\342\336\340 \327\322\343\332\336\322\336\367 \332\320\340\342\330" }, - { 238, "\262\332\320\327\343\364 \350\333\357\345 \324\336 \327\321\325\340\325\326\325\335\354 \323\340\330" }, - { 239, "\276\327\322\343\347\325\335\335\357" }, - { 240, "\263\343\347\335\366\341\342\354 \336\327\322\343\347\325\335\335\357:" }, - { 241, "\301\342\320\335\324\320\340\342\335\330\331 \340\320\341\342\325\340\330\327\320\342\336\340 (16bpp)" }, - { 242, "\267\320\337\343\341\342\330\342\330 \322\330\321\340\320\335\343 \323\340\343" }, - { 243, "\301\342\320\335:" }, - { 244, "\301\343\321" }, - { 245, "\310\322\330\324\332\366\341\342\354 \341\343\321\342\330\342\340\366\322:" }, - { 246, "\301\343\321\342\330\342\340\330" }, - { 247, "\267\334\366\335\330\342\330 \323\325\340\336\357" }, - { 248, "\302\320\337 \324\333\357 \333\366\322\336\323\336 \332\333\320\346\320\335\335\357, \337\336\324\322\366\331\335\330\331 \342\320\337 \324\333\357 \337\340\320\322\336\323\336 \332\333\320\346\320\335\335\357" }, - { 249, "\302\325\332\341\342 \366 \336\327\322\343\347\325\335\335\357:" }, - { 250, "\275\325 \334\336\326\343 \337\330\341\320\342\330 \343 \322\330\321\340\320\335\343 \337\320\337\332\343. \261\343\324\354 \333\320\341\332\320, \322\332\320\326\366\342\354 \366\335\350\343." }, - { 251, "\310\333\357\345 \324\336 \342\325\334:" }, - { 252, "\302\325\334\320:" }, - { 253, "\306\325\331 ID \323\340\330 \322\326\325 \322\330\332\336\340\330\341\342\336\322\343\364\342\354\341\357. \261\343\324\354 \333\320\341\332\320, \322\330\321\325\340\366\342\354 \366\335\350\330\331." }, - { 254, "\306\357 \323\340\320 \335\325 \337\366\324\342\340\330\334\343\364 \327\320\322\320\335\342\320\326\325\335\335\357 \327\321\325\340\325\326\325\335\354 \347\325\340\325\327 \323\336\333\336\322\335\325 \334\325\335\356." }, - { 255, "\307\320\341: " }, - { 256, "\307\320\341 \337\366\324\332\333\356\347\325\335\335\357 \324\336 \334\325\340\325\326\366 \322\330\342\366\332" }, - { 257, "\267\334\366\351\325\335\335\357 \342\336\340\332\320\335\354 \337\336 \336\341\366 X" }, - { 258, "\267\334\366\351\325\335\335\357 \342\336\340\332\320\335\354 \337\336 \336\341\366 Y" }, - { 259, "\300\325\326\330\334 \342\320\347\337\320\324\343 \322\330\334\332\335\325\335\330\331." }, - { 260, "\300\325\326\330\334 \342\320\347\337\320\324\343 \343\322\366\334\332\335\325\335\330\331." }, - { 261, "\301\337\340\320\322\326\335\366\331 Roland MT-32 (\322\330\334\332\335\343\342\330 \325\334\343\333\357\346\330\356 GM)" }, - { 262, "\262\330\334\330\332\320\364 \334\320\337\337\366\335\323 General MIDI \324\333\357 \366\323\336\340 \366\327 \327\322\343\332\336\322\336\356 \324\336\340\366\326\332\336\356 \324\333\357 Roland MT-32" }, - { 263, "\275\325\322\366\324\336\334\336" }, - { 264, "\275\325\322\366\324\336\334\320 \337\336\334\330\333\332\320" }, - { 265, "\262\366\324\332\333\356\347\330\342\330 DVD" }, - { 266, "\262\366\324\332\333\356\347\342\330 SMB" }, - { 267, "\261\325\327 \334\320\341\350\342\320\321\343\322\320\335\335\357 (\342\340\325\321\320 \321\343\324\325 \337\340\336\332\340\343\347\343\322\320\342\330 \335\320\333\366\322\336 \366 \335\320\337\340\320\322\336)" }, - { 268, "\300\325\326\330\334 \272\336\333\354\336\340\343 \335\325 \337\366\324\342\340\330\334\343\364\342\354\341\357" }, - { 269, "\267\321\325\340\325\326\325\335\335\357 \321\325\327 \366\334\325\335\366" }, - { 270, "\262\322\325\340\345" }, - { 271, "\262\330\332\336\340\330\341\342\336\322\343\322\320\342\330 \366 MIDI \366 AdLib \324\333\357 \323\325\335\325\340\320\346\366\367 \327\322\343\332\343" }, - { 272, "\262\330\332\336\340\330\341\342\336\322\343\322\320\342\330 \343\337\340\320\322\333\366\335\335\357 \332\343\340\341\336\340\336\334 \357\332 \335\320 \342\340\325\332\337\320\324\366 \333\320\337\342\336\337\366\322" }, - { 273, "\272\336\340\330\341\342\343\322\320\347:" }, - { 274, "\262\330\332\336\340\330\341\342\336\322\343\356 \324\340\320\331\322\325\340 SDL " }, - { 275, "\262\325\340\342\330\332\320\333\354\335\330\331 underscan:" }, - { 276, "\262\366\324\325\336" }, - { 277, "\262\366\340\342\343\320\333\354\335\320 \332\333\320\322\366\320\342\343\340\320" }, - { 278, "\263\343\347\335\366\341\342\354" }, - { 279, "Windows MIDI" }, - { 280, "\275\325\324\336\341\342\320\342\335\354\336 \337\340\320\322 \324\333\357 \327\320\337\330\341\343" }, - { 281, "\277\336\334\330\333\332\320 \327\320\337\330\341\343 \324\320\335\330\345" }, - { 282, "\302\320\332" }, - { 283, "\262\330 \337\336\322\330\335\335\366 \337\325\340\325\327\320\337\343\341\342\330\342\330 ScummVM \351\336\321 \327\320\341\342\336\341\343\322\320\342\330 \327\334\366\335\330." }, - { 284, "\267\336\335\320" }, - { 285, "\267\334\335\350. \334\320\350\342\320\321" }, - { 286, "\267\321\366\333. \334\320\350\342\320\321" }, - { 287, "\332\336\326\335\366 10 \345\322" }, - { 288, "\332\336\326\335\366 15 \345\322" }, - { 289, "\332\336\326\335\366 30 \345\322" }, - { 290, "\332\336\326\335\366 5 \345\322" }, - { 291, "\277\340\336 \337\340\336~\323~\340\320\334\343" }, - { 292, "~\264~\336\324. \323\340\343..." }, - { 293, "\262\366~\324~\334\366\335\320" }, - { 294, "~\267~\320\332\340\330\342\330" }, - { 295, "\300\325\324\320~\323~. \323\340\343..." }, - { 296, "~\264~\336\337\336\334\336\323\320" }, - { 297, "\272\325\340\343\322\320\335\335\357 \321\336\357\334\330 \322 Indy" }, - { 298, "~\272~\333\320\322\366\350\366" }, - { 299, "\273\366\322\336\340\343\332\330\331 \340\325\326\330\334" }, - { 300, "~\267~\320\322\320\335\342\320\326\330\342\330" }, - { 301, "~\267~\320\322\320\335..." }, - { 302, "~\275~\320\341\342" }, - { 303, "~O~K" }, - { 304, "~\276~\337\346\366\367" }, - { 305, "~\276~\337\346\366\367..." }, - { 306, "~\277~\336\337\325\340" }, - { 307, "~\262~\330\345\366\324" }, - { 308, "~\262~\330\324\320\333\330\342\330 \323\340\343" }, - { 309, "\277\340\336\324\336\322~\326~\330\342\330" }, - { 310, "~\277~\336\322\325\340\335\343\342\330\341\354 \322 \323\336\333\336\322\335\325 \334\325\335\356" }, - { 311, "~\267~\320\337\330\341\320\342\330" }, - { 312, "\267~\320~\337\343\341\332" }, - { 313, "\277\325\340\325\345\336\324\330 \320\332\342\330\322\336\322\320\335\366" }, - { 314, "\265\344\325\332\342\330 \322\336\324\330 \322\332\333\356\347\325\335\366" }, - { 315, "\300\325\326\330\334 \350\322\330\324\332\336\323\336 \337\325\340\325\345\336\324\343 \320\332\342\330\322\336\322\320\335\330\331" }, - { -1, NULL } -}; - -static const PoMessageEntry _translation_ca_ES[] = { - { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-07-30 22:14+0100\nPO-Revision-Date: 2010-06-26 16:45+0100\nLast-Translator: Jordi Vilalta Prat <jvprat@gmail.com>\nLanguage-Team: Catalan <scummvm-devel@lists.sf.net>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Catalan\n" }, - { 2, " (Actiu)" }, - { 3, " (Joc)" }, - { 4, " (Global)" }, - { 5, "(compilat el %s)" }, - { 6, ", error al muntar la compartici\363" }, - { 7, ", compartici\363 no muntada" }, - { 8, "... progr\351s ..." }, - { 9, "11kHz" }, - { 10, "22 kHz" }, - { 11, "44 kHz" }, - { 12, "48 kHz" }, - { 13, "8 kHz" }, - { 14, "<per defecte>" }, - { 15, "Quant a ScummVM" }, - { 16, "Emulador d'AdLib" }, - { 17, "Emulador d'AdLib:" }, - { 18, "AdLib s'utilitza per la m\372sica de molts jocs" }, - { 19, "Afegeix Joc..." }, - { 20, "Pintat amb antialias (16bpp)" }, - { 21, "Correcci\363 del rati d'aspecte" }, - { 22, "Tecla associada : %s" }, - { 23, "Tecla associada : cap" }, - { 24, "\300udio" }, - { 25, "Desat autom\340tic:" }, - { 26, "Motors disponibles:" }, - { 27, "~Q~uant a..." }, - { 28, "Mapeja tecles" }, - { 29, "Ambd\363s" }, - { 30, "Brillantor:" }, - { 31, "Cancel\267la" }, - { 32, "No s'ha pogut crear el fitxer" }, - { 33, "Canvia les opcions del joc" }, - { 34, "Canvia les opcions globals de ScummVM" }, - { 35, "Marqueu si voleu utilitzar el vostre dispositiu hardware real de so compatible amb Roland connectat al vostre ordinador" }, - { 36, "Escull" }, - { 37, "Sel\267leccioneu una acci\363 per mapejar" }, - { 38, "Neteja el valor" }, - { 39, "Tanca" }, - { 40, "Corregeix la relaci\363 d'aspecte per jocs de 320x200" }, - { 41, "No s'ha pogut trobar cap motor capa\347 d'executar el joc seleccionat" }, - { 42, "Mode de v\355deo actual:" }, - { 43, "Cursor Avall" }, - { 44, "Cursor Esquerra" }, - { 45, "Cursor Dreta" }, - { 46, "Cursor Amunt" }, - { 47, "Emulador OPL de DOSBox" }, - { 48, "DVD" }, - { 49, "El DVD s'ha muntat satisfact\362riament" }, - { 50, "El DVD no est\340 muntat" }, - { 51, "Data: " }, - { 52, "Depurador" }, - { 53, "Per defecte" }, - { 54, "Suprimeix" }, - { 55, "Desactiva l'apagat autom\340tic" }, - { 56, "GFX desactivats" }, - { 57, "S'han descobert %d jocs nous ..." }, - { 58, "S'han descobert %d jocs nous." }, - { 59, "Pantalla" }, - { 60, "Mostra el teclat" }, - { 61, "Realment voleu suprimir aquesta partida?" }, - { 62, "Realment voleu suprimir la configuraci\363 d'aquest joc?" }, - { 63, "Esteu segur que voleu executar el detector massiu de jocs? Aix\362 pot afegir una gran quantitat de jocs." }, - { 64, "Voleu carregar o desar el joc?" }, - { 65, "Voleu fer una cerca autom\340tica?" }, - { 66, "Vols sortir?" }, - { 68, "Avall" }, - { 69, "Activa el Mode Roland GS" }, - { 70, "El motor no suporta el nivell de depuraci\363 '%s'" }, - { 71, "Angl\350s" }, - { 72, "Error al executar el joc:" }, - { 73, "Error al muntar el DVD" }, - { 74, "Cam\355 Extra:" }, - { 75, "Emulador de FM Towns" }, - { 76, "Mode r\340pid" }, - { 77, "Caracter\355stiques compilades:" }, - { 78, "Vista lliure" }, - { 79, "T\355tol complet del joc" }, - { 80, "Mode pantalla completa" }, - { 81, "Acceleraci\363 del Pad GC:" }, - { 82, "Sensibilitat del Pad GC:" }, - { 83, "GFX" }, - { 84, "Dispositiu GM:" }, - { 85, "Idioma de la interf\355cie d'usuari:" }, - { 86, "Mode de pintat de la interf\355cie d'usuari:" }, - { 87, "Joc" }, - { 88, "No s'han trobat les dades del joc" }, - { 89, "Identificador de joc no suportat" }, - { 90, "Cam\355 del Joc:" }, - { 91, "Men\372 global" }, - { 92, "Torna al nivell de directoris anterior" }, - { 93, "Amunt" }, - { 94, "Gr\340fics" }, - { 95, "Mode gr\340fic:" }, - { 96, "Escalat per hardware (r\340pid, per\362 de baixa qualitat)" }, - { 97, "Hercules \300mbar" }, - { 98, "Hercules Verd" }, - { 99, "Oculta la barra d'eines" }, - { 100, "Alta qualitat d'\340udio (m\351s lent) (reiniciar)" }, - { 101, "Valors m\351s alts especifiquen millor qualitat de so per\362 pot ser que la vostra tarja de so no ho suporti" }, - { 102, "Mantingueu premut Shift per a l'Addici\363 Massiva" }, - { 104, "Emulador d'IBM PCjr" }, - { 105, "Identificador:" }, - { 106, "Inicia la xarxa" }, - { 107, "Escalat inicial de la pantalla superior:" }, - { 108, "Iniciant l'Emulador de MT-32" }, - { 109, "Iniciant la xarxa" }, - { 110, "Entrada" }, - { 111, "Cam\355 incorrecte" }, - { 112, "Mapejador de tecles" }, - { 113, "Teclat" }, - { 114, "Mapa de teclat:" }, - { 115, "Tecles" }, - { 116, "Idioma de la interf\355cie d'usuari de ScummVM" }, - { 117, "Idioma del joc. Aix\362 no convertir\340 la vostra versi\363 Espanyola del joc a Angl\350s" }, - { 118, "Idioma:" }, - { 119, "Esquerra" }, - { 120, "Clic esquerre" }, - { 121, "Carrega" }, - { 122, "Carrega partida:" }, - { 123, "Carrega una partida pel joc seleccionat" }, - { 124, "Emulador OPL de MAME" }, - { 125, "MIDI" }, - { 126, "Guany MIDI:" }, - { 128, "Dispositiu MT32:" }, - { 129, "Emulador de MT-32" }, - { 130, "Escalat de la pantalla principal:" }, - { 131, "Mapeja" }, - { 132, "Addici\363 Massiva..." }, - { 133, "Men\372" }, - { 134, "Misc" }, - { 135, "Mode combinat AdLib/MIDI" }, - { 136, "Munta el DVD" }, - { 137, "Munta SMB" }, - { 138, "Clic del ratol\355" }, - { 139, "Funci\363 M\372ltiple" }, - { 140, "Dispositiu GM:" }, - { 141, "Volum de la m\372sica:" }, - { 142, "Silenciar tot" }, - { 143, "Nom:" }, - { 144, "Xarxa inactiva" }, - { 145, "Xarxa no iniciada (%d)" }, - { 146, "Xarxa activa" }, - { 147, "Xarxa activa, compartici\363 muntada" }, - { 148, "Mai" }, - { 149, "No" }, - { 150, "No hi ha data desada" }, - { 151, "Sense m\372sica" }, - { 152, "No hi ha temps de joc desat" }, - { 153, "No hi ha hora desada" }, - { 154, "Cap" }, - { 155, "Normal (sense escalar)" }, - { 156, "D'acord" }, - { 157, "Freq\374\350ncia de sortida:" }, - { 158, "Fer canvis sobre les opcions globals de MIDI" }, - { 159, "Fer canvis sobre les opcions globals de MIDI" }, - { 160, "Fer canvis sobre les opcions globals d'\340udio" }, - { 161, "Fer canvis sobre les opcions globals de gr\340fics" }, - { 162, "Fer canvis sobre les opcions globals de volum" }, - { 163, "Emulador d'Altaveu de PC" }, - { 164, "Contrasenya:" }, - { 165, "El cam\355 no \351s un directori" }, - { 166, "El cam\355 no \351s un fitxer" }, - { 167, "El cam\355 no existeix" }, - { 168, "Camins" }, - { 169, "Pausa" }, - { 170, "Seleccioneu el joc:" }, - { 171, "Plataforma per la que el joc es va dissenyar originalment" }, - { 172, "Plataforma:" }, - { 173, "Temps de joc: " }, - { 174, "Seleccioneu una acci\363" }, - { 175, "Cam\355 dels connectors:" }, - { 176, "Dispositiu Preferit:" }, - { 177, "Premeu la tecla a associar" }, - { 178, "Surt" }, - { 179, "Surt de ScummVM" }, - { 180, "S'ha denegat el perm\355s de lectura" }, - { 181, "Ha fallat la lectura" }, - { 182, "Remapeja les tecles" }, - { 183, "Elimina un joc de la llista. Els fitxers de dades del joc es mantenen intactes" }, - { 184, "Mode de pintat:" }, - { 185, "Dreta" }, - { 186, "Clic dret" }, - { 187, "Clic dret" }, - { 188, "Rotar" }, - { 189, "Volum dels efectes:" }, - { 190, "SMB" }, - { 191, "Desa" }, - { 192, "Cam\355 de les Partides:" }, - { 193, "Cam\355 de les Partides: " }, - { 194, "Desa la partida:" }, - { 195, "S'ha acabat la cerca!" }, - { 196, "S'han cercat %d directoris ..." }, - { 197, "Men\372 Principal de ScummVM" }, - { 198, "ScummVM no ha pogut trobar cap motor capa\347 d'executar el joc seleccionat!" }, - { 199, "ScummVM no ha pogut trobar cap joc al directori especificat!" }, - { 200, "ScummVM no ha pogut obrir el directori especificat!" }, - { 201, "Cerca a la llista de jocs" }, - { 202, "Cerca:" }, - { 203, "Seleccioneu el fitxer SoundFont" }, - { 204, "Seleccioneu un Tema" }, - { 205, "Seleccioneu el directori addicional del joc" }, - { 206, "Seleccioneu una acci\363 i cliqueu 'Mapeja'" }, - { 207, "Seleccioneu el directori dels temes de la Interf\355cie d'Usuari" }, - { 208, "Seleccioneu el directori dels fitxers extra" }, - { 209, "Seleccioneu el directori dels connectors" }, - { 210, "Seleccioneu el directori de les partides desades" }, - { 211, "Seleccioneu el directori de les partides desades" }, - { 212, "Seleccioneu el directori amb les dades del joc" }, - { 213, "Sensibilitat" }, - { 214, "Servidor:" }, - { 215, "Compartici\363:" }, - { 216, "Identificador de joc curt utilitzat per referir-se a les partides i per executar el joc des de la l\355nia de comandes" }, - { 217, "Mostra el teclat" }, - { 218, "Mostra el cursor del ratol\355" }, - { 219, "Mostra els subt\355tols i reprodueix la veu" }, - { 220, "Mostra/Oculta el cursor" }, - { 221, "Salta" }, - { 222, "Salta la l\355nia" }, - { 223, "Salta el text" }, - { 225, "Escalat per software (bona qualitat, per\362 m\351s lent)" }, - { 226, "So engegat/parat" }, - { 227, "Algunes targes de so, Fluidsynth i Timidity suporten SoundFont" }, - { 228, "Fitxer SoundFont:" }, - { 229, "Veus" }, - { 230, "Modes de dispersi\363 especials suportats per alguns jocs" }, - { 231, "Volum dels sons d'efectes especials" }, - { 232, "Especifica el dispositiu de so per defecte per a la sortida General MIDI" }, - { 233, "Especifica el dispositiu de so per defecte per a la sortida de Roland MT-32/LAPC1/CM32l/CM64" }, - { 234, "Especifica el dispositiu de so o l'emulador de tarja de so de sortida" }, - { 235, "Especifica el cam\355 de les dades addicionals utilitzades per tots els jocs o pel ScummVM" }, - { 236, "Especifica el cam\355 de dades addicionals utilitzades pel joc" }, - { 237, "Especifica el dispositiu de so o l'emulador de tarja de so preferit" }, - { 238, "Especifica on es desaran les partides" }, - { 239, "Veus" }, - { 240, "Volum de la veu:" }, - { 241, "Pintat est\340ndard (16bpp)" }, - { 242, "Iniciant el joc seleccionat" }, - { 243, "Estat:" }, - { 244, "Subt" }, - { 245, "Velocitat dels subt\355tols:" }, - { 246, "Subt\355tols" }, - { 247, "Commuta el personatge" }, - { 248, "Toc per a clic esquerre, doble toc per a clic dret" }, - { 249, "Text i Veus:" }, - { 250, "No es pot escriure al directori seleccionat. Si us plau, escolliu-ne un altre." }, - { 251, "Cam\355 dels Temes:" }, - { 252, "Tema:" }, - { 253, "Aquest identificador de joc ja est\340 usat. Si us plau, trieu-ne un altre." }, - { 254, "Aquest joc no suporta la c\340rrega de partides des del llan\347ador." }, - { 255, "Hora: " }, - { 257, "Despla\347ament X del toc" }, - { 258, "Despla\347ament Y del toc" }, - { 259, "Mode Touchpad desactivat." }, - { 260, "Mode Touchpad activat." }, - { 261, "Roland MT-32 real (desactiva l'emulaci\363 GM)" }, - { 262, "Desactiva la conversi\363 General MIDI pels jocs que tenen banda sonora per a Roland MT-32" }, - { 263, "Desconegut" }, - { 264, "Error desconegut" }, - { 265, "Desmunta el DVD" }, - { 266, "Desmunta SMB" }, - { 267, "Sense escalar (haureu de despla\347ar-vos a esquerra i dreta)" }, - { 268, "Mode de color no suportat" }, - { 269, "Partida sense t\355tol" }, - { 270, "Amunt" }, - { 271, "Utilitza MIDI i la generaci\363 de so AdLib alhora" }, - { 272, "Utilitza el control del cursor a l'estil del trackpad dels port\340tils" }, - { 273, "Nom d'usuari:" }, - { 274, "Utilitzant el controlador SDL " }, - { 276, "V\355deo" }, - { 277, "Teclat virtual" }, - { 278, "Volum" }, - { 279, "MIDI de Windows" }, - { 280, "S'ha denegat el perm\355s d'escriptura" }, - { 281, "Ha fallat l'escriptura de dades" }, - { 282, "S\355" }, - { 283, "Heu de reiniciar ScummVM perqu\350 tots els canvis tingui efecte." }, - { 284, "Zona" }, - { 285, "Redueix" }, - { 286, "Amplia" }, - { 287, "cada 10 minuts" }, - { 288, "cada 15 minuts" }, - { 289, "cada 30 minuts" }, - { 290, "cada 5 minuts" }, - { 291, "~Q~uant a" }, - { 292, "~A~fegeix Joc..." }, - { 293, "~C~ancel\267la" }, - { 294, "~T~anca" }, - { 295, "~E~dita Joc..." }, - { 296, "~A~juda" }, - { 297, "Controls de lluita de l'~I~ndy" }, - { 298, "~T~ecles" }, - { 299, "Mode ~e~squerr\340" }, - { 300, "C~a~rrega" }, - { 301, "~C~arrega..." }, - { 302, "~S~eg\374ent" }, - { 303, "~D~'acord" }, - { 304, "~O~pcions" }, - { 305, "~O~pcions..." }, - { 306, "~A~nterior" }, - { 307, "~T~anca" }, - { 308, "~S~uprimeix Joc" }, - { 309, "~C~ontinua" }, - { 310, "~R~etorna al Llan\347ador" }, - { 311, "~D~esa" }, - { 312, "~I~nicia" }, - { 313, "~T~ransicions activades" }, - { 314, "~E~fecte de l'aigua activat" }, - { 315, "Mode ~Z~ip activat" }, - { -1, NULL } -}; - -static const PoMessageEntry _translation_es_ES[] = { - { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-07-30 22:14+0100\nPO-Revision-Date: 2010-07-30 22:17+0100\nLast-Translator: Tom\341s Maidagan\nLanguage-Team: \nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Espanol\n" }, - { 1, "\277Seguro que quieres salir?" }, - { 2, "(Activa)" }, - { 3, "(Juego)" }, - { 4, "(General)" }, - { 5, "(compilado el %s)" }, - { 6, ", error al montar el disco compartido" }, - { 7, ", disco compartido no montado" }, - { 8, "... progreso..." }, - { 9, "11kHz" }, - { 10, "22 kHz" }, - { 11, "44 kHz" }, - { 12, "48 kHz" }, - { 13, "8 kHz" }, - { 14, "<por defecto>" }, - { 15, "Acerca de ScummVM" }, - { 16, "Emulador de AdLib" }, - { 17, "Emulador de AdLib:" }, - { 18, "AdLib se usa para la m\372sica en muchos juegos" }, - { 19, "A\361adir juego..." }, - { 20, "Antialiasing (16bpp)" }, - { 21, "Correcci\363n de aspecto" }, - { 22, "Tecla asociada: %s" }, - { 23, "Tecla asociada: ninguna" }, - { 24, "Sonido" }, - { 25, "Autoguardado:" }, - { 26, "Motores disponibles:" }, - { 27, "Acerca ~d~e" }, - { 28, "Asignar teclas" }, - { 29, "Ambos" }, - { 30, "Brillo:" }, - { 31, "Cancelar" }, - { 32, "Imposible crear el archivo" }, - { 33, "Cambiar opciones de juego" }, - { 34, "Cambiar opciones generales de ScummVM" }, - { 35, "Marcar si se quiere usar un dispositivo de sonido real conectado al ordenador y compatible con Roland" }, - { 36, "Elegir" }, - { 37, "Elige la acci\363n a asociar" }, - { 38, "Eliminar valor" }, - { 39, "Cerrar" }, - { 40, "Corregir relaci\363n de aspecto en juegos 320x200" }, - { 41, "No se ha podido encontrar ning\372n motor capaz de ejecutar el juego" }, - { 42, "Modo de v\355deo actual:" }, - { 43, "Abajo" }, - { 44, "Izquierda" }, - { 45, "Derecha" }, - { 46, "Arriba" }, - { 47, "Emulador de DOSBox OPL" }, - { 48, "DVD" }, - { 49, "DVD montado con \351xito" }, - { 50, "DVD no montado" }, - { 51, "Fecha:" }, - { 52, "Debugger" }, - { 53, "Por defecto" }, - { 54, "Borrar" }, - { 55, "Desactivar apagado" }, - { 56, "GFX desactivados" }, - { 57, "Se han encontrado %d juegos nuevos..." }, - { 58, "Se han encontrado %d juegos nuevos." }, - { 59, "Pantalla" }, - { 60, "Mostrar el teclado" }, - { 61, "\277Seguro que quieres borrar esta partida?" }, - { 62, "\277Seguro que quieres eliminar la configuraci\363n de este juego?" }, - { 63, "\277Seguro que quieres ejecutar la detecci\363n masiva? Puede que se a\361ada un gran n\372mero de juegos." }, - { 64, "\277Quieres cargar o guardar el juego?" }, - { 65, "\277Quieres realizar una b\372squeda autom\341tica?" }, - { 66, "\277Quieres salir?" }, - { 67, "Doble golpe" }, - { 68, "Abajo" }, - { 69, "Activar modo Roland GS" }, - { 70, "El motor no soporta el nivel de debug '%s'" }, - { 71, "Ingl\351s" }, - { 72, "Error al ejecutar el juego:" }, - { 73, "Error al montar el DVD" }, - { 74, "Adicional:" }, - { 75, "Emulador de FM Towns" }, - { 76, "Modo r\341pido" }, - { 77, "Caracter\355sticas compiladas:" }, - { 78, "Vista libre" }, - { 79, "T\355tulo completo del juego" }, - { 80, "Pantalla completa" }, - { 81, "Aceleraci\363n del pad GC:" }, - { 82, "Sensibilidad del pad GC:" }, - { 83, "GFX" }, - { 84, "Dispositivo GM:" }, - { 85, "Idioma de la interfaz:" }, - { 86, "Render de la interfaz" }, - { 87, "Juego" }, - { 88, "No se han encontrado datos de juego" }, - { 89, "ID del juego no soportada" }, - { 90, "Juego:" }, - { 91, "Men\372 general" }, - { 92, "Ir al directorio anterior" }, - { 93, "Arriba" }, - { 94, "Gr\341ficos" }, - { 95, "Modo gr\341fico:" }, - { 96, "Escalado por hardware (r\341pido, pero de baja calidad)" }, - { 97, "Hercules \341mbar" }, - { 98, "Hercules verde" }, - { 99, "Ocultar barra de tareas" }, - { 100, "Sonido de alta calidad (m\341s lento) (reinicio)" }, - { 101, "Los valores m\341s altos ofrecen mayor calidad, pero puede que tu tarjeta de sonido no sea compatible" }, - { 102, "Mant\351n pulsado May\372s para a\361adir varios" }, - { 103, "Underscan horizontal" }, - { 104, "Emulador de IBM PCjr" }, - { 105, "ID:" }, - { 106, "Inicializar red" }, - { 107, "Escalado de la pantalla inicial superior:" }, - { 108, "Iniciando emulador de MT-32" }, - { 109, "Inicializando red" }, - { 110, "Entrada" }, - { 111, "Ruta no v\341lida" }, - { 112, "Asignaci\363n de teclas" }, - { 113, "Teclado" }, - { 114, "Asignaci\363n de teclas:" }, - { 115, "Teclas" }, - { 116, "Idioma de la interfaz de ScummVM" }, - { 117, "Idioma del juego. No sirve para pasar al ingl\351s la versi\363n espa\361ola de un juego" }, - { 118, "Idioma:" }, - { 119, "Izquierda" }, - { 120, "Clic izquierdo" }, - { 121, "Cargar" }, - { 122, "Cargar juego:" }, - { 123, "Cargar partida del juego seleccionado" }, - { 124, "Emulador de MAME OPL" }, - { 125, "MIDI" }, - { 126, "Ganancia MIDI:" }, - { 127, "MT-32" }, - { 128, "Dispositivo MT-32:" }, - { 129, "Emulador de MT-32" }, - { 130, "Escalado de la pantalla principal:" }, - { 131, "Asignar" }, - { 132, "A\361adir varios..." }, - { 133, "Men\372" }, - { 134, "Otros" }, - { 135, "Modo AdLib/MIDI" }, - { 136, "Montar DVD" }, - { 137, "Montar SMB" }, - { 138, "Clic de rat\363n" }, - { 139, "Multifunci\363n" }, - { 140, "Dispositivo de m\372sica:" }, - { 141, "Volumen de la m\372sica:" }, - { 142, "Silenciar" }, - { 143, "Nombre:" }, - { 144, "Red desconectada" }, - { 145, "Red no inicializada (%d)" }, - { 146, "Red conectada" }, - { 147, "Red conectada, disco compartido montado" }, - { 148, "Nunca" }, - { 149, "No" }, - { 150, "No hay fecha guardada" }, - { 151, "Sin m\372sica" }, - { 152, "No hay tiempo de juego guardado" }, - { 153, "No hay hora guardada" }, - { 154, "Ninguno" }, - { 155, "Normal (sin escalado)" }, - { 156, "De acuerdo" }, - { 157, "Frecuencia de salida:" }, - { 158, "Ignorar opciones MIDI generales" }, - { 159, "Ignorar opciones MT-32 generales" }, - { 160, "Ignorar opciones de sonido generales" }, - { 161, "Ignorar opciones gr\341ficas generales" }, - { 162, "Ignorar opciones de volumen generales" }, - { 163, "Emulador del altavoz de PC" }, - { 164, "Contrase\361a:" }, - { 165, "La ruta no es un directorio" }, - { 166, "La ruta no es un archivo" }, - { 167, "La ruta no existe" }, - { 168, "Rutas" }, - { 169, "Pausar" }, - { 170, "Elige el juego:" }, - { 171, "Plataforma para la que se dise\361\363 el juego" }, - { 172, "Plataforma:" }, - { 173, "Tiempo de juego:" }, - { 174, "Por favor, selecciona una acci\363n" }, - { 175, "Plugins:" }, - { 176, "Dispositivo preferido:" }, - { 177, "Pulsa la tecla a asignar" }, - { 178, "Salir" }, - { 179, "Cerrar ScummVM" }, - { 180, "Permiso de lectura denegado" }, - { 181, "Lectura fallida" }, - { 182, "Asignar teclas" }, - { 183, "Elimina el juego de la lista. Los archivos no se borran" }, - { 184, "Modo de renderizado:" }, - { 185, "Derecha" }, - { 186, "Clic derecho" }, - { 187, "Clic derecho" }, - { 188, "Rotar" }, - { 189, "Volumen de los efectos" }, - { 190, "SMB" }, - { 191, "Guardar" }, - { 192, "Partidas:" }, - { 193, "Partidas:" }, - { 194, "Guardar partida" }, - { 195, "\241B\372squeda completada!" }, - { 196, "Se ha buscado en %d directorios..." }, - { 197, "Men\372 principal de ScummVM" }, - { 198, "\241ScummVM no ha podido encontrar ning\372n motor capaz de ejecutar el juego!" }, - { 199, "\241ScummVM no ha encontrado ning\372n juego en el directorio!" }, - { 200, "\241ScummVM no ha podido abrir el directorio!" }, - { 201, "Buscar en la lista de juegos" }, - { 202, "Buscar:" }, - { 203, "Seleccionar SoundFont" }, - { 204, "Selecciona un tema" }, - { 205, "Seleccionar directorio de juego adicional" }, - { 206, "Selecciona una acci\363n y pulsa \"Asignar\"" }, - { 207, "Selecciona el directorio para temas de interfaz" }, - { 208, "Selecciona el directorio para archivos adicionales" }, - { 209, "Selecciona el directorio para plugins" }, - { 210, "Seleccionar directorio para partidas guardadas" }, - { 211, "Selecciona el directorio para partidas guardadas." }, - { 212, "Seleccionar directorio con los archivos del juego" }, - { 213, "Sensibilidad" }, - { 214, "Servidor:" }, - { 215, "Disco compartido:" }, - { 216, "Identificador usado para las partidas guardadas y para ejecutar el juego desde la l\355nea de comando" }, - { 217, "Mostrar teclado" }, - { 218, "Mostrar el cursor" }, - { 219, "Reproducir voces y subt\355tulos" }, - { 220, "Mostrar/ocultar cursor" }, - { 221, "Saltar" }, - { 222, "Saltar frase" }, - { 223, "Saltar texto" }, - { 224, "Pegar a los bordes" }, - { 225, "Escalado por software (buena calidad, pero m\341s lento)" }, - { 226, "Sonido activado/desactivado" }, - { 227, "Algunas tarjetas de sonido, Fluidsynth y Timidity soportan SoundFont" }, - { 228, "SoundFont:" }, - { 229, "Voces" }, - { 230, "Modos especiales de expansi\363n soportados por algunos juegos" }, - { 231, "Volumen de los efectos de sonido" }, - { 232, "Especifica el dispositivo de salida General MIDI por defecto" }, - { 233, "Especifica el dispositivo de sonido para la salida Roland MT-32/LAPC1/CM32l/CM64 por defecto" }, - { 234, "Especifica el dispositivo de sonido o emulador de tarjeta de sonido de salida" }, - { 235, "Especifica el directorio adicional usado por los juegos y ScummVM" }, - { 236, "Especifica un directorio para datos adicionales del juego" }, - { 237, "Especifica qu\351 dispositivo de sonido o emulador de tarjeta de sonido prefieres" }, - { 238, "Especifica d\363nde guardar tus partidas" }, - { 239, "Voces" }, - { 240, "Volumen de las voces" }, - { 241, "Est\341ndar (16bpp)" }, - { 242, "Jugar al juego seleccionado" }, - { 243, "Estado:" }, - { 244, "Subt." }, - { 245, "Velocidad de los subt\355tulos:" }, - { 246, "Subt\355tulos" }, - { 247, "Cambiar personaje" }, - { 248, "Un toque para clic izquierdo, dos para clic derecho" }, - { 249, "Texto y voces:" }, - { 250, "No se puede escribir en el directorio elegido. Por favor, selecciona otro." }, - { 251, "Temas:" }, - { 252, "Tema:" }, - { 253, "Esta ID ya est\341 siendo usada. Por favor, elige otra." }, - { 254, "Este juego no permite cargar partidas desde el lanzador." }, - { 255, "Hora:" }, - { 256, "Se ha excedido el tiempo de inicializaci\363n de red" }, - { 257, "Compensaci\363n X del toque" }, - { 258, "Compensaci\363n Y del toque" }, - { 259, "Modo Touchpad desactivado." }, - { 260, "Modo Touchpad activado." }, - { 261, "Roland MT-32 aut\351ntica (desactivar emulaci\363n GM)" }, - { 262, "Desactiva la conversi\363n General MIDI en juegos con sonido Roland MT-32" }, - { 263, "Desconocido" }, - { 264, "Error desconocido" }, - { 265, "Desmontar DVD" }, - { 266, "Desmontar SMB" }, - { 267, "Sin escalado (debes desplazar la pantalla a los lados)" }, - { 268, "Modo de color no soportado" }, - { 269, "Partida sin nombre" }, - { 270, "Arriba" }, - { 271, "Usar tanto MIDI como AdLib en la generaci\363n de sonido" }, - { 272, "Activar el sistema de control tipo trackpad de los port\341tiles" }, - { 273, "Usuario:" }, - { 274, "Usando driver SDL" }, - { 275, "Underscan vertical:" }, - { 276, "V\355deo" }, - { 277, "Teclado virtual" }, - { 278, "Volumen" }, - { 279, "Windows MIDI" }, - { 280, "Permiso de escritura denegado" }, - { 281, "Escritura de datos fallida" }, - { 282, "S\355" }, - { 283, "Tienes que reiniciar ScummVM para aplicar los cambios." }, - { 284, "Zona" }, - { 285, "Disminuir zoom" }, - { 286, "Aumentar zoom" }, - { 287, "cada 10 minutos" }, - { 288, "cada 15 minutos" }, - { 289, "cada 30 minutos" }, - { 290, "cada 5 minutos" }, - { 291, "Acerca ~d~e" }, - { 292, "~A~\361adir juego..." }, - { 293, "~C~ancelar" }, - { 294, "Cerra~r~" }, - { 295, "~E~ditar juego..." }, - { 296, "~A~yuda" }, - { 297, "Controles para pelear de ~I~ndy" }, - { 298, "~T~eclas" }, - { 299, "Modo para ~z~urdos" }, - { 300, "~C~argar" }, - { 301, "~C~argar..." }, - { 302, "Si~g~uiente" }, - { 303, "~S~\355" }, - { 304, "~O~opciones" }, - { 305, "~O~opciones..." }, - { 306, "~A~nterior" }, - { 307, "~S~alir" }, - { 308, "E~l~iminar juego" }, - { 309, "~R~eanudar" }, - { 310, "~V~olver al lanzador" }, - { 311, "~G~uardar" }, - { 312, "~J~ugar" }, - { 313, "Tra~n~siciones activadas" }, - { 314, "Efecto ag~u~a activado" }, - { 315, "Modo ~Z~ip activado" }, + { 20, "\311mulateur Amiga Audio" }, + { 21, "Anti-cr\351nel\351 (16 bpp)" }, + { 22, "\311mulateur Apple II GS (PAS IMPL\311MENT\311)" }, + { 23, "Correction du rapport d'aspect" }, + { 24, "Touche associ\351e: %s" }, + { 25, "Touche associ\351e: aucune" }, + { 26, "Audio" }, + { 27, "Sauvegarde auto:" }, + { 28, "Moteurs disponibles:" }, + { 29, "\300 ~P~ropos..." }, + { 30, "Affecter les touches" }, + { 31, "Les deux" }, + { 32, "Luminosit\351:" }, + { 33, "\311mulateur C64 Audio" }, + { 34, "Annuler" }, + { 35, "Impossible de cr\351er le fichier" }, + { 36, "Change les options du jeu" }, + { 37, "Change les options globales de ScummVM" }, + { 38, "V\351rifie si vous voulez utiliser un p\351riph\351rique audio compatible Roland connect\351 \340 l'ordinateur" }, + { 39, "Choisir" }, + { 40, "S\351lectionnez une action \340 affecter" }, + { 41, "Effacer la valeur" }, + { 42, "Fermer" }, + { 43, "Corrige le rapport d'aspect pour les jeu 320x200" }, + { 44, "Impossible de trouver un moteur pour ex\351cuter le jeu s\351lectionn\351" }, + { 45, "Mode vid\351o actuel" }, + { 46, "Bas" }, + { 47, "Gauche" }, + { 48, "Droit" }, + { 49, "Haut" }, + { 50, "\311mulateur DOSBox OPL" }, + { 51, "DVD" }, + { 52, "DVD mont\351 avec succ\350s" }, + { 53, "DVD non mont\351" }, + { 54, "Date:" }, + { 55, "Debugger" }, + { 56, "D\351faut" }, + { 57, "Supprimer" }, + { 58, "D\351sactiv\351 l'extinction" }, + { 59, "GFX d\351sactiv\351" }, + { 60, "%d nouveaux jeux trouv\351s ..." }, + { 61, "%d nouveaux jeux trouv\351s." }, + { 62, "Affichage" }, + { 63, "Afficher le clavier" }, + { 64, "Voulez-vous vraiment supprimer cette sauvegarde?" }, + { 65, "Voulez-vous vraiment supprimer ce jeu?" }, + { 66, "Voulez-vous vraiment lancer la d\351tection automatique des jeux? Cela peut potentiellement ajouter un grand nombre de jeux." }, + { 67, "Voulez-vous charger ou sauver le jeu?" }, + { 68, "Voulez-vous ex\351cuter une recherche automatique?" }, + { 69, "Voulez-vous quitter?" }, + { 70, "Coup double" }, + { 71, "Bas" }, + { 72, "Activer le mode Roland GS" }, + { 73, "Le niveau de debug '%s' n'est pas support\351 par ce moteur de jeu" }, + { 74, "Anglais" }, + { 75, "Erreur lors de l'\351x\351cution du jeu:" }, + { 76, "\311chec du montage du DVD" }, + { 77, "Extra:" }, + { 78, "\311mulateur FM Towns" }, + { 79, "Mode rapide" }, + { 80, "Options incluses:" }, + { 81, "Regarder autour" }, + { 82, "Nom complet du jeu" }, + { 83, "Plein \351cran" }, + { 84, "Acceleration du pad GC:" }, + { 85, "Sensibilit\351 du pad GC:" }, + { 86, "GFX" }, + { 87, "Sortie GM:" }, + { 88, "Langue:" }, + { 89, "Interface:" }, + { 90, "Jeu" }, + { 91, "Fichier de don\351es introuvable" }, + { 92, "ID de jeu non support\351" }, + { 93, "Chemin du Jeu:" }, + { 94, "Menu global" }, + { 95, "Remonte d'un niveau dans la hi\351rarchie de r\351pertoire" }, + { 96, "Remonter" }, + { 97, "Graphique" }, + { 98, "Mode graphique:" }, + { 99, "Mise \340 l'echelle mat\351rielle (rapide mais qualit\351 faible)" }, + { 100, "Hercules Ambre" }, + { 101, "Hercules Vert" }, + { 102, "Cach\351 la barre d'outils" }, + { 103, "Audio haute qualit\351 (plus lent) (red\351marrer)" }, + { 104, "Une valeur plus \351lev\351e donne une meilleure qualit\351 audio mais peut ne pas \352tre support\351 par votre carte son" }, + { 105, "Ajoute un jeu \340 la Liste. Maintenez Shift enfonc\351e pour un Ajout Massif" }, + { 106, "Underscan horizontal:" }, + { 107, "\311mulateur IBM PCjr" }, + { 108, "ID:" }, + { 109, "Initialiser le r\351seau" }, + { 110, "\311chelle initiale de l'\351cran du haut" }, + { 111, "Initialisation de l'\311mulateur MT-32" }, + { 112, "Initialisation du r\351seau" }, + { 113, "Entr\351e" }, + { 114, "Chemin Invalide" }, + { 115, "Affectation des touches" }, + { 116, "Clavier" }, + { 117, "Affectation des touches:" }, + { 118, "Touches" }, + { 119, "Langue de l'interface graphique de ScummVM" }, + { 120, "Langue du jeu. Cela ne traduira pas en anglais par magie votre version espagnole du jeu." }, + { 121, "Langue:" }, + { 122, "Gauche" }, + { 123, "Clic Gauche" }, + { 124, "Charger" }, + { 125, "Charger le jeu:" }, + { 126, "Charge une sauvegarde pour le jeu s\351lectionn\351" }, + { 127, "\311mulateur MAME OPL" }, + { 128, "MIDI" }, + { 129, "Gain MIDI:" }, + { 130, "MT-32" }, + { 131, "Sortie MT-32:" }, + { 132, "\311mulateur MT-32" }, + { 133, "\311chelle de l'\351cran principal" }, + { 134, "Affecter" }, + { 135, "Ajout Massif..." }, + { 136, "Menu" }, + { 137, "Divers" }, + { 138, "Mode mixe AdLib/MIDI" }, + { 139, "Monter le DVD" }, + { 140, "Monter SMB" }, + { 141, "Clic de souris" }, + { 142, "Fonction Multiple" }, + { 143, "Sortie Audio:" }, + { 144, "Volume Musique:" }, + { 145, "Silence" }, + { 146, "Nom:" }, + { 147, "R\351seau d\351connect\351" }, + { 148, "R\351seau non initialis\351 (%d)" }, + { 149, "R\351seau connect\351" }, + { 150, "R\351seau connect\351, disque partag\351 mont\351" }, + { 151, "Jamais" }, + { 152, "Non" }, + { 153, "Date non sauv\351e" }, + { 154, "Pas de musique" }, + { 155, "Dur\351e de jeu non sauv\351e" }, + { 156, "Heure non sauv\351e" }, + { 157, "Aucun" }, + { 158, "Normal (\351chelle d'origine)" }, + { 159, "OK" }, + { 160, "Fr\351quence:" }, + { 161, "Utiliser des r\351glages MIDI sp\351cifiques \340 ce jeux" }, + { 162, "Utiliser des r\351glages MT-32 sp\351cifiques \340 ce jeux" }, + { 163, "Utiliser des r\351glages audio sp\351cifiques \340 ce jeux" }, + { 164, "Utiliser des r\351glages graphiques sp\351cifiques \340 ce jeux" }, + { 165, "Utiliser des r\351glages de volume sonore sp\351cifiques \340 ce jeux" }, + { 166, "\311mulateur Haut Parleur PC" }, + { 167, "Mot de passe:" }, + { 168, "Chemin n'est pas un r\351pertoire" }, + { 169, "Chemin n'est pas un fichier" }, + { 170, "Chemin inexistant" }, + { 171, "Chemins" }, + { 172, "Mettre en pause" }, + { 173, "Choisissez le jeu:" }, + { 174, "Plateforme pour laquelle votre jeu a \351t\351 con\347u" }, + { 175, "Plateforme:" }, + { 176, "Dur\351e de jeu:" }, + { 177, "Selectionnez une action" }, + { 178, "Plugins:" }, + { 179, "Sortie Pr\351f\351r\351:" }, + { 180, "Appuyez sur la touche \340 associer" }, + { 181, "Quitter" }, + { 182, "Quitter ScummVM" }, + { 183, "V\351roulli\351 en lecture" }, + { 184, "Echec de la lecture" }, + { 185, "Changer l'affectation des touches" }, + { 186, "Supprime le jeu de la liste. Les fichiers sont conserv\351s" }, + { 187, "Mode de rendu:" }, + { 188, "Droite" }, + { 189, "Clic Droit" }, + { 190, "Clic droit" }, + { 191, "Pivoter" }, + { 192, "Volume Bruitage:" }, + { 193, "SMB" }, + { 194, "Sauver" }, + { 195, "Sauvegardes:" }, + { 196, "Sauvegardes:" }, + { 197, "Sauvegarde:" }, + { 198, "Examen termin\351!" }, + { 199, "%d r\351pertoires examin\351s ..." }, + { 200, "Menu Principal ScummVM" }, + { 201, "ScummVM n'a pas pu trouv\351 de moteur pour lancer le jeu s\351lectionn\351." }, + { 202, "ScummVM n'a pas trouv\351 de jeux dans le r\351pertoire s\351lectionn\351." }, + { 203, "ScummVM n'a pas pu ouvrir le r\351pertoire s\351lectionn\351." }, + { 204, "Recherche dans la liste de jeux" }, + { 205, "Filtre:" }, + { 206, "Choisir une banque de sons" }, + { 207, "S\351lectionnez un Th\350me" }, + { 208, "S\351lectionner un r\351pertoire suppl\351mentaire" }, + { 209, "Selectionez une action et cliquez 'Affecter'" }, + { 210, "S\351lectionner le r\351pertoire des th\350mes d'interface" }, + { 211, "S\351lectionner le r\351pertoire pour les fichiers supl\351mentaires" }, + { 212, "S\351lectionner le r\351pertoire des plugins" }, + { 213, "S\351lectionner le r\351pertoire pour les sauvegardes" }, + { 214, "S\351lectionner le r\351pertoire pour les sauvegardes" }, + { 215, "S\351lectionner le r\351pertoire contenant les donn\351es du jeu" }, + { 216, "Sensibilit\351" }, + { 217, "Serveur:" }, + { 218, "Disque partag\351:" }, + { 219, "ID compact du jeu utilis\351 pour identifier les sauvegardes et d\351marrer le jeu depuis la ligne de commande" }, + { 220, "Afficher le clavier" }, + { 221, "Afficher le curseur de la souris" }, + { 222, "Affiche les sous-titres et joue les dialogues audio" }, + { 223, "Afficher/Cacher le curseur" }, + { 224, "Passer" }, + { 225, "Passer la phrase" }, + { 226, "Sauter le texte" }, + { 227, "Aligner sur les bords" }, + { 228, "Mise \340 l'\351chelle logicielle (bonne qualit\351 mais plus lent)" }, + { 229, "Audio marche/arr\352t" }, + { 230, "La banque de sons est utilis\351e par certaines cartes audio, Fluidsynth et Timidity" }, + { 231, "Banque de sons:" }, + { 232, "Audio" }, + { 233, "Mode sp\351cial de tramage support\351 par certains jeux" }, + { 234, "Volume des effets sp\351ciaux sonores" }, + { 235, "Sp\351cifie le p\351riph\351rique audio par d\351faut pour la sortie General MIDI" }, + { 236, "Sp\351cifie le p\351riph\351rique audio par d\351faut pour la sortie Roland MT-32/LAPC1/CM32l/CM64" }, + { 237, "Sp\351cifie le p\351riph\351rique de sortie audio ou l'\351mulateur de carte audio" }, + { 238, "Sp\351cifie un chemin vers des donn\351es suppl\351mentaires utilis\351es par tous les jeux ou ScummVM" }, + { 239, "D\351finie un chemin vers des donn\351es supl\351mentaires utilis\351es par le jeu" }, + { 240, "Sp\351cifie le p\351riph\351rique de sortie audio ou l'\351mulateur de carte audio pr\351f\351r\351" }, + { 241, "D\351finie l'emplacement o\371 les fichiers de sauvegarde sont cr\351\351s" }, + { 242, "Audio" }, + { 243, "Volume Dialogues:" }, + { 244, "Standard (16bpp)" }, + { 245, "D\351marre le jeu s\351lectionn\351" }, + { 246, "Status:" }, + { 247, "Subs" }, + { 248, "Vitesse des ST:" }, + { 249, "Sous-titres" }, + { 250, "Changement de personnage" }, + { 251, "Toucher pour un clic gauche, toucher deux fois pour un clic droit" }, + { 252, "Dialogue:" }, + { 253, "Le r\351pertoire s\351lectionn\351 est v\351rouill\351 en \351criture. S\351lectionnez un autre r\351pertoire." }, + { 254, "Th\350mes:" }, + { 255, "Th\350me:" }, + { 256, "Cet ID est d\351j\340 utilis\351 par un autre jeu. Choisissez en un autre svp." }, + { 257, "Le chargement de sauvegarde depuis le lanceur n'est pas support\351 pour ce jeu." }, + { 258, "Heure:" }, + { 259, "D\351passement du d\351lai lors de l'initialisation du r\351seau" }, + { 260, "D\351calage X du toucher" }, + { 261, "D\351callage Y du toucher" }, + { 262, "Mode touchpad d\351sactiv\351" }, + { 263, "Mode touchpad activ\351" }, + { 264, "Roland MT-32 exacte (d\351sactive l'\351mulation GM)" }, + { 265, "D\351sactiver la conversion des pistes MT-32 en General MIDI" }, + { 266, "Inconue" }, + { 267, "Erreur inconnue" }, + { 268, "D\351monter le DVD" }, + { 269, "D\351monter SMB" }, + { 270, "Sans changement d'\351chelle (vous devez faire d\351filer l'\351cran)" }, + { 271, "Mode de couleurs non support\351" }, + { 272, "Sauvegarde sans nom" }, + { 273, "Haut" }, + { 274, "Utiliser \340 la fois MIDI et AdLib" }, + { 275, "Activer le contr\364le du curseur de type trackpad" }, + { 276, "Nom d'utilisateur:" }, + { 277, "Utilise le pilote SDL" }, + { 278, "Underscan vertical:" }, + { 279, "Vid\351o" }, + { 280, "Clavier virtuel" }, + { 281, "Volume" }, + { 282, "MIDI Windows" }, + { 283, "Verrouill\351 en \351criture" }, + { 284, "Echec de l'\351criture des donn\351es" }, + { 285, "Oui" }, + { 286, "Vous devez relancer ScummVM pour que le changement soit pris en compte." }, + { 287, "Zone" }, + { 288, "Zoomer" }, + { 289, "D\351zoomer" }, + { 290, "Toutes les 10 mins" }, + { 291, "Toutes les 15 mins" }, + { 292, "Toutes les 30 mins" }, + { 293, "Toutes les 5 mins" }, + { 294, "\300 ~P~ropos" }, + { 295, "~A~jouter..." }, + { 296, "~A~nnuler" }, + { 297, "~F~ermer" }, + { 298, "~E~diter..." }, + { 299, "~A~ide" }, + { 300, "Contr\364le des combats d'~I~ndy" }, + { 301, "~T~ouches" }, + { 302, "Mode ~G~aucher" }, + { 303, "~C~harger" }, + { 304, "~C~harger" }, + { 305, "~S~uivant" }, + { 306, "~O~K" }, + { 307, "~O~ptions" }, + { 308, "~O~ptions..." }, + { 309, "~P~r\351c\351dent" }, + { 310, "~Q~uitter" }, + { 311, "~S~upprimer" }, + { 312, "~R~eprendre" }, + { 313, "Retour au ~L~anceur" }, + { 314, "~S~auver" }, + { 315, "~D~\351marrer" }, + { 316, "T~r~ansitions activ\351" }, + { 317, "~E~ffets de l'Eau Activ\351s" }, + { 318, "Mode ~Z~ip Activ\351" }, { -1, NULL } }; static const PoMessageEntry _translation_de_DE[] = { - { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-07-30 22:14+0100\nPO-Revision-Date: 2010-07-09 20:37+0100\nLast-Translator: Simon Sawatzki\nLanguage-Team: Lothar Serra Mari <Lothar@Windowsbase.de> & Simon Sawatzki <SimSaw@gmx.de>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Deutsch\nPlural-Forms: nplurals=2; plural=n != 1;\n" }, + { 0, "Project-Id-Version: ScummVM 1.2.0svn\nReport-Msgid-Bugs-To: scummvm-devel@lists.sf.net\nPOT-Creation-Date: 2010-08-11 22:12+0100\nPO-Revision-Date: 2010-08-12 00:56+0100\nLast-Translator: Simon Sawatzki\nLanguage-Team: Lothar Serra Mari <Lothar@Windowsbase.de> & Simon Sawatzki <SimSaw@gmx.de>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: Deutsch\nPlural-Forms: nplurals=2; plural=n != 1;\n" }, { 1, " M\366chten Sie wirklich beenden? " }, { 2, " (Aktiv)" }, { 3, " (Spiel)" }, @@ -2317,301 +2336,304 @@ static const PoMessageEntry _translation_de_DE[] = { { 17, "AdLib-Emulator" }, { 18, "AdLib wird f\374r die Musik in vielen Spielen verwendet." }, { 19, "Spiel hinzuf\374gen" }, - { 20, "Kantengl\344ttung (16bpp)" }, - { 21, "Seitenverh\344ltnis korrigieren" }, - { 22, "Zugewiesene Taste: %s" }, - { 23, "Zugewiesene Taste: keine" }, - { 24, "Audio" }, - { 25, "Autom. Speichern:" }, - { 26, "Verf\374gbare Spiele-Engines:" }, - { 27, "\334be~r~" }, - { 28, "Tasten zuweisen" }, - { 29, "Beides" }, - { 30, "Helligkeit:" }, - { 31, "Abbrechen" }, - { 32, "Kann Datei nicht erstellen." }, - { 33, "Spieloptionen \344ndern" }, - { 34, "Globale ScummVM-Einstellungen bearbeiten" }, - { 35, "W\344hlen Sie dies aus, wenn Sie Ihre echte Hardware, die mit einer Roland-kompatiblen Soundkarte verbunden ist, verwenden m\366chten." }, - { 36, "Ausw\344hlen" }, - { 37, "Eine Aktion zum Zuweisen ausw\344hlen" }, - { 38, "Wert l\366schen" }, - { 39, "Schlie\337en" }, - { 40, "Seitenverh\344ltnis f\374r Spiele mit der Aufl\366sung 320x200 korrigieren" }, - { 41, "Kann keine Spiel-Engine finden, die dieses Spiel starten kann." }, - { 42, "Aktueller Videomodus:" }, - { 43, "Zeiger runter" }, - { 44, "Zeiger nach links" }, - { 45, "Zeiger nach rechts" }, - { 46, "Zeiger hoch" }, - { 47, "DOSBox-OPL-Emulator" }, - { 48, "DVD" }, - { 49, "DVD erfolgreich eingebunden" }, - { 50, "DVD nicht eingebunden" }, - { 51, "Datum: " }, - { 52, "Debugger" }, - { 53, "Standard" }, - { 54, "L\366schen" }, - { 55, "Stromsparmodus abschalten" }, - { 56, "GFX ausgeschalten" }, - { 57, "%d neue Spiele gefunden..." }, - { 58, "%d neue Spiele gefunden." }, - { 59, "Anzeige" }, - { 60, "Tastatur anzeigen" }, - { 61, "Diesen Spielstand wirklich l\366schen?" }, - { 62, "M\366chten Sie wirklich diese Spielkonfiguration entfernen?" }, - { 63, "M\366chten Sie wirklich den PC nach Spielen durchsuchen? M\366glicherweise wird dabei eine gr\366\337ere Menge an Spielen hinzugef\374gt." }, - { 64, "M\366chten Sie ein Spiel laden oder speichern?" }, - { 65, "M\366chten Sie eine automatische Durchsuchung vornehmen?" }, - { 66, "M\366chten Sie beenden?" }, - { 67, "Doppelzeilen (kein Zeilensprungverfahren)" }, - { 68, "Runter" }, - { 69, "Roland-GS-Modus" }, - { 70, "Engine unterst\374tzt den Debug-Level \"%s\" nicht" }, - { 71, "English" }, - { 72, "Fehler beim Ausf\374hren des Spiels:" }, - { 73, "Fehler beim Einbinden der DVD" }, - { 74, "Extrapfad:" }, - { 75, "FM-Towns-Emulator" }, - { 76, "Schneller Modus" }, - { 77, "Verwendete Funktionen:" }, - { 78, "Freie Ansicht" }, - { 79, "Voller Name des Spiels" }, - { 80, "Vollbildmodus" }, - { 81, "GC-Pad-Beschleunigung:" }, - { 82, "GC-Pad-Empfindlichkeit:" }, - { 83, "GFX" }, - { 84, "GM-Ger\344t:" }, - { 85, "GUI-Sprache:" }, - { 86, "GUI-Renderer:" }, - { 87, "Spiel" }, - { 88, "Spieldaten nicht gefunden" }, - { 89, "Spielkennung nicht unterst\374tzt" }, - { 90, "Spielpfad:" }, - { 91, "Hauptmen\374" }, - { 92, "Zu h\366herer Pfadebene wechseln" }, - { 93, "Pfad hoch" }, - { 94, "Grafik" }, - { 95, "Grafikmodus:" }, - { 96, "Hardware-Skalierung (schnell, aber schlechte Qualit\344t)" }, - { 97, "Hercules Bernsteingelb" }, - { 98, "Hercules-Gr\374n" }, - { 99, "Werkzeugleiste verbergen" }, - { 100, "Hohe Audioqualit\344t (lansamer) (erfordert Neustart)" }, - { 101, "H\366here Werte bewirken eine bessere Soundqualit\344t, werden aber m\366glicherweise nicht von jeder Soundkarte unterst\374tzt." }, - { 102, "Umschalttaste (Shift) gedr\374ckt halten, um Verzeichnisse nach Spielen zu durchsuchen" }, - { 103, "Horizontale Bildverkleinerung:" }, - { 104, "IBM-PCjr-Emulator" }, - { 105, "Kennung:" }, - { 106, "Netzwerk starten" }, - { 107, "Verg\366\337erung des oberen Bildschirms:" }, - { 108, "MT-32-Emulator wird gestartet..." }, - { 109, "Netzwerk wird gestartet..." }, - { 110, "Eingabe" }, - { 111, "Ung\374ltiges Verzeichnis" }, - { 112, "Tasten zuordnen" }, - { 113, "Tastatur" }, - { 114, "Tasten-Layout:" }, - { 115, "Tasten" }, - { 116, "Sprache der ScummVM-Oberfl\344che" }, - { 117, "Sprache des Spiels. Diese Funktion wird nicht eine spanische Version des Spiels in eine deutsche verwandeln." }, - { 118, "Sprache:" }, - { 119, "Links" }, - { 120, "Linksklick" }, - { 121, "Laden" }, - { 122, "Spiel laden:" }, - { 123, "Spielstand f\374r ausgew\344hltes Spiel laden" }, - { 124, "MAME-OPL-Emulator" }, - { 125, "MIDI" }, - { 126, "MIDI-Lautst\344rke:" }, - { 128, "MT32-Ger\344t:" }, - { 129, "MT-32-Emulation" }, - { 130, "Hauptbildschirm-Skalierung:" }, - { 131, "Zuweisen" }, - { 132, "Durchsuchen" }, - { 133, "Men\374" }, - { 134, "Sonstiges" }, - { 135, "AdLib-/MIDI-Modus" }, - { 136, "DVD einbinden" }, - { 137, "SMB einbinden" }, - { 138, "Mausklick" }, - { 139, "Multifunktion" }, - { 140, "Musikger\344t:" }, - { 141, "Musiklautst\344rke:" }, - { 142, "Alles aus" }, - { 143, "Name:" }, - { 144, "Netzwerk ist aus." }, - { 145, "Netzwerk nicht gestartet (%d)" }, - { 146, "Netzwerk gestartet" }, - { 147, "Netzwerk gestartet, \366ffentliches Verzeichnis eingebunden" }, - { 148, "Niemals" }, - { 149, "Nein" }, - { 150, "Kein Datum gespeichert" }, - { 151, "Keine Musik" }, - { 152, "Keine Spielzeit gespeichert" }, - { 153, "Keine Zeit gespeichert" }, - { 154, "-" }, - { 155, "Normal (keine Skalierung)" }, - { 156, "OK" }, - { 157, "Ausgabefrequenz:" }, - { 158, "Globale MIDI-Einstellungen \374bergehen" }, - { 159, "Globale MIDI-Einstellungen \374bergehen" }, - { 160, "Globale Audioeinstellungen \374bergehen" }, - { 161, "Globale Grafikeinstellungen \374bergehen" }, - { 162, "Globale Lautst\344rke-Einstellungen \374bergehen" }, - { 163, "PC-Lautsprecher-Emulator" }, - { 164, "Passwort:" }, - { 165, "Ung\374ltiges Verzeichnis" }, - { 166, "Pfad ist keine Datei." }, - { 167, "Verzeichnis existiert nicht." }, - { 168, "Pfade" }, - { 169, "Pause" }, - { 170, "Spiel ausw\344hlen:" }, - { 171, "Plattform, f\374r die das Spiel urspr\374nglich erstellt wurde" }, - { 172, "Plattform:" }, - { 173, "Spieldauer: " }, - { 174, "Bitte eine Aktion ausw\344hlen" }, - { 175, "Plugin-Pfad:" }, - { 176, "Standard-Ger\344t:" }, - { 177, "Taste dr\374cken, um sie zuzuweisen" }, - { 178, "Beenden" }, - { 179, "ScummVM beenden" }, - { 180, "Lese-Berechtigung nicht vorhanden" }, - { 181, "Lesefehler aufgetreten" }, - { 182, "Tasten neu zuweisen" }, - { 183, "Spiel aus der Liste entfernen. Die Spieldateien bleiben erhalten." }, - { 184, "Render-Modus:" }, - { 185, "Rechts" }, - { 186, "Rechtsklick" }, - { 187, "Rechtsklick" }, - { 188, "Drehen" }, - { 189, "Effektlautst\344rke:" }, - { 190, "SMB" }, - { 191, "Speichern" }, - { 192, "Spielst\344nde:" }, - { 193, "Spielst\344nde: " }, - { 194, "Speichern:" }, - { 195, "Suchlauf abgeschlossen!" }, - { 196, "%d Ordner durchsucht..." }, - { 197, "ScummVM-Hauptmen\374" }, - { 198, "ScummVM konnte keine Engine finden, um das Spiel zu starten!" }, - { 199, "ScummVM kann in dem gew\344hlten Verzeichnis kein Spiel finden!" }, - { 200, "ScummVM kann das gew\344hlte Verzeichnis nicht \366ffnen!" }, - { 201, "In Spieleliste suchen" }, - { 202, "Suchen:" }, - { 203, "SoundFont ausw\344hlen" }, - { 204, "Thema ausw\344hlen" }, - { 205, "Verzeichnis mit zus\344tzlichen Dateien ausw\344hlen" }, - { 206, "Aktion ausw\344hlen und \"Zuweisen\" klicken" }, - { 207, "Verzeichnis f\374r Oberfl\344chen-Themen" }, - { 208, "Verzeichnis f\374r zus\344tzliche Dateien ausw\344hlen" }, - { 209, "Verzeichnis f\374r Erweiterungen ausw\344hlen" }, - { 210, "Verzeichnis f\374r Spielst\344nde ausw\344hlen" }, - { 211, "Verzeichnis f\374r Spielst\344nde ausw\344hlen" }, - { 212, "Verzeichnis mit Spieldateien ausw\344hlen" }, - { 213, "Empfindlichkeit" }, - { 214, "Server:" }, - { 215, "\326ffentliches Verzeichnis:" }, - { 216, "Kurzer Spielname, um die Spielst\344nde zuzuordnen und das Spiel von der Kommandozeile aus starten zu k\366nnen" }, - { 217, "Tastatur zeigen" }, - { 218, "Mauszeiger anzeigen" }, - { 219, "Untertitel anzeigen und Sprachausgabe aktivieren" }, - { 220, "Cursor zeigen/verbergen" }, - { 221, "\334berspringen" }, - { 222, "Zeile \374berspringen" }, - { 223, "Text \374berspringen" }, - { 224, "An Ecken anheften" }, - { 225, "Software-Skalierung (gute Qualit\344t, aber langsamer)" }, - { 226, "Ton ein/aus" }, - { 227, "SoundFont wird von einigen Soundkarten, Fluidsynth und Timidity unterst\374tzt." }, - { 228, "SoundFont:" }, - { 229, "Spr." }, - { 230, "Spezielle Farbmischungsmethoden werden von manchen Spielen unterst\374tzt." }, - { 231, "Lautst\344rke spezieller Soundeffekte" }, - { 232, "Legt das standardm\344\337ige Musikwiedergabe-Ger\344t f\374r General-MIDI-Ausgabe fest." }, - { 233, "Legt das standardm\344\337ige Tonwiedergabe-Ger\344t f\374r die Ausgabe von Roland MT-32/LAPC1/CM32l/CM64 fest." }, - { 234, "Legt das Musikwiedergabe-Ger\344t oder den Soundkarten-Emulator fest." }, - { 235, "Legt das Verzeichnis f\374r zus\344tzliche Spieldateien f\374r alle Spiele in ScummVM fest." }, - { 236, "Legt das Verzeichnis f\374r zus\344tzliche Spieldateien fest." }, - { 237, "Legt das bevorzugte Tonwiedergabe-Ger\344t oder den Soundkarten-Emulator fest." }, - { 238, "Legt fest, wo die Spielst\344nde abgelegt werden." }, - { 239, "Sprache" }, - { 240, "Sprachlautst\344rke:" }, - { 241, "Standard-Renderer (16bpp)" }, - { 242, "Ausgew\344hltes Spiel starten" }, - { 243, "Status:" }, - { 244, "Untert." }, - { 245, "Untertitel-Tempo:" }, - { 246, "Untertitel" }, - { 247, "Figur wechseln" }, - { 248, "Tippen f\374r Linksklick, Doppeltippen f\374r Rechtsklick" }, - { 249, "Text und Sprache:" }, - { 250, "In das gew\344hlte Verzeichnis kann nicht geschrieben werden. Bitte ein anderes ausw\344hlen." }, - { 251, "Themenpfad:" }, - { 252, "Thema:" }, - { 253, "Diese Spielkennung ist schon vergeben. Bitte eine andere w\344hlen." }, - { 254, "F\374r dieses Spiel wird das Laden aus der Spieleliste heraus nicht unterst\374tzt." }, - { 255, "Zeit: " }, - { 256, "Zeit\374berschreitung beim Starten des Netzwerks" }, - { 257, "Zu X-Position gehen" }, - { 258, "Zu Y-Position gehen" }, - { 259, "Touchpad-Modus ausgeschaltet." }, - { 260, "Touchpad-Modus aktiviert." }, - { 261, "Echte Roland-MT-32-Emulation (GM-Emulation deaktiviert)" }, - { 262, "Schaltet die General-MIDI-Zuweisung f\374r Spiele mit Roland-MT-32-Audiospur aus." }, - { 263, "Unbekannt" }, - { 264, "Unbekannter Fehler" }, - { 265, "DVD aush\344ngen" }, - { 266, "SMB aush\344ngen" }, - { 267, "Nicht skalieren (Sie m\374ssen nach links und nach rechts scrollen)" }, - { 268, "Farbmodus nicht unterst\374tzt" }, - { 269, "Unbenannt" }, - { 270, "Hoch" }, - { 271, "Benutzt MIDI und AdLib zur Sounderzeugung." }, - { 272, "Den Trackpad-Style f\374r Maussteuerung benutzen" }, - { 273, "Benutzername:" }, - { 274, "SDL-Treiber verwenden" }, - { 275, "Vertikale Bildverkleinerung:" }, - { 276, "Video" }, - { 277, "Virtuelle Tastatur" }, - { 278, "Lautst\344rke" }, - { 279, "Windows MIDI" }, - { 280, "Schreib-Berechtigung nicht vorhanden" }, - { 281, "Daten konnten nicht geschrieben werden." }, - { 282, "Ja" }, - { 283, "Sie m\374ssen ScummVM neustarten, um die Einstellungen zu \374bernehmen." }, - { 284, "Zone" }, - { 285, "Hineinzoomen" }, - { 286, "Herauszoomen" }, - { 287, "alle 10 Minuten" }, - { 288, "alle 15 Minuten" }, - { 289, "alle 30 Minuten" }, - { 290, "alle 5 Minuten" }, - { 291, "\334be~r~" }, - { 292, "Spiel ~h~inzuf\374gen" }, - { 293, "~A~bbrechen" }, - { 294, "~S~chlie\337en" }, - { 295, "Spielo~p~tionen" }, - { 296, "~H~ilfe" }, - { 297, "~K~ampfsteuerung f\374r Indiana Jones" }, - { 298, "~T~asten" }, - { 299, "~L~inke-Hand-Modus" }, - { 300, "~L~aden" }, - { 301, "~L~aden..." }, - { 302, "~W~eiter" }, - { 303, "~O~K" }, - { 304, "~O~ptionen" }, - { 305, "~O~ptionen" }, - { 306, "~Z~ur\374ck" }, - { 307, "~B~eenden" }, - { 308, "Spiel ~e~ntfernen" }, - { 309, "~F~ortsetzen" }, - { 310, "Zur Spiele~l~iste zur\374ck" }, - { 311, "~S~peichern" }, - { 312, "~S~tarten" }, - { 313, "\334ber~g~\344nge aktiviert" }, - { 314, "~W~assereffekt aktiviert" }, - { 315, "~Z~ip-Modus aktiviert" }, + { 20, "Amiga-Audio-Emulator" }, + { 21, "Kantengl\344ttung (16bpp)" }, + { 23, "Seitenverh\344ltnis korrigieren" }, + { 24, "Zugewiesene Taste: %s" }, + { 25, "Zugewiesene Taste: keine" }, + { 26, "Audio" }, + { 27, "Autom. Speichern:" }, + { 28, "Verf\374gbare Spiele-Engines:" }, + { 29, "\334be~r~" }, + { 30, "Tasten zuweisen" }, + { 31, "Beides" }, + { 32, "Helligkeit:" }, + { 33, "C64-Audio-Emulator" }, + { 34, "Abbrechen" }, + { 35, "Kann Datei nicht erstellen." }, + { 36, "Spieloptionen \344ndern" }, + { 37, "Globale ScummVM-Einstellungen bearbeiten" }, + { 38, "W\344hlen Sie dies aus, wenn Sie Ihre echte Hardware, die mit einer Roland-kompatiblen Soundkarte verbunden ist, verwenden m\366chten." }, + { 39, "Ausw\344hlen" }, + { 40, "Eine Aktion zum Zuweisen ausw\344hlen" }, + { 41, "Wert l\366schen" }, + { 42, "Schlie\337en" }, + { 43, "Seitenverh\344ltnis f\374r Spiele mit der Aufl\366sung 320x200 korrigieren" }, + { 44, "Kann keine Spiel-Engine finden, die dieses Spiel starten kann." }, + { 45, "Aktueller Videomodus:" }, + { 46, "Zeiger runter" }, + { 47, "Zeiger nach links" }, + { 48, "Zeiger nach rechts" }, + { 49, "Zeiger hoch" }, + { 50, "DOSBox-OPL-Emulator" }, + { 51, "DVD" }, + { 52, "DVD erfolgreich eingebunden" }, + { 53, "DVD nicht eingebunden" }, + { 54, "Datum: " }, + { 55, "Debugger" }, + { 56, "Standard" }, + { 57, "L\366schen" }, + { 58, "Stromsparmodus abschalten" }, + { 59, "GFX ausgeschalten" }, + { 60, "%d neue Spiele gefunden..." }, + { 61, "%d neue Spiele gefunden." }, + { 62, "Anzeige" }, + { 63, "Tastatur anzeigen" }, + { 64, "Diesen Spielstand wirklich l\366schen?" }, + { 65, "M\366chten Sie wirklich diese Spielkonfiguration entfernen?" }, + { 66, "M\366chten Sie wirklich den PC nach Spielen durchsuchen? M\366glicherweise wird dabei eine gr\366\337ere Menge an Spielen hinzugef\374gt." }, + { 67, "M\366chten Sie ein Spiel laden oder speichern?" }, + { 68, "M\366chten Sie eine automatische Durchsuchung vornehmen?" }, + { 69, "M\366chten Sie beenden?" }, + { 70, "Doppelzeilen (kein Zeilensprungverfahren)" }, + { 71, "Runter" }, + { 72, "Roland-GS-Modus" }, + { 73, "Engine unterst\374tzt den Debug-Level \"%s\" nicht" }, + { 74, "English" }, + { 75, "Fehler beim Ausf\374hren des Spiels:" }, + { 76, "Fehler beim Einbinden der DVD" }, + { 77, "Extrapfad:" }, + { 78, "FM-Towns-Emulator" }, + { 79, "Schneller Modus" }, + { 80, "Verwendete Funktionen:" }, + { 81, "Freie Ansicht" }, + { 82, "Voller Name des Spiels" }, + { 83, "Vollbildmodus" }, + { 84, "GC-Pad-Beschleunigung:" }, + { 85, "GC-Pad-Empfindlichkeit:" }, + { 86, "GFX" }, + { 87, "GM-Ger\344t:" }, + { 88, "GUI-Sprache:" }, + { 89, "GUI-Renderer:" }, + { 90, "Spiel" }, + { 91, "Spieldaten nicht gefunden" }, + { 92, "Spielkennung nicht unterst\374tzt" }, + { 93, "Spielpfad:" }, + { 94, "Hauptmen\374" }, + { 95, "Zu h\366herer Pfadebene wechseln" }, + { 96, "Pfad hoch" }, + { 97, "Grafik" }, + { 98, "Grafikmodus:" }, + { 99, "Hardware-Skalierung (schnell, aber schlechte Qualit\344t)" }, + { 100, "Hercules Bernsteingelb" }, + { 101, "Hercules-Gr\374n" }, + { 102, "Werkzeugleiste verbergen" }, + { 103, "Hohe Audioqualit\344t (lansamer) (erfordert Neustart)" }, + { 104, "H\366here Werte bewirken eine bessere Soundqualit\344t, werden aber m\366glicherweise nicht von jeder Soundkarte unterst\374tzt." }, + { 105, "Umschalttaste (Shift) gedr\374ckt halten, um Verzeichnisse nach Spielen zu durchsuchen" }, + { 106, "Horizontale Bildverkleinerung:" }, + { 107, "IBM-PCjr-Emulator" }, + { 108, "Kennung:" }, + { 109, "Netzwerk starten" }, + { 110, "Verg\366\337erung des oberen Bildschirms:" }, + { 111, "MT-32-Emulator wird gestartet..." }, + { 112, "Netzwerk wird gestartet..." }, + { 113, "Eingabe" }, + { 114, "Ung\374ltiges Verzeichnis" }, + { 115, "Tasten zuordnen" }, + { 116, "Tastatur" }, + { 117, "Tasten-Layout:" }, + { 118, "Tasten" }, + { 119, "Sprache der ScummVM-Oberfl\344che" }, + { 120, "Sprache des Spiels. Diese Funktion wird nicht eine spanische Version des Spiels in eine deutsche verwandeln." }, + { 121, "Sprache:" }, + { 122, "Links" }, + { 123, "Linksklick" }, + { 124, "Laden" }, + { 125, "Spiel laden:" }, + { 126, "Spielstand f\374r ausgew\344hltes Spiel laden" }, + { 127, "MAME-OPL-Emulator" }, + { 128, "MIDI" }, + { 129, "MIDI-Lautst\344rke:" }, + { 130, "MT-32" }, + { 131, "MT-32-Ger\344t:" }, + { 132, "MT-32-Emulation" }, + { 133, "Hauptbildschirm-Skalierung:" }, + { 134, "Zuweisen" }, + { 135, "Durchsuchen" }, + { 136, "Men\374" }, + { 137, "Sonstiges" }, + { 138, "AdLib-/MIDI-Modus" }, + { 139, "DVD einbinden" }, + { 140, "SMB einbinden" }, + { 141, "Mausklick" }, + { 142, "Multifunktion" }, + { 143, "Musikger\344t:" }, + { 144, "Musiklautst\344rke:" }, + { 145, "Alles aus" }, + { 146, "Name:" }, + { 147, "Netzwerk ist aus." }, + { 148, "Netzwerk nicht gestartet (%d)" }, + { 149, "Netzwerk gestartet" }, + { 150, "Netzwerk gestartet, \366ffentliches Verzeichnis eingebunden" }, + { 151, "Niemals" }, + { 152, "Nein" }, + { 153, "Kein Datum gespeichert" }, + { 154, "Keine Musik" }, + { 155, "Keine Spielzeit gespeichert" }, + { 156, "Keine Zeit gespeichert" }, + { 157, "-" }, + { 158, "Normal (keine Skalierung)" }, + { 159, "OK" }, + { 160, "Ausgabefrequenz:" }, + { 161, "Globale MIDI-Einstellungen \374bergehen" }, + { 162, "Globale MT-32-Einstellungen \374bergehen" }, + { 163, "Globale Audioeinstellungen \374bergehen" }, + { 164, "Globale Grafikeinstellungen \374bergehen" }, + { 165, "Globale Lautst\344rke-Einstellungen \374bergehen" }, + { 166, "PC-Lautsprecher-Emulator" }, + { 167, "Passwort:" }, + { 168, "Ung\374ltiges Verzeichnis" }, + { 169, "Pfad ist keine Datei." }, + { 170, "Verzeichnis existiert nicht." }, + { 171, "Pfade" }, + { 172, "Pause" }, + { 173, "Spiel ausw\344hlen:" }, + { 174, "Plattform, f\374r die das Spiel urspr\374nglich erstellt wurde" }, + { 175, "Plattform:" }, + { 176, "Spieldauer: " }, + { 177, "Bitte eine Aktion ausw\344hlen" }, + { 178, "Plugin-Pfad:" }, + { 179, "Standard-Ger\344t:" }, + { 180, "Taste dr\374cken, um sie zuzuweisen" }, + { 181, "Beenden" }, + { 182, "ScummVM beenden" }, + { 183, "Lese-Berechtigung nicht vorhanden" }, + { 184, "Lesefehler aufgetreten" }, + { 185, "Tasten neu zuweisen" }, + { 186, "Spiel aus der Liste entfernen. Die Spieldateien bleiben erhalten." }, + { 187, "Render-Modus:" }, + { 188, "Rechts" }, + { 189, "Rechtsklick" }, + { 190, "Rechtsklick" }, + { 191, "Drehen" }, + { 192, "Effektlautst\344rke:" }, + { 193, "SMB" }, + { 194, "Speichern" }, + { 195, "Spielst\344nde:" }, + { 196, "Spielst\344nde: " }, + { 197, "Speichern:" }, + { 198, "Suchlauf abgeschlossen!" }, + { 199, "%d Ordner durchsucht..." }, + { 200, "ScummVM-Hauptmen\374" }, + { 201, "ScummVM konnte keine Engine finden, um das Spiel zu starten!" }, + { 202, "ScummVM kann in dem gew\344hlten Verzeichnis kein Spiel finden!" }, + { 203, "ScummVM kann das gew\344hlte Verzeichnis nicht \366ffnen!" }, + { 204, "In Spieleliste suchen" }, + { 205, "Suchen:" }, + { 206, "SoundFont ausw\344hlen" }, + { 207, "Thema ausw\344hlen" }, + { 208, "Verzeichnis mit zus\344tzlichen Dateien ausw\344hlen" }, + { 209, "Aktion ausw\344hlen und \"Zuweisen\" klicken" }, + { 210, "Verzeichnis f\374r Oberfl\344chen-Themen" }, + { 211, "Verzeichnis f\374r zus\344tzliche Dateien ausw\344hlen" }, + { 212, "Verzeichnis f\374r Erweiterungen ausw\344hlen" }, + { 213, "Verzeichnis f\374r Spielst\344nde ausw\344hlen" }, + { 214, "Verzeichnis f\374r Spielst\344nde ausw\344hlen" }, + { 215, "Verzeichnis mit Spieldateien ausw\344hlen" }, + { 216, "Empfindlichkeit" }, + { 217, "Server:" }, + { 218, "\326ffentliches Verzeichnis:" }, + { 219, "Kurzer Spielname, um die Spielst\344nde zuzuordnen und das Spiel von der Kommandozeile aus starten zu k\366nnen" }, + { 220, "Tastatur zeigen" }, + { 221, "Mauszeiger anzeigen" }, + { 222, "Untertitel anzeigen und Sprachausgabe aktivieren" }, + { 223, "Cursor zeigen/verbergen" }, + { 224, "\334berspringen" }, + { 225, "Zeile \374berspringen" }, + { 226, "Text \374berspringen" }, + { 227, "An Ecken anheften" }, + { 228, "Software-Skalierung (gute Qualit\344t, aber langsamer)" }, + { 229, "Ton ein/aus" }, + { 230, "SoundFont wird von einigen Soundkarten, Fluidsynth und Timidity unterst\374tzt." }, + { 231, "SoundFont:" }, + { 232, "Spr." }, + { 233, "Spezielle Farbmischungsmethoden werden von manchen Spielen unterst\374tzt." }, + { 234, "Lautst\344rke spezieller Soundeffekte" }, + { 235, "Legt das standardm\344\337ige Musikwiedergabe-Ger\344t f\374r General-MIDI-Ausgabe fest." }, + { 236, "Legt das standardm\344\337ige Tonwiedergabe-Ger\344t f\374r die Ausgabe von Roland MT-32/LAPC1/CM32l/CM64 fest." }, + { 237, "Legt das Musikwiedergabe-Ger\344t oder den Soundkarten-Emulator fest." }, + { 238, "Legt das Verzeichnis f\374r zus\344tzliche Spieldateien f\374r alle Spiele in ScummVM fest." }, + { 239, "Legt das Verzeichnis f\374r zus\344tzliche Spieldateien fest." }, + { 240, "Legt das bevorzugte Tonwiedergabe-Ger\344t oder den Soundkarten-Emulator fest." }, + { 241, "Legt fest, wo die Spielst\344nde abgelegt werden." }, + { 242, "Sprache" }, + { 243, "Sprachlautst\344rke:" }, + { 244, "Standard-Renderer (16bpp)" }, + { 245, "Ausgew\344hltes Spiel starten" }, + { 246, "Status:" }, + { 247, "Untert." }, + { 248, "Untertitel-Tempo:" }, + { 249, "Untertitel" }, + { 250, "Figur wechseln" }, + { 251, "Tippen f\374r Linksklick, Doppeltippen f\374r Rechtsklick" }, + { 252, "Text und Sprache:" }, + { 253, "In das gew\344hlte Verzeichnis kann nicht geschrieben werden. Bitte ein anderes ausw\344hlen." }, + { 254, "Themenpfad:" }, + { 255, "Thema:" }, + { 256, "Diese Spielkennung ist schon vergeben. Bitte eine andere w\344hlen." }, + { 257, "F\374r dieses Spiel wird das Laden aus der Spieleliste heraus nicht unterst\374tzt." }, + { 258, "Zeit: " }, + { 259, "Zeit\374berschreitung beim Starten des Netzwerks" }, + { 260, "Zu X-Position gehen" }, + { 261, "Zu Y-Position gehen" }, + { 262, "Touchpad-Modus ausgeschaltet." }, + { 263, "Touchpad-Modus aktiviert." }, + { 264, "Echte Roland-MT-32-Emulation (GM-Emulation deaktiviert)" }, + { 265, "Schaltet die General-MIDI-Zuweisung f\374r Spiele mit Roland-MT-32-Audiospur aus." }, + { 266, "Unbekannt" }, + { 267, "Unbekannter Fehler" }, + { 268, "DVD aush\344ngen" }, + { 269, "SMB aush\344ngen" }, + { 270, "Nicht skalieren (Sie m\374ssen nach links und nach rechts scrollen)" }, + { 271, "Farbmodus nicht unterst\374tzt" }, + { 272, "Unbenannt" }, + { 273, "Hoch" }, + { 274, "Benutzt MIDI und AdLib zur Sounderzeugung." }, + { 275, "Den Trackpad-Style f\374r Maussteuerung benutzen" }, + { 276, "Benutzername:" }, + { 277, "SDL-Treiber verwenden" }, + { 278, "Vertikale Bildverkleinerung:" }, + { 279, "Video" }, + { 280, "Virtuelle Tastatur" }, + { 281, "Lautst\344rke" }, + { 282, "Windows MIDI" }, + { 283, "Schreib-Berechtigung nicht vorhanden" }, + { 284, "Daten konnten nicht geschrieben werden." }, + { 285, "Ja" }, + { 286, "Sie m\374ssen ScummVM neustarten, um die Einstellungen zu \374bernehmen." }, + { 287, "Zone" }, + { 288, "Hineinzoomen" }, + { 289, "Herauszoomen" }, + { 290, "alle 10 Minuten" }, + { 291, "alle 15 Minuten" }, + { 292, "alle 30 Minuten" }, + { 293, "alle 5 Minuten" }, + { 294, "\334be~r~" }, + { 295, "Spiel ~h~inzuf\374gen" }, + { 296, "~A~bbrechen" }, + { 297, "~S~chlie\337en" }, + { 298, "Spielo~p~tionen" }, + { 299, "~H~ilfe" }, + { 300, "~K~ampfsteuerung f\374r Indiana Jones" }, + { 301, "~T~asten" }, + { 302, "~L~inke-Hand-Modus" }, + { 303, "~L~aden" }, + { 304, "~L~aden..." }, + { 305, "~W~eiter" }, + { 306, "~O~K" }, + { 307, "~O~ptionen" }, + { 308, "~O~ptionen" }, + { 309, "~Z~ur\374ck" }, + { 310, "~B~eenden" }, + { 311, "Spiel ~e~ntfernen" }, + { 312, "~F~ortsetzen" }, + { 313, "Zur Spiele~l~iste zur\374ck" }, + { 314, "~S~peichern" }, + { 315, "~S~tarten" }, + { 316, "\334ber~g~\344nge aktiviert" }, + { 317, "~W~assereffekt aktiviert" }, + { 318, "~Z~ip-Modus aktiviert" }, { -1, NULL } }; @@ -2623,13 +2645,13 @@ struct PoLangEntry { }; const PoLangEntry _translations[] = { + { "ca_ES", "iso-8859-1", "Catalan", _translation_ca_ES }, + { "uk_UA", "iso-8859-5", "Ukrainian", _translation_uk_UA }, { "ru_RU", "iso-8859-5", "Russian", _translation_ru_RU }, - { "it_IT", "iso-8859-1", "Italiano", _translation_it_IT }, { "hu_HU", "cp1250", NULL, _translation_hu_HU }, - { "fr_FR", "iso-8859-1", "Francais", _translation_fr_FR }, - { "uk_UA", "iso-8859-5", "Ukrainian", _translation_uk_UA }, - { "ca_ES", "iso-8859-1", "Catalan", _translation_ca_ES }, { "es_ES", "iso-8859-1", "Espanol", _translation_es_ES }, + { "it_IT", "iso-8859-1", "Italiano", _translation_it_IT }, + { "fr_FR", "iso-8859-1", "Francais", _translation_fr_FR }, { "de_DE", "iso-8859-1", "Deutsch", _translation_de_DE }, { NULL, NULL, NULL, NULL } }; diff --git a/common/translation.cpp b/common/translation.cpp index b52aad0d1f..36ce4be83f 100644 --- a/common/translation.cpp +++ b/common/translation.cpp @@ -211,6 +211,10 @@ String TranslationManager::getTranslation(const String &message) { const TLangArray TranslationManager::getSupportedLanguageNames() const { return TLangArray(); } + +const char *TranslationManager::getCurrentCharset() { + return "ASCII"; +} #endif // USE_TRANSLATION diff --git a/common/util.cpp b/common/util.cpp index 9e36e0f161..179e648012 100644 --- a/common/util.cpp +++ b/common/util.cpp @@ -306,6 +306,9 @@ const struct GameOpt { { GUIO_MIDICMS, "midiCMS" }, { GUIO_MIDIPCJR, "midiPCJr" }, { GUIO_MIDIADLIB, "midiAdLib" }, + { GUIO_MIDIC64, "midiC64" }, + { GUIO_MIDIAMIGA, "midiAmiga" }, + { GUIO_MIDIAPPLEIIGS,"midiAppleIIgs" }, { GUIO_MIDITOWNS, "midiTowns" }, { GUIO_MIDIPC98, "midiPC98" }, { GUIO_MIDIMT32, "midiMt32" }, diff --git a/common/util.h b/common/util.h index 7a9cf4fb2d..52e4295bbb 100644 --- a/common/util.h +++ b/common/util.h @@ -223,10 +223,13 @@ enum GameGUIOption { GUIO_MIDICMS = (1 << 7), GUIO_MIDIPCJR = (1 << 8), GUIO_MIDIADLIB = (1 << 9), - GUIO_MIDITOWNS = (1 << 10), - GUIO_MIDIPC98 = (1 << 11), - GUIO_MIDIMT32 = (1 << 12), - GUIO_MIDIGM = (1 << 13) + GUIO_MIDIC64 = (1 << 10), + GUIO_MIDIAMIGA = (1 << 11), + GUIO_MIDIAPPLEIIGS = (1 << 12), + GUIO_MIDITOWNS = (1 << 13), + GUIO_MIDIPC98 = (1 << 14), + GUIO_MIDIMT32 = (1 << 15), + GUIO_MIDIGM = (1 << 16) }; bool checkGameGUIOption(GameGUIOption option, const String &str); @@ -1423,9 +1423,9 @@ case $_host_os in gamecube) CXXFLAGS="$CXXFLAGS -Os -mogc -mcpu=750 -meabi -mhard-float" CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections -fmodulo-sched" - CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include -I$DEVKITPRO/cube/include" + CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include" # libogc is required to link the cc tests (includes _start()) - LDFLAGS="$LDFLAGS -mogc -mcpu=750 -L$DEVKITPRO/libogc/lib/cube -L$DEVKITPRO/cube/lib -logc" + LDFLAGS="$LDFLAGS -mogc -mcpu=750 -L$DEVKITPRO/libogc/lib/cube -logc" ;; haiku*) DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE" @@ -1484,9 +1484,9 @@ case $_host_os in wii) CXXFLAGS="$CXXFLAGS -Os -mrvl -mcpu=750 -meabi -mhard-float" CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections -fmodulo-sched" - CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include -I$DEVKITPRO/wii/include" + CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include" # libogc is required to link the cc tests (includes _start()) - LDFLAGS="$LDFLAGS -mrvl -mcpu=750 -L$DEVKITPRO/libogc/lib/wii -L$DEVKITPRO/wii/lib -logc" + LDFLAGS="$LDFLAGS -mrvl -mcpu=750 -L$DEVKITPRO/libogc/lib/wii -logc" ;; wince) CXXFLAGS="$CXXFLAGS -O3 -march=armv4 -mtune=xscale" @@ -1579,6 +1579,7 @@ if test -n "$_host"; then add_line_to_config_h "/* #define DEBUG_WII_USBGECKO */" add_line_to_config_h "/* #define DEBUG_WII_MEMSTATS */" add_line_to_config_h "/* #define DEBUG_WII_GDB */" + add_line_to_config_h "#define USE_WII_DI" ;; gp2x) DEFINES="$DEFINES -DGP2X -DNDEBUG" @@ -2642,10 +2643,10 @@ case $_backend in DEFINES="$DEFINES -D__WII__ -DGEKKO" case $_host_os in gamecube) - LIBS="$LIBS -lgxflux -lfat -logc -ldb" + LIBS="$LIBS -lgxflux -liso9660 -lfat -logc -ldb" ;; *) - LIBS="$LIBS -lgxflux -ldi -ltinysmb -lfat -lwiiuse -lbte -logc -lwiikeyboard -ldb" + LIBS="$LIBS -lgxflux -ldi -liso9660 -ltinysmb -lfat -lwiiuse -lbte -logc -lwiikeyboard -ldb" ;; esac ;; diff --git a/dists/devcpp/agos.dev b/dists/devcpp/agos.dev deleted file mode 100644 index 9c5c04f0be..0000000000 --- a/dists/devcpp/agos.dev +++ /dev/null @@ -1,309 +0,0 @@ -[Project] -FileName=agos.dev -Name=agos -UnitCount=26 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=agos -ObjectOutput=agos -OverrideOutput=0 -OverrideOutputName=agos.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\agos\charset.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\agos\cursor.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\agos\debug.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\agos\debug.h -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\agos\debugger.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\agos\debugger.h -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\agos\game.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\agos\icons.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\agos\intern.h -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\agos\items.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\agos\midi.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\agos\midi.h -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\agos\midiparser_s1d.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\agos\res.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\agos\saveload.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\agos\agos.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\agos\agos.h -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\agos\sound.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\agos\sound.h -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\agos\verb.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\agos\vga.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\agos\vga.h -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\agos\oracle.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\agos\animation.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\agos\animation.h -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\agos\string.cpp -CompileCpp=1 -Folder=agos -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/cine.dev b/dists/devcpp/cine.dev deleted file mode 100644 index d407bbd5ff..0000000000 --- a/dists/devcpp/cine.dev +++ /dev/null @@ -1,489 +0,0 @@ -[Project] -FileName=cine.dev -Name=cine -UnitCount=42 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=cine -ObjectOutput=cine -OverrideOutput=0 -OverrideOutputName=cine.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\cine\various.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\cine\anim.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\cine\anim.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\cine\auto00.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\cine\auto00.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\cine\bg.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\cine\bg.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\cine\bg_list.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\cine\bg_list.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\cine\cine.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\cine\cine.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\cine\font.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\cine\font.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\cine\gfx.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\cine\gfx.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\cine\main_loop.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\cine\main_loop.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\cine\msg.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\cine\msg.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\cine\object.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\cine\object.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\cine\pal.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\cine\pal.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\cine\part.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\cine\part.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\cine\prc.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\cine\prc.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\cine\rel.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\cine\rel.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\cine\resource.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\cine\resource.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\cine\script.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\cine\script.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\cine\sfx_player.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\cine\sfx_player.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\cine\sound_driver.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\cine\sound_driver.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\cine\texte.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\cine\texte.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\engines\cine\unpack.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit41] -FileName=..\..\engines\cine\unpack.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit42] -FileName=..\..\engines\cine\various.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit43] -FileName=..\..\engines\cine\unpack.h -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit44] -FileName=..\..\engines\cine\various.cpp -CompileCpp=1 -Folder=cine -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/gob.dev b/dists/devcpp/gob.dev deleted file mode 100644 index a8bcc06414..0000000000 --- a/dists/devcpp/gob.dev +++ /dev/null @@ -1,609 +0,0 @@ -[Project] -FileName=gob.dev -Name=gob -UnitCount=56 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=gob -ObjectOutput=gob -OverrideOutput=0 -OverrideOutputName=gob.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\gob\anim.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\gob\anim.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\gob\cdrom.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\gob\cdrom.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\gob\dataio.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\gob\dataio.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\gob\draw.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\gob\draw.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\gob\driver_vga.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\gob\driver_vga.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\gob\game.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\gob\game.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\gob\global.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\gob\global.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\gob\gob.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\gob\gob.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\gob\goblin.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\gob\goblin.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\gob\init.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\gob\init.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\gob\inter.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\gob\inter.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\gob\inter_v1.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\gob\inter_v2.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\gob\map.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\gob\map.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\gob\mult.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\gob\mult.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\gob\music.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\gob\music.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\gob\pack.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\gob\pack.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\gob\palanim.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\gob\palanim.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\gob\parse.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\gob\parse.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\gob\parse_v1.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\gob\parse_v2.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\gob\scenery.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\engines\gob\scenery.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit41] -FileName=..\..\engines\gob\sound.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit42] -FileName=..\..\engines\gob\sound.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit43] -FileName=..\..\engines\gob\timer.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit44] -FileName=..\..\engines\gob\timer.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit45] -FileName=..\..\engines\gob\util.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit46] -FileName=..\..\engines\gob\util.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit47] -FileName=..\..\engines\gob\video.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit48] -FileName=..\..\engines\gob\video.h -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit49] -FileName=..\..\engines\gob\mult_v2.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit50] -FileName=..\..\engines\gob\mult_v1.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit51] -FileName=..\..\engines\gob\draw_v2.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit52] -FileName=..\..\engines\gob\draw_v1.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit53] -FileName=..\..\engines\gob\game_v2.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit54] -FileName=..\..\engines\gob\game_v1.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit55] -FileName=..\..\engines\gob\video_v1.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit56] -FileName=..\..\engines\gob\video_v2.cpp -CompileCpp=1 -Folder=gob -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/kyra.dev b/dists/devcpp/kyra.dev deleted file mode 100644 index 85b638779b..0000000000 --- a/dists/devcpp/kyra.dev +++ /dev/null @@ -1,359 +0,0 @@ -[Project] -FileName=kyra.dev -Name=kyra -UnitCount=31 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=kyra -ObjectOutput=kyra -OverrideOutput=0 -OverrideOutputName=kyra.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\kyra\animator.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\kyra\animator.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\kyra\debugger.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\kyra\debugger.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\kyra\gui.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\kyra\items.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\kyra\kyra.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\kyra\kyra.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\kyra\resource.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\kyra\resource.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\kyra\saveload.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\kyra\scene.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\kyra\screen.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\kyra\screen.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\kyra\script.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\kyra\script.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\kyra\script_v1.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\kyra\seqplayer.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\kyra\seqplayer.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\kyra\sequences_v1.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\kyra\sound.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\kyra\sound.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\kyra\sprites.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\kyra\sprites.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\kyra\staticres.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\kyra\text.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\kyra\text.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\kyra\timer.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\kyra\wsamovie.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\kyra\wsamovie.h -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\kyra\sound_adlib.cpp -CompileCpp=1 -Folder=kyra -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/lure.dev b/dists/devcpp/lure.dev deleted file mode 100644 index 89fa86abd0..0000000000 --- a/dists/devcpp/lure.dev +++ /dev/null @@ -1,479 +0,0 @@ -[Project] -FileName=lure.dev -Name=lure -UnitCount=43 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=lure -ObjectOutput=lure -OverrideOutput=0 -OverrideOutputName=lure.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\lure\animseq.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\lure\animseq.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\lure\debug-input.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\lure\debug-input.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\lure\debug-methods.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\lure\debug-methods.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\lure\decode.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\lure\decode.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\lure\disk.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\lure\disk.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\lure\events.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\lure\events.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\lure\game.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\lure\game.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\lure\hotspots.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\lure\hotspots.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\lure\intro.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\lure\intro.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\lure\lure.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\lure\lure.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\lure\luredefs.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\lure\memory.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\lure\memory.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\lure\menu.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\lure\menu.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\lure\palette.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\lure\palette.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\lure\res.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\lure\res.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\lure\res_struct.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\lure\res_struct.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\lure\room.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\lure\room.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\lure\screen.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\lure\screen.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\lure\scripts.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\lure\scripts.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\lure\strings.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\lure\strings.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\engines\lure\surface.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit41] -FileName=..\..\engines\lure\surface.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit42] -FileName=..\..\engines\lure\system.cpp -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit43] -FileName=..\..\engines\lure\system.h -CompileCpp=1 -Folder=lure -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/queen.dev b/dists/devcpp/queen.dev deleted file mode 100644 index 62f433189c..0000000000 --- a/dists/devcpp/queen.dev +++ /dev/null @@ -1,449 +0,0 @@ -[Project] -FileName=queen.dev -Name=queen -UnitCount=40 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=queen -ObjectOutput=queen -OverrideOutput=0 -OverrideOutputName=queen.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\queen\bankman.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\queen\bankman.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\queen\command.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\queen\command.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\queen\credits.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\queen\credits.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\queen\cutaway.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\queen\cutaway.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\queen\debug.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\queen\debug.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\queen\defs.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\queen\display.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\queen\display.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\queen\graphics.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\queen\graphics.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\queen\grid.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\queen\grid.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\queen\input.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\queen\input.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\queen\journal.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\queen\journal.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\queen\logic.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\queen\logic.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\queen\music.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\queen\music.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\queen\musicdata.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\queen\queen.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\queen\queen.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\queen\resource.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\queen\resource.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\queen\restables.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\queen\sound.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\queen\sound.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\queen\state.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\queen\state.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\queen\structs.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\queen\talk.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\queen\talk.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\queen\walk.cpp -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\engines\queen\walk.h -CompileCpp=1 -Folder=queen -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/saga.dev b/dists/devcpp/saga.dev deleted file mode 100644 index fbcb64ae79..0000000000 --- a/dists/devcpp/saga.dev +++ /dev/null @@ -1,589 +0,0 @@ -[Project] -FileName=saga.dev -Name=saga -UnitCount=54 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=saga -ObjectOutput=saga -OverrideOutput=0 -OverrideOutputName=saga.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\saga\actor.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\saga\actor.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\saga\animation.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\saga\animation.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\saga\console.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\saga\console.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\saga\events.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\saga\events.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\saga\font.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\saga\font.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\saga\font_map.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\saga\game.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\saga\gfx.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\saga\gfx.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\saga\ihnm_introproc.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\saga\image.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\saga\input.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\saga\interface.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\saga\interface.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\saga\isomap.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\saga\isomap.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\saga\ite_introproc.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\saga\itedata.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\saga\itedata.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\saga\list.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\saga\music.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\saga\music.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\saga\objectmap.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\saga\objectmap.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\saga\palanim.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\saga\palanim.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\saga\puzzle.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\saga\puzzle.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\saga\render.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\saga\render.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\saga\resnames.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\saga\rscfile.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\saga\rscfile.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\saga\saga.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\engines\saga\saga.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit41] -FileName=..\..\engines\saga\saveload.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit42] -FileName=..\..\engines\saga\scene.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit43] -FileName=..\..\engines\saga\scene.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit44] -FileName=..\..\engines\saga\script.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit45] -FileName=..\..\engines\saga\script.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit46] -FileName=..\..\engines\saga\sfuncs.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit47] -FileName=..\..\engines\saga\sndres.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit48] -FileName=..\..\engines\saga\sndres.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit49] -FileName=..\..\engines\saga\sound.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit50] -FileName=..\..\engines\saga\sound.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit51] -FileName=..\..\engines\saga\sprite.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit52] -FileName=..\..\engines\saga\sprite.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit53] -FileName=..\..\engines\saga\sthread.cpp -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit54] -FileName=..\..\engines\saga\stream.h -CompileCpp=1 -Folder=saga -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/scumm.dev b/dists/devcpp/scumm.dev deleted file mode 100644 index 5d8ad95fd0..0000000000 --- a/dists/devcpp/scumm.dev +++ /dev/null @@ -1,1469 +0,0 @@ -[Project] -FileName=scumm.dev -Name=scumm -UnitCount=142 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=scumm -ObjectOutput=scumm -OverrideOutput=0 -OverrideOutputName=scumm.a -HostApplication= -Folders=he,imuse,imuse_digi,insane,smush -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\scumm\smush\channel.h -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\scumm\smush\chunk.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\scumm\smush\chunk.h -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\scumm\smush\chunk_type.h -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\scumm\smush\codec1.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\scumm\smush\codec37.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\scumm\smush\codec37.h -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\scumm\smush\codec47.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\scumm\smush\codec47.h -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\scumm\smush\imuse_channel.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\scumm\smush\saud_channel.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\scumm\smush\smush_font.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\scumm\smush\smush_font.h -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\scumm\smush\smush_mixer.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\scumm\smush\smush_mixer.h -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\scumm\smush\smush_player.cpp -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\scumm\smush\smush_player.h -CompileCpp=1 -Folder=smush -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\scumm\imuse_digi\dimuse_track.cpp -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\scumm\imuse_digi\dimuse.cpp -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\scumm\imuse_digi\dimuse.h -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\scumm\imuse_digi\dimuse_bndmgr.cpp -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\scumm\imuse_digi\dimuse_bndmgr.h -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\scumm\imuse_digi\dimuse_codecs.cpp -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\scumm\imuse_digi\dimuse_music.cpp -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\scumm\imuse_digi\dimuse_script.cpp -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\scumm\imuse_digi\dimuse_sndmgr.cpp -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\scumm\imuse_digi\dimuse_sndmgr.h -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\scumm\imuse_digi\dimuse_tables.cpp -CompileCpp=1 -Folder=imuse_digi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\scumm\insane\insane_scenes.cpp -CompileCpp=1 -Folder=insane -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\scumm\insane\insane.cpp -CompileCpp=1 -Folder=insane -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\scumm\insane\insane.h -CompileCpp=1 -Folder=insane -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\scumm\insane\insane_ben.cpp -CompileCpp=1 -Folder=insane -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\scumm\insane\insane_enemy.cpp -CompileCpp=1 -Folder=insane -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\scumm\insane\insane_iact.cpp -CompileCpp=1 -Folder=insane -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\scumm\actor.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\scumm\actor.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\scumm\akos.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\scumm\akos.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\scumm\base-costume.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\engines\scumm\base-costume.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit41] -FileName=..\..\engines\scumm\bomp.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit42] -FileName=..\..\engines\scumm\bomp.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit43] -FileName=..\..\engines\scumm\boxes.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit44] -FileName=..\..\engines\scumm\boxes.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit45] -FileName=..\..\engines\scumm\camera.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit46] -FileName=..\..\engines\scumm\charset.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit47] -FileName=..\..\engines\scumm\charset.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit48] -FileName=..\..\engines\scumm\costume.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit49] -FileName=..\..\engines\scumm\costume.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit50] -FileName=..\..\engines\scumm\cursor.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit51] -FileName=..\..\engines\scumm\debugger.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit52] -FileName=..\..\engines\scumm\debugger.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit53] -FileName=..\..\engines\scumm\dialogs.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit54] -FileName=..\..\engines\scumm\dialogs.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit55] -FileName=..\..\engines\scumm\gfx.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit56] -FileName=..\..\engines\scumm\gfx.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit57] -FileName=..\..\engines\scumm\help.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit58] -FileName=..\..\engines\scumm\help.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit59] -FileName=..\..\engines\scumm\input.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit60] -FileName=..\..\engines\scumm\intern.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit61] -FileName=..\..\engines\scumm\midiparser_eup.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit62] -FileName=..\..\engines\scumm\midiparser_ro.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit63] -FileName=..\..\engines\scumm\music.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit64] -FileName=..\..\engines\scumm\nut_renderer.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit65] -FileName=..\..\engines\scumm\nut_renderer.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit66] -FileName=..\..\engines\scumm\object.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit67] -FileName=..\..\engines\scumm\object.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit68] -FileName=..\..\engines\scumm\palette.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit69] -FileName=..\..\engines\scumm\player_mod.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit70] -FileName=..\..\engines\scumm\player_mod.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit71] -FileName=..\..\engines\scumm\player_nes.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit72] -FileName=..\..\engines\scumm\player_nes.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit73] -FileName=..\..\engines\scumm\player_v1.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit74] -FileName=..\..\engines\scumm\player_v1.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit75] -FileName=..\..\engines\scumm\player_v2.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit76] -FileName=..\..\engines\scumm\player_v2.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit77] -FileName=..\..\engines\scumm\player_v2a.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit78] -FileName=..\..\engines\scumm\player_v2a.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit79] -FileName=..\..\engines\scumm\player_v3a.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit80] -FileName=..\..\engines\scumm\player_v3a.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit81] -FileName=..\..\engines\scumm\resource.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit82] -FileName=..\..\engines\scumm\resource.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit83] -FileName=..\..\engines\scumm\resource_v2.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit84] -FileName=..\..\engines\scumm\resource_v3.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit85] -FileName=..\..\engines\scumm\resource_v4.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit86] -FileName=..\..\engines\scumm\room.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit87] -FileName=..\..\engines\scumm\saveload.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit88] -FileName=..\..\engines\scumm\saveload.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit89] -FileName=..\..\engines\scumm\script.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit90] -FileName=..\..\engines\scumm\script.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit91] -FileName=..\..\engines\scumm\script_c64.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit92] -FileName=..\..\engines\scumm\script_v2.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit93] -FileName=..\..\engines\scumm\script_v5.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit94] -FileName=..\..\engines\scumm\script_v6.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit95] -FileName=..\..\engines\scumm\script_v8.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit96] -FileName=..\..\engines\scumm\scumm.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit97] -FileName=..\..\engines\scumm\scumm.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit98] -FileName=..\..\engines\scumm\scumm-md5.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit99] -FileName=..\..\engines\scumm\sound.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit100] -FileName=..\..\engines\scumm\sound.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit101] -FileName=..\..\engines\scumm\string.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit102] -FileName=..\..\engines\scumm\thumbnail.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit103] -FileName=..\..\engines\scumm\usage_bits.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit104] -FileName=..\..\engines\scumm\usage_bits.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit105] -FileName=..\..\engines\scumm\util.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit106] -FileName=..\..\engines\scumm\util.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit107] -FileName=..\..\engines\scumm\vars.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit108] -FileName=..\..\engines\scumm\verbs.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit109] -FileName=..\..\engines\scumm\verbs.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit110] -FileName=..\..\engines\scumm\he\floodfill_he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit111] -FileName=..\..\engines\scumm\he\floodfill_he.h -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit112] -FileName=..\..\engines\scumm\he\intern_he.h -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit113] -FileName=..\..\engines\scumm\he\logic_he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit114] -FileName=..\..\engines\scumm\he\logic_he.h -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit115] -FileName=..\..\engines\scumm\he\palette_he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit116] -FileName=..\..\engines\scumm\he\resource_he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit117] -FileName=..\..\engines\scumm\he\resource_he.h -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit118] -FileName=..\..\engines\scumm\he\script_v60he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit119] -FileName=..\..\engines\scumm\he\script_v70he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit120] -FileName=..\..\engines\scumm\he\script_v72he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit121] -FileName=..\..\engines\scumm\he\script_v80he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit122] -FileName=..\..\engines\scumm\he\script_v90he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit123] -FileName=..\..\engines\scumm\he\script_v100he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit124] -FileName=..\..\engines\scumm\he\sound_he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit125] -FileName=..\..\engines\scumm\he\sprite_he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit126] -FileName=..\..\engines\scumm\he\sprite_he.h -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit127] -FileName=..\..\engines\scumm\he\wiz_he.cpp -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit128] -FileName=..\..\engines\scumm\he\wiz_he.h -CompileCpp=1 -Folder=he -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit129] -FileName=..\..\engines\scumm\plugin.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit130] -FileName=..\..\engines\scumm\plugin.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit131] -FileName=..\..\engines\scumm\imuse\instrument.h -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit132] -FileName=..\..\engines\scumm\imuse\imuse_part.cpp -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit133] -FileName=..\..\engines\scumm\imuse\imuse.h -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit134] -FileName=..\..\engines\scumm\imuse\imuse_internal.h -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit135] -FileName=..\..\engines\scumm\imuse\imuse_player.cpp -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit136] -FileName=..\..\engines\scumm\imuse\instrument.cpp -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit137] -FileName=..\..\engines\scumm\file.cpp -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit138] -FileName=..\..\engines\scumm\file.h -CompileCpp=1 -Folder=scumm -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit139] -FileName=..\..\engines\scumm\imuse\imuse.cpp -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit140] -FileName=..\..\engines\scumm\imuse\sysex_scumm.cpp -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit141] -FileName=..\..\engines\scumm\imuse\sysex_samnmax.cpp -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit142] -FileName=..\..\engines\scumm\imuse\sysex.h -CompileCpp=1 -Folder=imuse -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/scummvm.dev b/dists/devcpp/scummvm.dev deleted file mode 100644 index 5f15c3e2bd..0000000000 --- a/dists/devcpp/scummvm.dev +++ /dev/null @@ -1,2088 +0,0 @@ -[Project] -FileName=scummvm.dev -Name=scummvm -UnitCount=206 -Type=1 -Ver=1 -ObjFiles= -Includes=../..;../../engines;../../common -Libs= -PrivateResource=scummvm_private.rc -ResourceIncludes=../..;../../icons -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_-DUSE_ZLIB_@@_ -Linker=cine/cine.a_@@_gob/gob.a_@@_kyra/kyra.a_@@_lure/lure.a_@@_queen/queen.a_@@_saga/saga.a_@@_scumm/scumm.a_@@_agos/agos.a_@@_sky/sky.a_@@_sword1/sword1.a_@@_sword2/sword2.a_@@_-lSDL.dll_@@_-lwinmm_@@_-lz.dll_@@_ -IsCpp=1 -Icon=scummvm.ico -ExeOutput=scummvm -ObjectOutput=scummvm -OverrideOutput=0 -OverrideOutputName=scummvm.exe -HostApplication= -Folders=backends,backends/fs,backends/fs/windows,backends/midi,backends/platform/sdl,base,common,graphics,graphics/fonts,graphics/scaler,gui,sound,sound/softsynth,sound/softsynth/mt32 -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[Unit4] -FileName=..\..\backends\platform\sdl\sdl.cpp -CompileCpp=1 -Folder=backends/platform/sdl -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\backends\platform\sdl\sdl-common.h -CompileCpp=1 -Folder=backends/platform/sdl -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\backends\intern.h -CompileCpp=1 -Folder=backends -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\base\engine.h -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\base\options.h -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\base\internal_version.h -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\base\main.cpp -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\base\plugins.cpp -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\base\plugins.h -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\base\version.h -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\common\array.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\common\config-file.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\common\config-file.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\common\config-manager.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\common\config-manager.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\common\debugger.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\common\debugger.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\common\endian.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\common\file.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\common\file.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\common\list.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\common\md5.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\common\md5.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\common\mutex.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\common\mutex.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\common\rect.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\common\savefile.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\common\savefile.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\common\scummsys.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\common\singleton.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\common\stack.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\common\str.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\common\str.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\common\stream.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit41] -FileName=..\..\common\stream.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit42] -FileName=..\..\common\system.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit43] -FileName=..\..\common\system.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit44] -FileName=..\..\common\timer.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit45] -FileName=..\..\common\timer.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit46] -FileName=..\..\common\unzip.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit47] -FileName=..\..\common\unzip.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit48] -FileName=..\..\common\util.cpp -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit49] -FileName=..\..\common\util.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit50] -FileName=..\..\graphics\animation.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit51] -FileName=..\..\graphics\animation.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit52] -FileName=..\..\graphics\font.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit53] -FileName=..\..\graphics\font.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit54] -FileName=..\..\graphics\fontman.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit55] -FileName=..\..\graphics\fontman.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit56] -FileName=..\..\graphics\ilbm.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit57] -FileName=..\..\graphics\ilbm.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit58] -FileName=..\..\graphics\imagedec.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit59] -FileName=..\..\graphics\imagedec.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit60] -FileName=..\..\graphics\imageman.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit61] -FileName=..\..\graphics\imageman.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit62] -FileName=..\..\graphics\primitives.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit63] -FileName=..\..\graphics\primitives.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit64] -FileName=..\..\graphics\surface.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit65] -FileName=..\..\graphics\surface.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit66] -FileName=..\..\gui\about.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit67] -FileName=..\..\gui\about.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit68] -FileName=..\..\gui\Actions.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit69] -FileName=..\..\gui\Actions.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit70] -FileName=..\..\gui\browser.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit71] -FileName=..\..\gui\browser.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit72] -FileName=..\..\gui\chooser.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit73] -FileName=..\..\gui\chooser.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit74] -FileName=..\..\gui\console.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit75] -FileName=..\..\gui\console.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit76] -FileName=..\..\gui\credits.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit77] -FileName=..\..\gui\dialog.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit78] -FileName=..\..\gui\dialog.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit79] -FileName=..\..\gui\editable.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit80] -FileName=..\..\gui\editable.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit81] -FileName=..\..\gui\EditTextWidget.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit82] -FileName=..\..\gui\EditTextWidget.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit83] -FileName=..\..\gui\Key.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit84] -FileName=..\..\gui\Key.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit85] -FileName=..\..\gui\KeysDialog.cpp -CompileCpp=1 -Folder=gui -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd=$(CPP) -c KeysDialog.cpp -o scummvm/KeysDialog.o $(CXXFLAGS) - -[Unit86] -FileName=..\..\gui\KeysDialog.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit87] -FileName=..\..\gui\launcher.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit88] -FileName=..\..\gui\launcher.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit89] -FileName=..\..\gui\ListWidget.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit90] -FileName=..\..\gui\ListWidget.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit91] -FileName=..\..\gui\message.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit92] -FileName=..\..\gui\message.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit93] -FileName=..\..\gui\newgui.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit94] -FileName=..\..\gui\newgui.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit95] -FileName=..\..\gui\object.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit96] -FileName=..\..\gui\options.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd=$(CPP) -c ../../gui/options.cpp -o scummvm/options.o $(CXXFLAGS) -D_MSC_VER - -[Unit97] -FileName=..\..\gui\options.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit98] -FileName=..\..\gui\PopUpWidget.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit99] -FileName=..\..\gui\PopUpWidget.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit100] -FileName=..\..\gui\ScrollBarWidget.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit101] -FileName=..\..\gui\ScrollBarWidget.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit102] -FileName=..\..\gui\TabWidget.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit103] -FileName=..\..\gui\TabWidget.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit104] -FileName=..\..\gui\theme.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit105] -FileName=..\..\gui\theme.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit106] -FileName=..\..\gui\ThemeNew.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit107] -FileName=..\..\gui\widget.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit108] -FileName=..\..\gui\widget.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit109] -FileName=..\..\sound\adpcm.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit110] -FileName=..\..\sound\adpcm.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit111] -FileName=..\..\sound\audiocd.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit112] -FileName=..\..\sound\audiocd.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit113] -FileName=..\..\sound\audiostream.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit114] -FileName=..\..\sound\audiostream.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit115] -FileName=..\..\sound\flac.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit116] -FileName=..\..\sound\flac.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit117] -FileName=..\..\sound\fmopl.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit118] -FileName=..\..\sound\fmopl.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit119] -FileName=..\..\sound\mididrv.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit120] -FileName=..\..\sound\mididrv.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit121] -FileName=..\..\sound\midiparser.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit122] -FileName=..\..\sound\midiparser.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit123] -FileName=..\..\sound\midiparser_smf.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit124] -FileName=..\..\sound\midiparser_xmidi.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit125] -FileName=..\..\sound\mixer.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit126] -FileName=..\..\sound\mixer.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit127] -FileName=..\..\sound\mp3.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit128] -FileName=..\..\sound\mp3.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit129] -FileName=..\..\sound\mpu401.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit130] -FileName=..\..\sound\mpu401.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit131] -FileName=..\..\sound\rate.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit132] -FileName=..\..\sound\rate.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit133] -FileName=..\..\sound\voc.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit134] -FileName=..\..\sound\voc.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit135] -FileName=..\..\sound\vorbis.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit136] -FileName=..\..\sound\vorbis.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit137] -FileName=..\..\sound\wave.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit138] -FileName=..\..\sound\wave.h -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit139] -FileName=..\..\sound\softsynth\adlib.cpp -CompileCpp=1 -Folder=sound/softsynth -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit140] -FileName=..\..\sound\softsynth\emumidi.h -CompileCpp=1 -Folder=sound/softsynth -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit141] -FileName=..\..\sound\softsynth\fluidsynth.cpp -CompileCpp=1 -Folder=sound/softsynth -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit142] -FileName=..\..\sound\softsynth\mt32.cpp -CompileCpp=1 -Folder=sound/softsynth -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit143] -FileName=..\..\sound\softsynth\ym2612.cpp -CompileCpp=1 -Folder=sound/softsynth -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit144] -FileName=..\..\sound\softsynth\mt32\freeverb.cpp -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit145] -FileName=..\..\sound\softsynth\mt32\freeverb.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit146] -FileName=..\..\sound\softsynth\mt32\i386.cpp -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit147] -FileName=..\..\sound\softsynth\mt32\i386.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit148] -FileName=..\..\sound\softsynth\mt32\mt32_file.cpp -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit149] -FileName=..\..\sound\softsynth\mt32\mt32_file.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit150] -FileName=..\..\sound\softsynth\mt32\mt32emu.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit151] -FileName=..\..\sound\softsynth\mt32\part.cpp -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit152] -FileName=..\..\sound\softsynth\mt32\part.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit153] -FileName=..\..\sound\softsynth\mt32\partial.cpp -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit154] -FileName=..\..\sound\softsynth\mt32\partial.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit155] -FileName=..\..\sound\softsynth\mt32\partialManager.cpp -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit156] -FileName=..\..\sound\softsynth\mt32\partialManager.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit157] -FileName=..\..\sound\softsynth\mt32\structures.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit158] -FileName=..\..\sound\softsynth\mt32\synth.cpp -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit159] -FileName=..\..\sound\softsynth\mt32\synth.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit160] -FileName=..\..\sound\softsynth\mt32\tables.cpp -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit161] -FileName=..\..\sound\softsynth\mt32\tables.h -CompileCpp=1 -Folder=sound/softsynth/mt32 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit162] -FileName=..\scummvm.rc -CompileCpp=1 -Folder=Resources -Compile=1 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit163] -FileName=..\..\backends\fs\fs.cpp -CompileCpp=1 -Folder=backends/fs -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit164] -FileName=..\..\backends\fs\fs.h -CompileCpp=1 -Folder=backends/fs -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit165] -FileName=..\..\backends\fs\windows\windows-fs.cpp -CompileCpp=1 -Folder=backends/fs/windows -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit166] -FileName=..\..\sound\null.cpp -CompileCpp=1 -Folder=sound -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit167] -FileName=..\..\graphics\fonts\consolefont.cpp -CompileCpp=1 -Folder=graphics/fonts -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit168] -FileName=..\..\graphics\fonts\newfont.cpp -CompileCpp=1 -Folder=graphics/fonts -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit169] -FileName=..\..\graphics\fonts\newfont_big.cpp -CompileCpp=1 -Folder=graphics/fonts -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit170] -FileName=..\..\graphics\fonts\scummfont.cpp -CompileCpp=1 -Folder=graphics/fonts -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit171] -FileName=..\..\graphics\scaler.cpp -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit172] -FileName=..\..\graphics\scaler.h -CompileCpp=1 -Folder=graphics -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit173] -FileName=..\..\graphics\scaler\2xsai.cpp -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit174] -FileName=..\..\graphics\scaler\aspect.cpp -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit175] -FileName=..\..\graphics\scaler\hq2x.cpp -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit176] -FileName=..\..\graphics\scaler\hq2x.h -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit177] -FileName=..\..\graphics\scaler\hq3x.cpp -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit178] -FileName=..\..\graphics\scaler\hq3x.h -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit179] -FileName=..\..\graphics\scaler\intern.h -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit180] -FileName=..\..\graphics\scaler\scale2x.cpp -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit181] -FileName=..\..\graphics\scaler\scale2x.h -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit182] -FileName=..\..\graphics\scaler\scale3x.cpp -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit183] -FileName=..\..\graphics\scaler\scale3x.h -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit184] -FileName=..\..\graphics\scaler\scalebit.cpp -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit185] -FileName=..\..\graphics\scaler\scalebit.h -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit186] -FileName=..\..\graphics\scaler\thumbnail.cpp -CompileCpp=1 -Folder=graphics/scaler -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit187] -FileName=..\..\gui\theme-config.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit189] -FileName=..\..\gui\eval.h -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit190] -FileName=..\..\common\hashmap.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit191] -FileName=..\..\common\func.h -CompileCpp=1 -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit192] -FileName=..\..\common\hashmap.cpp -Folder=common -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= -CompileCpp=1 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit9] -FileName=..\..\base\options.cpp -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit193] -FileName=..\..\gui\ThemeClassic.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit1] -FileName=..\..\backends\midi\windows.cpp -CompileCpp=1 -Folder=backends/midi -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\backends\platform\sdl\events.cpp -CompileCpp=1 -Folder=backends/platform/sdl -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\backends\platform\sdl\graphics.cpp -CompileCpp=1 -Folder=backends/platform/sdl -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\base\engine.cpp -CompileCpp=1 -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit194] -FileName=..\..\base\version.cpp -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= -CompileCpp=1 - -[Unit195] -FileName=..\..\base\main.h -Folder=base -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= -CompileCpp=1 - -[Unit196] -FileName=cine.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit197] -FileName=gob.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit198] -FileName=kyra.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit188] -FileName=..\..\gui\eval.cpp -CompileCpp=1 -Folder=gui -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit199] -FileName=lure.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit200] -FileName=queen.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit201] -FileName=saga.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit202] -FileName=scumm.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit203] -FileName=agos.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit204] -FileName=sky.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit205] -FileName=sword1.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit206] -FileName=sword2.dev -Folder=scummvm -Compile=0 -Link=0 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/sky.dev b/dists/devcpp/sky.dev deleted file mode 100644 index 570dfc2d64..0000000000 --- a/dists/devcpp/sky.dev +++ /dev/null @@ -1,479 +0,0 @@ -[Project] -FileName=sky.dev -Name=sky -UnitCount=43 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=sky -ObjectOutput=sky -OverrideOutput=0 -OverrideOutputName=sky.a -HostApplication= -Folders=music -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\sky\music\adlibchannel.cpp -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\sky\music\adlibchannel.h -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\sky\music\adlibmusic.cpp -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\sky\music\adlibmusic.h -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\sky\music\gmchannel.cpp -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\sky\music\gmchannel.h -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\sky\music\gmmusic.cpp -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\sky\music\gmmusic.h -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\sky\music\mt32music.cpp -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\sky\music\mt32music.h -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\sky\music\musicbase.cpp -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\sky\music\musicbase.h -CompileCpp=1 -Folder=music -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\sky\autoroute.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\sky\autoroute.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\sky\compact.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\sky\compact.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\sky\control.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\sky\control.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\sky\debug.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\sky\debug.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\sky\disk.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\sky\disk.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\sky\grid.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\sky\grid.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\sky\hufftext.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\sky\intro.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\sky\intro.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\sky\logic.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\sky\logic.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\sky\mouse.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\sky\mouse.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\sky\rnc_deco.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\sky\rnc_deco.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\sky\screen.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\sky\screen.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\sky\sky.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\sky\sky.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\sky\skydefs.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\sky\sound.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\engines\sky\sound.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit41] -FileName=..\..\engines\sky\struc.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit42] -FileName=..\..\engines\sky\text.cpp -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit43] -FileName=..\..\engines\sky\text.h -CompileCpp=1 -Folder=sky -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/sword1.dev b/dists/devcpp/sword1.dev deleted file mode 100644 index a695e46e46..0000000000 --- a/dists/devcpp/sword1.dev +++ /dev/null @@ -1,439 +0,0 @@ -[Project] -FileName=sword1.dev -Name=sword1 -UnitCount=39 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=sword1 -ObjectOutput=sword1 -OverrideOutput=0 -OverrideOutputName=sword1.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\sword1\animation.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\sword1\animation.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\sword1\collision.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\sword1\control.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\sword1\control.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\sword1\credits.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\sword1\credits.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\sword1\debug.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\sword1\debug.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\sword1\eventman.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\sword1\eventman.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\sword1\logic.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\sword1\logic.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\sword1\memman.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\sword1\memman.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\sword1\menu.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\sword1\menu.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\sword1\mouse.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\sword1\mouse.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\sword1\music.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\sword1\music.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\sword1\object.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\sword1\objectman.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\sword1\objectman.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\sword1\resman.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\sword1\resman.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\sword1\router.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\sword1\router.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\sword1\screen.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\sword1\screen.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\sword1\sound.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\sword1\sound.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\sword1\staticres.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\sword1\sword1.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\sword1\sword1.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\sword1\sworddefs.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\sword1\swordres.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\sword1\text.cpp -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\sword1\text.h -CompileCpp=1 -Folder=sword1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/devcpp/sword2.dev b/dists/devcpp/sword2.dev deleted file mode 100644 index f2df2a6bee..0000000000 --- a/dists/devcpp/sword2.dev +++ /dev/null @@ -1,569 +0,0 @@ -[Project] -FileName=sword2.dev -Name=sword2 -UnitCount=49 -Type=2 -Ver=1 -ObjFiles= -Includes=../..;../../engines -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler=-Wno-multichar_@@_ -Linker= -IsCpp=1 -Icon= -ExeOutput=sword2 -ObjectOutput=sword2 -OverrideOutput=0 -OverrideOutputName=sword2.a -HostApplication= -Folders= -CommandLine= -UseCustomMakefile=0 -CustomMakefile= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Developed using the Dev-C++ IDE -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - -[Unit1] -FileName=..\..\engines\sword2\animation.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit2] -FileName=..\..\engines\sword2\animation.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit3] -FileName=..\..\engines\sword2\anims.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit4] -FileName=..\..\engines\sword2\console.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit5] -FileName=..\..\engines\sword2\console.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit6] -FileName=..\..\engines\sword2\controls.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit7] -FileName=..\..\engines\sword2\controls.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit8] -FileName=..\..\engines\sword2\debug.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit9] -FileName=..\..\engines\sword2\debug.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit10] -FileName=..\..\engines\sword2\defs.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit11] -FileName=..\..\engines\sword2\events.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit12] -FileName=..\..\engines\sword2\function.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit13] -FileName=..\..\engines\sword2\header.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit14] -FileName=..\..\engines\sword2\icons.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit15] -FileName=..\..\engines\sword2\interpreter.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit16] -FileName=..\..\engines\sword2\interpreter.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit17] -FileName=..\..\engines\sword2\layers.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit18] -FileName=..\..\engines\sword2\logic.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit19] -FileName=..\..\engines\sword2\logic.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit20] -FileName=..\..\engines\sword2\maketext.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit21] -FileName=..\..\engines\sword2\maketext.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit22] -FileName=..\..\engines\sword2\memory.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit23] -FileName=..\..\engines\sword2\memory.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit24] -FileName=..\..\engines\sword2\menu.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit25] -FileName=..\..\engines\sword2\mouse.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit26] -FileName=..\..\engines\sword2\mouse.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit27] -FileName=..\..\engines\sword2\music.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit28] -FileName=..\..\engines\sword2\object.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit29] -FileName=..\..\engines\sword2\palette.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit30] -FileName=..\..\engines\sword2\protocol.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit31] -FileName=..\..\engines\sword2\render.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit32] -FileName=..\..\engines\sword2\resman.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit33] -FileName=..\..\engines\sword2\resman.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit34] -FileName=..\..\engines\sword2\router.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit35] -FileName=..\..\engines\sword2\router.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit36] -FileName=..\..\engines\sword2\saveload.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit37] -FileName=..\..\engines\sword2\saveload.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit38] -FileName=..\..\engines\sword2\screen.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit39] -FileName=..\..\engines\sword2\screen.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit40] -FileName=..\..\engines\sword2\scroll.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit41] -FileName=..\..\engines\sword2\sound.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit42] -FileName=..\..\engines\sword2\sound.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit43] -FileName=..\..\engines\sword2\speech.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit44] -FileName=..\..\engines\sword2\sprite.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit45] -FileName=..\..\engines\sword2\startup.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit46] -FileName=..\..\engines\sword2\sword2.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit47] -FileName=..\..\engines\sword2\sword2.h -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit48] -FileName=..\..\engines\sword2\sync.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit49] -FileName=..\..\engines\sword2\walker.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit50] -FileName=..\..\engines\sword2\sync.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit51] -FileName=..\..\engines\sword2\walker.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[Unit52] -FileName=..\..\engines\sword2\walker.cpp -CompileCpp=1 -Folder=sword2 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat Binary files differindex ff21159362..d8cb28076a 100644 --- a/dists/engine-data/kyra.dat +++ b/dists/engine-data/kyra.dat diff --git a/dists/wii/meta.xml b/dists/wii/meta.xml index 7d1e94aca2..8659263076 100644 --- a/dists/wii/meta.xml +++ b/dists/wii/meta.xml @@ -8,5 +8,6 @@ <long_description>ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed! Some of the adventures ScummVM supports include Adventure Soft's Simon the Sorcerer 1 and 2; Revolution's Beneath A Steel Sky and Broken Sword I & II; Flight of the Amazon Queen; Wyrmkeep's Inherit the Earth; Coktel Vision's Gobliiins; Westwood Studios' The Legend of Kyrandia and games based on LucasArts' SCUMM (Script Creation Utility for Maniac Mansion) system such as Monkey Island, Day of the Tentacle, Sam and Max and more.</long_description> + <no_ios_reload/> </app> diff --git a/engines/cine/anim.cpp b/engines/cine/anim.cpp index 5ddc5d625f..747c9221ee 100644 --- a/engines/cine/anim.cpp +++ b/engines/cine/anim.cpp @@ -49,8 +49,6 @@ struct AnimHeader2Struct { uint16 field_E; }; -Common::Array<AnimData> animDataTable; - static const AnimDataEntry transparencyData[] = { {"ALPHA", 0xF}, {"TITRE2", 0xF}, @@ -400,7 +398,7 @@ void AnimData::save(Common::OutSaveFile &fHandle) const { */ void freeAnimDataRange(byte startIdx, byte numIdx) { for (byte i = 0; i < numIdx; i++) { - animDataTable[startIdx + i].clear(); + g_cine->_animDataTable[startIdx + i].clear(); } } @@ -514,7 +512,7 @@ void loadAnimHeader(AnimHeaderStruct &animHeader, Common::MemoryReadStream readS */ int emptyAnimSpace(int start = 0) { for (; start < NUM_MAX_ANIMDATA; start++) { - if (!animDataTable[start].data()) { + if (!g_cine->_animDataTable[start].data()) { return start; } } @@ -540,7 +538,7 @@ int loadSpl(const char *resourceName, int16 idx) { entry = idx < 0 ? emptyAnimSpace() : idx; assert(entry >= 0); - animDataTable[entry].load(dataPtr, ANIM_RAW, partBuffer[foundFileIdx].unpackedSize, 1, foundFileIdx, 0, currentPartName); + g_cine->_animDataTable[entry].load(dataPtr, ANIM_RAW, g_cine->_partBuffer[foundFileIdx].unpackedSize, 1, foundFileIdx, 0, currentPartName); free(dataPtr); return entry + 1; @@ -570,7 +568,7 @@ int loadMsk(const char *resourceName, int16 idx) { entry = idx < 0 ? emptyAnimSpace() : idx; assert(entry >= 0); for (int16 i = 0; i < animHeader.numFrames; i++, entry++) { - animDataTable[entry].load(ptr, ANIM_MASK, animHeader.frameWidth, animHeader.frameHeight, foundFileIdx, i, currentPartName); + g_cine->_animDataTable[entry].load(ptr, ANIM_MASK, animHeader.frameWidth, animHeader.frameHeight, foundFileIdx, i, currentPartName); ptr += animHeader.frameWidth * animHeader.frameHeight; } @@ -621,7 +619,7 @@ int loadAni(const char *resourceName, int16 idx) { transparentColor = i < 1 ? 0xE : 0; } - animDataTable[entry].load(ptr, ANIM_MASKSPRITE, animHeader.frameWidth, animHeader.frameHeight, foundFileIdx, i, currentPartName, transparentColor); + g_cine->_animDataTable[entry].load(ptr, ANIM_MASKSPRITE, animHeader.frameWidth, animHeader.frameHeight, foundFileIdx, i, currentPartName, transparentColor); ptr += animHeader.frameWidth * animHeader.frameHeight; } @@ -737,7 +735,7 @@ int loadSet(const char *resourceName, int16 idx) { type = ANIM_FULLSPRITE; } - animDataTable[entry].load(dataPtr, type, header2.width, header2.height, foundFileIdx, i, currentPartName); + g_cine->_animDataTable[entry].load(dataPtr, type, header2.width, header2.height, foundFileIdx, i, currentPartName); } free(origDataPtr); @@ -759,7 +757,7 @@ int loadSeq(const char *resourceName, int16 idx) { byte *dataPtr = readBundleFile(foundFileIdx); int entry = idx < 0 ? emptyAnimSpace() : idx; - animDataTable[entry].load(dataPtr+0x16, ANIM_RAW, partBuffer[foundFileIdx].unpackedSize-0x16, 1, foundFileIdx, 0, currentPartName); + g_cine->_animDataTable[entry].load(dataPtr+0x16, ANIM_RAW, g_cine->_partBuffer[foundFileIdx].unpackedSize-0x16, 1, foundFileIdx, 0, currentPartName); free(dataPtr); return entry + 1; } diff --git a/engines/cine/anim.h b/engines/cine/anim.h index e67237aac0..2012ef875e 100644 --- a/engines/cine/anim.h +++ b/engines/cine/anim.h @@ -99,8 +99,6 @@ public: #define NUM_MAX_ANIMDATA 255 -extern Common::Array<AnimData> animDataTable; - void freeAnimDataTable(); void freeAnimDataRange(byte startIdx, byte numIdx); int loadResource(const char *resourceName, int16 idx = -1); diff --git a/engines/cine/bg_list.cpp b/engines/cine/bg_list.cpp index 26351becf1..3ecda4125d 100644 --- a/engines/cine/bg_list.cpp +++ b/engines/cine/bg_list.cpp @@ -36,14 +36,13 @@ namespace Cine { uint32 var8; -Common::List<BGIncrust> bgIncrustList; /** * Add masked sprite to the background * @param objIdx Sprite description */ void addToBGList(int16 objIdx) { - renderer->incrustSprite(objectTable[objIdx]); + renderer->incrustSprite(g_cine->_objectTable[objIdx]); createBgIncrustListElement(objIdx, 0); } @@ -53,7 +52,7 @@ void addToBGList(int16 objIdx) { * @param objIdx Sprite description */ void addSpriteFilledToBGList(int16 objIdx) { - renderer->incrustMask(objectTable[objIdx]); + renderer->incrustMask(g_cine->_objectTable[objIdx]); createBgIncrustListElement(objIdx, 1); } @@ -69,12 +68,12 @@ void createBgIncrustListElement(int16 objIdx, int16 param) { tmp.unkPtr = 0; tmp.objIdx = objIdx; tmp.param = param; - tmp.x = objectTable[objIdx].x; - tmp.y = objectTable[objIdx].y; - tmp.frame = objectTable[objIdx].frame; - tmp.part = objectTable[objIdx].part; + tmp.x = g_cine->_objectTable[objIdx].x; + tmp.y = g_cine->_objectTable[objIdx].y; + tmp.frame = g_cine->_objectTable[objIdx].frame; + tmp.part = g_cine->_objectTable[objIdx].part; - bgIncrustList.push_back(tmp); + g_cine->_bgIncrustList.push_back(tmp); } /** @@ -104,12 +103,12 @@ void loadBgIncrustFromSave(Common::SeekableReadStream &fHandle) { tmp.frame = fHandle.readUint16BE(); tmp.part = fHandle.readUint16BE(); - bgIncrustList.push_back(tmp); + g_cine->_bgIncrustList.push_back(tmp); if (tmp.param == 0) { - renderer->incrustSprite(objectTable[tmp.objIdx]); + renderer->incrustSprite(g_cine->_objectTable[tmp.objIdx]); } else { - renderer->incrustMask(objectTable[tmp.objIdx]); + renderer->incrustMask(g_cine->_objectTable[tmp.objIdx]); } } } diff --git a/engines/cine/bg_list.h b/engines/cine/bg_list.h index 409b16dbd5..8c1b3cb6ec 100644 --- a/engines/cine/bg_list.h +++ b/engines/cine/bg_list.h @@ -42,7 +42,6 @@ struct BGIncrust { int16 part; }; -extern Common::List<BGIncrust> bgIncrustList; extern uint32 var8; void addToBGList(int16 objIdx); diff --git a/engines/cine/cine.cpp b/engines/cine/cine.cpp index e6ac2859cf..5c2119c1e4 100644 --- a/engines/cine/cine.cpp +++ b/engines/cine/cine.cpp @@ -123,24 +123,26 @@ int CineEngine::modifyGameSpeed(int speedChange) { } void CineEngine::initialize() { + _globalVars.reinit(NUM_MAX_VAR + 1); + // Initialize all savegames' descriptions to empty strings memset(currentSaveName, 0, sizeof(currentSaveName)); // Resize object table to its correct size and reset all its elements - objectTable.resize(NUM_MAX_OBJECT); + g_cine->_objectTable.resize(NUM_MAX_OBJECT); resetObjectTable(); // Resize animation data table to its correct size and reset all its elements - animDataTable.resize(NUM_MAX_ANIMDATA); + g_cine->_animDataTable.resize(NUM_MAX_ANIMDATA); freeAnimDataTable(); // Resize zone data table to its correct size and reset all its elements - zoneData.resize(NUM_MAX_ZONE); - Common::set_to(zoneData.begin(), zoneData.end(), 0); + g_cine->_zoneData.resize(NUM_MAX_ZONE); + Common::set_to(g_cine->_zoneData.begin(), g_cine->_zoneData.end(), 0); // Resize zone query table to its correct size and reset all its elements - zoneQuery.resize(NUM_MAX_ZONE); - Common::set_to(zoneQuery.begin(), zoneQuery.end(), 0); + g_cine->_zoneQuery.resize(NUM_MAX_ZONE); + Common::set_to(g_cine->_zoneQuery.begin(), g_cine->_zoneQuery.end(), 0); _timerDelayMultiplier = 12; // Set default speed setupOpcodes(); @@ -159,7 +161,7 @@ void CineEngine::initialize() { // Clear part buffer as there's nothing loaded into it yet. // Its size will change when loading data into it with the loadPart function. - partBuffer.clear(); + g_cine->_partBuffer.clear(); if (getGameType() == Cine::GType_OS) { readVolCnf(); @@ -173,14 +175,14 @@ void CineEngine::initialize() { } // in case ScummVM engines can be restarted in the future - scriptTable.clear(); - relTable.clear(); - objectScripts.clear(); - globalScripts.clear(); - bgIncrustList.clear(); + g_cine->_scriptTable.clear(); + g_cine->_relTable.clear(); + g_cine->_objectScripts.clear(); + g_cine->_globalScripts.clear(); + g_cine->_bgIncrustList.clear(); freeAnimDataTable(); - overlayList.clear(); - messageTable.clear(); + g_cine->_overlayList.clear(); + g_cine->_messageTable.clear(); resetObjectTable(); var8 = 0; diff --git a/engines/cine/cine.h b/engines/cine/cine.h index 6f2c2243e2..114d98d442 100644 --- a/engines/cine/cine.h +++ b/engines/cine/cine.h @@ -47,6 +47,8 @@ #include "cine/pal.h" #include "cine/gfx.h" #include "cine/anim.h" +#include "cine/bg_list.h" +#include "cine/various.h" //#define DUMP_SCRIPTS @@ -93,6 +95,7 @@ enum CineGameFeatures { }; struct CINEGameDescription; +struct SeqListElement; typedef Common::HashMap<Common::String, const char *> StringPtrHashMap; @@ -150,6 +153,36 @@ private: bool _preLoad; int _timerDelayMultiplier; + + public: + // TODO: These are pseudo-global vars + // They better belong to appropriate classes + Common::Array<AnimData> _animDataTable; + Common::List<BGIncrust> _bgIncrustList; + Common::StringArray _messageTable; + Common::Array<ObjectStruct> _objectTable; + Common::List<overlay> _overlayList; + Common::Array<PalEntry> _palArray; + Common::Array<PartBuffer> _partBuffer; + ScriptList _globalScripts; + ScriptList _objectScripts; + RawObjectScriptArray _relTable; ///< Object script bytecode table + + /** + * Global variables. + * 255 of these are saved, but there's one more that's used for bypassing the copy protection. + * In CineEngine::mainLoop(int bootScriptIdx) there's this code: globalVars[VAR_BYPASS_PROTECTION] = 0; + * And as VAR_BYPASS_PROTECTION is 255 that's why we're allocating one more than we otherwise would. + */ + ScriptVars _globalVars; + RawScriptArray _scriptTable; ///< Table of script bytecode + + Common::Array<uint16> _zoneData; + Common::Array<uint16> _zoneQuery; ///< Only exists in Operation Stealth + + Common::List<SeqListElement> _seqList; + + Common::String _commandBuffer; }; extern CineEngine *g_cine; diff --git a/engines/cine/gfx.cpp b/engines/cine/gfx.cpp index 1f747c5a01..4d61be102b 100644 --- a/engines/cine/gfx.cpp +++ b/engines/cine/gfx.cpp @@ -160,13 +160,13 @@ void FWRenderer::clear() { * @param fillColor Sprite color */ void FWRenderer::fillSprite(const ObjectStruct &obj, uint8 color) { - const byte *data = animDataTable[obj.frame].data(); + const byte *data = g_cine->_animDataTable[obj.frame].data(); int x, y, width, height; x = obj.x; y = obj.y; - width = animDataTable[obj.frame]._realWidth; - height = animDataTable[obj.frame]._height; + width = g_cine->_animDataTable[obj.frame]._realWidth; + height = g_cine->_animDataTable[obj.frame]._height; gfxFillSprite(data, width, height, _backBuffer, x, y, color); } @@ -177,13 +177,13 @@ void FWRenderer::fillSprite(const ObjectStruct &obj, uint8 color) { * @param fillColor Sprite color */ void FWRenderer::incrustMask(const ObjectStruct &obj, uint8 color) { - const byte *data = animDataTable[obj.frame].data(); + const byte *data = g_cine->_animDataTable[obj.frame].data(); int x, y, width, height; x = obj.x; y = obj.y; - width = animDataTable[obj.frame]._realWidth; - height = animDataTable[obj.frame]._height; + width = g_cine->_animDataTable[obj.frame]._realWidth; + height = g_cine->_animDataTable[obj.frame]._height; gfxFillSprite(data, width, height, _background, x, y, color); } @@ -194,13 +194,13 @@ void FWRenderer::incrustMask(const ObjectStruct &obj, uint8 color) { * @param mask External mask */ void FWRenderer::drawMaskedSprite(const ObjectStruct &obj, const byte *mask) { - const byte *data = animDataTable[obj.frame].data(); + const byte *data = g_cine->_animDataTable[obj.frame].data(); int x, y, width, height; x = obj.x; y = obj.y; - width = animDataTable[obj.frame]._realWidth; - height = animDataTable[obj.frame]._height; + width = g_cine->_animDataTable[obj.frame]._realWidth; + height = g_cine->_animDataTable[obj.frame]._height; assert(mask); @@ -212,7 +212,7 @@ void FWRenderer::drawMaskedSprite(const ObjectStruct &obj, const byte *mask) { * @param obj Object info */ void FWRenderer::drawSprite(const ObjectStruct &obj) { - const byte *mask = animDataTable[obj.frame].mask(); + const byte *mask = g_cine->_animDataTable[obj.frame].mask(); drawMaskedSprite(obj, mask); } @@ -221,14 +221,14 @@ void FWRenderer::drawSprite(const ObjectStruct &obj) { * @param obj Object info */ void FWRenderer::incrustSprite(const ObjectStruct &obj) { - const byte *data = animDataTable[obj.frame].data(); - const byte *mask = animDataTable[obj.frame].mask(); + const byte *data = g_cine->_animDataTable[obj.frame].data(); + const byte *mask = g_cine->_animDataTable[obj.frame].mask(); int x, y, width, height; x = obj.x; y = obj.y; - width = animDataTable[obj.frame]._realWidth; - height = animDataTable[obj.frame]._height; + width = g_cine->_animDataTable[obj.frame]._realWidth; + height = g_cine->_animDataTable[obj.frame]._height; // There was an assert(mask) here before but it made savegame loading // in Future Wars sometimes fail the assertion (e.g. see bug #2055912). @@ -502,27 +502,27 @@ void FWRenderer::drawLine(int x, int y, int width, int height, byte color) { * @param it Overlay info from overlayList */ void FWRenderer::remaskSprite(byte *mask, Common::List<overlay>::iterator it) { - AnimData &sprite = animDataTable[objectTable[it->objIdx].frame]; + AnimData &sprite = g_cine->_animDataTable[g_cine->_objectTable[it->objIdx].frame]; int x, y, width, height, idx; int mx, my, mw, mh; - x = objectTable[it->objIdx].x; - y = objectTable[it->objIdx].y; + x = g_cine->_objectTable[it->objIdx].x; + y = g_cine->_objectTable[it->objIdx].y; width = sprite._realWidth; height = sprite._height; - for (++it; it != overlayList.end(); ++it) { + for (++it; it != g_cine->_overlayList.end(); ++it) { if (it->type != 5) { continue; } - idx = ABS(objectTable[it->objIdx].frame); - mx = objectTable[it->objIdx].x; - my = objectTable[it->objIdx].y; - mw = animDataTable[idx]._realWidth; - mh = animDataTable[idx]._height; + idx = ABS(g_cine->_objectTable[it->objIdx].frame); + mx = g_cine->_objectTable[it->objIdx].x; + my = g_cine->_objectTable[it->objIdx].y; + mw = g_cine->_animDataTable[idx]._realWidth; + mh = g_cine->_animDataTable[idx]._height; - gfxUpdateSpriteMask(mask, x, y, width, height, animDataTable[idx].data(), mx, my, mw, mh); + gfxUpdateSpriteMask(mask, x, y, width, height, g_cine->_animDataTable[idx].data(), mx, my, mw, mh); } } @@ -547,26 +547,26 @@ void FWRenderer::renderOverlay(const Common::List<overlay>::iterator &it) { switch (it->type) { // color sprite case 0: - if (objectTable[it->objIdx].frame < 0) { + if (g_cine->_objectTable[it->objIdx].frame < 0) { return; } - sprite = &animDataTable[objectTable[it->objIdx].frame]; + sprite = &g_cine->_animDataTable[g_cine->_objectTable[it->objIdx].frame]; len = sprite->_realWidth * sprite->_height; mask = new byte[len]; memcpy(mask, sprite->mask(), len); remaskSprite(mask, it); - drawMaskedSprite(objectTable[it->objIdx], mask); + drawMaskedSprite(g_cine->_objectTable[it->objIdx], mask); delete[] mask; break; // game message case 2: - if (it->objIdx >= messageTable.size()) { + if (it->objIdx >= g_cine->_messageTable.size()) { return; } - _messageLen += messageTable[it->objIdx].size(); - drawMessage(messageTable[it->objIdx].c_str(), it->x, it->y, it->width, it->color); + _messageLen += g_cine->_messageTable[it->objIdx].size(); + drawMessage(g_cine->_messageTable[it->objIdx].c_str(), it->x, it->y, it->width, it->color); waitForPlayerClick = 1; break; @@ -585,13 +585,13 @@ void FWRenderer::renderOverlay(const Common::List<overlay>::iterator &it) { // bitmap case 4: assert(it->objIdx < NUM_MAX_OBJECT); - obj = &objectTable[it->objIdx]; + obj = &g_cine->_objectTable[it->objIdx]; if (obj->frame < 0) { return; } - if (!animDataTable[obj->frame].data()) { + if (!g_cine->_animDataTable[obj->frame].data()) { return; } @@ -606,7 +606,7 @@ void FWRenderer::renderOverlay(const Common::List<overlay>::iterator &it) { void FWRenderer::drawOverlays() { Common::List<overlay>::iterator it; - for (it = overlayList.begin(); it != overlayList.end(); ++it) { + for (it = g_cine->_overlayList.begin(); it != g_cine->_overlayList.end(); ++it) { renderOverlay(it); } } @@ -1122,13 +1122,13 @@ void OSRenderer::clear() { * @param fillColor Sprite color */ void OSRenderer::incrustMask(const ObjectStruct &obj, uint8 color) { - const byte *data = animDataTable[obj.frame].data(); + const byte *data = g_cine->_animDataTable[obj.frame].data(); int x, y, width, height; x = obj.x; y = obj.y; - width = animDataTable[obj.frame]._realWidth; - height = animDataTable[obj.frame]._height; + width = g_cine->_animDataTable[obj.frame]._realWidth; + height = g_cine->_animDataTable[obj.frame]._height; if (_bgTable[_currentBg].bg) { gfxFillSprite(data, width, height, _bgTable[_currentBg].bg, x, y, color); @@ -1140,14 +1140,14 @@ void OSRenderer::incrustMask(const ObjectStruct &obj, uint8 color) { * @param obj Object info */ void OSRenderer::drawSprite(const ObjectStruct &obj) { - const byte *data = animDataTable[obj.frame].data(); + const byte *data = g_cine->_animDataTable[obj.frame].data(); int x, y, width, height, transColor; x = obj.x; y = obj.y; transColor = obj.part; - width = animDataTable[obj.frame]._realWidth; - height = animDataTable[obj.frame]._height; + width = g_cine->_animDataTable[obj.frame]._realWidth; + height = g_cine->_animDataTable[obj.frame]._height; drawSpriteRaw2(data, transColor, width, height, _backBuffer, x, y); } @@ -1157,14 +1157,14 @@ void OSRenderer::drawSprite(const ObjectStruct &obj) { * @param obj Object info */ void OSRenderer::incrustSprite(const ObjectStruct &obj) { - const byte *data = animDataTable[obj.frame].data(); + const byte *data = g_cine->_animDataTable[obj.frame].data(); int x, y, width, height, transColor; x = obj.x; y = obj.y; transColor = obj.part; - width = animDataTable[obj.frame]._realWidth; - height = animDataTable[obj.frame]._height; + width = g_cine->_animDataTable[obj.frame]._realWidth; + height = g_cine->_animDataTable[obj.frame]._height; if (_bgTable[_currentBg].bg) { drawSpriteRaw2(data, transColor, width, height, _bgTable[_currentBg].bg, x, y); @@ -1233,26 +1233,26 @@ void OSRenderer::renderOverlay(const Common::List<overlay>::iterator &it) { switch (it->type) { // color sprite case 0: - if (objectTable[it->objIdx].frame < 0) { + if (g_cine->_objectTable[it->objIdx].frame < 0) { break; } - sprite = &animDataTable[objectTable[it->objIdx].frame]; + sprite = &g_cine->_animDataTable[g_cine->_objectTable[it->objIdx].frame]; len = sprite->_realWidth * sprite->_height; mask = new byte[len]; - generateMask(sprite->data(), mask, len, objectTable[it->objIdx].part); + generateMask(sprite->data(), mask, len, g_cine->_objectTable[it->objIdx].part); remaskSprite(mask, it); - drawMaskedSprite(objectTable[it->objIdx], mask); + drawMaskedSprite(g_cine->_objectTable[it->objIdx], mask); delete[] mask; break; // game message case 2: - if (it->objIdx >= messageTable.size()) { + if (it->objIdx >= g_cine->_messageTable.size()) { return; } - _messageLen += messageTable[it->objIdx].size(); - drawMessage(messageTable[it->objIdx].c_str(), it->x, it->y, it->width, it->color); + _messageLen += g_cine->_messageTable[it->objIdx].size(); + drawMessage(g_cine->_messageTable[it->objIdx].c_str(), it->x, it->y, it->width, it->color); if (it->color >= 0) { // This test isn't in Future Wars's implementation waitForPlayerClick = 1; } @@ -1273,7 +1273,7 @@ void OSRenderer::renderOverlay(const Common::List<overlay>::iterator &it) { // bitmap case 4: - if (objectTable[it->objIdx].frame >= 0) { + if (g_cine->_objectTable[it->objIdx].frame >= 0) { FWRenderer::renderOverlay(it); } break; @@ -1282,8 +1282,8 @@ void OSRenderer::renderOverlay(const Common::List<overlay>::iterator &it) { case 20: assert(it->objIdx < NUM_MAX_OBJECT); var5 = it->x; // A global variable updated here! - obj = &objectTable[it->objIdx]; - sprite = &animDataTable[obj->frame]; + obj = &g_cine->_objectTable[it->objIdx]; + sprite = &g_cine->_animDataTable[obj->frame]; if (obj->frame < 0 || it->x < 0 || it->x > 8 || !_bgTable[it->x].bg || sprite->_bpp != 1) { break; @@ -1303,7 +1303,7 @@ void OSRenderer::renderOverlay(const Common::List<overlay>::iterator &it) { case 22: // TODO: Check it this implementation really works correctly (Some things might be wrong, needs testing). assert(it->objIdx < NUM_MAX_OBJECT); - obj = &objectTable[it->objIdx]; + obj = &g_cine->_objectTable[it->objIdx]; color = obj->part & 0x0F; width = obj->frame; height = obj->costume; @@ -1797,17 +1797,17 @@ void maskBgOverlay(const byte *bgPtr, const byte *maskPtr, int16 width, int16 he maskPtr = backup; // incrust pass - for (it = bgIncrustList.begin(); it != bgIncrustList.end(); ++it) { - tmpWidth = animDataTable[it->frame]._realWidth; - tmpHeight = animDataTable[it->frame]._height; + for (it = g_cine->_bgIncrustList.begin(); it != g_cine->_bgIncrustList.end(); ++it) { + tmpWidth = g_cine->_animDataTable[it->frame]._realWidth; + tmpHeight = g_cine->_animDataTable[it->frame]._height; mask = (byte*)malloc(tmpWidth * tmpHeight); if (it->param == 0) { - generateMask(animDataTable[it->frame].data(), mask, tmpWidth * tmpHeight, it->part); + generateMask(g_cine->_animDataTable[it->frame].data(), mask, tmpWidth * tmpHeight, it->part); gfxUpdateIncrustMask(mask, it->x, it->y, tmpWidth, tmpHeight, maskPtr, x, y, width, height); - gfxDrawMaskedSprite(animDataTable[it->frame].data(), mask, tmpWidth, tmpHeight, page, it->x, it->y); + gfxDrawMaskedSprite(g_cine->_animDataTable[it->frame].data(), mask, tmpWidth, tmpHeight, page, it->x, it->y); } else { - memcpy(mask, animDataTable[it->frame].data(), tmpWidth * tmpHeight); + memcpy(mask, g_cine->_animDataTable[it->frame].data(), tmpWidth * tmpHeight); gfxUpdateIncrustMask(mask, it->x, it->y, tmpWidth, tmpHeight, maskPtr, x, y, width, height); gfxFillSprite(mask, tmpWidth, tmpHeight, page, it->x, it->y); } diff --git a/engines/cine/main_loop.cpp b/engines/cine/main_loop.cpp index 414aed394c..3d280c20ef 100644 --- a/engines/cine/main_loop.cpp +++ b/engines/cine/main_loop.cpp @@ -241,11 +241,11 @@ int getKeyData() { /** Removes elements from seqList that have their member variable var4 set to value -1. */ void purgeSeqList() { - Common::List<SeqListElement>::iterator it = seqList.begin(); - while (it != seqList.end()) { + Common::List<SeqListElement>::iterator it = g_cine->_seqList.begin(); + while (it != g_cine->_seqList.end()) { if (it->var4 == -1) { // Erase the element and jump to the next element - it = seqList.erase(it); + it = g_cine->_seqList.erase(it); } else { // Let the element be and jump to the next element it++; @@ -283,15 +283,15 @@ void CineEngine::mainLoop(int bootScriptIdx) { menuCommandLen = 0; playerCommand = -1; - commandBuffer = ""; + g_cine->_commandBuffer = ""; - globalVars[VAR_MOUSE_X_POS] = 0; - globalVars[VAR_MOUSE_Y_POS] = 0; + g_cine->_globalVars[VAR_MOUSE_X_POS] = 0; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = 0; if (g_cine->getGameType() == Cine::GType_OS) { - globalVars[VAR_MOUSE_X_POS_2ND] = 0; - globalVars[VAR_MOUSE_Y_POS_2ND] = 0; - globalVars[VAR_BYPASS_PROTECTION] = 0; // set to 1 to bypass the copy protection - globalVars[VAR_LOW_MEMORY] = 0; // set to 1 to disable some animations, sounds etc. + g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = 0; + g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = 0; + g_cine->_globalVars[VAR_BYPASS_PROTECTION] = 0; // set to 1 to bypass the copy protection + g_cine->_globalVars[VAR_LOW_MEMORY] = 0; // set to 1 to disable some animations, sounds etc. } strcpy(newPrcName, ""); @@ -315,7 +315,7 @@ void CineEngine::mainLoop(int bootScriptIdx) { if (bgName == "28.PI1" || bgName == "29.PI1" || bgName == "30.PI1") { static const uint oxygenObjNum = 202, maxOxygen = 264; // Force the amount of oxygen left to the maximum. - objectTable[oxygenObjNum].x = maxOxygen; + g_cine->_objectTable[oxygenObjNum].x = maxOxygen; } } @@ -332,8 +332,8 @@ void CineEngine::mainLoop(int bootScriptIdx) { // flower shop scene is AIRPORT.PRC's 13th script. // FIXME: Remove the hack and solve what's really causing the problem in the first place. if (g_cine->getGameType() == Cine::GType_OS) { - if (scumm_stricmp(renderer->getBgName(), "21.PI1") == 0 && objectTable[1].x == 204 && objectTable[1].y == 110) { - objectTable[1].y--; // Move the player character upward on-screen by one pixel + if (scumm_stricmp(renderer->getBgName(), "21.PI1") == 0 && g_cine->_objectTable[1].x == 204 && g_cine->_objectTable[1].y == 110) { + g_cine->_objectTable[1].y--; // Move the player character upward on-screen by one pixel } } @@ -342,7 +342,7 @@ void CineEngine::mainLoop(int bootScriptIdx) { // Clear the zoneQuery table (Operation Stealth specific) if (g_cine->getGameType() == Cine::GType_OS) { - Common::set_to(zoneQuery.begin(), zoneQuery.end(), 0); + Common::set_to(g_cine->_zoneQuery.begin(), g_cine->_zoneQuery.end(), 0); } if (g_cine->getGameType() == Cine::GType_OS) { diff --git a/engines/cine/msg.cpp b/engines/cine/msg.cpp index 45f81f7d05..a01afd147b 100644 --- a/engines/cine/msg.cpp +++ b/engines/cine/msg.cpp @@ -31,15 +31,11 @@ namespace Cine { -// FIXME: Global C++ objects affect portability negatively. -// Turn this into a class member instead. -Common::StringArray messageTable; - void loadMsg(char *pMsgName) { uint32 sourceSize; checkDataDisk(-1); - messageTable.clear(); + g_cine->_messageTable.clear(); byte *dataPtr = readBundleFile(findFileInBundle(pMsgName), &sourceSize); setMouseCursor(MOUSE_CURSOR_DISK); @@ -58,7 +54,7 @@ void loadMsg(char *pMsgName) { // This code works around input data that has empty strings residing outside the input // buffer (e.g. message indexes 58-254 in BATEAU.MSG in PROCS08 in Operation Stealth). if (messageDataPos < sourceSize) { - messageTable.push_back((const char *)(dataPtr + messageDataPos)); + g_cine->_messageTable.push_back((const char *)(dataPtr + messageDataPos)); } else { if (messageLen > 0) { // Only warn about overflowing non-empty strings warning("loadMsg(%s): message (%d. / %d) is overflowing the input buffer. Replacing it with an empty string", pMsgName, i + 1, count); @@ -66,7 +62,7 @@ void loadMsg(char *pMsgName) { debugC(5, kCineDebugPart, "loadMsg(%s): empty message (%d. / %d) resides outside input buffer", pMsgName, i + 1, count); } // Message resides outside the input buffer so we replace it with an empty string - messageTable.push_back(""); + g_cine->_messageTable.push_back(""); } // Jump to the next message messageDataPos += messageLen; diff --git a/engines/cine/msg.h b/engines/cine/msg.h index cf51cdb48f..fbf99d4b44 100644 --- a/engines/cine/msg.h +++ b/engines/cine/msg.h @@ -32,8 +32,6 @@ namespace Cine { #define NUM_MAX_MESSAGE 255 -extern Common::StringArray messageTable; - void loadMsg(char *pMsgName); } // End of namespace Cine diff --git a/engines/cine/object.cpp b/engines/cine/object.cpp index 116b57c267..82dc0a6ef1 100644 --- a/engines/cine/object.cpp +++ b/engines/cine/object.cpp @@ -35,12 +35,9 @@ namespace Cine { -Common::Array<ObjectStruct> objectTable; -Common::List<overlay> overlayList; - /** Resets all elements in the object table. */ void resetObjectTable() { - for (Common::Array<ObjectStruct>::iterator it = objectTable.begin(); it != objectTable.end(); ++it) { + for (Common::Array<ObjectStruct>::iterator it = g_cine->_objectTable.begin(); it != g_cine->_objectTable.end(); ++it) { it->clear(); } } @@ -64,23 +61,23 @@ void loadObject(char *pObjectName) { assert(numEntry <= NUM_MAX_OBJECT); for (i = 0; i < numEntry; i++) { - if (objectTable[i].costume != -2) { // flag is keep ? + if (g_cine->_objectTable[i].costume != -2) { // flag is keep ? Common::MemoryReadStream readS(ptr, entrySize); - objectTable[i].x = readS.readSint16BE(); - objectTable[i].y = readS.readSint16BE(); - objectTable[i].mask = readS.readUint16BE(); - objectTable[i].frame = readS.readSint16BE(); - objectTable[i].costume = readS.readSint16BE(); - readS.read(objectTable[i].name, 20); - objectTable[i].part = readS.readUint16BE(); + g_cine->_objectTable[i].x = readS.readSint16BE(); + g_cine->_objectTable[i].y = readS.readSint16BE(); + g_cine->_objectTable[i].mask = readS.readUint16BE(); + g_cine->_objectTable[i].frame = readS.readSint16BE(); + g_cine->_objectTable[i].costume = readS.readSint16BE(); + readS.read(g_cine->_objectTable[i].name, 20); + g_cine->_objectTable[i].part = readS.readUint16BE(); } ptr += entrySize; } if (!strcmp(pObjectName, "INTRO.OBJ")) { for (i = 0; i < 10; i++) { - objectTable[i].costume = 0; + g_cine->_objectTable[i].costume = 0; } } @@ -95,9 +92,9 @@ void loadObject(char *pObjectName) { int removeOverlay(uint16 objIdx, uint16 param) { Common::List<overlay>::iterator it; - for (it = overlayList.begin(); it != overlayList.end(); ++it) { + for (it = g_cine->_overlayList.begin(); it != g_cine->_overlayList.end(); ++it) { if (it->objIdx == objIdx && it->type == param) { - overlayList.erase(it); + g_cine->_overlayList.erase(it); return 1; } } @@ -115,9 +112,9 @@ void addOverlay(uint16 objIdx, uint16 type) { Common::List<overlay>::iterator it; overlay tmp; - for (it = overlayList.begin(); it != overlayList.end(); ++it) { + for (it = g_cine->_overlayList.begin(); it != g_cine->_overlayList.end(); ++it) { // This is done for both Future Wars and Operation Stealth - if (objectTable[it->objIdx].mask >= objectTable[objIdx].mask) { + if (g_cine->_objectTable[it->objIdx].mask >= g_cine->_objectTable[objIdx].mask) { break; } @@ -128,7 +125,7 @@ void addOverlay(uint16 objIdx, uint16 type) { } // In Operation Stealth's implementation we might bail out early - if (g_cine->getGameType() == Cine::GType_OS && it != overlayList.end() && it->objIdx == objIdx && it->type == type) { + if (g_cine->getGameType() == Cine::GType_OS && it != g_cine->_overlayList.end() && it->objIdx == objIdx && it->type == type) { return; } @@ -139,7 +136,7 @@ void addOverlay(uint16 objIdx, uint16 type) { tmp.width = 0; tmp.color = 0; - overlayList.insert(it, tmp); + g_cine->_overlayList.insert(it, tmp); } /** @@ -151,13 +148,13 @@ void addGfxElement(int16 objIdx, int16 param, int16 type) { Common::List<overlay>::iterator it; overlay tmp; - for (it = overlayList.begin(); it != overlayList.end(); ++it) { - if (objectTable[it->objIdx].mask >= objectTable[objIdx].mask || it->type == 2 || it->type == 3) { + for (it = g_cine->_overlayList.begin(); it != g_cine->_overlayList.end(); ++it) { + if (g_cine->_objectTable[it->objIdx].mask >= g_cine->_objectTable[objIdx].mask || it->type == 2 || it->type == 3) { break; } } - if (it != overlayList.end() && it->objIdx == objIdx && it->type == type && it->x == param) { + if (it != g_cine->_overlayList.end() && it->objIdx == objIdx && it->type == type && it->x == param) { return; } @@ -168,7 +165,7 @@ void addGfxElement(int16 objIdx, int16 param, int16 type) { tmp.width = 0; tmp.color = 0; - overlayList.insert(it, tmp); + g_cine->_overlayList.insert(it, tmp); } /** @@ -180,19 +177,19 @@ void addGfxElement(int16 objIdx, int16 param, int16 type) { void removeGfxElement(int16 objIdx, int16 param, int16 type) { Common::List<overlay>::iterator it; - for (it = overlayList.begin(); it != overlayList.end(); ++it) { + for (it = g_cine->_overlayList.begin(); it != g_cine->_overlayList.end(); ++it) { if (it->objIdx == objIdx && it->type == type && it->x == param) { - overlayList.erase(it); + g_cine->_overlayList.erase(it); return; } } } void setupObject(byte objIdx, uint16 param1, uint16 param2, uint16 param3, uint16 param4) { - objectTable[objIdx].x = param1; - objectTable[objIdx].y = param2; - objectTable[objIdx].mask = param3; - objectTable[objIdx].frame = param4; + g_cine->_objectTable[objIdx].x = param1; + g_cine->_objectTable[objIdx].y = param2; + g_cine->_objectTable[objIdx].mask = param3; + g_cine->_objectTable[objIdx].frame = param4; if (g_cine->getGameType() == Cine::GType_OS) { resetGfxEntityEntry(objIdx); @@ -219,13 +216,13 @@ void modifyObjectParam(byte objIdx, byte paramIdx, int16 newValue) { switch (paramIdx) { case 1: - objectTable[objIdx].x = newValue; + g_cine->_objectTable[objIdx].x = newValue; break; case 2: - objectTable[objIdx].y = newValue; + g_cine->_objectTable[objIdx].y = newValue; break; case 3: - objectTable[objIdx].mask = newValue; + g_cine->_objectTable[objIdx].mask = newValue; if (g_cine->getGameType() == Cine::GType_OS) { // Operation Stealth specific resetGfxEntityEntry(objIdx); @@ -236,18 +233,18 @@ void modifyObjectParam(byte objIdx, byte paramIdx, int16 newValue) { } break; case 4: - objectTable[objIdx].frame = newValue; + g_cine->_objectTable[objIdx].frame = newValue; break; case 5: // TODO: Test if this really breaks the newspaper machine on the airport in Operation Stealth. if (g_cine->getGameType() == Cine::GType_FW && newValue == -1) { - objectTable[objIdx].costume = globalVars[0]; + g_cine->_objectTable[objIdx].costume = g_cine->_globalVars[0]; } else { - objectTable[objIdx].costume = newValue; + g_cine->_objectTable[objIdx].costume = newValue; } break; case 6: - objectTable[objIdx].part = newValue; + g_cine->_objectTable[objIdx].part = newValue; break; } } @@ -263,8 +260,8 @@ bool compareRanges(uint16 aStart, uint16 aEnd, uint16 bStart, uint16 bEnd) { uint16 compareObjectParamRanges(uint16 objIdx1, uint16 xAdd1, uint16 yAdd1, uint16 maskAdd1, uint16 objIdx2, uint16 xAdd2, uint16 yAdd2, uint16 maskAdd2) { assert(objIdx1 < NUM_MAX_OBJECT && objIdx2 < NUM_MAX_OBJECT); - const ObjectStruct &obj1 = objectTable[objIdx1]; - const ObjectStruct &obj2 = objectTable[objIdx2]; + const ObjectStruct &obj1 = g_cine->_objectTable[objIdx1]; + const ObjectStruct &obj2 = g_cine->_objectTable[objIdx2]; if (compareRanges(obj1.x, obj1.x + xAdd1, obj2.x, obj2.x + xAdd2) && compareRanges(obj1.y, obj1.y + yAdd1, obj2.y, obj2.y + yAdd2) && @@ -304,17 +301,17 @@ int16 getObjectParam(uint16 objIdx, uint16 paramIdx) { switch (paramIdx) { case 0: - return objectTable[objIdx].x; + return g_cine->_objectTable[objIdx].x; case 1: - return objectTable[objIdx].y; + return g_cine->_objectTable[objIdx].y; case 2: - return objectTable[objIdx].mask; + return g_cine->_objectTable[objIdx].mask; case 3: - return objectTable[objIdx].frame; + return g_cine->_objectTable[objIdx].frame; case 4: - return objectTable[objIdx].costume; + return g_cine->_objectTable[objIdx].costume; case 5: - return objectTable[objIdx].part; + return g_cine->_objectTable[objIdx].part; } return 0; diff --git a/engines/cine/object.h b/engines/cine/object.h index daf515bf0f..5a5ea91286 100644 --- a/engines/cine/object.h +++ b/engines/cine/object.h @@ -63,9 +63,6 @@ struct overlay { #define NUM_MAX_OBJECT 255 #define NUM_MAX_VAR 255 -extern Common::Array<ObjectStruct> objectTable; -extern Common::List<overlay> overlayList; - void resetObjectTable(); void loadObject(char *pObjectName); void setupObject(byte objIdx, uint16 param1, uint16 param2, uint16 param3, uint16 param4); diff --git a/engines/cine/pal.cpp b/engines/cine/pal.cpp index 6e730aedd9..27d0e593da 100644 --- a/engines/cine/pal.cpp +++ b/engines/cine/pal.cpp @@ -30,7 +30,6 @@ namespace Cine { -Common::Array<PalEntry> palArray; static byte paletteBuffer1[16]; static byte paletteBuffer2[16]; @@ -40,7 +39,7 @@ void loadPal(const char *fileName) { removeExtention(buffer, fileName); strcat(buffer, ".PAL"); - palArray.clear(); + g_cine->_palArray.clear(); Common::File palFileHandle; if (!palFileHandle.open(buffer)) @@ -49,11 +48,11 @@ void loadPal(const char *fileName) { uint16 palEntriesCount = palFileHandle.readUint16LE(); palFileHandle.readUint16LE(); // entry size - palArray.resize(palEntriesCount); - for (uint i = 0; i < palArray.size(); ++i) { - palFileHandle.read(palArray[i].name, 10); - palFileHandle.read(palArray[i].pal1, 16); - palFileHandle.read(palArray[i].pal2, 16); + g_cine->_palArray.resize(palEntriesCount); + for (uint i = 0; i < g_cine->_palArray.size(); ++i) { + palFileHandle.read(g_cine->_palArray[i].name, 10); + palFileHandle.read(g_cine->_palArray[i].pal1, 16); + palFileHandle.read(g_cine->_palArray[i].pal2, 16); } palFileHandle.close(); } @@ -73,8 +72,8 @@ int16 findPaletteFromName(const char *fileName) { position++; } - for (i = 0; i < palArray.size(); i++) { - if (!strcmp(buffer, palArray[i].name)) { + for (i = 0; i < g_cine->_palArray.size(); i++) { + if (!strcmp(buffer, g_cine->_palArray[i].name)) { return i; } } @@ -97,9 +96,9 @@ void loadRelatedPalette(const char *fileName) { paletteBuffer1[i] = paletteBuffer2[i] = (i << 4) + i; } } else { - assert(paletteIndex < (int32)palArray.size()); - memcpy(paletteBuffer1, palArray[paletteIndex].pal1, 16); - memcpy(paletteBuffer2, palArray[paletteIndex].pal2, 16); + assert(paletteIndex < (int32)g_cine->_palArray.size()); + memcpy(paletteBuffer1, g_cine->_palArray[paletteIndex].pal1, 16); + memcpy(paletteBuffer2, g_cine->_palArray[paletteIndex].pal2, 16); } } diff --git a/engines/cine/pal.h b/engines/cine/pal.h index 0086711636..e5b318b24d 100644 --- a/engines/cine/pal.h +++ b/engines/cine/pal.h @@ -49,8 +49,6 @@ struct PalEntry { byte pal2[16]; }; -extern Common::Array<PalEntry> palArray; - void loadPal(const char *fileName); void loadRelatedPalette(const char *fileName); diff --git a/engines/cine/part.cpp b/engines/cine/part.cpp index ad5aaf54b0..95f3789abd 100644 --- a/engines/cine/part.cpp +++ b/engines/cine/part.cpp @@ -32,10 +32,8 @@ namespace Cine { -Common::Array<PartBuffer> partBuffer; - void loadPart(const char *partName) { - partBuffer.clear(); + g_cine->_partBuffer.clear(); g_cine->_partFileHandle.close(); @@ -47,17 +45,17 @@ void loadPart(const char *partName) { setMouseCursor(MOUSE_CURSOR_DISK); uint16 numElementInPart = g_cine->_partFileHandle.readUint16BE(); - partBuffer.resize(numElementInPart); + g_cine->_partBuffer.resize(numElementInPart); g_cine->_partFileHandle.readUint16BE(); // entry size if (currentPartName != partName) strcpy(currentPartName, partName); - for (uint16 i = 0; i < partBuffer.size(); i++) { - g_cine->_partFileHandle.read(partBuffer[i].partName, 14); - partBuffer[i].offset = g_cine->_partFileHandle.readUint32BE(); - partBuffer[i].packedSize = g_cine->_partFileHandle.readUint32BE(); - partBuffer[i].unpackedSize = g_cine->_partFileHandle.readUint32BE(); + for (uint16 i = 0; i < g_cine->_partBuffer.size(); i++) { + g_cine->_partFileHandle.read(g_cine->_partBuffer[i].partName, 14); + g_cine->_partBuffer[i].offset = g_cine->_partFileHandle.readUint32BE(); + g_cine->_partBuffer[i].packedSize = g_cine->_partFileHandle.readUint32BE(); + g_cine->_partBuffer[i].unpackedSize = g_cine->_partFileHandle.readUint32BE(); g_cine->_partFileHandle.readUint32BE(); // unused } @@ -189,8 +187,8 @@ void CineEngine::readVolCnf() { int16 findFileInBundle(const char *fileName) { if (g_cine->getGameType() == Cine::GType_OS) { // look first in currently loaded resource file - for (uint i = 0; i < partBuffer.size(); i++) { - if (!scumm_stricmp(fileName, partBuffer[i].partName)) { + for (uint i = 0; i < g_cine->_partBuffer.size(); i++) { + if (!scumm_stricmp(fileName, g_cine->_partBuffer[i].partName)) { return i; } } @@ -203,8 +201,8 @@ int16 findFileInBundle(const char *fileName) { const char *part = (*it)._value; loadPart(part); } - for (uint i = 0; i < partBuffer.size(); i++) { - if (!scumm_stricmp(fileName, partBuffer[i].partName)) { + for (uint i = 0; i < g_cine->_partBuffer.size(); i++) { + if (!scumm_stricmp(fileName, g_cine->_partBuffer[i].partName)) { return i; } } @@ -212,31 +210,31 @@ int16 findFileInBundle(const char *fileName) { } void readFromPart(int16 idx, byte *dataPtr, uint32 maxSize) { - assert(maxSize >= partBuffer[idx].packedSize); + assert(maxSize >= g_cine->_partBuffer[idx].packedSize); setMouseCursor(MOUSE_CURSOR_DISK); - g_cine->_partFileHandle.seek(partBuffer[idx].offset, SEEK_SET); - g_cine->_partFileHandle.read(dataPtr, partBuffer[idx].packedSize); + g_cine->_partFileHandle.seek(g_cine->_partBuffer[idx].offset, SEEK_SET); + g_cine->_partFileHandle.read(dataPtr, g_cine->_partBuffer[idx].packedSize); } byte *readBundleFile(int16 foundFileIdx, uint32 *size) { - assert(foundFileIdx >= 0 && foundFileIdx < (int32)partBuffer.size()); + assert(foundFileIdx >= 0 && foundFileIdx < (int32)g_cine->_partBuffer.size()); bool error = false; - byte *dataPtr = (byte *)calloc(partBuffer[foundFileIdx].unpackedSize, 1); - byte *packedData = (byte *)calloc(partBuffer[foundFileIdx].packedSize, 1); + byte *dataPtr = (byte *)calloc(g_cine->_partBuffer[foundFileIdx].unpackedSize, 1); + byte *packedData = (byte *)calloc(g_cine->_partBuffer[foundFileIdx].packedSize, 1); assert(dataPtr && packedData); - readFromPart(foundFileIdx, packedData, partBuffer[foundFileIdx].packedSize); + readFromPart(foundFileIdx, packedData, g_cine->_partBuffer[foundFileIdx].packedSize); CineUnpacker cineUnpacker; - error = !cineUnpacker.unpack(packedData, partBuffer[foundFileIdx].packedSize, dataPtr, partBuffer[foundFileIdx].unpackedSize); + error = !cineUnpacker.unpack(packedData, g_cine->_partBuffer[foundFileIdx].packedSize, dataPtr, g_cine->_partBuffer[foundFileIdx].unpackedSize); free(packedData); if (error) { - warning("Error unpacking '%s' from bundle file '%s'", partBuffer[foundFileIdx].partName, currentPartName); + warning("Error unpacking '%s' from bundle file '%s'", g_cine->_partBuffer[foundFileIdx].partName, currentPartName); } // Set the size variable if a pointer to it has been given if (size != NULL) { - *size = partBuffer[foundFileIdx].unpackedSize; + *size = g_cine->_partBuffer[foundFileIdx].unpackedSize; } return dataPtr; @@ -255,7 +253,7 @@ byte *readBundleSoundFile(const char *entryName, uint32 *size) { if (index != -1) { data = readBundleFile(index); if (size) { - *size = partBuffer[index].unpackedSize; + *size = g_cine->_partBuffer[index].unpackedSize; } } if (g_cine->getGameType() == Cine::GType_FW) { @@ -305,14 +303,14 @@ void dumpBundle(const char *fileName) { strcpy(tmpPart, currentPartName); loadPart(fileName); - for (uint i = 0; i < partBuffer.size(); i++) { + for (uint i = 0; i < g_cine->_partBuffer.size(); i++) { byte *data = readBundleFile(i); - debug(0, "%s", partBuffer[i].partName); + debug(0, "%s", g_cine->_partBuffer[i].partName); Common::DumpFile out; - if (out.open(Common::String("dumps/") + partBuffer[i].partName)) { - out.write(data, partBuffer[i].unpackedSize); + if (out.open(Common::String("dumps/") + g_cine->_partBuffer[i].partName)) { + out.write(data, g_cine->_partBuffer[i].unpackedSize); out.close(); } diff --git a/engines/cine/part.h b/engines/cine/part.h index 2f1af7141f..53ebafaa37 100644 --- a/engines/cine/part.h +++ b/engines/cine/part.h @@ -37,8 +37,6 @@ struct PartBuffer { #define NUM_MAX_PARTDATA 255 -extern Common::Array<PartBuffer> partBuffer; - void loadPart(const char *partName); void closePart(); diff --git a/engines/cine/prc.cpp b/engines/cine/prc.cpp index e1ef14bbbf..183a537416 100644 --- a/engines/cine/prc.cpp +++ b/engines/cine/prc.cpp @@ -35,9 +35,6 @@ namespace Cine { -ScriptList globalScripts; -ScriptList objectScripts; - //char currentPrcName[20]; /** @@ -52,8 +49,8 @@ bool loadPrc(const char *pPrcName) { assert(pPrcName); - globalScripts.clear(); - scriptTable.clear(); + g_cine->_globalScripts.clear(); + g_cine->_scriptTable.clear(); // This is copy protection. Used to hang the machine if (!scumm_stricmp(pPrcName, COPY_PROT_FAIL_PRC_NAME)) { @@ -83,14 +80,14 @@ bool loadPrc(const char *pPrcName) { RawScriptPtr tmp(new RawScript(READ_BE_UINT16(scriptPtr))); scriptPtr += 2; assert(tmp); - scriptTable.push_back(tmp); + g_cine->_scriptTable.push_back(tmp); } for (i = 0; i < numScripts; i++) { - uint16 size = scriptTable[i]->_size; + uint16 size = g_cine->_scriptTable[i]->_size; // TODO: delete the test? if (size) { - scriptTable[i]->setData(*scriptInfo, scriptPtr); + g_cine->_scriptTable[i]->setData(*scriptInfo, scriptPtr); scriptPtr += size; } } diff --git a/engines/cine/prc.h b/engines/cine/prc.h index 05bb240372..84058426fa 100644 --- a/engines/cine/prc.h +++ b/engines/cine/prc.h @@ -28,9 +28,6 @@ namespace Cine { -extern ScriptList globalScripts; -extern ScriptList objectScripts; - bool loadPrc(const char *pPrcName); } // End of namespace Cine diff --git a/engines/cine/rel.cpp b/engines/cine/rel.cpp index 17ab14bfe5..4a11995ee1 100644 --- a/engines/cine/rel.cpp +++ b/engines/cine/rel.cpp @@ -31,8 +31,6 @@ namespace Cine { -RawObjectScriptArray relTable; ///< Object script bytecode table - /** * @todo Is script size of 0 valid? * @todo Fix script dump code @@ -45,8 +43,8 @@ void loadRel(char *pRelName) { checkDataDisk(-1); - objectScripts.clear(); - relTable.clear(); + g_cine->_objectScripts.clear(); + g_cine->_relTable.clear(); ptr = dataPtr = readBundleFile(findFileInBundle(pRelName)); @@ -61,14 +59,14 @@ void loadRel(char *pRelName) { p3 = READ_BE_UINT16(ptr); ptr += 2; RawObjectScriptPtr tmp(new RawObjectScript(size, p1, p2, p3)); assert(tmp); - relTable.push_back(tmp); + g_cine->_relTable.push_back(tmp); } for (i = 0; i < numEntry; i++) { - size = relTable[i]->_size; + size = g_cine->_relTable[i]->_size; // TODO: delete the test? if (size) { - relTable[i]->setData(*scriptInfo, ptr); + g_cine->_relTable[i]->setData(*scriptInfo, ptr); ptr += size; } } @@ -82,10 +80,10 @@ void loadRel(char *pRelName) { char buffer[256]; for (s = 0; s < numEntry; s++) { - if (relTable[s]->_size) { + if (g_cine->_relTable[s]->_size) { sprintf(buffer, "%s_%03d.txt", pRelName, s); - decompileScript((const byte *)relTable[s]->getString(0), relTable[s]->_size, s); + decompileScript((const byte *)g_cine->_relTable[s]->getString(0), g_cine->_relTable[s]->_size, s); dumpScript(buffer); } } diff --git a/engines/cine/rel.h b/engines/cine/rel.h index 84926f76c4..8d712dc416 100644 --- a/engines/cine/rel.h +++ b/engines/cine/rel.h @@ -29,8 +29,6 @@ #include "cine/script.h" namespace Cine { -extern RawObjectScriptArray relTable; - void loadRel(char *pRelName); } // End of namespace Cine diff --git a/engines/cine/saveload.cpp b/engines/cine/saveload.cpp index f9dfcc7737..0f7c50b7e5 100644 --- a/engines/cine/saveload.cpp +++ b/engines/cine/saveload.cpp @@ -200,13 +200,13 @@ void loadScriptFromSave(Common::SeekableReadStream &fHandle, bool isGlobal) { // original code loaded everything into globalScripts, this should be // the correct behavior if (isGlobal) { - ScriptPtr tmp(scriptInfo->create(*scriptTable[idx], idx, labels, localVars, compare, pos)); + ScriptPtr tmp(scriptInfo->create(*g_cine->_scriptTable[idx], idx, labels, localVars, compare, pos)); assert(tmp); - globalScripts.push_back(tmp); + g_cine->_globalScripts.push_back(tmp); } else { - ScriptPtr tmp(scriptInfo->create(*relTable[idx], idx, labels, localVars, compare, pos)); + ScriptPtr tmp(scriptInfo->create(*g_cine->_relTable[idx], idx, labels, localVars, compare, pos)); assert(tmp); - objectScripts.push_back(tmp); + g_cine->_objectScripts.push_back(tmp); } } @@ -227,7 +227,7 @@ void loadOverlayFromSave(Common::SeekableReadStream &fHandle) { tmp.width = fHandle.readSint16BE(); tmp.color = fHandle.readSint16BE(); - overlayList.push_back(tmp); + g_cine->_overlayList.push_back(tmp); } bool loadObjectTable(Common::SeekableReadStream &in) { @@ -235,20 +235,20 @@ bool loadObjectTable(Common::SeekableReadStream &in) { in.readUint16BE(); // Entry size for (int i = 0; i < NUM_MAX_OBJECT; i++) { - objectTable[i].x = in.readSint16BE(); - objectTable[i].y = in.readSint16BE(); - objectTable[i].mask = in.readUint16BE(); - objectTable[i].frame = in.readSint16BE(); - objectTable[i].costume = in.readSint16BE(); - in.read(objectTable[i].name, 20); - objectTable[i].part = in.readUint16BE(); + g_cine->_objectTable[i].x = in.readSint16BE(); + g_cine->_objectTable[i].y = in.readSint16BE(); + g_cine->_objectTable[i].mask = in.readUint16BE(); + g_cine->_objectTable[i].frame = in.readSint16BE(); + g_cine->_objectTable[i].costume = in.readSint16BE(); + in.read(g_cine->_objectTable[i].name, 20); + g_cine->_objectTable[i].part = in.readUint16BE(); } return !(in.eos() || in.err()); } bool loadZoneData(Common::SeekableReadStream &in) { for (int i = 0; i < 16; i++) { - zoneData[i] = in.readUint16BE(); + g_cine->_zoneData[i] = in.readUint16BE(); } return !(in.eos() || in.err()); } @@ -313,14 +313,14 @@ bool loadSeqList(Common::SeekableReadStream &in) { tmp.var1A = in.readSint16BE(); tmp.var1C = in.readSint16BE(); tmp.var1E = in.readSint16BE(); - seqList.push_back(tmp); + g_cine->_seqList.push_back(tmp); } return !(in.eos() || in.err()); } bool loadZoneQuery(Common::SeekableReadStream &in) { for (int i = 0; i < 16; i++) { - zoneQuery[i] = in.readUint16BE(); + g_cine->_zoneQuery[i] = in.readUint16BE(); } return !(in.eos() || in.err()); } @@ -330,19 +330,19 @@ void saveObjectTable(Common::OutSaveFile &out) { out.writeUint16BE(0x20); // Entry size for (int i = 0; i < NUM_MAX_OBJECT; i++) { - out.writeUint16BE(objectTable[i].x); - out.writeUint16BE(objectTable[i].y); - out.writeUint16BE(objectTable[i].mask); - out.writeUint16BE(objectTable[i].frame); - out.writeUint16BE(objectTable[i].costume); - out.write(objectTable[i].name, 20); - out.writeUint16BE(objectTable[i].part); + out.writeUint16BE(g_cine->_objectTable[i].x); + out.writeUint16BE(g_cine->_objectTable[i].y); + out.writeUint16BE(g_cine->_objectTable[i].mask); + out.writeUint16BE(g_cine->_objectTable[i].frame); + out.writeUint16BE(g_cine->_objectTable[i].costume); + out.write(g_cine->_objectTable[i].name, 20); + out.writeUint16BE(g_cine->_objectTable[i].part); } } void saveZoneData(Common::OutSaveFile &out) { for (int i = 0; i < 16; i++) { - out.writeUint16BE(zoneData[i]); + out.writeUint16BE(g_cine->_zoneData[i]); } } @@ -356,8 +356,8 @@ void saveCommandVariables(Common::OutSaveFile &out) { void saveCommandBuffer(Common::OutSaveFile &out) { // Let's make sure there's space for the trailing zero // (That's why we subtract one from the maximum command buffer size here). - uint32 size = MIN<uint32>(commandBuffer.size(), kMaxCommandBufferSize - 1); - out.write(commandBuffer.c_str(), size); + uint32 size = MIN<uint32>(g_cine->_commandBuffer.size(), kMaxCommandBufferSize - 1); + out.write(g_cine->_commandBuffer.c_str(), size); // Write the rest as zeroes (Here we also write the string's trailing zero) for (uint i = 0; i < kMaxCommandBufferSize - size; i++) { out.writeByte(0); @@ -369,7 +369,7 @@ void saveAnimDataTable(Common::OutSaveFile &out) { out.writeUint16BE(0x1E); // Entry size for (int i = 0; i < NUM_MAX_ANIMDATA; i++) { - animDataTable[i].save(out); + g_cine->_animDataTable[i].save(out); } } @@ -385,16 +385,16 @@ void saveScreenParams(Common::OutSaveFile &out) { void saveGlobalScripts(Common::OutSaveFile &out) { ScriptList::const_iterator it; - out.writeUint16BE(globalScripts.size()); - for (it = globalScripts.begin(); it != globalScripts.end(); ++it) { + out.writeUint16BE(g_cine->_globalScripts.size()); + for (it = g_cine->_globalScripts.begin(); it != g_cine->_globalScripts.end(); ++it) { (*it)->save(out); } } void saveObjectScripts(Common::OutSaveFile &out) { ScriptList::const_iterator it; - out.writeUint16BE(objectScripts.size()); - for (it = objectScripts.begin(); it != objectScripts.end(); ++it) { + out.writeUint16BE(g_cine->_objectScripts.size()); + for (it = g_cine->_objectScripts.begin(); it != g_cine->_objectScripts.end(); ++it) { (*it)->save(out); } } @@ -402,9 +402,9 @@ void saveObjectScripts(Common::OutSaveFile &out) { void saveOverlayList(Common::OutSaveFile &out) { Common::List<overlay>::const_iterator it; - out.writeUint16BE(overlayList.size()); + out.writeUint16BE(g_cine->_overlayList.size()); - for (it = overlayList.begin(); it != overlayList.end(); ++it) { + for (it = g_cine->_overlayList.begin(); it != g_cine->_overlayList.end(); ++it) { out.writeUint32BE(0); // next out.writeUint32BE(0); // previous? out.writeUint16BE(it->objIdx); @@ -418,9 +418,9 @@ void saveOverlayList(Common::OutSaveFile &out) { void saveBgIncrustList(Common::OutSaveFile &out) { Common::List<BGIncrust>::const_iterator it; - out.writeUint16BE(bgIncrustList.size()); + out.writeUint16BE(g_cine->_bgIncrustList.size()); - for (it = bgIncrustList.begin(); it != bgIncrustList.end(); ++it) { + for (it = g_cine->_bgIncrustList.begin(); it != g_cine->_bgIncrustList.end(); ++it) { out.writeUint32BE(0); // next out.writeUint32BE(0); // previous? out.writeUint16BE(it->objIdx); @@ -434,15 +434,15 @@ void saveBgIncrustList(Common::OutSaveFile &out) { void saveZoneQuery(Common::OutSaveFile &out) { for (int i = 0; i < 16; i++) { - out.writeUint16BE(zoneQuery[i]); + out.writeUint16BE(g_cine->_zoneQuery[i]); } } void saveSeqList(Common::OutSaveFile &out) { Common::List<SeqListElement>::const_iterator it; - out.writeUint16BE(seqList.size()); + out.writeUint16BE(g_cine->_seqList.size()); - for (it = seqList.begin(); it != seqList.end(); ++it) { + for (it = g_cine->_seqList.begin(); it != g_cine->_seqList.end(); ++it) { out.writeSint16BE(it->var4); out.writeUint16BE(it->objIdx); out.writeSint16BE(it->var8); @@ -567,13 +567,13 @@ bool CineEngine::loadTempSaveOS(Common::SeekableReadStream &in) { loadObjectTable(in); renderer->restorePalette(in, hdr.version); - globalVars.load(in, NUM_MAX_VAR); + g_cine->_globalVars.load(in, NUM_MAX_VAR); loadZoneData(in); loadCommandVariables(in); char tempCommandBuffer[kMaxCommandBufferSize]; in.read(tempCommandBuffer, kMaxCommandBufferSize); - commandBuffer = tempCommandBuffer; - renderer->setCommand(commandBuffer); + g_cine->_commandBuffer = tempCommandBuffer; + renderer->setCommand(g_cine->_commandBuffer); loadZoneQuery(in); // TODO: Use the loaded string (Current music name (String, 13 bytes)). @@ -701,7 +701,7 @@ bool CineEngine::loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFor renderer->restorePalette(in, 0); // At 0x2083 (i.e. 0x2043 + 16 * 2 * 2): - globalVars.load(in, NUM_MAX_VAR); + g_cine->_globalVars.load(in, NUM_MAX_VAR); // At 0x2281 (i.e. 0x2083 + 255 * 2): loadZoneData(in); @@ -712,8 +712,8 @@ bool CineEngine::loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFor // At 0x22A9 (i.e. 0x22A1 + 4 * 2): char tempCommandBuffer[kMaxCommandBufferSize]; in.read(tempCommandBuffer, kMaxCommandBufferSize); - commandBuffer = tempCommandBuffer; - renderer->setCommand(commandBuffer); + g_cine->_commandBuffer = tempCommandBuffer; + renderer->setCommand(g_cine->_commandBuffer); // At 0x22F9 (i.e. 0x22A9 + 0x50): renderer->_cmdY = in.readUint16BE(); @@ -855,7 +855,7 @@ void CineEngine::makeSaveFW(Common::OutSaveFile &out) { saveObjectTable(out); renderer->savePalette(out); - globalVars.save(out, NUM_MAX_VAR); + g_cine->_globalVars.save(out, NUM_MAX_VAR); saveZoneData(out); saveCommandVariables(out); saveCommandBuffer(out); @@ -912,7 +912,7 @@ void CineEngine::makeSaveOS(Common::OutSaveFile &out) { saveObjectTable(out); renderer->savePalette(out); - globalVars.save(out, NUM_MAX_VAR); + g_cine->_globalVars.save(out, NUM_MAX_VAR); saveZoneData(out); saveCommandVariables(out); saveCommandBuffer(out); @@ -1045,7 +1045,7 @@ void loadResourcesFromSave(Common::SeekableReadStream &fHandle, enum CineSaveGam loadPart(name); } - animName = partBuffer[foundFileIdx].partName; + animName = g_cine->_partBuffer[foundFileIdx].partName; loadRelatedPalette(animName); // Is this for Future Wars only? const int16 prevAnim = currentAnim; currentAnim = loadResource(animName, currentAnim); diff --git a/engines/cine/script.h b/engines/cine/script.h index 1c3b496375..756bc930e8 100644 --- a/engines/cine/script.h +++ b/engines/cine/script.h @@ -67,6 +67,7 @@ public: ScriptVars(const ScriptVars &src); ~ScriptVars(); + void reinit(unsigned int len); ScriptVars &operator=(const ScriptVars &src); int16 &operator[](unsigned int idx); int16 operator[](unsigned int idx) const; @@ -368,9 +369,7 @@ typedef Common::Array<RawObjectScriptPtr> RawObjectScriptArray; #define NUM_MAX_SCRIPT 50 -extern RawScriptArray scriptTable; extern FWScriptInfo *scriptInfo; -extern ScriptVars globalVars; void setupOpcodes(); diff --git a/engines/cine/script_fw.cpp b/engines/cine/script_fw.cpp index e71fec8898..430a32ac69 100644 --- a/engines/cine/script_fw.cpp +++ b/engines/cine/script_fw.cpp @@ -38,14 +38,6 @@ namespace Cine { -/** - * Global variables. - * 255 of these are saved, but there's one more that's used for bypassing the copy protection. - * In CineEngine::mainLoop(int bootScriptIdx) there's this code: globalVars[VAR_BYPASS_PROTECTION] = 0; - * And as VAR_BYPASS_PROTECTION is 255 that's why we're allocating one more than we otherwise would. - */ -ScriptVars globalVars(NUM_MAX_VAR + 1); - uint16 compareVars(int16 a, int16 b); @@ -216,7 +208,6 @@ void FWScript::setupTable() { } FWScriptInfo *scriptInfo; ///< Script factory -RawScriptArray scriptTable; ///< Table of script bytecode /** * @todo replace with script subsystem @@ -257,6 +248,14 @@ ScriptVars::ScriptVars(Common::SeekableReadStream &fHandle, unsigned int len) load(fHandle); } +void ScriptVars::reinit(unsigned int len) { + delete _vars; + + _size = len; + _vars = new int16[len]; + reset(); +} + /** * Copy constructor */ @@ -606,7 +605,7 @@ RawObjectScript::RawObjectScript(const FWScriptInfo &info, const byte *data, FWScript::FWScript(const RawScript &script, int16 idx) : _script(script), _pos(0), _line(0), _compare(0), _index(idx), _labels(script.labels()), _localVars(LOCAL_VARS_SIZE), - _globalVars(globalVars), _info(new FWScriptInfo) { } + _globalVars(g_cine->_globalVars), _info(new FWScriptInfo) { } /** * Copy constructor @@ -624,7 +623,7 @@ FWScript::FWScript(const FWScript &src) : _script(src._script), _pos(src._pos), FWScript::FWScript(const RawScript &script, int16 idx, FWScriptInfo *info) : _script(script), _pos(0), _line(0), _compare(0), _index(idx), _labels(script.labels()), _localVars(LOCAL_VARS_SIZE), - _globalVars(globalVars), _info(info) { } + _globalVars(g_cine->_globalVars), _info(info) { } /** * Constructor for object scripts in derived classes @@ -634,7 +633,7 @@ FWScript::FWScript(const RawScript &script, int16 idx, FWScriptInfo *info) : FWScript::FWScript(RawObjectScript &script, int16 idx, FWScriptInfo *info) : _script(script), _pos(0), _line(0), _compare(0), _index(idx), _labels(script.labels()), _localVars(LOCAL_VARS_SIZE), - _globalVars(globalVars), _info(info) { + _globalVars(g_cine->_globalVars), _info(info) { _localVars[0] = script.run(); } @@ -964,11 +963,11 @@ int FWScript::o1_loadVar() { break; case 8: debugC(5, kCineDebugScript, "Line: %d: var[%d] = file[%d].packedSize", _line, varIdx, dataIdx); - _localVars[varIdx] = partBuffer[dataIdx].packedSize; + _localVars[varIdx] = g_cine->_partBuffer[dataIdx].packedSize; break; case 9: debugC(5, kCineDebugScript, "Line: %d: var[%d] = file[%d].unpackedSize", _line, varIdx, dataIdx); - _localVars[varIdx] = partBuffer[dataIdx].unpackedSize; + _localVars[varIdx] = g_cine->_partBuffer[dataIdx].unpackedSize; break; default: error("executeScript: o1_loadVar: Unknown variable type %d", varType); @@ -1196,7 +1195,7 @@ int FWScript::o1_addSpriteFilledToBgList() { int FWScript::o1_op1B() { debugC(5, kCineDebugScript, "Line: %d: freeBgIncrustList", _line); - bgIncrustList.clear(); + g_cine->_bgIncrustList.clear(); return 0; } @@ -1343,9 +1342,9 @@ int FWScript::o1_endGlobalScript() { debugC(5, kCineDebugScript, "Line: %d: stopGlobalScript(%d)", _line, scriptIdx); - ScriptList::iterator it = globalScripts.begin(); + ScriptList::iterator it = g_cine->_globalScripts.begin(); - for (; it != globalScripts.end(); ++it) { + for (; it != g_cine->_globalScripts.end(); ++it) { if ((*it)->_index == scriptIdx) { (*it)->_index = -1; } @@ -1369,7 +1368,7 @@ int FWScript::o1_loadBg() { debugC(5, kCineDebugScript, "Line: %d: loadBg(\"%s\")", _line, param); loadBg(param); - bgIncrustList.clear(); + g_cine->_bgIncrustList.clear(); bgVar0 = 0; return 0; } @@ -1627,7 +1626,7 @@ int FWScript::o1_freePartRange() { int FWScript::o1_unloadAllMasks() { debugC(5, kCineDebugScript, "Line: %d: unloadAllMasks()", _line); - overlayList.clear(); + g_cine->_overlayList.clear(); return 0; } @@ -1656,7 +1655,7 @@ int FWScript::o1_initializeZoneData() { debugC(5, kCineDebugScript, "Line: %d: initializeZoneData()", _line); for (int i = 0; i < NUM_MAX_ZONE; i++) { - zoneData[i] = i; + g_cine->_zoneData[i] = i; } return 0; } @@ -1666,7 +1665,7 @@ int FWScript::o1_setZoneDataEntry() { uint16 var = getNextWord(); debugC(5, kCineDebugScript, "Line: %d: setZone[%d] = %d", _line, zoneIdx, var); - zoneData[zoneIdx] = var; + g_cine->_zoneData[zoneIdx] = var; return 0; } @@ -1674,7 +1673,7 @@ int FWScript::o1_getZoneDataEntry() { byte zoneIdx = getNextByte(); byte var = getNextByte(); - _localVars[var] = zoneData[zoneIdx]; + _localVars[var] = g_cine->_zoneData[zoneIdx]; return 0; } @@ -1796,7 +1795,7 @@ int FWScript::o1_playSample() { int16 volume = getNextWord(); uint16 size = getNextWord(); - const byte *data = animDataTable[anim].data(); + const byte *data = g_cine->_animDataTable[anim].data(); if (!data) { return 0; @@ -1804,7 +1803,7 @@ int FWScript::o1_playSample() { if (g_cine->getPlatform() == Common::kPlatformAmiga || g_cine->getPlatform() == Common::kPlatformAtariST) { if (size == 0xFFFF) { - size = animDataTable[anim]._width * animDataTable[anim]._height; + size = g_cine->_animDataTable[anim]._width * g_cine->_animDataTable[anim]._height; } if (channel < 10) { // || _currentOpcode == 0x78 int channel1, channel2; @@ -1874,9 +1873,9 @@ int FWScript::o1_unloadMask5() { //----------------------------------------------------------------------- void addScriptToGlobalScripts(uint16 idx) { - ScriptPtr tmp(scriptInfo->create(*scriptTable[idx], idx)); + ScriptPtr tmp(scriptInfo->create(*g_cine->_scriptTable[idx], idx)); assert(tmp); - globalScripts.push_back(tmp); + g_cine->_globalScripts.push_back(tmp); } int16 getZoneFromPosition(byte *page, int16 x, int16 y, int16 width) { @@ -1916,8 +1915,8 @@ int16 getZoneFromPositionRaw(byte *page, int16 x, int16 y, int16 width) { } int16 checkCollision(int16 objIdx, int16 x, int16 y, int16 numZones, int16 zoneIdx) { - int16 lx = objectTable[objIdx].x + x; - int16 ly = objectTable[objIdx].y + y; + int16 lx = g_cine->_objectTable[objIdx].x + x; + int16 ly = g_cine->_objectTable[objIdx].y + y; int16 idx; int16 result = 0; @@ -1935,12 +1934,12 @@ int16 checkCollision(int16 objIdx, int16 x, int16 y, int16 numZones, int16 zoneI // The zoneQuery table is updated here only in Operation Stealth if (g_cine->getGameType() == Cine::GType_OS) { - if (zoneData[idx] < NUM_MAX_ZONE) { - zoneQuery[zoneData[idx]]++; + if (g_cine->_zoneData[idx] < NUM_MAX_ZONE) { + g_cine->_zoneQuery[g_cine->_zoneData[idx]]++; } } - if (zoneData[idx] == zoneIdx) { + if (g_cine->_zoneData[idx] == zoneIdx) { result = 1; // Future Wars breaks out early on the first match, but // Operation Stealth doesn't because it needs to update @@ -1969,10 +1968,10 @@ uint16 compareVars(int16 a, int16 b) { } void executeObjectScripts() { - ScriptList::iterator it = objectScripts.begin(); - for (; it != objectScripts.end();) { + ScriptList::iterator it = g_cine->_objectScripts.begin(); + for (; it != g_cine->_objectScripts.end();) { if ((*it)->_index < 0 || (*it)->execute() < 0) { - it = objectScripts.erase(it); + it = g_cine->_objectScripts.erase(it); } else { ++it; } @@ -1980,10 +1979,10 @@ void executeObjectScripts() { } void executeGlobalScripts() { - ScriptList::iterator it = globalScripts.begin(); - for (; it != globalScripts.end();) { + ScriptList::iterator it = g_cine->_globalScripts.begin(); + for (; it != g_cine->_globalScripts.end();) { if ((*it)->_index < 0 || (*it)->execute() < 0) { - it = globalScripts.erase(it); + it = g_cine->_globalScripts.erase(it); } else { ++it; } diff --git a/engines/cine/script_os.cpp b/engines/cine/script_os.cpp index d03b118443..ab1ad7ff9c 100644 --- a/engines/cine/script_os.cpp +++ b/engines/cine/script_os.cpp @@ -420,16 +420,16 @@ int FWScript::o2_playSampleAlt() { uint16 size = getNextWord(); if (size == 0xFFFF) { - size = animDataTable[num]._width * animDataTable[num]._height; + size = g_cine->_animDataTable[num]._width * g_cine->_animDataTable[num]._height; } - if (animDataTable[num].data()) { + if (g_cine->_animDataTable[num].data()) { if (g_cine->getPlatform() == Common::kPlatformPC) { // if speaker output is available, play sound on it // if it's another device, don't play anything // TODO: implement this, it's used in the introduction for example // on each letter displayed } else { - g_sound->playSound(channel, frequency, animDataTable[num].data(), size, 0, 0, 63, 0); + g_sound->playSound(channel, frequency, g_cine->_animDataTable[num].data(), size, 0, 0, 63, 0); } } return 0; @@ -611,9 +611,9 @@ int FWScript::o2_stopObjectScript() { byte param = getNextByte(); debugC(5, kCineDebugScript, "Line: %d: stopObjectScript(%d)", _line, param); - ScriptList::iterator it = objectScripts.begin(); + ScriptList::iterator it = g_cine->_objectScripts.begin(); - for (; it != objectScripts.end(); ++it) { + for (; it != g_cine->_objectScripts.end(); ++it) { if ((*it)->_index == param) { (*it)->_index = -1; } @@ -699,7 +699,7 @@ int FWScript::o2_loadBg() { int FWScript::o2_wasZoneChecked() { byte param = getNextByte(); - _compare = (param < NUM_MAX_ZONE && zoneQuery[param]) ? 1 : 0; + _compare = (param < NUM_MAX_ZONE && g_cine->_zoneQuery[param]) ? 1 : 0; debugC(5, kCineDebugScript, "Line: %d: o2_wasZoneChecked(%d)", _line, param); return 0; } diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp index 82c40a2f50..cf7135a6b5 100644 --- a/engines/cine/various.cpp +++ b/engines/cine/various.cpp @@ -81,7 +81,6 @@ uint16 _messageLen; int16 playerCommand; -Common::String commandBuffer; char currentPrcName[20]; char currentRelName[20]; char currentObjectName[20]; @@ -137,9 +136,6 @@ static const int16 canUseOnItemTable[] = { 1, 0, 0, 1, 1, 0, 0 }; CommandeType objectListCommand[20]; int16 objListTab[20]; -Common::Array<uint16> zoneData; -Common::Array<uint16> zoneQuery; ///< Only exists in Operation Stealth - /** * Move the player character using the keyboard * @param x Negative values move left, positive right, zero not at all @@ -174,9 +170,9 @@ void stopMusicAfterFadeOut() { } void runObjectScript(int16 entryIdx) { - ScriptPtr tmp(scriptInfo->create(*relTable[entryIdx], entryIdx)); + ScriptPtr tmp(scriptInfo->create(*g_cine->_relTable[entryIdx], entryIdx)); assert(tmp); - objectScripts.push_back(tmp); + g_cine->_objectScripts.push_back(tmp); } /** @@ -190,19 +186,19 @@ void addPlayerCommandMessage(int16 cmd) { tmp.objIdx = cmd; tmp.type = 3; - overlayList.push_back(tmp); + g_cine->_overlayList.push_back(tmp); } int16 getRelEntryForObject(uint16 param1, uint16 param2, SelectedObjStruct *pSelectedObject) { int16 i; int16 found = -1; - for (i = 0; i < (int16)relTable.size(); i++) { - if (relTable[i]->_param1 == param1 && relTable[i]->_param2 == pSelectedObject->idx) { + for (i = 0; i < (int16)g_cine->_relTable.size(); i++) { + if (g_cine->_relTable[i]->_param1 == param1 && g_cine->_relTable[i]->_param2 == pSelectedObject->idx) { if (param2 == 1) { found = i; } else if (param2 == 2) { - if (relTable[i]->_param3 == pSelectedObject->param) { + if (g_cine->_relTable[i]->_param3 == pSelectedObject->param) { found = i; } } @@ -228,19 +224,19 @@ int16 getObjectUnderCursor(uint16 x, uint16 y) { int width; // reverse_iterator would be nice - for (it = overlayList.reverse_begin(); it != overlayList.end(); --it) { - if (it->type >= 2 || !objectTable[it->objIdx].name[0]) { + for (it = g_cine->_overlayList.reverse_begin(); it != g_cine->_overlayList.end(); --it) { + if (it->type >= 2 || !g_cine->_objectTable[it->objIdx].name[0]) { continue; } - objX = objectTable[it->objIdx].x; - objY = objectTable[it->objIdx].y; + objX = g_cine->_objectTable[it->objIdx].x; + objY = g_cine->_objectTable[it->objIdx].y; - frame = ABS((int16)(objectTable[it->objIdx].frame)); - part = objectTable[it->objIdx].part; + frame = ABS((int16)(g_cine->_objectTable[it->objIdx].frame)); + part = g_cine->_objectTable[it->objIdx].part; // Additional case for negative frame values in Operation Stealth - if (g_cine->getGameType() == Cine::GType_OS && objectTable[it->objIdx].frame < 0) { + if (g_cine->getGameType() == Cine::GType_OS && g_cine->_objectTable[it->objIdx].frame < 0) { if ((it->type == 1) && (x >= objX) && (objX + frame >= x) && (y >= objY) && (objY + part >= y)) { return it->objIdx; } else { @@ -249,18 +245,18 @@ int16 getObjectUnderCursor(uint16 x, uint16 y) { } if (it->type == 0) { - threshold = animDataTable[frame]._var1; + threshold = g_cine->_animDataTable[frame]._var1; } else { - threshold = animDataTable[frame]._width / 2; + threshold = g_cine->_animDataTable[frame]._width / 2; } - height = animDataTable[frame]._height; - width = animDataTable[frame]._realWidth; + height = g_cine->_animDataTable[frame]._height; + width = g_cine->_animDataTable[frame]._realWidth; xdif = x - objX; ydif = y - objY; - if ((xdif < 0) || ((threshold << 4) <= xdif) || (ydif <= 0) || (ydif >= height) || !animDataTable[frame].data()) { + if ((xdif < 0) || ((threshold << 4) <= xdif) || (ydif <= 0) || (ydif >= height) || !g_cine->_animDataTable[frame].data()) { continue; } @@ -272,17 +268,17 @@ int16 getObjectUnderCursor(uint16 x, uint16 y) { continue; } - if (it->type == 0 && animDataTable[frame].getColor(xdif, ydif) != (part & 0x0F)) { + if (it->type == 0 && g_cine->_animDataTable[frame].getColor(xdif, ydif) != (part & 0x0F)) { return it->objIdx; - } else if (it->type == 1 && gfxGetBit(xdif, ydif, animDataTable[frame].data(), animDataTable[frame]._width * 4)) { + } else if (it->type == 1 && gfxGetBit(xdif, ydif, g_cine->_animDataTable[frame].data(), g_cine->_animDataTable[frame]._width * 4)) { return it->objIdx; } } else if (it->type == 0) { // use generated mask - if (gfxGetBit(xdif, ydif, animDataTable[frame].mask(), animDataTable[frame]._width)) { + if (gfxGetBit(xdif, ydif, g_cine->_animDataTable[frame].mask(), g_cine->_animDataTable[frame]._width)) { return it->objIdx; } } else if (it->type == 1) { // is mask - if (gfxGetBit(xdif, ydif, animDataTable[frame].data(), animDataTable[frame]._width * 4)) { + if (gfxGetBit(xdif, ydif, g_cine->_animDataTable[frame].data(), g_cine->_animDataTable[frame]._width * 4)) { return it->objIdx; } } @@ -294,18 +290,18 @@ int16 getObjectUnderCursor(uint16 x, uint16 y) { void CineEngine::resetEngine() { g_sound->stopMusic(); freeAnimDataTable(); - overlayList.clear(); - bgIncrustList.clear(); + g_cine->_overlayList.clear(); + g_cine->_bgIncrustList.clear(); closePart(); - objectScripts.clear(); - globalScripts.clear(); - relTable.clear(); - scriptTable.clear(); - messageTable.clear(); + g_cine->_objectScripts.clear(); + g_cine->_globalScripts.clear(); + g_cine->_relTable.clear(); + g_cine->_scriptTable.clear(); + g_cine->_messageTable.clear(); resetObjectTable(); - globalVars.reset(); + g_cine->_globalVars.reset(); var2 = var3 = var4 = var5 = 0; @@ -320,10 +316,10 @@ void CineEngine::resetEngine() { playerCommand = -1; isDrawCommandEnabled = 0; - commandBuffer = ""; + g_cine->_commandBuffer = ""; - globalVars[VAR_MOUSE_X_POS] = 0; - globalVars[VAR_MOUSE_Y_POS] = 0; + g_cine->_globalVars[VAR_MOUSE_X_POS] = 0; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = 0; fadeRequired = false; @@ -332,7 +328,7 @@ void CineEngine::resetEngine() { checkForPendingDataLoadSwitch = 0; if (g_cine->getGameType() == Cine::GType_OS) { - seqList.clear(); + g_cine->_seqList.clear(); currentAdditionalBgIdx = 0; currentAdditionalBgIdx2 = 0; // TODO: Add resetting of the following variables @@ -539,8 +535,8 @@ int16 buildObjectListCommand(int16 param) { } for (i = 0; i < 255; i++) { - if (objectTable[i].name[0] && objectTable[i].costume == param) { - strcpy(objectListCommand[j], objectTable[i].name); + if (g_cine->_objectTable[i].name[0] && g_cine->_objectTable[i].costume == param) { + strcpy(objectListCommand[j], g_cine->_objectTable[i].name); objListTab[j] = i; j++; } @@ -581,9 +577,9 @@ void makeCommandLine() { commandVar2 = -10; if (playerCommand != -1) { - commandBuffer = defaultActionCommand[playerCommand]; + g_cine->_commandBuffer = defaultActionCommand[playerCommand]; } else { - commandBuffer = ""; + g_cine->_commandBuffer = ""; } if ((playerCommand != -1) && (choiceResultTable[playerCommand] == 2)) { // need object selection ? @@ -602,7 +598,7 @@ void makeCommandLine() { canUseOnObject = 0; } else { // Future Wars playerCommand = -1; - commandBuffer = ""; + g_cine->_commandBuffer = ""; } } else { if (g_cine->getGameType() == Cine::GType_OS) { @@ -616,13 +612,13 @@ void makeCommandLine() { commandVar3[0] = si; commandVar1 = 1; - commandBuffer += " "; - commandBuffer += objectTable[commandVar3[0]].name; - commandBuffer += " "; + g_cine->_commandBuffer += " "; + g_cine->_commandBuffer += g_cine->_objectTable[commandVar3[0]].name; + g_cine->_commandBuffer += " "; if (g_cine->getGameType() == Cine::GType_OS) { - commandBuffer += commandPrepositionTable[playerCommand]; + g_cine->_commandBuffer += commandPrepositionTable[playerCommand]; } else { // Future Wars - commandBuffer += defaultCommandPreposition; + g_cine->_commandBuffer += defaultCommandPreposition; } } } @@ -634,7 +630,7 @@ void makeCommandLine() { processInventory(x, y + 8); playerCommand = -1; commandVar1 = 0; - commandBuffer = ""; + g_cine->_commandBuffer = ""; CursorMan.showMouse(true); } } @@ -654,8 +650,8 @@ void makeCommandLine() { commandVar3[commandVar1] = si; commandVar1++; - commandBuffer += " "; - commandBuffer += objectTable[si].name; + g_cine->_commandBuffer += " "; + g_cine->_commandBuffer += g_cine->_objectTable[si].name; } } @@ -673,13 +669,13 @@ void makeCommandLine() { playerCommand = -1; commandVar1 = 0; - commandBuffer = ""; + g_cine->_commandBuffer = ""; } } if (g_cine->getGameType() == Cine::GType_OS || !disableSystemMenu) { isDrawCommandEnabled = 1; - renderer->setCommand(commandBuffer); + renderer->setCommand(g_cine->_commandBuffer); } } @@ -858,7 +854,7 @@ uint16 executePlayerInput() { if (allowPlayerInput) { // Player input is allowed if (isDrawCommandEnabled) { - renderer->setCommand(commandBuffer); + renderer->setCommand(g_cine->_commandBuffer); } isDrawCommandEnabled = 0; limitMouseCheckCount = true; @@ -906,8 +902,8 @@ uint16 executePlayerInput() { commandVar3[commandVar1] = si; commandVar1++; - commandBuffer += " "; - commandBuffer += objectTable[si].name; + g_cine->_commandBuffer += " "; + g_cine->_commandBuffer += g_cine->_objectTable[si].name; isDrawCommandEnabled = 1; @@ -929,27 +925,27 @@ uint16 executePlayerInput() { playerCommand = -1; commandVar1 = 0; - commandBuffer = ""; + g_cine->_commandBuffer = ""; } else if (g_cine->getGameType() == Cine::GType_OS) { isDrawCommandEnabled = 1; - commandBuffer += commandPrepositionTable[playerCommand]; + g_cine->_commandBuffer += commandPrepositionTable[playerCommand]; } - renderer->setCommand(commandBuffer); + renderer->setCommand(g_cine->_commandBuffer); } else { - globalVars[VAR_MOUSE_X_POS] = mouseX; + g_cine->_globalVars[VAR_MOUSE_X_POS] = mouseX; if (!mouseX) { - globalVars[VAR_MOUSE_X_POS]++; + g_cine->_globalVars[VAR_MOUSE_X_POS]++; } - globalVars[VAR_MOUSE_Y_POS] = mouseY; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = mouseY; if (g_cine->getGameType() == Cine::GType_OS) { if (!mouseY) { - globalVars[VAR_MOUSE_Y_POS]++; + g_cine->_globalVars[VAR_MOUSE_Y_POS]++; } - globalVars[VAR_MOUSE_X_POS_2ND] = globalVars[VAR_MOUSE_X_POS]; - globalVars[VAR_MOUSE_Y_POS_2ND] = globalVars[VAR_MOUSE_Y_POS]; + g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = g_cine->_globalVars[VAR_MOUSE_X_POS]; + g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = g_cine->_globalVars[VAR_MOUSE_Y_POS]; } } } @@ -961,7 +957,7 @@ uint16 executePlayerInput() { if (g_cine->getGameType() == Cine::GType_OS || commandVar2 != objIdx) { if (objIdx != -1) { - renderer->setCommand(commandBuffer + " " + objectTable[objIdx].name); + renderer->setCommand(g_cine->_commandBuffer + " " + g_cine->_objectTable[objIdx].name); } else { isDrawCommandEnabled = 1; } @@ -976,19 +972,19 @@ uint16 executePlayerInput() { int16 objIdx; int16 relEntry; - globalVars[VAR_MOUSE_X_POS] = mouseX; + g_cine->_globalVars[VAR_MOUSE_X_POS] = mouseX; if (!mouseX) { - globalVars[VAR_MOUSE_X_POS]++; + g_cine->_globalVars[VAR_MOUSE_X_POS]++; } - globalVars[VAR_MOUSE_Y_POS] = mouseY; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = mouseY; if (g_cine->getGameType() == Cine::GType_OS) { if (!mouseY) { - globalVars[VAR_MOUSE_Y_POS]++; + g_cine->_globalVars[VAR_MOUSE_Y_POS]++; } - globalVars[VAR_MOUSE_X_POS_2ND] = globalVars[VAR_MOUSE_X_POS]; - globalVars[VAR_MOUSE_Y_POS_2ND] = globalVars[VAR_MOUSE_Y_POS]; + g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = g_cine->_globalVars[VAR_MOUSE_X_POS]; + g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = g_cine->_globalVars[VAR_MOUSE_Y_POS]; } objIdx = getObjectUnderCursor(mouseX, mouseY); @@ -1020,97 +1016,97 @@ uint16 executePlayerInput() { // Handle possible horizontal movement by keyboard if (xMoveKeyb != kKeybMoveCenterX && allowPlayerInput) { if (xMoveKeyb == kKeybMoveRight) { // moving right - const int16 playerFrame = objectTable[1].frame; - const int16 playerX = objectTable[1].x; + const int16 playerFrame = g_cine->_objectTable[1].frame; + const int16 playerX = g_cine->_objectTable[1].x; // TODO: Check if multiplying _width by two here is correct or not - const int16 newX = animDataTable[playerFrame]._width * 2 + playerX + 8; - globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = newX; + const int16 newX = g_cine->_animDataTable[playerFrame]._width * 2 + playerX + 8; + g_cine->_globalVars[VAR_MOUSE_X_POS] = g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = newX; } else { // moving left - const int16 playerX = objectTable[1].x; + const int16 playerX = g_cine->_objectTable[1].x; const int16 newX = playerX - 8; - globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = newX; + g_cine->_globalVars[VAR_MOUSE_X_POS] = g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = newX; } // Restrain horizontal position to range 0-319 - if (globalVars[VAR_MOUSE_X_POS] < 0) { - globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = 0; - } else if (globalVars[VAR_MOUSE_X_POS] > 319) { - globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = 319; + if (g_cine->_globalVars[VAR_MOUSE_X_POS] < 0) { + g_cine->_globalVars[VAR_MOUSE_X_POS] = g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = 0; + } else if (g_cine->_globalVars[VAR_MOUSE_X_POS] > 319) { + g_cine->_globalVars[VAR_MOUSE_X_POS] = g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = 319; } } // Handle possible vertical movement by keyboard if (yMoveKeyb != kKeybMoveCenterY && allowPlayerInput) { if (yMoveKeyb == kKeybMoveDown) { // moving down - const int16 playerFrame = objectTable[1].frame; - const int16 playerY = objectTable[1].y; + const int16 playerFrame = g_cine->_objectTable[1].frame; + const int16 playerY = g_cine->_objectTable[1].y; // TODO: Check if multiplying _height by two here is correct or not - const int16 newY = animDataTable[playerFrame]._height * 2 + playerY - 1; - globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = newY; + const int16 newY = g_cine->_animDataTable[playerFrame]._height * 2 + playerY - 1; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = newY; } else { // moving up - const int16 playerY = objectTable[1].y; + const int16 playerY = g_cine->_objectTable[1].y; const int16 newY = playerY - 8; - globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = newY; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = newY; } // Restrain vertical position to range 0-199 - if (globalVars[VAR_MOUSE_Y_POS] < 0) { - globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = 0; - } else if (globalVars[VAR_MOUSE_Y_POS] > 199) { - globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = 199; + if (g_cine->_globalVars[VAR_MOUSE_Y_POS] < 0) { + g_cine->_globalVars[VAR_MOUSE_Y_POS] = g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = 0; + } else if (g_cine->_globalVars[VAR_MOUSE_Y_POS] > 199) { + g_cine->_globalVars[VAR_MOUSE_Y_POS] = g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = 199; } } } else if (egoMovedWithKeyboard && allowPlayerInput) { // FW: Move using keyboard egoMovedWithKeyboard = false; - switch (globalVars[VAR_MOUSE_X_MODE]) { + switch (g_cine->_globalVars[VAR_MOUSE_X_MODE]) { case 1: - mouseX = objectTable[1].x + 12; + mouseX = g_cine->_objectTable[1].x + 12; break; case 2: - mouseX = objectTable[1].x + 7; + mouseX = g_cine->_objectTable[1].x + 7; break; default: - mouseX = globalVars[VAR_MOUSE_X_POS]; + mouseX = g_cine->_globalVars[VAR_MOUSE_X_POS]; break; } - switch (globalVars[VAR_MOUSE_Y_MODE]) { + switch (g_cine->_globalVars[VAR_MOUSE_Y_MODE]) { case 1: - mouseY = objectTable[1].y + 34; + mouseY = g_cine->_objectTable[1].y + 34; break; case 2: - mouseY = objectTable[1].y + 28; + mouseY = g_cine->_objectTable[1].y + 28; break; default: - mouseY = globalVars[VAR_MOUSE_Y_POS]; + mouseY = g_cine->_globalVars[VAR_MOUSE_Y_POS]; break; } if (var_5E == bgVar0) { var_5E = 0; - globalVars[VAR_MOUSE_X_POS] = mouseX; - globalVars[VAR_MOUSE_Y_POS] = mouseY; + g_cine->_globalVars[VAR_MOUSE_X_POS] = mouseX; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = mouseY; } else { if (xMoveKeyb) { if (xMoveKeyb == kKeybMoveLeft) { - globalVars[VAR_MOUSE_X_POS] = 1; + g_cine->_globalVars[VAR_MOUSE_X_POS] = 1; } else { - globalVars[VAR_MOUSE_X_POS] = 320; + g_cine->_globalVars[VAR_MOUSE_X_POS] = 320; } } else { - globalVars[VAR_MOUSE_X_POS] = mouseX; + g_cine->_globalVars[VAR_MOUSE_X_POS] = mouseX; } if (yMoveKeyb) { if (yMoveKeyb == kKeybMoveUp) { - globalVars[VAR_MOUSE_Y_POS] = 1; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = 1; } else { - globalVars[VAR_MOUSE_Y_POS] = 200; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = 200; } } else { - globalVars[VAR_MOUSE_Y_POS] = mouseY; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = mouseY; } } @@ -1167,27 +1163,27 @@ void drawSprite(Common::List<overlay>::iterator it, const byte *spritePtr, const msk = (byte *)malloc(width * height); if (g_cine->getGameType() == Cine::GType_OS) { - generateMask(spritePtr, msk, width * height, objectTable[it->objIdx].part); + generateMask(spritePtr, msk, width * height, g_cine->_objectTable[it->objIdx].part); } else { memcpy(msk, maskPtr, width * height); } - for (++it; it != overlayList.end(); ++it) { + for (++it; it != g_cine->_overlayList.end(); ++it) { if (it->type != 5) { continue; } - maskX = objectTable[it->objIdx].x; - maskY = objectTable[it->objIdx].y; + maskX = g_cine->_objectTable[it->objIdx].x; + maskY = g_cine->_objectTable[it->objIdx].y; - maskSpriteIdx = ABS((int16)(objectTable[it->objIdx].frame)); + maskSpriteIdx = ABS((int16)(g_cine->_objectTable[it->objIdx].frame)); - maskWidth = animDataTable[maskSpriteIdx]._realWidth; - maskHeight = animDataTable[maskSpriteIdx]._height; - gfxUpdateSpriteMask(msk, x, y, width, height, animDataTable[maskSpriteIdx].data(), maskX, maskY, maskWidth, maskHeight); + maskWidth = g_cine->_animDataTable[maskSpriteIdx]._realWidth; + maskHeight = g_cine->_animDataTable[maskSpriteIdx]._height; + gfxUpdateSpriteMask(msk, x, y, width, height, g_cine->_animDataTable[maskSpriteIdx].data(), maskX, maskY, maskWidth, maskHeight); #ifdef DEBUG_SPRITE_MASK - gfxFillSprite(animDataTable[maskSpriteIdx].data(), maskWidth, maskHeight, page, maskX, maskY, 1); + gfxFillSprite(g_cine->_animDataTable[maskSpriteIdx].data(), maskWidth, maskHeight, page, maskX, maskY, 1); #endif } @@ -1199,7 +1195,7 @@ void removeMessages() { Common::List<overlay>::iterator it; bool remove; - for (it = overlayList.begin(); it != overlayList.end(); ) { + for (it = g_cine->_overlayList.begin(); it != g_cine->_overlayList.end(); ) { if (g_cine->getGameType() == Cine::GType_OS) { // NOTE: These are really removeOverlay calls that have been deferred. // In Operation Stealth's disassembly elements are removed from the @@ -1213,7 +1209,7 @@ void removeMessages() { } if (remove) { - it = overlayList.erase(it); + it = g_cine->_overlayList.erase(it); } else { ++it; } @@ -1255,7 +1251,7 @@ void checkForPendingDataLoad() { } if (newObjectName[0] != 0) { - overlayList.clear(); + g_cine->_overlayList.clear(); loadObject(newObjectName); @@ -1294,15 +1290,13 @@ void addMessage(byte param1, int16 param2, int16 param3, int16 param4, int16 par tmp.width = param4; tmp.color = param5; - overlayList.push_back(tmp); + g_cine->_overlayList.push_back(tmp); } -Common::List<SeqListElement> seqList; - void removeSeq(uint16 param1, uint16 param2, uint16 param3) { Common::List<SeqListElement>::iterator it; - for (it = seqList.begin(); it != seqList.end(); ++it) { + for (it = g_cine->_seqList.begin(); it != g_cine->_seqList.end(); ++it) { if (it->objIdx == param1 && it->var4 == param2 && it->varE == param3) { it->var4 = -1; break; @@ -1313,7 +1307,7 @@ void removeSeq(uint16 param1, uint16 param2, uint16 param3) { bool isSeqRunning(uint16 param1, uint16 param2, uint16 param3) { Common::List<SeqListElement>::iterator it; - for (it = seqList.begin(); it != seqList.end(); ++it) { + for (it = g_cine->_seqList.begin(); it != g_cine->_seqList.end(); ++it) { if (it->objIdx == param1 && it->var4 == param2 && it->varE == param3) { // Just to be on the safe side there's a restriction of the // addition's result to 16-bit arithmetic here like in the @@ -1329,7 +1323,7 @@ void addSeqListElement(uint16 objIdx, int16 param1, int16 param2, int16 frame, i Common::List<SeqListElement>::iterator it; SeqListElement tmp; - for (it = seqList.begin(); it != seqList.end() && it->varE < param7; ++it) ; + for (it = g_cine->_seqList.begin(); it != g_cine->_seqList.end() && it->varE < param7; ++it) ; tmp.objIdx = objIdx; tmp.var4 = param1; @@ -1346,12 +1340,12 @@ void addSeqListElement(uint16 objIdx, int16 param1, int16 param2, int16 frame, i tmp.var1C = 0; tmp.var1E = 0; - seqList.insert(it, tmp); + g_cine->_seqList.insert(it, tmp); } void modifySeqListElement(uint16 objIdx, int16 var4Test, int16 param1, int16 param2, int16 param3, int16 param4) { // Find a suitable list element and modify it - for (Common::List<SeqListElement>::iterator it = seqList.begin(); it != seqList.end(); ++it) { + for (Common::List<SeqListElement>::iterator it = g_cine->_seqList.begin(); it != g_cine->_seqList.end(); ++it) { if (it->objIdx == objIdx && it->var4 == var4Test) { it->varC = param1; it->var18 = param2; @@ -1425,7 +1419,7 @@ uint16 addAni(uint16 param1, uint16 objIdx, const int8 *ptr, SeqListElement &ele // In the original an error string is set and 0 is returned if the following doesn't hold assert(*ptrData); - di = (objectTable[objIdx].costume + 1) % (*ptrData); + di = (g_cine->_objectTable[objIdx].costume + 1) % (*ptrData); ++ptrData; // Jump over the just read byte // Here ptr2 seems to be indexing a table of structs (8 bytes per struct): // struct { @@ -1446,18 +1440,18 @@ uint16 addAni(uint16 param1, uint16 objIdx, const int8 *ptr, SeqListElement &ele return 0; } - objectTable[objIdx].x += ptr2[4]; - objectTable[objIdx].y += ptr2[5]; - objectTable[objIdx].mask += ptr2[6]; + g_cine->_objectTable[objIdx].x += ptr2[4]; + g_cine->_objectTable[objIdx].y += ptr2[5]; + g_cine->_objectTable[objIdx].mask += ptr2[6]; if (ptr2[6]) { resetGfxEntityEntry(objIdx); } - objectTable[objIdx].frame = ptr2[7] + element.var8; + g_cine->_objectTable[objIdx].frame = ptr2[7] + element.var8; if (param3 || !element.var14) { - objectTable[objIdx].costume = di; + g_cine->_objectTable[objIdx].costume = di; } else { assert(param4); *param4 = di; @@ -1476,7 +1470,7 @@ void resetGfxEntityEntry(uint16 objIdx) { bool foundCutPoint = false; // Go through the overlay list and partition the whole list into two categories (Type A and type B objects) - for (it = overlayList.begin(); it != overlayList.end(); ++it) { + for (it = g_cine->_overlayList.begin(); it != g_cine->_overlayList.end(); ++it) { if (it->objIdx == objIdx && it->type != 2 && it->type != 3) { // Type A object aReverseObjs.push_front(*it); } else { // Type B object @@ -1485,10 +1479,10 @@ void resetGfxEntityEntry(uint16 objIdx) { if (it->type == 2 || it->type == 3) { objectMask = 10000; } else { - objectMask = objectTable[it->objIdx].mask; + objectMask = g_cine->_objectTable[it->objIdx].mask; } - if (objectTable[objIdx].mask > objectMask) { // Check for B objects' cut point + if (g_cine->_objectTable[objIdx].mask > objectMask) { // Check for B objects' cut point bObjsCutPoint = bObjs.reverse_begin(); foundCutPoint = true; } @@ -1496,26 +1490,26 @@ void resetGfxEntityEntry(uint16 objIdx) { } // Recreate the overlay list in a different order. - overlayList.clear(); + g_cine->_overlayList.clear(); if (foundCutPoint) { // If a cut point was found the order is: // B objects before the cut point, the cut point, A objects in reverse order, B objects after cut point. ++bObjsCutPoint; // Include the cut point in the first list insertion - overlayList.insert(overlayList.end(), bObjs.begin(), bObjsCutPoint); - overlayList.insert(overlayList.end(), aReverseObjs.begin(), aReverseObjs.end()); - overlayList.insert(overlayList.end(), bObjsCutPoint, bObjs.end()); + g_cine->_overlayList.insert(g_cine->_overlayList.end(), bObjs.begin(), bObjsCutPoint); + g_cine->_overlayList.insert(g_cine->_overlayList.end(), aReverseObjs.begin(), aReverseObjs.end()); + g_cine->_overlayList.insert(g_cine->_overlayList.end(), bObjsCutPoint, bObjs.end()); } else { // If no cut point was found the order is: // A objects in reverse order, B objects. - overlayList.insert(overlayList.end(), aReverseObjs.begin(), aReverseObjs.end()); - overlayList.insert(overlayList.end(), bObjs.begin(), bObjs.end()); + g_cine->_overlayList.insert(g_cine->_overlayList.end(), aReverseObjs.begin(), aReverseObjs.end()); + g_cine->_overlayList.insert(g_cine->_overlayList.end(), bObjs.begin(), bObjs.end()); } } void processSeqListElement(SeqListElement &element) { - int16 x = objectTable[element.objIdx].x; - int16 y = objectTable[element.objIdx].y; - const int8 *ptr1 = (const int8 *) animDataTable[element.frame].data(); + int16 x = g_cine->_objectTable[element.objIdx].x; + int16 y = g_cine->_objectTable[element.objIdx].y; + const int8 *ptr1 = (const int8 *) g_cine->_animDataTable[element.frame].data(); int16 var_10; int16 var_4; int16 var_2; @@ -1548,8 +1542,8 @@ void processSeqListElement(SeqListElement &element) { int16 x2 = element.var18; int16 y2 = element.var1A; if (element.varC) { - x2 += objectTable[element.varC].x; - y2 += objectTable[element.varC].y; + x2 += g_cine->_objectTable[element.varC].x; + y2 += g_cine->_objectTable[element.varC].y; } computeMove1(element, ptr1[4] + x, ptr1[5] + y, param1, param2, x2, y2); } else { @@ -1558,7 +1552,7 @@ void processSeqListElement(SeqListElement &element) { if (xMoveKeyb != kKeybMoveRight) { adder = -adder; } - globalVars[VAR_MOUSE_X_POS] = globalVars[VAR_MOUSE_X_POS_2ND] = ptr1[4] + x + adder; + g_cine->_globalVars[VAR_MOUSE_X_POS] = g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = ptr1[4] + x + adder; } if (yMoveKeyb && allowPlayerInput) { @@ -1566,11 +1560,11 @@ void processSeqListElement(SeqListElement &element) { if (yMoveKeyb != kKeybMoveDown) { adder = -adder; } - globalVars[VAR_MOUSE_Y_POS] = globalVars[VAR_MOUSE_Y_POS_2ND] = ptr1[5] + y + adder; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = ptr1[5] + y + adder; } - if (globalVars[VAR_MOUSE_X_POS] || globalVars[VAR_MOUSE_Y_POS]) { - computeMove1(element, ptr1[4] + x, ptr1[5] + y, param1, param2, globalVars[VAR_MOUSE_X_POS], globalVars[VAR_MOUSE_Y_POS]); + if (g_cine->_globalVars[VAR_MOUSE_X_POS] || g_cine->_globalVars[VAR_MOUSE_Y_POS]) { + computeMove1(element, ptr1[4] + x, ptr1[5] + y, param1, param2, g_cine->_globalVars[VAR_MOUSE_X_POS], g_cine->_globalVars[VAR_MOUSE_Y_POS]); } else { element.var16 = 0; element.var14 = 0; @@ -1590,27 +1584,27 @@ void processSeqListElement(SeqListElement &element) { && !addAni(3, element.objIdx, ptr1, element, 0, &var_4)) || (element.var16 == 2 && !addAni(2, element.objIdx, ptr1, element, 0, &var_4))) { if (element.varC == 255) { - globalVars[VAR_MOUSE_Y_POS] = 0; + g_cine->_globalVars[VAR_MOUSE_Y_POS] = 0; } } if ((element.var14 == 1 && !addAni(0, element.objIdx, ptr1, element, 1, &var_2))) { if (element.varC == 255) { - globalVars[VAR_MOUSE_X_POS] = 0; + g_cine->_globalVars[VAR_MOUSE_X_POS] = 0; if (var_4 != -1) { - objectTable[element.objIdx].costume = var_4; + g_cine->_objectTable[element.objIdx].costume = var_4; } } } if ((element.var14 == 2 && !addAni(1, element.objIdx, ptr1, element, 1, &var_2))) { if (element.varC == 255) { - globalVars[VAR_MOUSE_X_POS] = 0; + g_cine->_globalVars[VAR_MOUSE_X_POS] = 0; if (var_4 != -1) { - objectTable[element.objIdx].costume = var_4; + g_cine->_objectTable[element.objIdx].costume = var_4; } } } @@ -1618,7 +1612,7 @@ void processSeqListElement(SeqListElement &element) { if (element.var16 + element.var14 == 0) { if (element.var1C) { if (element.var1E) { - objectTable[element.objIdx].costume = 0; + g_cine->_objectTable[element.objIdx].costume = 0; element.var1E = 0; } @@ -1633,7 +1627,7 @@ void processSeqListElement(SeqListElement &element) { void processSeqList() { Common::List<SeqListElement>::iterator it; - for (it = seqList.begin(); it != seqList.end(); ++it) { + for (it = g_cine->_seqList.begin(); it != g_cine->_seqList.end(); ++it) { if (it->var4 == -1) { continue; } diff --git a/engines/cine/various.h b/engines/cine/various.h index 3f362b1ad6..3a14328035 100644 --- a/engines/cine/various.h +++ b/engines/cine/various.h @@ -66,8 +66,6 @@ struct SeqListElement { int16 var1E; }; -extern Common::List<SeqListElement> seqList; - extern uint16 var2; extern uint16 var3; extern uint16 var4; @@ -95,8 +93,6 @@ extern uint16 _messageLen; extern int16 playerCommand; -extern Common::String commandBuffer; - extern char currentPrcName[20]; extern char currentRelName[20]; extern char currentObjectName[20]; @@ -137,8 +133,6 @@ struct SelectedObjStruct { }; #define NUM_MAX_ZONE 16 -extern Common::Array<uint16> zoneData; -extern Common::Array<uint16> zoneQuery; void addMessage(byte param1, int16 param2, int16 param3, int16 param4, int16 param5); diff --git a/engines/cruise/actor.cpp b/engines/cruise/actor.cpp index 81e39600f5..9cbc3dd9ae 100644 --- a/engines/cruise/actor.cpp +++ b/engines/cruise/actor.cpp @@ -74,8 +74,8 @@ int flag_aff_chemin; void getPixel(int x, int y) { - for (uint i = 0; i < polyStructs->size(); ++i) { - CtStruct &ct = (*polyStructs)[i]; + for (uint i = 0; i < _vm->_polyStructs->size(); ++i) { + CtStruct &ct = (*_vm->_polyStructs)[i]; numPoly = ct.num; if (walkboxState[numPoly] == 0 && ct.bounds.contains(x, y)) { @@ -293,7 +293,7 @@ int point_proche(int16 table[][2]) { int x1, y1, i, x, y, p; int d1 = 1000; - polyStructs = &polyStructNorm; + _vm->_polyStructs = &_vm->_polyStructNorm; if (nclick_noeud == 1) { x = x_mouse; @@ -301,19 +301,19 @@ int point_proche(int16 table[][2]) { x1 = table_ptselect[0][0]; y1 = table_ptselect[0][1]; - polyStructs = &polyStructExp; + _vm->_polyStructs = &_vm->_polyStructExp; getPixel(x, y); if (!flag_obstacle) { - polyStructs = &polyStructNorm; + _vm->_polyStructs = &_vm->_polyStructNorm; getPixel(x, y); if (flag_obstacle) { polydroite(x1, y1, x, y); } - polyStructs = &polyStructExp; + _vm->_polyStructs = &_vm->_polyStructExp; } if (!flag_obstacle) { /* dans flag_obstacle --> couleur du point */ x1 = table_ptselect[0][0]; @@ -325,7 +325,7 @@ int point_proche(int16 table[][2]) { y_mouse = Y; } } - polyStructs = &polyStructNorm; + _vm->_polyStructs = &_vm->_polyStructNorm; p = -1; for (i = 0; i < ctp_routeCoordCount; i++) { @@ -453,7 +453,7 @@ void valide_noeud(int16 table[], int16 p, int *nclick, int16 solution0[20 + 3][2 table_ptselect[*nclick][0] = x_mouse; table_ptselect[*nclick][1] = y_mouse; (*nclick)++; - polyStructs = &polyStructNorm; + _vm->_polyStructs = &_vm->_polyStructNorm; if (*nclick == 2) { // second point x1 = table_ptselect[0][0]; @@ -464,7 +464,7 @@ void valide_noeud(int16 table[], int16 p, int *nclick, int16 solution0[20 + 3][2 return; } flag_aff_chemin = 1; - polyStructs = &polyStructExp; + _vm->_polyStructs = &_vm->_polyStructExp; // can we go there directly ? polydroite(x1, y1, x2, y2); @@ -472,7 +472,7 @@ void valide_noeud(int16 table[], int16 p, int *nclick, int16 solution0[20 + 3][2 if (!flag_obstacle) { solution0[0][0] = x1; solution0[0][1] = y1; - polyStructs = &polyStructExp; + _vm->_polyStructs = &_vm->_polyStructExp; poly2(x2, y2, ctp_routeCoords[select_noeud[1]][0], ctp_routeCoords[select_noeud[1]][1]); @@ -516,7 +516,7 @@ void valide_noeud(int16 table[], int16 p, int *nclick, int16 solution0[20 + 3][2 solution0[++i][1] = ctp_routeCoords[p1][1]; } - polyStructs = &polyStructExp; + _vm->_polyStructs = &_vm->_polyStructExp; poly2(x2, y2, ctp_routeCoords[select_noeud[1]][0], ctp_routeCoords[select_noeud[1]][1]); @@ -541,7 +541,7 @@ void valide_noeud(int16 table[], int16 p, int *nclick, int16 solution0[20 + 3][2 while (flag_obstacle && i != d) { x2 = solution0[i][0]; y2 = solution0[i][1]; - polyStructs = &polyStructExp; + _vm->_polyStructs = &_vm->_polyStructExp; polydroite(x1, y1, x2, y2); i--; } @@ -569,7 +569,7 @@ int16 computePathfinding(MovementEntry &moveInfo, int16 x, int16 y, int16 destX, persoStruct *perso; int num; - if (!polyStruct) { + if (!_vm->_polyStruct) { moveInfo.x = -1; moveInfo.y = -1; @@ -621,7 +621,7 @@ int16 computePathfinding(MovementEntry &moveInfo, int16 x, int16 y, int16 destX, } nclick_noeud = 0; - polyStructs = &polyStructNorm; + _vm->_polyStructs = &_vm->_polyStructNorm; flag_aff_chemin = 0; if (x == destX && y == destY) { diff --git a/engines/cruise/cruise.cpp b/engines/cruise/cruise.cpp index 2f38aa98ba..3af77f3ef3 100644 --- a/engines/cruise/cruise.cpp +++ b/engines/cruise/cruise.cpp @@ -133,8 +133,8 @@ void CruiseEngine::initialize() { } void CruiseEngine::deinitialise() { - polyStructNorm.clear(); - polyStructExp.clear(); + _vm->_polyStructNorm.clear(); + _vm->_polyStructExp.clear(); // Clear any backgrounds for (int i = 0; i < 8; ++i) { diff --git a/engines/cruise/cruise.h b/engines/cruise/cruise.h index 0428240167..94f5c68ca0 100644 --- a/engines/cruise/cruise.h +++ b/engines/cruise/cruise.h @@ -40,10 +40,10 @@ /** * This is the namespace of the Cruise engine. * - * Status of this engine: ??? + * Status of this engine: Game is completable, engine needs objectifying * * Supported games: - * - ??? + * - Cruise for a Corpse */ namespace Cruise { @@ -112,6 +112,22 @@ public: void initAllData(); Common::RandomSource _rnd; + + Common::List<byte *> _memList; + + typedef Common::List<Common::Rect> RectList; + + RectList _dirtyRects; + RectList _priorFrameRects; + + Common::File _currentVolumeFile; + + Common::Array<CtStruct> _polyStructNorm; + Common::Array<CtStruct> _polyStructExp; + Common::Array<CtStruct> *_polyStructs; + Common::Array<CtStruct> *_polyStruct; + + Common::File _PAL_file; }; extern CruiseEngine *_vm; diff --git a/engines/cruise/cruise_main.cpp b/engines/cruise/cruise_main.cpp index 65d8b57366..aa78f84e3d 100644 --- a/engines/cruise/cruise_main.cpp +++ b/engines/cruise/cruise_main.cpp @@ -42,13 +42,11 @@ unsigned int timer = 0; gfxEntryStruct* linkedMsgList = NULL; -Common::List<byte *> memList; - void MemoryList() { - if (!memList.empty()) { + if (!_vm->_memList.empty()) { printf("Current list of un-freed memory blocks:\n"); Common::List<byte *>::iterator i; - for (i = memList.begin(); i != memList.end(); ++i) { + for (i = _vm->_memList.begin(); i != _vm->_memList.end(); ++i) { byte *v = *i; printf("%s - %d\n", (const char *)(v - 68), *((int32 *)(v - 72))); } @@ -73,7 +71,7 @@ void *MemoryAlloc(uint32 size, bool clearFlag, int32 lineNum, const char *fname) // Add the block to the memory list result = v + 64 + 8; - memList.push_back(result); + _vm->_memList.push_back(result); } else result = (byte *)malloc(size); @@ -91,7 +89,7 @@ void MemoryFree(void *v) { byte *p = (byte *)v; assert(*((uint32 *) (p - 4)) == 0x41424344); - memList.remove(p); + _vm->_memList.remove(p); free(p - 8 - 64); } else free(v); @@ -105,8 +103,8 @@ void drawBlackSolidBoxSmall() { void loadPackedFileToMem(int fileIdx, uint8 *buffer) { changeCursor(CURSOR_DISK); - currentVolumeFile.seek(volumePtrToFileDescriptor[fileIdx].offset, SEEK_SET); - currentVolumeFile.read(buffer, volumePtrToFileDescriptor[fileIdx].size); + _vm->_currentVolumeFile.seek(volumePtrToFileDescriptor[fileIdx].offset, SEEK_SET); + _vm->_currentVolumeFile.read(buffer, volumePtrToFileDescriptor[fileIdx].size); } int getNumObjectsByClass(int scriptIdx, int param) { diff --git a/engines/cruise/ctp.cpp b/engines/cruise/ctp.cpp index 59f3cae942..4f6c21e0e4 100644 --- a/engines/cruise/ctp.cpp +++ b/engines/cruise/ctp.cpp @@ -23,6 +23,7 @@ * */ +#include "cruise/cruise.h" #include "cruise/cruise_main.h" #include "common/endian.h" #include "common/util.h" @@ -31,11 +32,6 @@ namespace Cruise { uint8 *ctpVar17; -Common::Array<CtStruct> polyStructNorm; -Common::Array<CtStruct> polyStructExp; -Common::Array<CtStruct> *polyStructs = NULL; -Common::Array<CtStruct> *polyStruct = NULL; - int currentWalkBoxCenterX; int currentWalkBoxCenterY; int currentWalkBoxCenterXBis; @@ -324,16 +320,16 @@ int initCt(const char *ctpName) { // Load the polyStructNorm list for (int i = numberOfWalkboxes - 1; i >= 0; i--) { - makeCtStruct(polyStructNorm, ctp_walkboxTable, i, 0); + makeCtStruct(_vm->_polyStructNorm, ctp_walkboxTable, i, 0); } // Load the polyStructExp list for (int i = numberOfWalkboxes - 1; i >= 0; i--) { - makeCtStruct(polyStructExp, ctp_walkboxTable, i, walkboxZoom[i] * 20); + makeCtStruct(_vm->_polyStructExp, ctp_walkboxTable, i, walkboxZoom[i] * 20); } - polyStruct = polyStructs = &polyStructNorm; + _vm->_polyStruct = _vm->_polyStructs = &_vm->_polyStructNorm; return (1); } diff --git a/engines/cruise/ctp.h b/engines/cruise/ctp.h index 6cc5ea48ef..3c6c9582cc 100644 --- a/engines/cruise/ctp.h +++ b/engines/cruise/ctp.h @@ -64,11 +64,6 @@ public: extern uint8 *ctpVar17; -extern Common::Array<CtStruct> polyStructNorm; -extern Common::Array<CtStruct> polyStructExp; -extern Common::Array<CtStruct> *polyStructs; -extern Common::Array<CtStruct> *polyStruct; - int initCt(const char * ctpName); int computeDistance(int varX, int varY, int paramX, int paramY); diff --git a/engines/cruise/gfxModule.cpp b/engines/cruise/gfxModule.cpp index dbc8160ac6..4a88e6ed5e 100644 --- a/engines/cruise/gfxModule.cpp +++ b/engines/cruise/gfxModule.cpp @@ -43,10 +43,6 @@ palEntry lpalette[256]; int palDirtyMin = 256; int palDirtyMax = -1; -typedef Common::List<Common::Rect> RectList; -RectList _dirtyRects; -RectList _priorFrameRects; - bool _dirtyRectScreen = false; gfxModuleDataStruct gfxModuleData = { @@ -238,7 +234,7 @@ void gfxModuleData_flipScreen() { } void gfxModuleData_addDirtyRect(const Common::Rect &r) { - _dirtyRects.push_back(Common::Rect( MAX(r.left, (int16)0), MAX(r.top, (int16)0), + _vm->_dirtyRects.push_back(Common::Rect( MAX(r.left, (int16)0), MAX(r.top, (int16)0), MIN(r.right, (int16)320), MIN(r.bottom, (int16)200))); } @@ -255,11 +251,11 @@ static bool unionRectangle(Common::Rect &pDest, const Common::Rect &pSrc1, const } static void mergeClipRects() { - RectList::iterator rOuter, rInner; + CruiseEngine::RectList::iterator rOuter, rInner; - for (rOuter = _dirtyRects.begin(); rOuter != _dirtyRects.end(); ++rOuter) { + for (rOuter = _vm->_dirtyRects.begin(); rOuter != _vm->_dirtyRects.end(); ++rOuter) { rInner = rOuter; - while (++rInner != _dirtyRects.end()) { + while (++rInner != _vm->_dirtyRects.end()) { if ((*rOuter).intersects(*rInner)) { // these two rectangles overlap, so translate it to a bigger rectangle @@ -267,7 +263,7 @@ static void mergeClipRects() { unionRectangle(*rOuter, *rOuter, *rInner); // remove the inner rect from the list - _dirtyRects.erase(rInner); + _vm->_dirtyRects.erase(rInner); // move back to beginning of list rInner = rOuter; @@ -298,32 +294,32 @@ void gfxModuleData_updateScreen() { } void flip() { - RectList::iterator dr; + CruiseEngine::RectList::iterator dr; // Update the palette gfxModuleData_updatePalette(); // Make a copy of the prior frame's dirty rects, and then backup the current frame's rects - RectList tempList = _priorFrameRects; - _priorFrameRects = _dirtyRects; + CruiseEngine::RectList tempList = _vm->_priorFrameRects; + _vm->_priorFrameRects = _vm->_dirtyRects; // Merge the prior frame's dirty rects into the current frame's list for (dr = tempList.begin(); dr != tempList.end(); ++dr) { Common::Rect &r = *dr; - _dirtyRects.push_back(Common::Rect(r.left, r.top, r.right, r.bottom)); + _vm->_dirtyRects.push_back(Common::Rect(r.left, r.top, r.right, r.bottom)); } // Merge any overlapping rects to simplify the drawing process mergeClipRects(); // Copy any modified areas - for (dr = _dirtyRects.begin(); dr != _dirtyRects.end(); ++dr) { + for (dr = _vm->_dirtyRects.begin(); dr != _vm->_dirtyRects.end(); ++dr) { Common::Rect &r = *dr; g_system->copyRectToScreen(globalScreen + 320 * r.top + r.left, 320, r.left, r.top, r.width(), r.height()); } - _dirtyRects.clear(); + _vm->_dirtyRects.clear(); // Allow the screen to update g_system->updateScreen(); diff --git a/engines/cruise/perso.cpp b/engines/cruise/perso.cpp index 27d3c8cb7d..e86daa5bef 100644 --- a/engines/cruise/perso.cpp +++ b/engines/cruise/perso.cpp @@ -23,6 +23,7 @@ * */ +#include "cruise/cruise.h" #include "cruise/cruise_main.h" #include "common/util.h" @@ -45,14 +46,14 @@ void freeCTP() { freePerso(i); } - if (polyStruct) { - polyStructNorm.clear(); - polyStructExp.clear(); - polyStruct = NULL; + if (_vm->_polyStruct) { + _vm->_polyStructNorm.clear(); + _vm->_polyStructExp.clear(); + _vm->_polyStruct = NULL; } ctpVar17 = NULL; - polyStruct = NULL; + _vm->_polyStruct = NULL; strcpy((char *)currentCtpName, ""); } diff --git a/engines/cruise/saveload.cpp b/engines/cruise/saveload.cpp index 6e50ef8cdb..24ea2facfe 100644 --- a/engines/cruise/saveload.cpp +++ b/engines/cruise/saveload.cpp @@ -579,10 +579,10 @@ static void syncPerso(Common::Serializer &s, persoStruct &p) { } static void syncCT(Common::Serializer &s) { - int v = (polyStruct) ? 1 : 0; + int v = (_vm->_polyStruct) ? 1 : 0; s.syncAsSint32LE(v); if (s.isLoading()) - polyStruct = (v != 0) ? &polyStructNorm : NULL; + _vm->_polyStruct = (v != 0) ? &_vm->_polyStructNorm : NULL; if (v == 0) // There is no further data to load or save diff --git a/engines/cruise/script.cpp b/engines/cruise/script.cpp index f2877a7730..d6c1aa47f3 100644 --- a/engines/cruise/script.cpp +++ b/engines/cruise/script.cpp @@ -618,13 +618,13 @@ int executeScripts(scriptInstanceStruct *ptr) { positionInStack = 0; do { -#ifdef SKIP_INTRO +//#ifdef SKIP_INTRO if (currentScriptPtr->scriptOffset == 290 && currentScriptPtr->overlayNumber == 4 && currentScriptPtr->scriptNumber == 0) { currentScriptPtr->scriptOffset = 923; } -#endif +//#endif opcodeType = getByteFromScript(); debugC(5, kCruiseDebugScript, "Script %s/%d ip=%d opcode=%d", diff --git a/engines/cruise/vars.cpp b/engines/cruise/vars.cpp index bab5d171fd..c61cedc503 100644 --- a/engines/cruise/vars.cpp +++ b/engines/cruise/vars.cpp @@ -64,8 +64,6 @@ int16 autoTrack; int16 currentDiskNumber = 1; -Common::File currentVolumeFile; - int16 volumeNumEntry; fileEntry *volumePtrToFileDescriptor = NULL; diff --git a/engines/cruise/vars.h b/engines/cruise/vars.h index 3cb09602cc..af39993f2f 100644 --- a/engines/cruise/vars.h +++ b/engines/cruise/vars.h @@ -167,8 +167,6 @@ extern int16 autoTrack; extern int16 currentDiskNumber; -extern Common::File currentVolumeFile; - extern int16 volumeNumEntry; extern fileEntry *volumePtrToFileDescriptor; diff --git a/engines/cruise/volume.cpp b/engines/cruise/volume.cpp index 3b856b4440..5535d5a016 100644 --- a/engines/cruise/volume.cpp +++ b/engines/cruise/volume.cpp @@ -23,11 +23,11 @@ * */ +#include "cruise/cruise.h" #include "cruise/cruise_main.h" namespace Cruise { -Common::File PAL_file; uint8 *PAL_ptr = NULL; int16 numLoadedPal; @@ -40,25 +40,25 @@ void loadPal(volumeDataStruct *entry) { #if 0 char name[20]; - if (PAL_file.isOpen()) - PAL_file.close(); + if (_vm->_PAL_file.isOpen()) + _vm->_PAL_file.close(); removeExtention(entry->ident, name); strcat(name, ".PAL"); - if (!PAL_file.open(name)) + if (!_vm->_PAL_file.open(name)) return; - numLoadedPal = PAL_file.readSint16BE(); - fileData2 = PAL_file.readSint16BE(); + numLoadedPal = _vm->_PAL_file.readSint16BE(); + fileData2 = _vm->_PAL_file.readSint16BE(); PAL_ptr = (uint8 *)MemAlloc(numLoadedPal * fileData2); #endif } void closePal() { - if (PAL_file.isOpen()) { - PAL_file.close(); + if (_vm->_PAL_file.isOpen()) { + _vm->_PAL_file.close(); MemFree(PAL_ptr); PAL_ptr = NULL; @@ -69,15 +69,15 @@ void closePal() { } int closeBase() { - if (currentVolumeFile.isOpen()) { - currentVolumeFile.close(); + if (_vm->_currentVolumeFile.isOpen()) { + _vm->_currentVolumeFile.close(); MemFree(volumePtrToFileDescriptor); strcpy(currentBaseName, ""); } - if (PAL_file.isOpen()) { + if (_vm->_PAL_file.isOpen()) { closePal(); } @@ -91,7 +91,7 @@ int getVolumeDataEntry(volumeDataStruct *entry) { volumeNumEntry = 0; volumeNumberOfEntry = 0; - if (currentVolumeFile.isOpen()) { + if (_vm->_currentVolumeFile.isOpen()) { freeDisk(); } @@ -99,16 +99,16 @@ int getVolumeDataEntry(volumeDataStruct *entry) { strcpy(buffer, entry->ident); - currentVolumeFile.open(buffer); + _vm->_currentVolumeFile.open(buffer); - if (!currentVolumeFile.isOpen()) { + if (!_vm->_currentVolumeFile.isOpen()) { return (-14); } changeCursor(CURSOR_DISK); - volumeNumberOfEntry = currentVolumeFile.readSint16BE(); - volumeSizeOfEntry = currentVolumeFile.readSint16BE(); + volumeNumberOfEntry = _vm->_currentVolumeFile.readSint16BE(); + volumeSizeOfEntry = _vm->_currentVolumeFile.readSint16BE(); volumeNumEntry = volumeNumberOfEntry; @@ -125,11 +125,11 @@ int getVolumeDataEntry(volumeDataStruct *entry) { } for (i = 0; i < volumeNumEntry; i++) { - currentVolumeFile.read(&volumePtrToFileDescriptor[i].name, 14); - volumePtrToFileDescriptor[i].offset = currentVolumeFile.readSint32BE(); - volumePtrToFileDescriptor[i].size = currentVolumeFile.readSint32BE(); - volumePtrToFileDescriptor[i].extSize = currentVolumeFile.readSint32BE(); - volumePtrToFileDescriptor[i].unk3 = currentVolumeFile.readSint32BE(); + _vm->_currentVolumeFile.read(&volumePtrToFileDescriptor[i].name, 14); + volumePtrToFileDescriptor[i].offset = _vm->_currentVolumeFile.readSint32BE(); + volumePtrToFileDescriptor[i].size = _vm->_currentVolumeFile.readSint32BE(); + volumePtrToFileDescriptor[i].extSize = _vm->_currentVolumeFile.readSint32BE(); + volumePtrToFileDescriptor[i].unk3 = _vm->_currentVolumeFile.readSint32BE(); } strcpy(currentBaseName, entry->ident); @@ -178,8 +178,8 @@ int32 findFileInDisksSub1(const char *fileName) { } void freeDisk() { - if (currentVolumeFile.isOpen()) { - currentVolumeFile.close(); + if (_vm->_currentVolumeFile.isOpen()) { + _vm->_currentVolumeFile.close(); MemFree(volumePtrToFileDescriptor); } @@ -194,7 +194,7 @@ void freeDisk() { int16 findFileInList(char *fileName) { int i; - if (!currentVolumeFile.isOpen()) { + if (!_vm->_currentVolumeFile.isOpen()) { return (-1); } @@ -248,7 +248,7 @@ int16 findFileInDisks(const char *name) { if (!volumeDataLoaded) { debug(1, "CNF wasn't loaded, reading now..."); - if (currentVolumeFile.isOpen()) { + if (_vm->_currentVolumeFile.isOpen()) { askDisk(-1); freeDisk(); } @@ -257,7 +257,7 @@ int16 findFileInDisks(const char *name) { readVolCnf(); } - if (currentVolumeFile.isOpen()) { + if (_vm->_currentVolumeFile.isOpen()) { askDisk(-1); } @@ -274,7 +274,7 @@ int16 findFileInDisks(const char *name) { debug(1, "File found on disk %d", disk); - if (currentVolumeFile.isOpen()) { + if (_vm->_currentVolumeFile.isOpen()) { askDisk(-1); } diff --git a/engines/gob/demos/demoplayer.cpp b/engines/gob/demos/demoplayer.cpp index 38e20a46ee..25cd470f04 100644 --- a/engines/gob/demos/demoplayer.cpp +++ b/engines/gob/demos/demoplayer.cpp @@ -152,12 +152,13 @@ void DemoPlayer::playVideo(const char *fileName) { debugC(1, kDebugDemo, "Playing video \"%s\"", file); - int16 x = _rebase0 ? 0 : -1; - int16 y = _rebase0 ? 0 : -1; - if (_vm->_vidPlayer->primaryOpen(file, x, y)) { - bool videoSupportsDouble = - ((_vm->_vidPlayer->getFeatures() & Graphics::CoktelVideo::kFeaturesSupportsDouble) != 0); + VideoPlayer::Properties props; + props.x = _rebase0 ? 0 : -1; + props.y = _rebase0 ? 0 : -1; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, file, props)) >= 0) { if (_autoDouble) { int16 defX = _rebase0 ? 0 : _vm->_vidPlayer->getDefaultX(); int16 defY = _rebase0 ? 0 : _vm->_vidPlayer->getDefaultY(); @@ -167,16 +168,12 @@ void DemoPlayer::playVideo(const char *fileName) { _doubleMode = ((right < 320) && (bottom < 200)); } - if (_doubleMode) { - if (videoSupportsDouble) { - _vm->_vidPlayer->slotSetDoubleMode(-1, true); - playVideoNormal(); - } else - playVideoDoubled(); - } else - playVideoNormal(); + if (_doubleMode) + playVideoDoubled(slot); + else + playVideoNormal(slot); - _vm->_vidPlayer->primaryClose(); + _vm->_vidPlayer->closeVideo(slot); if (waitTime > 0) _vm->_util->longDelay(waitTime); @@ -210,51 +207,67 @@ void DemoPlayer::playADL(const char *params) { playADL(fileName, waitEsc, repeat); } -void DemoPlayer::playVideoNormal() { - _vm->_vidPlayer->primaryPlay(); +void DemoPlayer::playVideoNormal(int slot) { + VideoPlayer::Properties props; + + _vm->_vidPlayer->play(slot, props); } -void DemoPlayer::playVideoDoubled() { - Common::String fileNameOpened = _vm->_vidPlayer->getFileName(); - _vm->_vidPlayer->primaryClose(); +void DemoPlayer::playVideoDoubled(int slot) { + Common::String fileNameOpened = _vm->_vidPlayer->getFileName(slot); + _vm->_vidPlayer->closeVideo(slot); - int16 x = _rebase0 ? 0 : -1; - int16 y = _rebase0 ? 0 : -1; - if (_vm->_vidPlayer->primaryOpen(fileNameOpened.c_str(), x, y, - VideoPlayer::kFlagScreenSurface)) { + VideoPlayer::Properties props; - for (int i = 0; i < _vm->_vidPlayer->getFramesCount(); i++) { - _vm->_vidPlayer->playFrame(i); + props.x = _rebase0 ? 0 : -1; + props.y = _rebase0 ? 0 : -1; + props.flags = VideoPlayer::kFlagScreenSurface; + props.waitEndFrame = false; - Graphics::CoktelVideo::State state = _vm->_vidPlayer->getState(); + _vm->_vidPlayer->evaluateFlags(props); + + slot = _vm->_vidPlayer->openVideo(true, fileNameOpened, props); + if (slot < 0) + return; - int16 w = state.right - state.left + 1; - int16 h = state.bottom - state.top + 1; - int16 wD = (state.left * 2) + (w * 2); - int16 hD = (state.top * 2) + (h * 2); + for (uint i = 0; i < _vm->_vidPlayer->getFrameCount(slot); i++) { + props.startFrame = _vm->_vidPlayer->getCurrentFrame(slot) + 1; + props.lastFrame = _vm->_vidPlayer->getCurrentFrame(slot) + 1; + + _vm->_vidPlayer->play(slot, props); + + const Common::List<Common::Rect> *rects = _vm->_vidPlayer->getDirtyRects(slot); + if (rects) { + for (Common::List<Common::Rect>::const_iterator rect = rects->begin(); rect != rects->end(); ++rect) { + int16 w = rect->right - rect->left; + int16 h = rect->bottom - rect->top; + int16 wD = (rect->left * 2) + (w * 2); + int16 hD = (rect->top * 2) + (h * 2); _vm->_video->drawSpriteDouble(*_vm->_draw->_spritesArray[0], *_vm->_draw->_frontSurface, - state.left, state.top, state.right, state.bottom, state.left, state.top, 0); + rect->left, rect->top, rect->right - 1, rect->bottom - 1, rect->left, rect->top, 0); _vm->_draw->dirtiedRect(_vm->_draw->_frontSurface, - state.left * 2, state.top * 2, wD, hD); - _vm->_video->retrace(); + rect->left * 2, rect->top * 2, wD, hD); + } + } - _vm->_util->processInput(); - if (_vm->shouldQuit()) - break; + _vm->_video->retrace(); - int16 key; - bool end = false; - while (_vm->_util->checkKey(key)) - if (key == kKeyEscape) - end = true; - if (end) - break; + _vm->_util->processInput(); + if (_vm->shouldQuit()) + break; - _vm->_vidPlayer->slotWaitEndFrame(); + int16 key; + bool end = false; + while (_vm->_util->checkKey(key)) + if (key == kKeyEscape) + end = true; + if (end) + break; - } + _vm->_vidPlayer->waitEndFrame(slot); } + } void DemoPlayer::playADL(const Common::String &fileName, bool waitEsc, int32 repeat) { diff --git a/engines/gob/demos/demoplayer.h b/engines/gob/demos/demoplayer.h index f0672b9645..207b050363 100644 --- a/engines/gob/demos/demoplayer.h +++ b/engines/gob/demos/demoplayer.h @@ -59,8 +59,8 @@ protected: void playVideo(const char *fileName); void playADL(const char *params); - void playVideoNormal(); - void playVideoDoubled(); + void playVideoNormal(int slot); + void playVideoDoubled(int slot); void playADL(const Common::String &fileName, bool waitEsc = true, int32 repeat = -1); private: diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp index ff6d558998..b572ccb566 100644 --- a/engines/gob/draw.cpp +++ b/engines/gob/draw.cpp @@ -538,8 +538,6 @@ void Draw::activeWin(int16 id) { SurfaceDescPtr tempSrf; SurfaceDescPtr oldSrf[10]; - warning ("activeWindow %d", id); - if (_fascinWin[id].id == -1) return; @@ -682,9 +680,8 @@ int16 Draw::openWin(int16 id) { _fascinWin[id].top = VAR((_winVarArrayTop / 4) + id); _fascinWin[id].width = VAR((_winVarArrayWidth / 4) + id); _fascinWin[id].height = VAR((_winVarArrayHeight / 4) + id); - _fascinWin[id].savedSurface = _vm->_video->initSurfDesc(_vm->_global->_videoMode, _winMaxWidth + 7, _winMaxHeight, 0); - warning("Draw::openWin id %d- left %d top %d l %d h%d", id, _fascinWin[id].left, _fascinWin[id].top, _fascinWin[id].width, _fascinWin[id].height); + _fascinWin[id].savedSurface = _vm->_video->initSurfDesc(_vm->_global->_videoMode, _winMaxWidth + 7, _winMaxHeight, 0); saveWin(id); WRITE_VAR((_winVarArrayStatus / 4) + id, VAR((_winVarArrayStatus / 4) + id) & 0xFFFFFFFE); @@ -693,7 +690,6 @@ int16 Draw::openWin(int16 id) { } void Draw::restoreWin(int16 i) { - warning("restoreWin"); _vm->_video->drawSprite(*_fascinWin[i].savedSurface, *_backSurface, _fascinWin[i].left & 7, 0, (_fascinWin[i].left & 7) + _fascinWin[i].width - 1, _fascinWin[i].height - 1, @@ -704,7 +700,6 @@ void Draw::restoreWin(int16 i) { } void Draw::saveWin(int16 id) { - warning("saveWin"); _vm->_video->drawSprite(*_backSurface, *_fascinWin[id].savedSurface, _fascinWin[id].left, _fascinWin[id].top, _fascinWin[id].left + _fascinWin[id].width - 1, @@ -765,7 +760,6 @@ void Draw::handleWinBorder(int16 id) { int16 maxX = 320; int16 minY = 0; int16 maxY = 200; - warning("handleWinBorder %d", id); if (VAR((_winVarArrayStatus / 4) + id) & 8) minX = (int16)(VAR((_winVarArrayLimitsX / 4) + id) >> 16L); @@ -884,8 +878,6 @@ int16 Draw::handleCurWin() { } void Draw::winDecomp(int16 x, int16 y, SurfaceDescPtr destPtr) { - warning("winDecomp %d %d - getResource %d %d %d", x, y, _spriteLeft, _spriteRight, _spriteBottom); - Resource *resource; resource = _vm->_game->_resources->getResource((uint16) _spriteLeft, &_spriteRight, &_spriteBottom); @@ -906,15 +898,13 @@ void Draw::winDraw(int16 fct) { int16 width; int16 height; - warning("winDraw %d", fct); - bool found = false; int len; Resource *resource; int table[10]; SurfaceDescPtr tempSrf; - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { if (_vm->_global->_curWinId) { if (_fascinWin[_vm->_global->_curWinId].id == -1) @@ -1032,7 +1022,7 @@ void Draw::winDraw(int16 fct) { table[_fascinWin[i].id] = i; } - if ((_sourceSurface == 21) && (fct == 0)) { + if ((_sourceSurface == kBackSurface) && (fct == 0)) { _vm->_video->drawSprite(*_spritesArray[_sourceSurface], *_spritesArray[_destSurface], _spriteLeft, _spriteTop, _spriteLeft + _spriteRight - 1, _spriteTop + _spriteBottom - 1, _destSpriteX, _destSpriteY, _transparency); @@ -1267,11 +1257,11 @@ void Draw::winDraw(int16 fct) { } if (_renderFlags & 16) { - if (_sourceSurface == 21) { + if (_sourceSurface == kBackSurface) { _spriteLeft -= _backDeltaX; _spriteTop -= _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX -= _backDeltaX; _destSpriteY -= _backDeltaY; } @@ -1323,9 +1313,9 @@ void Draw::forceBlit(bool backwards) { return; if (_frontSurface == _backSurface) return; - if (_spritesArray[20] != _frontSurface) + if (_spritesArray[kFrontSurface] != _frontSurface) return; - if (_spritesArray[21] != _backSurface) + if (_spritesArray[kBackSurface] != _backSurface) return; if (!backwards) { diff --git a/engines/gob/draw.h b/engines/gob/draw.h index 8997c53362..fa3cbb84cc 100644 --- a/engines/gob/draw.h +++ b/engines/gob/draw.h @@ -45,7 +45,12 @@ namespace Gob { class Draw { public: - static const int kFontCount = 8; + static const int kFontCount = 8; + static const int kFrontSurface = 20; + static const int kBackSurface = 21; + static const int kAnimSurface = 22; + static const int kCursorSurface = 23; + static const int kCaptureSurface = 30; struct FontToSprite { int8 sprite; diff --git a/engines/gob/draw_fascin.cpp b/engines/gob/draw_fascin.cpp index 9d30faa972..1e01db7dfb 100644 --- a/engines/gob/draw_fascin.cpp +++ b/engines/gob/draw_fascin.cpp @@ -53,12 +53,12 @@ void Draw_Fascination::spriteOperation(int16 operation) { _destSurface -= 80; if ((_renderFlags & RENDERFLAG_USEDELTAS) && !deltaVeto) { - if ((_sourceSurface == 21) && (operation != DRAW_LOADSPRITE)) { + if ((_sourceSurface == kBackSurface) && (operation != DRAW_LOADSPRITE)) { _spriteLeft += _backDeltaX; _spriteTop += _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX += _backDeltaX; _destSpriteY += _backDeltaY; if ((operation == DRAW_DRAWLINE) || @@ -70,7 +70,7 @@ void Draw_Fascination::spriteOperation(int16 operation) { } if (_renderFlags & 0x20) { - if (_destSurface == 21 || (operation == 0 && _sourceSurface == 21)) { + if (_destSurface == kBackSurface || (operation == 0 && _sourceSurface == kBackSurface)) { winDraw(operation); return; } @@ -86,7 +86,7 @@ void Draw_Fascination::spriteOperation(int16 operation) { int16 destSurface = _destSurface; int16 sourceSurface = _sourceSurface; - if (_vm->_video->_splitSurf && ((_destSurface == 20) || (_destSurface == 21))) { + if (_vm->_video->_splitSurf && ((_destSurface == kFrontSurface) || (_destSurface == kBackSurface))) { if ((_destSpriteY >= _vm->_video->_splitStart)) { _destSpriteY -= _vm->_video->_splitStart; if ((operation == DRAW_DRAWLINE) || @@ -340,12 +340,12 @@ void Draw_Fascination::spriteOperation(int16 operation) { } if ((_renderFlags & RENDERFLAG_USEDELTAS) && !deltaVeto) { - if (_sourceSurface == 21) { + if (_sourceSurface == kBackSurface) { _spriteLeft -= _backDeltaX; _spriteTop -= _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX -= _backDeltaX; _destSpriteY -= _backDeltaY; } diff --git a/engines/gob/draw_playtoons.cpp b/engines/gob/draw_playtoons.cpp index 862cdd33eb..583d13986e 100644 --- a/engines/gob/draw_playtoons.cpp +++ b/engines/gob/draw_playtoons.cpp @@ -53,12 +53,12 @@ void Draw_Playtoons::spriteOperation(int16 operation) { _destSurface -= 80; if ((_renderFlags & RENDERFLAG_USEDELTAS) && !deltaVeto) { - if ((_sourceSurface == 21) && (operation != DRAW_LOADSPRITE)) { + if ((_sourceSurface == kBackSurface) && (operation != DRAW_LOADSPRITE)) { _spriteLeft += _backDeltaX; _spriteTop += _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX += _backDeltaX; _destSpriteY += _backDeltaY; if ((operation == DRAW_DRAWLINE) || @@ -78,7 +78,7 @@ void Draw_Playtoons::spriteOperation(int16 operation) { int16 destSurface = _destSurface; int16 sourceSurface = _sourceSurface; - if (_vm->_video->_splitSurf && ((_destSurface == 20) || (_destSurface == 21))) { + if (_vm->_video->_splitSurf && ((_destSurface == kFrontSurface) || (_destSurface == kBackSurface))) { if ((_destSpriteY >= _vm->_video->_splitStart)) { _destSpriteY -= _vm->_video->_splitStart; if ((operation == DRAW_DRAWLINE) || @@ -409,12 +409,12 @@ void Draw_Playtoons::spriteOperation(int16 operation) { } if ((_renderFlags & RENDERFLAG_USEDELTAS) && !deltaVeto) { - if (_sourceSurface == 21) { + if (_sourceSurface == kBackSurface) { _spriteLeft -= _backDeltaX; _spriteTop -= _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX -= _backDeltaX; _destSpriteY -= _backDeltaY; } diff --git a/engines/gob/draw_v1.cpp b/engines/gob/draw_v1.cpp index 719945fd6f..1cec15ce04 100644 --- a/engines/gob/draw_v1.cpp +++ b/engines/gob/draw_v1.cpp @@ -184,7 +184,7 @@ void Draw_v1::printTotText(int16 id) { _destSpriteY = destY; _spriteRight = spriteRight; _spriteBottom = spriteBottom; - _destSurface = 21; + _destSurface = kBackSurface; _backColor = *ptr++; _transparency = 1; @@ -326,12 +326,12 @@ void Draw_v1::spriteOperation(int16 operation) { _destSurface -= 80; if (_renderFlags & RENDERFLAG_USEDELTAS) { - if (_sourceSurface == 21) { + if (_sourceSurface == kBackSurface) { _spriteLeft += _backDeltaX; _spriteTop += _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX += _backDeltaX; _destSpriteY += _backDeltaY; if ((operation == DRAW_DRAWLINE) || @@ -508,12 +508,12 @@ void Draw_v1::spriteOperation(int16 operation) { } if (_renderFlags & RENDERFLAG_USEDELTAS) { - if (_sourceSurface == 21) { + if (_sourceSurface == kBackSurface) { _spriteLeft -= _backDeltaX; _spriteTop -= _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX -= _backDeltaX; _destSpriteY -= _backDeltaY; } diff --git a/engines/gob/draw_v2.cpp b/engines/gob/draw_v2.cpp index 985f84aaef..5d001f4b59 100644 --- a/engines/gob/draw_v2.cpp +++ b/engines/gob/draw_v2.cpp @@ -51,30 +51,30 @@ void Draw_v2::initScreen() { _scrollOffsetX = 0; _scrollOffsetY = 0; - initSpriteSurf(21, _vm->_video->_surfWidth, _vm->_video->_surfHeight, 0); - _backSurface = _spritesArray[21]; + initSpriteSurf(kBackSurface, _vm->_video->_surfWidth, _vm->_video->_surfHeight, 0); + _backSurface = _spritesArray[kBackSurface]; _vm->_video->clearSurf(*_backSurface); - if (!_spritesArray[23]) { - initSpriteSurf(23, 32, 16, 2); - _cursorSpritesBack = _spritesArray[23]; + if (!_spritesArray[kCursorSurface]) { + initSpriteSurf(kCursorSurface, 32, 16, 2); + _cursorSpritesBack = _spritesArray[kCursorSurface]; _cursorSprites = _cursorSpritesBack; _scummvmCursor = _vm->_video->initSurfDesc(_vm->_global->_videoMode, 16, 16, SCUMMVM_CURSOR); } - _spritesArray[20] = _frontSurface; - _spritesArray[21] = _backSurface; + _spritesArray[kFrontSurface] = _frontSurface; + _spritesArray[kBackSurface ] = _backSurface; _vm->_video->dirtyRectsAll(); } void Draw_v2::closeScreen() { - //freeSprite(23); + //freeSprite(kCursorSurface); //_cursorSprites = 0; //_cursorSpritesBack = 0; //_scummvmCursor = 0; - freeSprite(21); + freeSprite(kBackSurface); } void Draw_v2::blitCursor() { @@ -273,7 +273,7 @@ void Draw_v2::printTotText(int16 id) { _destSpriteY = destY; _spriteRight = spriteRight; _spriteBottom = spriteBottom; - _destSurface = 21; + _destSurface = kBackSurface; _backColor = *ptr++; _transparency = 1; @@ -629,12 +629,12 @@ void Draw_v2::spriteOperation(int16 operation) { _destSurface -= 80; if ((_renderFlags & RENDERFLAG_USEDELTAS) && !deltaVeto) { - if ((_sourceSurface == 21) && (operation != DRAW_LOADSPRITE)) { + if ((_sourceSurface == kBackSurface) && (operation != DRAW_LOADSPRITE)) { _spriteLeft += _backDeltaX; _spriteTop += _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX += _backDeltaX; _destSpriteY += _backDeltaY; if ((operation == DRAW_DRAWLINE) || @@ -654,7 +654,7 @@ void Draw_v2::spriteOperation(int16 operation) { int16 destSurface = _destSurface; int16 sourceSurface = _sourceSurface; - if (_vm->_video->_splitSurf && ((_destSurface == 20) || (_destSurface == 21))) { + if (_vm->_video->_splitSurf && ((_destSurface == kFrontSurface) || (_destSurface == kBackSurface))) { if ((_destSpriteY >= _vm->_video->_splitStart)) { _destSpriteY -= _vm->_video->_splitStart; if ((operation == DRAW_DRAWLINE) || @@ -908,12 +908,12 @@ void Draw_v2::spriteOperation(int16 operation) { } if ((_renderFlags & RENDERFLAG_USEDELTAS) && !deltaVeto) { - if (_sourceSurface == 21) { + if (_sourceSurface == kBackSurface) { _spriteLeft -= _backDeltaX; _spriteTop -= _backDeltaY; } - if (_destSurface == 21) { + if (_destSurface == kBackSurface) { _destSpriteX -= _backDeltaX; _destSpriteY -= _backDeltaY; } diff --git a/engines/gob/game.cpp b/engines/gob/game.cpp index ddf095a5d1..1a8823b156 100644 --- a/engines/gob/game.cpp +++ b/engines/gob/game.cpp @@ -286,8 +286,8 @@ void Game::playTot(int16 skipPlay) { _vm->_mult->initAll(); _vm->_mult->zeroMultData(); - _vm->_draw->_spritesArray[20] = _vm->_draw->_frontSurface; - _vm->_draw->_spritesArray[21] = _vm->_draw->_backSurface; + _vm->_draw->_spritesArray[Draw::kFrontSurface] = _vm->_draw->_frontSurface; + _vm->_draw->_spritesArray[Draw::kBackSurface ] = _vm->_draw->_backSurface; _vm->_draw->_cursorSpritesBack = _vm->_draw->_cursorSprites; } else _vm->_inter->initControlVars(0); @@ -299,7 +299,7 @@ void Game::playTot(int16 skipPlay) { break; if (skipPlay == -2) { - _vm->_vidPlayer->primaryClose(); + _vm->_vidPlayer->closeVideo(); skipPlay = 0; } @@ -397,10 +397,10 @@ void Game::capturePush(int16 left, int16 top, int16 width, int16 height) { left &= 0xFFF0; right |= 0xF; - _vm->_draw->initSpriteSurf(30 + _captureCount, right - left + 1, height, 0); + _vm->_draw->initSpriteSurf(Draw::kCaptureSurface + _captureCount, right - left + 1, height, 0); - _vm->_draw->_sourceSurface = 21; - _vm->_draw->_destSurface = 30 + _captureCount; + _vm->_draw->_sourceSurface = Draw::kBackSurface; + _vm->_draw->_destSurface = Draw::kCaptureSurface + _captureCount; _vm->_draw->_spriteLeft = left; _vm->_draw->_spriteRight = right - left + 1; @@ -425,13 +425,13 @@ void Game::capturePop(char doDraw) { _captureStack[_captureCount].height(); _vm->_draw->_transparency = 0; - _vm->_draw->_sourceSurface = 30 + _captureCount; - _vm->_draw->_destSurface = 21; + _vm->_draw->_sourceSurface = Draw::kCaptureSurface + _captureCount; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_spriteLeft = _vm->_draw->_destSpriteX & 0xF; _vm->_draw->_spriteTop = 0; _vm->_draw->spriteOperation(0); } - _vm->_draw->freeSprite(30 + _captureCount); + _vm->_draw->freeSprite(Draw::kCaptureSurface + _captureCount); } void Game::freeSoundSlot(int16 slot) { diff --git a/engines/gob/hotspots.cpp b/engines/gob/hotspots.cpp index abdf513393..1edb7fc0cb 100644 --- a/engines/gob/hotspots.cpp +++ b/engines/gob/hotspots.cpp @@ -257,7 +257,7 @@ uint16 Hotspots::add(const Hotspot &hotspot) { // Remember the current script spot.script = _vm->_game->_script; - debugC(1, kDebugHotspots, "Adding hotspot %03d: %3d+%3d+%3d+%3d - %04X, %04X, %04X - %5d, %5d, %5d", + debugC(1, kDebugHotspots, "Adding hotspot %03d: Coord:%3d+%3d+%3d+%3d - id:%04X, key:%04X, flag:%04X - fcts:%5d, %5d, %5d", i, spot.left, spot.top, spot.right, spot.bottom, spot.id, spot.key, spot.flags, spot.funcEnter, spot.funcLeave, spot.funcPos); @@ -537,10 +537,12 @@ int16 Hotspots::curWindow(int16 &dx, int16 &dy) const { if (_vm->_global->_inter_mouseX < _vm->_draw->_fascinWin[i].left + 12 && _vm->_global->_inter_mouseY < _vm->_draw->_fascinWin[i].top + 12 && (VAR((_vm->_draw->_winVarArrayStatus / 4) + i) & 2)) + // Cursor on 'Close Window' return(5); if (_vm->_global->_inter_mouseX >= _vm->_draw->_fascinWin[i].left + _vm->_draw->_fascinWin[i].width - 12 && _vm->_global->_inter_mouseY < _vm->_draw->_fascinWin[i].top + 12 && (VAR((_vm->_draw->_winVarArrayStatus / 4) + i) & 4)) + // Cursor on 'Move Window' return(6); return(-i); } @@ -637,7 +639,6 @@ uint16 Hotspots::checkMouse(Type type, uint16 &id, uint16 &index) const { return kKeyEscape; return 0; - } return 0; @@ -798,11 +799,11 @@ uint16 Hotspots::check(uint8 handleMouse, int16 delay, uint16 &id, uint16 &index if (isValid(_currentKey, _currentId, _currentIndex)) enter(_currentIndex); } else { - WRITE_VAR(16, (int32) i); + WRITE_VAR(16, (int32)i); if (id) - id=0; + id = 0; if (index) - index=0; + index = 0; return(0); } } else @@ -1104,7 +1105,6 @@ uint16 Hotspots::updateInput(uint16 xPos, uint16 yPos, uint16 width, uint16 heig // Add character _vm->_util->insertStr(tempStr, str, pos - 1); } - } } } @@ -1204,13 +1204,13 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, // Type and window byte type = _vm->_game->_script->readByte(); - byte window = 0; + byte windowNum = 0; if ((type & 0x40) != 0) { // Got a window ID type -= 0x40; - window = _vm->_game->_script->readByte(); + windowNum = _vm->_game->_script->readByte(); } // Coordinates @@ -1238,21 +1238,21 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, _vm->_draw->_invalidatedRights[0] = 319; _vm->_draw->_invalidatedBottoms[0] = 199; _vm->_draw->_invalidatedCount = 1; - if (window == 0) { + if (windowNum == 0) { _vm->_video->drawLine(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface], left + width - 1, top, left + width - 1, top + height - 1, 0); _vm->_video->drawLine(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface], left, top, left, top + height - 1, 0); _vm->_video->drawLine(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface], left, top, left + width - 1, top, 0); _vm->_video->drawLine(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface], left, top + height - 1, left + width - 1, top + height - 1, 0); } else - if ((_vm->_draw->_fascinWin[window].id != -1) && (_vm->_draw->_fascinWin[window].id == _vm->_draw->_winCount - 1)) { - left += _vm->_draw->_fascinWin[window].left; - top += _vm->_draw->_fascinWin[window].top; + if ((_vm->_draw->_fascinWin[windowNum].id != -1) && (_vm->_draw->_fascinWin[windowNum].id == _vm->_draw->_winCount - 1)) { + left += _vm->_draw->_fascinWin[windowNum].left; + top += _vm->_draw->_fascinWin[windowNum].top; _vm->_video->drawLine(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface], left + width - 1, top, left + width - 1, top + height - 1, 0); _vm->_video->drawLine(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface], left, top, left, top + height - 1, 0); _vm->_video->drawLine(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface], left, top, left + width - 1, top, 0); _vm->_video->drawLine(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface], left, top + height - 1, left + width - 1, top + height - 1, 0); - left -= _vm->_draw->_fascinWin[window].left; - top -= _vm->_draw->_fascinWin[window].top; + left -= _vm->_draw->_fascinWin[windowNum].left; + top -= _vm->_draw->_fascinWin[windowNum].top; } } type &= 0x7F; @@ -1296,6 +1296,9 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, Font *font = 0; uint32 funcEnter = 0, funcLeave = 0; + if ((windowNum != 0) && (type != 0) && (type != 2)) + warning("evaluateNew - type %d, win %d\n",type, windowNum); + // Evaluate parameters for the new hotspot switch (type) { case kTypeNone: @@ -1308,7 +1311,7 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, _vm->_game->_script->skipBlock(); key = i + ((kStateFilled | kStateType2) << 12); - flags = type + (window << 8); + flags = type + (windowNum << 8); break; case kTypeMove: @@ -1325,7 +1328,7 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, if (key == 0) key = i + ((kStateFilled | kStateType2) << 12); - flags = type + (window << 8) + (flags << 4); + flags = type + (windowNum << 8) + (flags << 4); break; case kTypeInput1NoLeave: @@ -1390,12 +1393,15 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, ids[i] = _vm->_game->_script->readInt16(); flags = _vm->_game->_script->readInt16(); + if (flags > 3) + warning("evaluateNew: Warning, use of type 2 or 20. flags = %d, should be %d\n", flags, flags&3); + funcEnter = 0; funcLeave = _vm->_game->_script->pos(); _vm->_game->_script->skipBlock(); - flags = ((uint16) kTypeClick) + (window << 8) + (flags << 4); + flags = ((uint16) kTypeClick) + (windowNum << 8) + (flags << 4); break; case kTypeClickEnter: @@ -1408,7 +1414,7 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, funcLeave = 0; - flags = ((uint16) kTypeClick) + (window << 8) + (flags << 4); + flags = ((uint16) kTypeClick) + (windowNum << 8) + (flags << 4); break; } @@ -1418,8 +1424,10 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, } bool Hotspots::evaluateFind(uint16 key, int16 timeVal, const uint16 *ids, - uint16 hotspotIndex1, uint16 hotspotIndex2, uint16 endIndex, - int16 &duration, uint16 &id, uint16 &index, bool &finished) { + uint16 leaveWindowIndex, uint16 hotspotIndex1, uint16 hotspotIndex2, + uint16 endIndex, int16 &duration, uint16 &id, uint16 &index, bool &finished) { + + bool fascinCheck = false; if (id != 0) // We already found a hotspot, nothing to do @@ -1442,8 +1450,10 @@ bool Hotspots::evaluateFind(uint16 key, int16 timeVal, const uint16 *ids, return false; } + if ((_vm->getGameType() == kGameTypeFascination) && (getCurrentHotspot())) + fascinCheck = true; - if (duration != 0) { + if ((duration != 0) && (!fascinCheck)) { // We've got a time duration if (hotspotIndex1 != 0) { @@ -1473,6 +1483,12 @@ bool Hotspots::evaluateFind(uint16 key, int16 timeVal, const uint16 *ids, return true; return false; + } else { + if (leaveWindowIndex != 0) + findNthPlain(leaveWindowIndex, endIndex, id, index); + + if (id != 0) + return true; } return false; @@ -1500,6 +1516,11 @@ void Hotspots::evaluate() { // Parameters of this block _vm->_game->_handleMouse = _vm->_game->_script->peekByte(0); int16 duration = _vm->_game->_script->peekByte(1); + + byte leaveWindowIndex = 0; + if ( _vm->getGameType() == kGameTypeFascination ) + leaveWindowIndex = _vm->_game->_script->peekByte(2); + byte hotspotIndex1 = _vm->_game->_script->peekByte(3); byte hotspotIndex2 = _vm->_game->_script->peekByte(4); bool needRecalculation = _vm->_game->_script->peekByte(5) != 0; @@ -1562,7 +1583,7 @@ void Hotspots::evaluate() { key = convertSpecialKey(key); // Try to find a fitting hotspot - Hotspots::evaluateFind(key, timeVal, ids, hotspotIndex1, hotspotIndex2, endIndex, + evaluateFind(key, timeVal, ids, leaveWindowIndex, hotspotIndex1, hotspotIndex2, endIndex, duration, id, index, finishedDuration); if (finishedDuration) @@ -1623,9 +1644,9 @@ int16 Hotspots::findCursor(uint16 x, uint16 y) const { int16 deltax = 0; int16 deltay = 0; - if ( _vm->getGameType() == kGameTypeFascination ) { + if ( _vm->getGameType() == kGameTypeFascination ) cursor = curWindow(deltax, deltay); - } + if (cursor == 0) { for (int i = 0; (i < kHotspotCount) && !_hotspots[i].isEnd(); i++) { const Hotspot &spot = _hotspots[i]; @@ -2082,7 +2103,7 @@ void Hotspots::getTextCursorPos(const Font &font, const char *str, } void Hotspots::fillRect(uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) const { - _vm->_draw->_destSurface = 21; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_destSpriteX = x; _vm->_draw->_destSpriteY = y; _vm->_draw->_spriteRight = width; diff --git a/engines/gob/hotspots.h b/engines/gob/hotspots.h index a7cbf9d6e8..cba400d5b6 100644 --- a/engines/gob/hotspots.h +++ b/engines/gob/hotspots.h @@ -104,7 +104,6 @@ public: /** implementation of oPlaytoons_F_1B code*/ void oPlaytoons_F_1B(); - private: struct Hotspot { uint16 id; @@ -225,8 +224,8 @@ private: uint16 &inputId, bool &hasInput, uint16 &inputCount); /** Find the hotspot requested by script commands. */ bool evaluateFind(uint16 key, int16 timeVal, const uint16 *ids, - uint16 hotspotIndex1, uint16 hotspotIndex2, uint16 endIndex, - int16 &duration, uint16 &id, uint16 &index, bool &finished); + uint16 leaveWindowIndex, uint16 hotspotIndex1, uint16 hotspotIndex2, + uint16 endIndex, int16 &duration, uint16 &id, uint16 &index, bool &finished); // Finding specific hotspots /** Find the hotspot index that corresponds to the input index. */ diff --git a/engines/gob/init.cpp b/engines/gob/init.cpp index 24a8e0a390..3da71a2ba6 100644 --- a/engines/gob/init.cpp +++ b/engines/gob/init.cpp @@ -174,9 +174,11 @@ void Init::initGame() { _vm->_util->longDelay(200); // Letting everything settle - if (_vm->_vidPlayer->primaryOpen("coktel.imd")) { - _vm->_vidPlayer->primaryPlay(); - _vm->_vidPlayer->primaryClose(); + VideoPlayer::Properties props; + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "coktel.imd", props)) >= 0) { + _vm->_vidPlayer->play(slot, props); + _vm->_vidPlayer->closeVideo(slot); } _vm->_draw->closeScreen(); diff --git a/engines/gob/inter_bargon.cpp b/engines/gob/inter_bargon.cpp index da8ca103aa..5c56196641 100644 --- a/engines/gob/inter_bargon.cpp +++ b/engines/gob/inter_bargon.cpp @@ -72,17 +72,47 @@ void Inter_Bargon::setupOpcodesGob() { } void Inter_Bargon::oBargon_intro0(OpGobParams ¶ms) { - if (_vm->_vidPlayer->primaryOpen("scaa", 0, 160)) { - _vm->_vidPlayer->primaryPlay(0, 92, 27, 0, 0, 0); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties props; + + props.x = 0; + props.y = 160; + props.startFrame = 0; + props.lastFrame = 92; + props.palCmd = 0; + props.palStart = 0; + props.palEnd = 0; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "scaa", props)) < 0) + return; + + _vm->_vidPlayer->play(slot, props); + _vm->_vidPlayer->closeVideo(slot); } void Inter_Bargon::oBargon_intro1(OpGobParams ¶ms) { - if (_vm->_vidPlayer->primaryOpen("scaa", 0, 160)) { - _vm->_vidPlayer->primaryPlay(0, -1, 27, 0, 0, 0, 0, 0, true, 23); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties props; + + props.x = 0; + props.y = 160; + props.palCmd = 0; + props.palStart = 0; + props.palEnd = 0; + props.fade = true; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "scaa", props)) < 0) + return; + + _vm->_vidPlayer->play(slot, props); + + props.startFrame = -1; + props.lastFrame = _vm->_vidPlayer->getFrameCount(slot) - 23; + props.fade = false; + + _vm->_vidPlayer->play(slot, props); + + _vm->_vidPlayer->closeVideo(slot); } void Inter_Bargon::oBargon_intro2(OpGobParams ¶ms) { @@ -178,45 +208,106 @@ void Inter_Bargon::oBargon_intro3(OpGobParams ¶ms) { } void Inter_Bargon::oBargon_intro4(OpGobParams ¶ms) { - if (_vm->_vidPlayer->primaryOpen("scba", 191, 54)) { - _vm->_vidPlayer->primaryPlay(0, -1, 27, 0, 0, 0, 0, 0, true); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties props; + + props.x = 191; + props.y = 54; + props.palCmd = 0; + props.palStart = 0; + props.palEnd = 0; + props.fade = true; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "scba", props)) < 0) + return; + + _vm->_vidPlayer->play(slot, props); + _vm->_vidPlayer->closeVideo(slot); } void Inter_Bargon::oBargon_intro5(OpGobParams ¶ms) { - if (_vm->_vidPlayer->primaryOpen("scbb", 191, 54)) { - _vm->_vidPlayer->primaryPlay(0, -1, 27, 0, 0, 0); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties props; + + props.x = 191; + props.y = 54; + props.palCmd = 0; + props.palStart = 0; + props.palEnd = 0; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "scbb", props)) < 0) + return; + + _vm->_vidPlayer->play(slot, props); + _vm->_vidPlayer->closeVideo(slot); } void Inter_Bargon::oBargon_intro6(OpGobParams ¶ms) { - if (_vm->_vidPlayer->primaryOpen("scbc", 191, 54)) { - _vm->_vidPlayer->primaryPlay(0, -1, 27, 0, 0, 0); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties props; + + props.x = 191; + props.y = 54; + props.palCmd = 0; + props.palStart = 0; + props.palEnd = 0; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "scbc", props)) < 0) + return; + + _vm->_vidPlayer->play(slot, props); + _vm->_vidPlayer->closeVideo(slot); } void Inter_Bargon::oBargon_intro7(OpGobParams ¶ms) { - if (_vm->_vidPlayer->primaryOpen("scbf", 191, 54)) { - _vm->_vidPlayer->primaryPlay(0, -1, 27, 0, 0, 0); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties props; + + props.x = 191; + props.y = 54; + props.palCmd = 0; + props.palStart = 0; + props.palEnd = 0; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "scbf", props)) < 0) + return; + + _vm->_vidPlayer->play(slot, props); + _vm->_vidPlayer->closeVideo(slot); } void Inter_Bargon::oBargon_intro8(OpGobParams ¶ms) { - if (_vm->_vidPlayer->primaryOpen("scbc", 191, 54)) { - _vm->_vidPlayer->primaryPlay(0, -1, 27, 0, 0, 0); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties props; + + props.x = 191; + props.y = 54; + props.palCmd = 0; + props.palStart = 0; + props.palEnd = 0; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "scbc", props)) < 0) + return; + + _vm->_vidPlayer->play(slot, props); + _vm->_vidPlayer->closeVideo(slot); } void Inter_Bargon::oBargon_intro9(OpGobParams ¶ms) { - if (_vm->_vidPlayer->primaryOpen("scbd", 191, 54)) { - _vm->_vidPlayer->primaryPlay(0, -1, 27, 0, 0, 0); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties props; + + props.x = 191; + props.y = 54; + props.palCmd = 0; + props.palStart = 0; + props.palEnd = 0; + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, "scbd", props)) < 0) + return; + + _vm->_vidPlayer->play(slot, props); + _vm->_vidPlayer->closeVideo(slot); } } // End of namespace Gob diff --git a/engines/gob/inter_fascin.cpp b/engines/gob/inter_fascin.cpp index 5738197539..304f02f4fa 100644 --- a/engines/gob/inter_fascin.cpp +++ b/engines/gob/inter_fascin.cpp @@ -131,21 +131,41 @@ bool Inter_Fascination::oFascin_copySprite(OpFuncParams ¶ms) { void Inter_Fascination::oFascin_playTirb(OpGobParams ¶ms) { warning("funcPlayImd with parameter : 'tirb.imd'"); - if (_vm->_vidPlayer->primaryOpen("tirb", 150, 88, VideoPlayer::kFlagFrontSurface, - VideoPlayer::kVideoTypePreIMD, 128, 80)) { - _vm->_vidPlayer->primaryPlay(); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties vidProps; + + vidProps.type = VideoPlayer::kVideoTypePreIMD; + vidProps.sprite = Draw::kFrontSurface; + vidProps.x = 150; + vidProps.y = 88; + vidProps.width = 128; + vidProps.height = 80; + + int vidSlot = _vm->_vidPlayer->openVideo(true, "tirb", vidProps); + if (vidSlot < 0) + return; + + _vm->_vidPlayer->play(vidSlot, vidProps); + _vm->_vidPlayer->closeVideo(vidSlot); } void Inter_Fascination::oFascin_playTira(OpGobParams ¶ms) { warning("funcPlayImd with parameter : 'tira.imd'"); - if (_vm->_vidPlayer->primaryOpen("tira", 88, 66, VideoPlayer::kFlagFrontSurface, - VideoPlayer::kVideoTypePreIMD, 128, 80)) { - _vm->_vidPlayer->primaryPlay(); - _vm->_vidPlayer->primaryClose(); - } + VideoPlayer::Properties vidProps; + + vidProps.type = VideoPlayer::kVideoTypePreIMD; + vidProps.sprite = Draw::kFrontSurface; + vidProps.x = 88; + vidProps.y = 66; + vidProps.width = 128; + vidProps.height = 80; + + int vidSlot = _vm->_vidPlayer->openVideo(true, "tira", vidProps); + if (vidSlot < 0) + return; + + _vm->_vidPlayer->play(vidSlot, vidProps); + _vm->_vidPlayer->closeVideo(vidSlot); } void Inter_Fascination::oFascin_loadExtasy(OpGobParams ¶ms) { diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp index 142467b47f..befed4b1c2 100644 --- a/engines/gob/inter_playtoons.cpp +++ b/engines/gob/inter_playtoons.cpp @@ -107,7 +107,7 @@ bool Inter_Playtoons::oPlaytoons_printText(OpFuncParams ¶ms) { _vm->_draw->_backColor = _vm->_game->_script->readValExpr(); _vm->_draw->_frontColor = _vm->_game->_script->readValExpr(); _vm->_draw->_fontIndex = _vm->_game->_script->readValExpr(); - _vm->_draw->_destSurface = 21; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_textToPrint = buf; _vm->_draw->_transparency = 0; diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp index 9e841e7e68..11fe0c9c5e 100644 --- a/engines/gob/inter_v1.cpp +++ b/engines/gob/inter_v1.cpp @@ -328,7 +328,7 @@ void Inter_v1::o1_initCursor() { (height != _vm->_draw->_cursorHeight) || (_vm->_draw->_cursorSprites->getWidth() != (width * count))) { - _vm->_draw->freeSprite(23); + _vm->_draw->freeSprite(Draw::kCursorSurface); _vm->_draw->_cursorSprites.reset(); _vm->_draw->_cursorSpritesBack.reset(); _vm->_draw->_scummvmCursor.reset(); @@ -344,9 +344,9 @@ void Inter_v1::o1_initCursor() { if (count > 0x80) count -= 0x80; - _vm->_draw->initSpriteSurf(23, _vm->_draw->_cursorWidth * count, + _vm->_draw->initSpriteSurf(Draw::kCursorSurface, _vm->_draw->_cursorWidth * count, _vm->_draw->_cursorHeight, 2); - _vm->_draw->_cursorSpritesBack = _vm->_draw->_spritesArray[23]; + _vm->_draw->_cursorSpritesBack = _vm->_draw->_spritesArray[Draw::kCursorSurface]; _vm->_draw->_cursorSprites = _vm->_draw->_cursorSpritesBack; _vm->_draw->_scummvmCursor = @@ -482,14 +482,14 @@ void Inter_v1::o1_initMult() { if (_vm->_mult->_animSurf && ((oldAnimWidth != _vm->_mult->_animWidth) || (oldAnimHeight != _vm->_mult->_animHeight))) { - _vm->_draw->freeSprite(22); + _vm->_draw->freeSprite(Draw::kAnimSurface); _vm->_mult->_animSurf.reset(); } if (!_vm->_mult->_animSurf) { - _vm->_draw->initSpriteSurf(22, _vm->_mult->_animWidth, + _vm->_draw->initSpriteSurf(Draw::kAnimSurface, _vm->_mult->_animWidth, _vm->_mult->_animHeight, 0); - _vm->_mult->_animSurf = _vm->_draw->_spritesArray[22]; + _vm->_mult->_animSurf = _vm->_draw->_spritesArray[Draw::kAnimSurface]; } _vm->_video->drawSprite(*_vm->_draw->_backSurface, *_vm->_mult->_animSurf, @@ -922,7 +922,7 @@ bool Inter_v1::o1_printText(OpFuncParams ¶ms) { _vm->_draw->_backColor = _vm->_game->_script->readValExpr(); _vm->_draw->_frontColor = _vm->_game->_script->readValExpr(); _vm->_draw->_fontIndex = _vm->_game->_script->readValExpr(); - _vm->_draw->_destSurface = 21; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_textToPrint = buf; _vm->_draw->_transparency = 0; diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 72764eec8d..0003332e47 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -360,24 +360,24 @@ void Inter_v2::o2_initMult() { if (_vm->_mult->_animSurf && ((oldAnimWidth != _vm->_mult->_animWidth) || (oldAnimHeight != _vm->_mult->_animHeight))) { - _vm->_draw->freeSprite(22); + _vm->_draw->freeSprite(Draw::kAnimSurface); _vm->_mult->_animSurf.reset(); } _vm->_draw->adjustCoords(0, &_vm->_mult->_animWidth, &_vm->_mult->_animHeight); if (!_vm->_mult->_animSurf) { - _vm->_draw->initSpriteSurf(22, _vm->_mult->_animWidth, + _vm->_draw->initSpriteSurf(Draw::kAnimSurface, _vm->_mult->_animWidth, _vm->_mult->_animHeight, 0); - _vm->_mult->_animSurf = _vm->_draw->_spritesArray[22]; + _vm->_mult->_animSurf = _vm->_draw->_spritesArray[Draw::kAnimSurface]; if (_terminate) return; } _vm->_draw->adjustCoords(1, &_vm->_mult->_animWidth, &_vm->_mult->_animHeight); - _vm->_draw->_sourceSurface = 21; - _vm->_draw->_destSurface = 22; + _vm->_draw->_sourceSurface = Draw::kBackSurface; + _vm->_draw->_destSurface = Draw::kAnimSurface; _vm->_draw->_spriteLeft = _vm->_mult->_animLeft; _vm->_draw->_spriteTop = _vm->_mult->_animTop; _vm->_draw->_spriteRight = _vm->_mult->_animWidth; @@ -481,7 +481,7 @@ void Inter_v2::o2_loadMultObject() { if ((((int32) *(obj.pPosX)) == -1234) && (((int32) *(obj.pPosY)) == -4321)) { if (obj.videoSlot > 0) - _vm->_vidPlayer->slotClose(obj.videoSlot - 1); + _vm->_vidPlayer->closeVideo(obj.videoSlot - 1); obj.videoSlot = 0; obj.lastLeft = -1; @@ -959,50 +959,50 @@ void Inter_v2::o2_setScrollOffset() { void Inter_v2::o2_playImd() { char imd[128]; - int16 x, y; - int16 startFrame; - int16 lastFrame; - int16 breakKey; - int16 flags; - int16 palStart; - int16 palEnd; - uint16 palCmd; bool close; _vm->_game->_script->evalExpr(0); _vm->_game->_script->getResultStr()[8] = 0; strncpy0(imd, _vm->_game->_script->getResultStr(), 127); - x = _vm->_game->_script->readValExpr(); - y = _vm->_game->_script->readValExpr(); - startFrame = _vm->_game->_script->readValExpr(); - lastFrame = _vm->_game->_script->readValExpr(); - breakKey = _vm->_game->_script->readValExpr(); - flags = _vm->_game->_script->readValExpr(); - palStart = _vm->_game->_script->readValExpr(); - palEnd = _vm->_game->_script->readValExpr(); - palCmd = 1 << (flags & 0x3F); + VideoPlayer::Properties props; - debugC(1, kDebugVideo, "Playing video \"%s\" @ %d+%d, frames %d - %d, " - "paletteCmd %d (%d - %d), flags %X", _vm->_game->_script->getResultStr(), x, y, - startFrame, lastFrame, palCmd, palStart, palEnd, flags); + props.x = _vm->_game->_script->readValExpr(); + props.y = _vm->_game->_script->readValExpr(); + props.startFrame = _vm->_game->_script->readValExpr(); + props.lastFrame = _vm->_game->_script->readValExpr(); + props.breakKey = _vm->_game->_script->readValExpr(); + props.flags = _vm->_game->_script->readValExpr(); + props.palStart = _vm->_game->_script->readValExpr(); + props.palEnd = _vm->_game->_script->readValExpr(); + props.palCmd = 1 << (props.flags & 0x3F); - if ((imd[0] != 0) && !_vm->_vidPlayer->primaryOpen(imd, x, y, flags)) { - WRITE_VAR(11, (uint32) -1); - return; + debugC(1, kDebugVideo, "Playing video \"%s\" @ %d+%d, frames %d - %d, " + "paletteCmd %d (%d - %d), flags %X", imd, + props.x, props.y, props.startFrame, props.lastFrame, + props.palCmd, props.palStart, props.palEnd, props.flags); + + int slot = 0; + if (imd[0] != 0) { + _vm->_vidPlayer->evaluateFlags(props); + if ((slot = _vm->_vidPlayer->openVideo(true, imd, props)) < 0) { + WRITE_VAR(11, (uint32) -1); + return; + } } - close = (lastFrame == -1); - if (startFrame == -2) { - startFrame = lastFrame = 0; + close = (props.lastFrame == -1); + if (props.startFrame == -2) { + props.startFrame = 0; + props.lastFrame = 0; close = false; } - if (startFrame >= 0) - _vm->_vidPlayer->primaryPlay(startFrame, lastFrame, breakKey, palCmd, palStart, palEnd, 0); + if (props.startFrame >= 0) + _vm->_vidPlayer->play(slot, props); if (close) - _vm->_vidPlayer->primaryClose(); + _vm->_vidPlayer->closeVideo(slot); } void Inter_v2::o2_getImdInfo() { @@ -1011,10 +1011,10 @@ void Inter_v2::o2_getImdInfo() { int16 varWidth, varHeight; _vm->_game->_script->evalExpr(0); - varX = _vm->_game->_script->readVarIndex(); - varY = _vm->_game->_script->readVarIndex(); + varX = _vm->_game->_script->readVarIndex(); + varY = _vm->_game->_script->readVarIndex(); varFrames = _vm->_game->_script->readVarIndex(); - varWidth = _vm->_game->_script->readVarIndex(); + varWidth = _vm->_game->_script->readVarIndex(); varHeight = _vm->_game->_script->readVarIndex(); // WORKAROUND: The nut rolling animation in the administration center @@ -1106,7 +1106,7 @@ bool Inter_v2::o2_printText(OpFuncParams ¶ms) { _vm->_draw->_backColor = _vm->_game->_script->readValExpr(); _vm->_draw->_frontColor = _vm->_game->_script->readValExpr(); _vm->_draw->_fontIndex = _vm->_game->_script->readValExpr(); - _vm->_draw->_destSurface = 21; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_textToPrint = buf; _vm->_draw->_transparency = 0; diff --git a/engines/gob/inter_v3.cpp b/engines/gob/inter_v3.cpp index beace1b7d8..10ed23619d 100644 --- a/engines/gob/inter_v3.cpp +++ b/engines/gob/inter_v3.cpp @@ -253,8 +253,8 @@ bool Inter_v3::o3_copySprite(OpFuncParams ¶ms) { o1_copySprite(params); // For the close-up "fading" in the CD version - if (_vm->_draw->_destSurface == 20) - _vm->_video->sparseRetrace(20); + if (_vm->_draw->_destSurface == Draw::kFrontSurface) + _vm->_video->sparseRetrace(Draw::kFrontSurface); return false; } diff --git a/engines/gob/inter_v4.cpp b/engines/gob/inter_v4.cpp index 1f6899d85c..d0824ffb58 100644 --- a/engines/gob/inter_v4.cpp +++ b/engines/gob/inter_v4.cpp @@ -142,14 +142,6 @@ void Inter_v4::o4_initScreen() { void Inter_v4::o4_playVmdOrMusic() { char fileName[128]; - int16 x, y; - int16 startFrame; - int16 lastFrame; - int16 breakKey; - int16 flags; - int16 palStart; - int16 palEnd; - uint16 palCmd; bool close; _vm->_game->_script->evalExpr(0); @@ -161,83 +153,92 @@ void Inter_v4::o4_playVmdOrMusic() { (!scumm_stricmp(fileName, "noixroule"))) strcpy(fileName, "noixroul"); - x = _vm->_game->_script->readValExpr(); - y = _vm->_game->_script->readValExpr(); - startFrame = _vm->_game->_script->readValExpr(); - lastFrame = _vm->_game->_script->readValExpr(); - breakKey = _vm->_game->_script->readValExpr(); - flags = _vm->_game->_script->readValExpr(); - palStart = _vm->_game->_script->readValExpr(); - palEnd = _vm->_game->_script->readValExpr(); - palCmd = 1 << (flags & 0x3F); + VideoPlayer::Properties props; + + props.x = _vm->_game->_script->readValExpr(); + props.y = _vm->_game->_script->readValExpr(); + props.startFrame = _vm->_game->_script->readValExpr(); + props.lastFrame = _vm->_game->_script->readValExpr(); + props.breakKey = _vm->_game->_script->readValExpr(); + props.flags = _vm->_game->_script->readValExpr(); + props.palStart = _vm->_game->_script->readValExpr(); + props.palEnd = _vm->_game->_script->readValExpr(); + props.palCmd = 1 << (props.flags & 0x3F); debugC(1, kDebugVideo, "Playing video \"%s\" @ %d+%d, frames %d - %d, " - "paletteCmd %d (%d - %d), flags %X", fileName, x, y, startFrame, lastFrame, - palCmd, palStart, palEnd, flags); + "paletteCmd %d (%d - %d), flags %X", fileName, + props.x, props.y, props.startFrame, props.lastFrame, + props.palCmd, props.palStart, props.palEnd, props.flags); close = false; - if (lastFrame == -1) { + if (props.lastFrame == -1) { close = true; - } else if (lastFrame == -2) { - } else if (lastFrame == -3) { + } else if (props.lastFrame == -2) { + } else if (props.lastFrame == -3) { + + props.flags = VideoPlayer::kFlagOtherSurface; + props.sprite = -1; - _vm->_mult->_objects[startFrame].pAnimData->animation = -startFrame - 1; + _vm->_mult->_objects[props.startFrame].pAnimData->animation = -props.startFrame - 1; - if (_vm->_mult->_objects[startFrame].videoSlot > 0) - _vm->_vidPlayer->slotClose(_vm->_mult->_objects[startFrame].videoSlot - 1); + if (_vm->_mult->_objects[props.startFrame].videoSlot > 0) + _vm->_vidPlayer->closeVideo(_vm->_mult->_objects[props.startFrame].videoSlot - 1); - int slot = _vm->_vidPlayer->slotOpen(fileName); + int slot = _vm->_vidPlayer->openVideo(false, fileName, props); - _vm->_mult->_objects[startFrame].videoSlot = slot + 1; + _vm->_mult->_objects[props.startFrame].videoSlot = slot + 1; - if (x == -1) { - *_vm->_mult->_objects[startFrame].pPosX = _vm->_vidPlayer->getDefaultX(slot); - *_vm->_mult->_objects[startFrame].pPosY = _vm->_vidPlayer->getDefaultY(slot); + if (props.x == -1) { + *_vm->_mult->_objects[props.startFrame].pPosX = _vm->_vidPlayer->getDefaultX(slot); + *_vm->_mult->_objects[props.startFrame].pPosY = _vm->_vidPlayer->getDefaultY(slot); } else { - *_vm->_mult->_objects[startFrame].pPosX = x; - *_vm->_mult->_objects[startFrame].pPosY = y; + *_vm->_mult->_objects[props.startFrame].pPosX = props.x; + *_vm->_mult->_objects[props.startFrame].pPosY = props.y; } return; - } else if (lastFrame == -4) { + } else if (props.lastFrame == -4) { warning("Woodruff Stub: Video/Music command -4: Play background video %s", fileName); return; - } else if (lastFrame == -5) { + } else if (props.lastFrame == -5) { _vm->_sound->bgStop(); return; - } else if (lastFrame == -6) { + } else if (props.lastFrame == -6) { return; - } else if (lastFrame == -7) { + } else if (props.lastFrame == -7) { return; - } else if (lastFrame == -8) { + } else if (props.lastFrame == -8) { warning("Woodruff Stub: Video/Music command -8: Play background video %s", fileName); return; - } else if (lastFrame == -9) { + } else if (props.lastFrame == -9) { _vm->_sound->bgStop(); _vm->_sound->bgSetPlayMode(BackgroundAtmosphere::kPlayModeRandom); - _vm->_sound->bgPlay(fileName, "SND", SOUND_SND, palStart); + _vm->_sound->bgPlay(fileName, "SND", SOUND_SND, props.palStart); return; - } else if (lastFrame < 0) { - warning("Unknown Video/Music command: %d, %s", lastFrame, fileName); + } else if (props.lastFrame < 0) { + warning("Unknown Video/Music command: %d, %s", props.lastFrame, fileName); return; } - if (startFrame == -2) { - startFrame = 0; - lastFrame = -1; + if (props.startFrame == -2) { + props.startFrame = 0; + props.lastFrame = -1; close = false; } - if ((fileName[0] != 0) && !_vm->_vidPlayer->primaryOpen(fileName, x, y, flags)) { + _vm->_vidPlayer->evaluateFlags(props); + + int slot; + if ((fileName[0] != 0) && ((slot = _vm->_vidPlayer->openVideo(true, fileName, props)) < 0)) { WRITE_VAR(11, (uint32) -1); return; } - if (startFrame >= 0) - _vm->_vidPlayer->primaryPlay(startFrame, lastFrame, breakKey, palCmd, palStart, palEnd, 0); + if (props.startFrame >= 0) + _vm->_vidPlayer->play(slot, props); if (close) - _vm->_vidPlayer->primaryClose(); + _vm->_vidPlayer->closeVideo(slot); } } // End of namespace Gob diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp index cbc831b5a1..73ef46bf31 100644 --- a/engines/gob/inter_v6.cpp +++ b/engines/gob/inter_v6.cpp @@ -102,88 +102,86 @@ void Inter_v6::o6_totSub() { void Inter_v6::o6_playVmdOrMusic() { char fileName[128]; - int16 x, y; - int16 startFrame; - int16 lastFrame; - int16 breakKey; - int16 flags; - int16 palStart; - int16 palEnd; - uint16 palCmd; bool close; _vm->_game->_script->evalExpr(0); strncpy0(fileName, _vm->_game->_script->getResultStr(), 127); - x = _vm->_game->_script->readValExpr(); - y = _vm->_game->_script->readValExpr(); - startFrame = _vm->_game->_script->readValExpr(); - lastFrame = _vm->_game->_script->readValExpr(); - breakKey = _vm->_game->_script->readValExpr(); - flags = _vm->_game->_script->readValExpr(); - palStart = _vm->_game->_script->readValExpr(); - palEnd = _vm->_game->_script->readValExpr(); - palCmd = 1 << (flags & 0x3F); + VideoPlayer::Properties props; + + props.x = _vm->_game->_script->readValExpr(); + props.y = _vm->_game->_script->readValExpr(); + props.startFrame = _vm->_game->_script->readValExpr(); + props.lastFrame = _vm->_game->_script->readValExpr(); + props.breakKey = _vm->_game->_script->readValExpr(); + props.flags = _vm->_game->_script->readValExpr(); + props.palStart = _vm->_game->_script->readValExpr(); + props.palEnd = _vm->_game->_script->readValExpr(); + props.palCmd = 1 << (props.flags & 0x3F); + props.forceSeek = true; debugC(1, kDebugVideo, "Playing video \"%s\" @ %d+%d, frames %d - %d, " - "paletteCmd %d (%d - %d), flags %X", fileName, x, y, startFrame, lastFrame, - palCmd, palStart, palEnd, flags); + "paletteCmd %d (%d - %d), flags %X", fileName, + props.x, props.y, props.startFrame, props.lastFrame, + props.palCmd, props.palStart, props.palEnd, props.flags); close = false; - if (lastFrame == -1) { + if (props.lastFrame == -1) { close = true; - } else if (lastFrame == -5) { + } else if (props.lastFrame == -5) { // warning("Urban/Playtoons Stub: Stop without delay"); _vm->_sound->bgStop(); return; - } else if (lastFrame == -6) { + } else if (props.lastFrame == -6) { // warning("Urban/Playtoons Stub: Video/Music command -6 (cache video)"); return; - } else if (lastFrame == -7) { + } else if (props.lastFrame == -7) { // warning("Urban/Playtoons Stub: Video/Music command -6 (flush cache)"); return; - } else if ((lastFrame == -8) || (lastFrame == -9)) { + } else if ((props.lastFrame == -8) || (props.lastFrame == -9)) { if (!strchr(fileName, '.')) strcat(fileName, ".WA8"); probe16bitMusic(fileName); - if (lastFrame == -9) { + if (props.lastFrame == -9) { warning("Urban/Playtoons Stub: delayed stop not implemented"); } _vm->_sound->bgStop(); _vm->_sound->bgPlay(fileName, SOUND_WAV); return; - } else if (lastFrame <= -10) { - _vm->_vidPlayer->primaryClose(); - warning("Urban/Playtoons Stub: Video/Music command %d (close video?), %s", lastFrame, fileName); - if (lastFrame <= -100) - lastFrame += 100; + } else if (props.lastFrame <= -10) { + _vm->_vidPlayer->closeVideo(); + warning("Urban/Playtoons Stub: Video/Music command %d (close video?), %s", props.lastFrame, fileName); + if (props.lastFrame <= -100) + props.lastFrame += 100; - if (((-lastFrame) % 10 == 3) && (lastFrame <= -20)) + if (((-props.lastFrame) % 10 == 3) && (props.lastFrame <= -20)) _vm->_sound->bgPlay(fileName, SOUND_WAV); - } else if (lastFrame < 0) { - warning("Urban/Playtoons Stub: Unknown Video/Music command: %d, %s", lastFrame, fileName); + } else if (props.lastFrame < 0) { + warning("Urban/Playtoons Stub: Unknown Video/Music command: %d, %s", props.lastFrame, fileName); return; } - if (startFrame == -2) { - startFrame = 0; - lastFrame = -1; + if (props.startFrame == -2) { + props.startFrame = 0; + props.lastFrame = -1; close = false; } - if ((fileName[0] != 0) && !_vm->_vidPlayer->primaryOpen(fileName, x, y, flags)) { + _vm->_vidPlayer->evaluateFlags(props); + + int slot; + if ((fileName[0] != 0) && ((slot = _vm->_vidPlayer->openVideo(true, fileName, props)) < 0)) { WRITE_VAR(11, (uint32) -1); return; } - if (startFrame >= 0) - _vm->_vidPlayer->primaryPlay(startFrame, lastFrame, breakKey, - palCmd, palStart, palEnd, 0, -1, false, -1, true); + if (props.startFrame >= 0) + _vm->_vidPlayer->play(slot, props); if (close) - _vm->_vidPlayer->primaryClose(); + _vm->_vidPlayer->closeVideo(slot); } void Inter_v6::o6_openItk() { @@ -224,24 +222,30 @@ bool Inter_v6::o6_loadCursor(OpFuncParams ¶ms) { uint16 start = _vm->_game->_script->readUint16(); int8 index = _vm->_game->_script->readInt8(); - int vmdSlot = _vm->_vidPlayer->slotOpen(file); + VideoPlayer::Properties props; + props.sprite = -1; + + int vmdSlot = _vm->_vidPlayer->openVideo(false, file, props); if (vmdSlot == -1) { warning("Can't open video \"%s\" as cursor", file); return false; } - int16 framesCount = _vm->_vidPlayer->getFramesCount(vmdSlot); + int16 framesCount = _vm->_vidPlayer->getFrameCount(vmdSlot); for (int i = 0; i < framesCount; i++) { - _vm->_vidPlayer->slotPlay(vmdSlot); - _vm->_vidPlayer->slotCopyFrame(vmdSlot, _vm->_draw->_cursorSprites->getVidMem(), + props.startFrame = i; + props.lastFrame = i; + + _vm->_vidPlayer->play(vmdSlot, props); + _vm->_vidPlayer->copyFrame(vmdSlot, _vm->_draw->_cursorSprites->getVidMem(), 0, 0, _vm->_draw->_cursorWidth, _vm->_draw->_cursorWidth, (start + i) * _vm->_draw->_cursorWidth, 0, _vm->_draw->_cursorSprites->getWidth()); } - _vm->_vidPlayer->slotClose(vmdSlot); + _vm->_vidPlayer->closeVideo(vmdSlot); _vm->_draw->_cursorAnimLow[index] = start; _vm->_draw->_cursorAnimHigh[index] = framesCount + start - 1; diff --git a/engines/gob/mult.cpp b/engines/gob/mult.cpp index 327b3ed1bd..f744f14faf 100644 --- a/engines/gob/mult.cpp +++ b/engines/gob/mult.cpp @@ -146,7 +146,7 @@ void Mult::freeMult() { _orderArray = 0; _animSurf.reset(); - _vm->_draw->freeSprite(22); + _vm->_draw->freeSprite(Draw::kAnimSurface); } void Mult::checkFreeMult() { @@ -238,7 +238,7 @@ void Mult::playMult(int16 startFrame, int16 endFrame, char checkEscape, _orderArray = 0; _animSurf.reset(); - _vm->_draw->freeSprite(22); + _vm->_draw->freeSprite(Draw::kAnimSurface); _animDataAllocated = false; } @@ -452,7 +452,7 @@ void Mult::clearObjectVideos() { for (int i = 0; i < _objCount; i++) if (_objects[i].videoSlot > 0) - _vm->_vidPlayer->slotClose(_objects[i].videoSlot - 1); + _vm->_vidPlayer->closeVideo(_objects[i].videoSlot - 1); } } // End of namespace Gob diff --git a/engines/gob/mult_v1.cpp b/engines/gob/mult_v1.cpp index 1bb162c789..84869066e1 100644 --- a/engines/gob/mult_v1.cpp +++ b/engines/gob/mult_v1.cpp @@ -236,7 +236,7 @@ void Mult_v1::freeMultKeys() { _animArrayData = 0; _animSurf.reset(); - _vm->_draw->freeSprite(22); + _vm->_draw->freeSprite(Draw::kAnimSurface); _animDataAllocated = false; } @@ -318,7 +318,7 @@ void Mult_v1::playMultInit() { _animSurf = _vm->_video->initSurfDesc(_vm->_global->_videoMode, 320, 200, 0); - _vm->_draw->_spritesArray[22] = _animSurf; + _vm->_draw->_spritesArray[Draw::kAnimSurface] = _animSurf; _vm->_video->drawSprite(*_vm->_draw->_backSurface, *_animSurf, 0, 0, 319, 199, 0, 0, 0); @@ -579,8 +579,8 @@ void Mult_v1::animate() { if ((pNeedRedraw[i] == 0) || (_objects[i].lastLeft == -1)) continue; - _vm->_draw->_sourceSurface = 22; - _vm->_draw->_destSurface = 21; + _vm->_draw->_sourceSurface = Draw::kAnimSurface; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_spriteLeft = pDirtyLefts[i] - _animLeft; _vm->_draw->_spriteTop = pDirtyTops[i] - _animTop; _vm->_draw->_spriteRight = pDirtyRights[i] - pDirtyLefts[i] + 1; diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp index 6acd096e58..66488054e7 100644 --- a/engines/gob/mult_v2.cpp +++ b/engines/gob/mult_v2.cpp @@ -579,11 +579,11 @@ void Mult_v2::playMultInit() { width = _animWidth; height = _animHeight; _vm->_draw->adjustCoords(0, &width, &height); - _vm->_draw->initSpriteSurf(22, width, height, 0); - _animSurf = _vm->_draw->_spritesArray[22]; + _vm->_draw->initSpriteSurf(Draw::kAnimSurface, width, height, 0); + _animSurf = _vm->_draw->_spritesArray[Draw::kAnimSurface]; - _vm->_video->drawSprite(*_vm->_draw->_spritesArray[21], - *_vm->_draw->_spritesArray[22], 0, 0, + _vm->_video->drawSprite(*_vm->_draw->_spritesArray[Draw::kBackSurface], + *_vm->_draw->_spritesArray[Draw::kAnimSurface], 0, 0, _vm->_video->_surfWidth, _vm->_video->_surfHeight, 0, 0, 0); for (_counter = 0; _counter < _objCount; _counter++) @@ -633,14 +633,14 @@ void Mult_v2::drawStatics(bool &stop) { READ_LE_UINT16(_multData->execPtr + layer * 2); _vm->_draw->_destSpriteX = 0; _vm->_draw->_destSpriteY = 0; - _vm->_draw->_destSurface = 21; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_transparency = 0; _vm->_draw->spriteOperation(DRAW_LOADSPRITE); _vm->_scenery->_curStatic = -1; } - _vm->_video->drawSprite(*_vm->_draw->_spritesArray[21], - *_vm->_draw->_spritesArray[22], 0, 0, + _vm->_video->drawSprite(*_vm->_draw->_spritesArray[Draw::kBackSurface], + *_vm->_draw->_spritesArray[Draw::kAnimSurface], 0, 0, _vm->_video->_surfWidth, _vm->_video->_surfHeight, 0, 0, 0); } } @@ -710,7 +710,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) { } else { if (animObj.videoSlot > 0) { _vm->_video->retrace(); - _vm->_vidPlayer->slotWaitEndFrame(animObj.videoSlot - 1, true); + _vm->_vidPlayer->waitEndFrame(animObj.videoSlot - 1, true); } } @@ -736,8 +736,8 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) { if (animData.animation < 0) { if ((animObj.videoSlot > 0) && - (_vm->_vidPlayer->getCurrentFrame(animObj.videoSlot - 1) < - _vm->_vidPlayer->getFramesCount(animObj.videoSlot - 1))) { + ((_vm->_vidPlayer->getCurrentFrame(animObj.videoSlot - 1) + 1) < + _vm->_vidPlayer->getFrameCount(animObj.videoSlot - 1))) { animData.newCycle = 0; return; } @@ -775,7 +775,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) { animData.isStatic = 1; animData.frame = 0; if ((animData.animation < 0) && (animObj.videoSlot > 0)) { - _vm->_vidPlayer->slotClose(animObj.videoSlot - 1); + _vm->_vidPlayer->closeVideo(animObj.videoSlot - 1); animObj.videoSlot = 0; } @@ -788,7 +788,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) { /* if ((animData.animation < 0) && (animObj.videoSlot > 0)) { if (_vm->_vidPlayer->getFlags(animObj.videoSlot - 1) & 0x1000) { - _vm->_vidPlayer->slotClose(animObj.videoSlot - 1); + _vm->_vidPlayer->closeVideo(animObj.videoSlot - 1); animObj.videoSlot = 0; } } @@ -937,8 +937,8 @@ void Mult_v2::animate() { if ((right <= 0) || (bottom <= 0)) continue; - _vm->_draw->_sourceSurface = 22; - _vm->_draw->_destSurface = 21; + _vm->_draw->_sourceSurface = Draw::kAnimSurface; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_spriteLeft = maxleft - _animLeft; _vm->_draw->_spriteTop = maxtop - _animTop; _vm->_draw->_spriteRight = right; @@ -1100,50 +1100,61 @@ void Mult_v2::animate() { void Mult_v2::playImd(const char *imdFile, Mult::Mult_ImdKey &key, int16 dir, int16 startFrame) { - int16 x, y; - int16 palStart, palEnd; - int16 baseFrame, palFrame, lastFrame; - uint16 flags; + + VideoPlayer::Properties props; if (_vm->_draw->_renderFlags & 0x100) { - x = VAR(55); - y = VAR(56); - } else - x = y = -1; + props.x = VAR(55); + props.y = VAR(56); + } if (key.imdFile == -1) { - _vm->_vidPlayer->primaryClose(); + _vm->_vidPlayer->closeVideo(); return; } - flags = (key.flags >> 8) & 0xFF; - if (flags & 0x20) - flags = (flags & 0x9F) | 0x80; + props.flags = (key.flags >> 8) & 0xFF; + if (props.flags & 0x20) + props.flags = (props.flags & 0x9F) | 0x80; - palStart = key.palStart; - palEnd = key.palEnd; - palFrame = key.palFrame; - lastFrame = key.lastFrame; + props.palStart = key.palStart; + props.palEnd = key.palEnd; + props.palFrame = key.palFrame; + props.lastFrame = key.lastFrame; - if ((palFrame != -1) && (lastFrame != -1)) - if ((lastFrame - palFrame) < startFrame) + if ((props.palFrame != -1) && (props.lastFrame != -1)) + if ((props.lastFrame - props.palFrame) < props.startFrame) if (!(key.flags & 0x4000)) { - _vm->_vidPlayer->primaryClose(); + _vm->_vidPlayer->closeVideo(); return; } - if (!_vm->_vidPlayer->primaryOpen(imdFile, x, y, flags)) + _vm->_vidPlayer->evaluateFlags(props); + + int slot; + if ((slot = _vm->_vidPlayer->openVideo(true, imdFile, props)) < 0) return; - if (palFrame == -1) - palFrame = 0; + if (props.palFrame == -1) + props.palFrame = 0; + + if (props.lastFrame == -1) + props.lastFrame = _vm->_vidPlayer->getFrameCount() - 1; + + uint32 baseFrame = startFrame % (props.lastFrame - props.palFrame + 1); + + props.endFrame = props.lastFrame; + props.startFrame = baseFrame + props.palFrame; + props.lastFrame = baseFrame + props.palFrame; + + props.flags &= 0x7F; - if (lastFrame == -1) - lastFrame = _vm->_vidPlayer->getFramesCount() - 1; + debugC(2, kDebugVideo, "Playing mult video \"%s\" @ %d+%d, frame %d, " + "paletteCmd %d (%d - %d; %d), flags %X", imdFile, + props.x, props.y, props.startFrame, + props.palCmd, props.palStart, props.palEnd, props.endFrame, props.flags); - baseFrame = startFrame % (lastFrame - palFrame + 1); - _vm->_vidPlayer->primaryPlay(baseFrame + palFrame, baseFrame + palFrame, 0, - flags & 0x7F, palStart, palEnd, palFrame, lastFrame); + _vm->_vidPlayer->play(slot, props); } void Mult_v2::advanceObjects(int16 index) { diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp index a6d6c06544..f9587dc0b3 100644 --- a/engines/gob/scenery.cpp +++ b/engines/gob/scenery.cpp @@ -261,10 +261,10 @@ void Scenery::renderStatic(int16 scenery, int16 layer) { _vm->_draw->_spriteLeft = layerPtr->backResId; if (_vm->_draw->_spriteLeft != -1) { - _vm->_draw->_destSpriteX = 0; - _vm->_draw->_destSpriteY = 0; - _vm->_draw->_destSurface = 21; - _vm->_draw->_transparency = 0; + _vm->_draw->_destSpriteX = 0; + _vm->_draw->_destSpriteY = 0; + _vm->_draw->_destSurface = Draw::kBackSurface; + _vm->_draw->_transparency = 0; _vm->_draw->spriteOperation(DRAW_LOADSPRITE); } @@ -295,7 +295,7 @@ void Scenery::renderStatic(int16 scenery, int16 layer) { _vm->_draw->_sourceSurface = _staticPictToSprite[scenery * 7 + pictIndex]; - _vm->_draw->_destSurface = 21; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_spriteLeft = left; _vm->_draw->_spriteTop = top; _vm->_draw->_spriteRight = right - left + 1; @@ -392,7 +392,7 @@ void Scenery::updateStatic(int16 orderFrom, byte index, byte layer) { _vm->_draw->_sourceSurface = _staticPictToSprite[index * 7 + pictIndex]; - _vm->_draw->_destSurface = 21; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_transparency = planePtr->transp ? 3 : 0; _vm->_draw->spriteOperation(DRAW_BLITSURF); } @@ -616,26 +616,29 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags, return; } - if (frame >= _vm->_vidPlayer->getFramesCount(obj.videoSlot - 1)) - frame = _vm->_vidPlayer->getFramesCount(obj.videoSlot - 1) - 1; + if (frame >= (int32)_vm->_vidPlayer->getFrameCount(obj.videoSlot - 1)) + frame = _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1; - // Seek to frame - if (_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) < 256) { - while (_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) <= frame) - _vm->_vidPlayer->slotPlay(obj.videoSlot - 1); - } else { - int16 curFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1); - uint8 frameWrap = curFrame / 256; - frame = (frame + 1) % 256; + if (frame != (int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1)) { + // Seek to frame + + VideoPlayer::Properties props; + + props.forceSeek = true; + props.waitEndFrame = false; + props.lastFrame = frame; - while (_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) < (frameWrap * 256 + frame)) - _vm->_vidPlayer->slotPlay(obj.videoSlot - 1); + if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) < frame) + props.startFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1; + else + props.startFrame = frame; + + _vm->_vidPlayer->play(obj.videoSlot - 1, props); } - // Subtitle - Graphics::CoktelVideo::State state = _vm->_vidPlayer->getState(obj.videoSlot - 1); - if (state.flags & Graphics::CoktelVideo::kStateSpeech) - _vm->_draw->printTotText(state.speechId); + int32 subtitle = _vm->_vidPlayer->getSubtitleIndex(obj.videoSlot - 1); + if (subtitle != -1) + _vm->_draw->printTotText(subtitle); destX = 0; destY = 0; @@ -716,7 +719,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags, _vm->_draw->_spriteLeft = _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - (destX + _vm->_draw->_spriteRight); - _vm->_vidPlayer->slotCopyFrame(obj.videoSlot - 1, _vm->_draw->_backSurface->getVidMem(), + _vm->_vidPlayer->copyFrame(obj.videoSlot - 1, _vm->_draw->_backSurface->getVidMem(), _vm->_draw->_spriteLeft, _vm->_draw->_spriteTop, _vm->_draw->_spriteRight, _vm->_draw->_spriteBottom, _vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY, @@ -726,13 +729,12 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags, _vm->_draw->invalidateRect(_vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY, _vm->_draw->_destSpriteX + _vm->_draw->_spriteRight - 1, _vm->_draw->_destSpriteY + _vm->_draw->_spriteBottom - 1); - } if (!(flags & 4)) { - _animLeft = _toRedrawLeft = left; - _animTop = _toRedrawTop = top; - _animRight = _toRedrawRight = right; + _animLeft = _toRedrawLeft = left; + _animTop = _toRedrawTop = top; + _animRight = _toRedrawRight = right; _animBottom = _toRedrawBottom = bottom; } @@ -878,7 +880,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags, if (doDraw) { _vm->_draw->_sourceSurface = _animPictToSprite[animation * 7 + pictIndex]; - _vm->_draw->_destSurface = 21; + _vm->_draw->_destSurface = Draw::kBackSurface; _vm->_draw->_spriteLeft = left; _vm->_draw->_spriteTop = top; diff --git a/engines/gob/totfile.cpp b/engines/gob/totfile.cpp index 5cc723ba7d..178deeaf58 100644 --- a/engines/gob/totfile.cpp +++ b/engines/gob/totfile.cpp @@ -49,7 +49,7 @@ bool TOTFile::load(const Common::String &fileName) { if (!_stream) // Trying to open from video - _stream = _vm->_vidPlayer->getExtraData(fileName.c_str()); + _stream = _vm->_vidPlayer->getEmbeddedFile(fileName.c_str()); if (!_stream) return false; diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp index 51bc1b88a5..9e49bfc092 100644 --- a/engines/gob/videoplayer.cpp +++ b/engines/gob/videoplayer.cpp @@ -29,7 +29,6 @@ #include "gob/global.h" #include "gob/dataio.h" #include "gob/video.h" -#include "gob/draw.h" #include "gob/game.h" #include "gob/palanim.h" #include "gob/inter.h" @@ -38,767 +37,723 @@ namespace Gob { -const char *VideoPlayer::_extensions[] = { "IMD", "IMD", "VMD", "RMD", "SMD" }; - -VideoPlayer::Video::Video(GobEngine *vm) : _vm(vm), _stream(0), _video(0) { -} - -VideoPlayer::Video::~Video() { - close(); -} - -bool VideoPlayer::Video::open(const char *fileName, Type which, int16 width, int16 height) { - close(); - - int16 handle = _vm->_dataIO->openData(fileName); - - if (handle < 0) { - warning("Couldn't open video \"%s\": No such file", fileName); - return false; - } - - _stream = _vm->_dataIO->openAsStream(handle, true); - - if (which == kVideoTypeIMD) { - _video = new Graphics::Imd(); - } else if (which == kVideoTypePreIMD) { - _video = new Graphics::PreImd(width, height); - } else if (which == kVideoTypeVMD) { - _video = new Graphics::Vmd(_vm->_video->_palLUT); - } else if (which == kVideoTypeRMD) { - _video = new Graphics::Vmd(_vm->_video->_palLUT); - } else { - warning("Couldn't open video \"%s\": Invalid video Type", fileName); - close(); - return false; - } - - if (!_video->load(_stream)) { - warning("While loading video \"%s\"", fileName); - close(); - return false; - } - - _fileName = fileName; +VideoPlayer::Properties::Properties() : type(kVideoTypeTry), sprite(Draw::kFrontSurface), + x(-1), y(-1), width(-1), height(-1), flags(kFlagFrontSurface), + startFrame(-1), lastFrame(-1), endFrame(-1), forceSeek(false), + breakKey(kShortKeyEscape), palCmd(8), palStart(0), palEnd(255), palFrame(-1), + fade(false), waitEndFrame(true), canceled(false) { - _defaultX = _video->getX(); - _defaultY = _video->getY(); - - return true; } -void VideoPlayer::Video::close() { - delete _video; - delete _stream; - - _video = 0; - _stream = 0; - _fileName.clear(); - memset(&_state, 0, sizeof(Graphics::CoktelVideo::State)); - _defaultX = _defaultY = 0; -} -bool VideoPlayer::Video::isOpen() const { - return (_video != 0); +VideoPlayer::Video::Video() : decoder(0) { } -const char *VideoPlayer::Video::getFileName() const { - return _fileName.c_str(); +bool VideoPlayer::Video::isEmpty() const { + return decoder == 0; } -Graphics::CoktelVideo *VideoPlayer::Video::getVideo() { - return _video; -} +void VideoPlayer::Video::close() { + delete decoder; -const Graphics::CoktelVideo *VideoPlayer::Video::getVideo() const { - return _video; + decoder = 0; + fileName.clear(); + surface.reset(); } -uint32 VideoPlayer::Video::getFeatures() const { - return _video->getFeatures(); -} -Graphics::CoktelVideo::State VideoPlayer::Video::getState() const { - return _state; -} +const char *VideoPlayer::_extensions[] = { "IMD", "IMD", "VMD", "RMD", "SMD" }; -int16 VideoPlayer::Video::getDefaultX() const { - return _defaultX; +VideoPlayer::VideoPlayer(GobEngine *vm) : _vm(vm), _needBlit(false), + _noCursorSwitch(false), _woodruffCohCottWorkaround(false) { } -int16 VideoPlayer::Video::getDefaultY() const { - return _defaultY; +VideoPlayer::~VideoPlayer() { + for (int i = 0; i < kVideoSlotCount; i++) + _videoSlots[i].close(); +} + +void VideoPlayer::evaluateFlags(Properties &properties) { + if (properties.flags & kFlagFrontSurface) { + properties.sprite = Draw::kFrontSurface; + } else if (properties.flags & kFlagOtherSurface) { + properties.sprite = properties.x; + properties.x = 0; + } else if (properties.flags & kFlagScreenSurface) { + properties.sprite = 0; + } else if (properties.flags & kFlagNoVideo) { + properties.sprite = 0; + } else { + properties.sprite = Draw::kBackSurface; + } } -bool VideoPlayer::Video::hasExtraData(const char *fileName) const { - if (!_video) - return false; +int VideoPlayer::openVideo(bool primary, const Common::String &file, Properties &properties) { + int slot = 0; - return _video->hasExtraData(fileName); -} - -Common::MemoryReadStream *VideoPlayer::Video::getExtraData(const char *fileName) { - if (!_video) - return 0; + Video *video = 0; + if (!primary) { + slot = getNextFreeSlot(); + if (slot < 0) { + warning("VideoPlayer::openVideo(): Can't open video \"%s\": No free slot", file.c_str()); + return -1; + } - return _video->getExtraData(fileName); -} + video = &_videoSlots[slot]; + } else + video = &_videoSlots[0]; -Graphics::CoktelVideo::State VideoPlayer::Video::nextFrame() { - if (_video) - _state = _video->nextFrame(); + // Different video already in the slot => close that video + if (!video->isEmpty() && (video->fileName.compareToIgnoreCase(file) != 0)) + video->close(); - return _state; -} + // No video => load the requested file + if (video->isEmpty()) { + // Open the video + if (!(video->decoder = openVideo(file, properties))) + return -1; + // Set the filename + video->fileName = file; -VideoPlayer::VideoPlayer(GobEngine *vm) : _vm(vm) { - _primaryVideo = new Video(vm); - _ownSurf = false; - _backSurf = false; - _needBlit = false; - _noCursorSwitch = false; - _woodruffCohCottWorkaround = false; -} + // WORKAROUND: In some rare cases, the cursor should still be + // displayed while a video is playing. + _noCursorSwitch = false; + if (primary && (_vm->getGameType() == kGameTypeLostInTime)) { + if (!file.compareToIgnoreCase("PORTA03") || + !file.compareToIgnoreCase("PORTA03A") || + !file.compareToIgnoreCase("CALE1") || + !file.compareToIgnoreCase("AMIL2") || + !file.compareToIgnoreCase("AMIL3B") || + !file.compareToIgnoreCase("DELB")) + _noCursorSwitch = true; + } -VideoPlayer::~VideoPlayer() { - delete _primaryVideo; - for (uint i = 0; i < _videoSlots.size(); i++) - delete _videoSlots[i]; -} + // WORKAROUND: In Woodruff, Coh Cott vanished in one video on her party. + // This is a bug in video, so we work around it. + _woodruffCohCottWorkaround = false; + if (primary && (_vm->getGameType() == kGameTypeWoodruff)) { + if (!file.compareToIgnoreCase("SQ32-03")) + _woodruffCohCottWorkaround = true; + } -bool VideoPlayer::findFile(char *fileName, Type &which) { - char *extStart = strrchr(fileName, '.'); - // There's no empty extension, Or the filename with its current extension is not found - if ((extStart) && ((extStart == (fileName + strlen(fileName) - 1)) || (!_vm->_dataIO->existData(fileName)))) { - *extStart = 0; - extStart = 0; - } + if (!(properties.flags & kFlagNoVideo) && (properties.sprite >= 0)) { + bool ownSurf = (properties.sprite != Draw::kFrontSurface) && (properties.sprite != Draw::kBackSurface); + bool screenSize = properties.flags & kFlagScreenSurface; - if (extStart) { - // The requested file already has an extension. Verifying. + if (ownSurf) { + _vm->_draw->_spritesArray[properties.sprite] = + _vm->_video->initSurfDesc(_vm->_global->_videoMode, + screenSize ? _vm->_width : video->decoder->getWidth(), + screenSize ? _vm->_height : video->decoder->getHeight(), 0); + } - int i; - for (i = 0; i < ARRAYSIZE(_extensions); i++) { - if (!scumm_stricmp(extStart + 1, _extensions[i])) { - if ((which != kVideoTypeTry) && (which == ((Type) i))) { - warning("Attempted to open video \"%s\", " - "but requested a different type", fileName); - return false; - } - which = (Type) i; - break; + if (!_vm->_draw->_spritesArray[properties.sprite]) { + properties.sprite = -1; + video->surface.reset(); + video->decoder->setSurfaceMemory(); + video->decoder->setXY(0, 0); + } else { + video->surface = _vm->_draw->_spritesArray[properties.sprite]; + video->decoder->setSurfaceMemory(video->surface->getVidMem(), + video->surface->getWidth(), video->surface->getHeight(), 1); + + if (!ownSurf || (ownSurf && screenSize)) { + if ((properties.x >= 0) || (properties.y >= 0)) + video->decoder->setXY((properties.x < 0) ? 0xFFFF : properties.x, + (properties.y < 0) ? 0xFFFF : properties.y); + else + video->decoder->setXY(); + } else + video->decoder->setXY(0, 0); } - } - if (i >= ARRAYSIZE(_extensions)) - extStart = 0; + } else { + properties.sprite = -1; + video->surface.reset(); + video->decoder->setSurfaceMemory(); + video->decoder->setXY(0, 0); + } } - if (!extStart) { - // No or unrecognized extension. Probing. + if (primary) + _needBlit = (properties.flags & kFlagUseBackSurfaceContent) && (properties.sprite == Draw::kFrontSurface); - int len = strlen(fileName); + if (!video->decoder->hasSound()) + video->decoder->setFrameRate(_vm->_util->getFrameRate()); - int i; - for (i = 0; i < ARRAYSIZE(_extensions); i++) { - if ((which == kVideoTypeTry) || (which == ((Type) i))) { - fileName[len] = '.'; - fileName[len + 1] = 0; - strcat(fileName, _extensions[i]); + WRITE_VAR(7, video->decoder->getFrameCount()); - if (_vm->_dataIO->existData(fileName)) { - which = (Type) i; - break; - } - } - } - if ((i >= ARRAYSIZE(_extensions)) || (which == kVideoTypeTry)) { - fileName[len] = 0; - warning("Couldn't open video \"%s\"", fileName); - return false; - } + return slot; +} - } +bool VideoPlayer::closeVideo(int slot) { + Video *video = getVideoBySlot(slot); + if (!video) + return false; + video->close(); return true; } -bool VideoPlayer::primaryOpen(const char *videoFile, int16 x, int16 y, - int32 flags, Type which, int16 width, int16 height) { - - char fileName[256]; - - strncpy0(fileName, videoFile, 250); - - if (!findFile(fileName, which)) +bool VideoPlayer::play(int slot, Properties &properties) { + Video *video = getVideoBySlot(slot); + if (!video) return false; - if (scumm_strnicmp(_primaryVideo->getFileName(), fileName, strlen(fileName))) { - if (!_primaryVideo->open(fileName, which, width, height)) - return false; + bool primary = slot == 0; - // WORKAROUND: In some rare cases, the cursor should still be - // displayed while a video is playing. - _noCursorSwitch = false; - if (_vm->getGameType() == kGameTypeLostInTime) { - if (!scumm_stricmp(fileName, "PORTA03.IMD") || - !scumm_stricmp(fileName, "PORTA03A.IMD") || - !scumm_stricmp(fileName, "CALE1.IMD") || - !scumm_stricmp(fileName, "AMIL2.IMD") || - !scumm_stricmp(fileName, "AMIL3B.IMD") || - !scumm_stricmp(fileName, "DELB.IMD")) - _noCursorSwitch = true; - } + // NOTE: For testing (and comfort?) purposes, we enable aborting of all videos) + properties.breakKey = kShortKeyEscape; - // WORKAROUND: In Woodruff, Coh Cott vanished in one video on her party. - // This is a bug in video, so we work around it. - _woodruffCohCottWorkaround = false; - if (_vm->getGameType() == kGameTypeWoodruff) { - if (!scumm_stricmp(fileName, "SQ32-03.VMD")) - _woodruffCohCottWorkaround = true; - } + if (properties.startFrame < 0) + properties.startFrame = video->decoder->getCurFrame() + 1; + if (properties.lastFrame < 0) + properties.lastFrame = video->decoder->getFrameCount() - 1; + if (properties.endFrame < 0) + properties.endFrame = properties.lastFrame; + if (properties.palFrame < 0) + properties.palFrame = properties.startFrame; - _ownSurf = false; + properties.startFrame--; + properties.endFrame--; + properties.palFrame--; - if (!(flags & kFlagNoVideo)) { - SurfaceDescPtr surf; + if (primary) { + _vm->_draw->_showCursor = _noCursorSwitch ? 3 : 0; - if (flags & kFlagOtherSurface) { - _ownSurf = true; - _backSurf = false; + if (properties.fade) + _vm->_palAnim->fade(0, -2, 0); + } - surf = _vm->_video->initSurfDesc(_vm->_global->_videoMode, - _primaryVideo->getVideo()->getWidth(), - _primaryVideo->getVideo()->getHeight(), 0); - _vm->_draw->_spritesArray[x] = surf; + bool backwards = properties.startFrame > properties.lastFrame; - x = 0; - } else if (flags & kFlagScreenSurface) { - _ownSurf = true; - _backSurf = false; + properties.canceled = false; - surf = _vm->_video->initSurfDesc(_vm->_global->_videoMode, - _vm->_width, _vm->_height, 0); - _vm->_draw->_spritesArray[0] = surf; - } else { - _backSurf = ((flags & kFlagFrontSurface) == 0); - surf = _vm->_draw->_spritesArray[_backSurf ? 21 : 20]; - } + while ((properties.startFrame != properties.lastFrame) && + (properties.startFrame < (int32)(video->decoder->getFrameCount() - 1))) { - _primaryVideo->getVideo()->setVideoMemory(surf->getVidMem(), - surf->getWidth(), surf->getHeight()); + playFrame(slot, properties); + if (properties.canceled) + break; - } else - _primaryVideo->getVideo()->setVideoMemory(); + properties.startFrame += backwards ? -1 : 1; - _needBlit = ((flags & kFlagUseBackSurfaceContent) != 0) && ((flags & kFlagFrontSurface) != 0); + evalBgShading(*video); - _primaryVideo->getVideo()->enableSound(*_vm->_mixer); - } + if (primary && properties.fade) { + _vm->_palAnim->fade(_vm->_global->_pPaletteDesc, -2, 0); + properties.fade = false; + } - if (!_primaryVideo->isOpen()) - return false; + if (!_noCursorSwitch && properties.waitEndFrame) + waitEndFrame(slot); + } - _primaryVideo->getVideo()->setFrameRate(_vm->_util->getFrameRate()); - _primaryVideo->getVideo()->setXY(x, y); - WRITE_VAR(7, _primaryVideo->getVideo()->getFramesCount()); + evalBgShading(*video); return true; } -bool VideoPlayer::primaryPlay(int16 startFrame, int16 lastFrame, int16 breakKey, - uint16 palCmd, int16 palStart, int16 palEnd, - int16 palFrame, int16 endFrame, bool fade, int16 reverseTo, bool forceSeek) { +void VideoPlayer::waitEndFrame(int slot, bool onlySound) { + Video *video = getVideoBySlot(slot); + if (!video) + return; + + if (!onlySound || video->decoder->hasSound()) + _vm->_util->delay(video->decoder->getTimeToNextFrame()); +} - if (!_primaryVideo->isOpen()) +bool VideoPlayer::playFrame(int slot, Properties &properties) { + Video *video = getVideoBySlot(slot); + if (!video) return false; - Graphics::CoktelVideo &video = *(_primaryVideo->getVideo()); - - breakKey = 27; - if (startFrame < 0) - startFrame = video.getCurrentFrame(); - if (lastFrame < 0) - lastFrame = video.getFramesCount() - 1; - if (palFrame < 0) - palFrame = startFrame; - if (endFrame < 0) - endFrame = lastFrame; - palCmd &= 0x3F; - - int16 realStartFrame = startFrame; - if (video.getCurrentFrame() != startFrame) { - if (!forceSeek && (video.getFeatures() & Graphics::CoktelVideo::kFeaturesSound)) - startFrame = video.getCurrentFrame(); - else - video.seekFrame(startFrame); - } + bool primary = slot == 0; - _vm->_draw->_showCursor = _noCursorSwitch ? 3 : 0; + if (video->decoder->getCurFrame() != properties.startFrame) { - if (fade) - _vm->_palAnim->fade(0, -2, 0); + if (properties.startFrame != -1) { + // Seek into the middle of the video - bool canceled = false; + if (video->decoder->hasSound()) { + // But there's sound - while (startFrame <= lastFrame) { - if (doPlay(startFrame, breakKey, - palCmd, palStart, palEnd, palFrame, endFrame, startFrame < realStartFrame)) { + if (properties.forceSeek) { + // And we force seeking => Seek - canceled = true; - break; - } + video->decoder->disableSound(); + video->decoder->seek(properties.startFrame + 1, SEEK_SET, true); + } - evalBgShading(video); + } else + // No sound => We can safely seek + video->decoder->seek(properties.startFrame + 1, SEEK_SET, true); - if (fade) { - _vm->_palAnim->fade(_vm->_global->_pPaletteDesc, -2, 0); - fade = false; + } else { + // Seek to the start => We can safely seek + + video->decoder->disableSound(); + video->decoder->seek(0, SEEK_SET, true); + video->decoder->enableSound(); } - if (!_noCursorSwitch) - video.waitEndFrame(); - startFrame++; } - evalBgShading(video); + if (video->decoder->getCurFrame() > properties.startFrame) + // If the video is already beyond the wanted frame, skip + return true; - if (reverseTo >= 0) { - int16 toFrame = video.getFramesCount() - reverseTo; - for (int i = video.getCurrentFrame(); i >= toFrame; i--) { - video.seekFrame(i, SEEK_SET, true); + bool modifiedPal = false; - bool b = doPlay(i, breakKey, 0, 0, 0, 0, 0); - evalBgShading(video); + if (primary) { + // Pre-decoding palette and blitting, only for primary videos - if (b) { - _vm->_palAnim->fade(0, -2, 0); - memset((char *)_vm->_draw->_vgaPalette, 0, 768); - } + if ((properties.startFrame == properties.palFrame) || + ((properties.startFrame == properties.endFrame) && (properties.palCmd == 8))) { - if (!_noCursorSwitch) - video.waitEndFrame(); - } - } + modifiedPal = true; + _vm->_draw->_applyPal = true; - evalBgShading(video); + if (properties.palCmd >= 4) + copyPalette(*video, properties.palStart, properties.palEnd); + } - return canceled; -} + if (modifiedPal && (properties.palCmd == 8) && (video->surface != _vm->_draw->_backSurface)) + _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc); -void VideoPlayer::primaryClose() { - _primaryVideo->close(); -} + if (_needBlit) + _vm->_draw->forceBlit(); + } -int VideoPlayer::slotOpen(const char *videoFile, Type which, int16 width, int16 height) { - Video *video = new Video(_vm); - char fileName[256]; + Graphics::Surface *surface = video->decoder->decodeNextFrame(); - strncpy0(fileName, videoFile, 250); + WRITE_VAR(11, video->decoder->getCurFrame()); - if (!findFile(fileName, which)) { - delete video; - return -1; - } - - if (!video->open(fileName, which, width, height)) { - delete video; - return -1; + uint32 ignoreBorder = 0; + if (_woodruffCohCottWorkaround && (properties.startFrame == 31)) { + // WORKAROUND: This frame mistakenly masks Coh Cott, making her vanish + // To prevent that, we'll never draw that part + ignoreBorder = 50; } - video->getVideo()->setVideoMemory(); - video->getVideo()->enableSound(*_vm->_mixer); + if (surface && primary) { + // Post-decoding palette and blitting, only for primary videos - int slot = getNextFreeSlot(); + if (_needBlit) + _vm->_draw->forceBlit(true); - _videoSlots[slot] = video; + if (modifiedPal && (properties.palCmd == 16)) { + if (video->surface == _vm->_draw->_backSurface) + _vm->_draw->forceBlit(); + _vm->_palAnim->fade(_vm->_global->_pPaletteDesc, -2, 0); + _vm->_draw->_noInvalidated = true; + _vm->_video->dirtyRectsAll(); + } - WRITE_VAR(7, video->getVideo()->getFramesCount()); + if (video->decoder->hasPalette() && (properties.palCmd > 1)) { + copyPalette(*video, properties.palStart, properties.palEnd); - return slot; -} + if (video->surface != _vm->_draw->_backSurface) + _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc); + else + _vm->_draw->_applyPal = true; + } -int VideoPlayer::getNextFreeSlot() { - uint slot; + const Common::List<Common::Rect> &dirtyRects = video->decoder->getDirtyRects(); - for (slot = 0; slot < _videoSlots.size(); slot++) - if (!_videoSlots[slot]) - break; + if (modifiedPal && (properties.palCmd == 8) && (video->surface == _vm->_draw->_backSurface)) + _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc); - if (slot == _videoSlots.size()) - _videoSlots.push_back(0); + if (video->surface == _vm->_draw->_backSurface) { - return slot; -} - -void VideoPlayer::slotPlay(int slot, int16 frame) { - if ((slot < 0) || (((uint) slot) >= _videoSlots.size()) || !_videoSlots[slot]) - return; + for (Common::List<Common::Rect>::const_iterator rect = dirtyRects.begin(); rect != dirtyRects.end(); ++rect) + _vm->_draw->invalidateRect(rect->left + ignoreBorder, rect->top, rect->right - 1, rect->bottom - 1); + _vm->_draw->blitInvalidated(); - Graphics::CoktelVideo &video = *(_videoSlots[slot]->getVideo()); + } else if (video->surface == _vm->_draw->_frontSurface) { + for (Common::List<Common::Rect>::const_iterator rect = dirtyRects.begin(); rect != dirtyRects.end(); ++rect) + _vm->_video->dirtyRectsAdd(rect->left + ignoreBorder, rect->top, rect->right - 1, rect->bottom - 1); - if (frame < 0) - frame = video.getCurrentFrame(); + } - if (frame >= video.getFramesCount()) - return; + if ((video->decoder->getCurFrame() - 1) == properties.startFrame) + // Only retrace if we're playing the frame we actually want to play + _vm->_video->retrace(); - if (video.getCurrentFrame() != frame) - video.seekFrame(frame); + int32 subtitle = video->decoder->getSubtitleIndex(); + if (subtitle != -1) + _vm->_draw->printTotText(subtitle); - _videoSlots[slot]->nextFrame(); - WRITE_VAR(11, frame); + if (modifiedPal && ((properties.palCmd == 2) || (properties.palCmd == 4))) + _vm->_palAnim->fade(_vm->_global->_pPaletteDesc, -2, 0); + } - evalBgShading(video); -} + if (primary && properties.waitEndFrame) + checkAbort(*video, properties); -void VideoPlayer::slotClose(int slot) { - if ((slot < 0) || (((uint) slot) >= _videoSlots.size()) || !_videoSlots[slot]) - return; + if ((video->decoder->getCurFrame() - 1) < properties.startFrame) + // The video played a frame we actually didn't want, so we have to adjust + properties.startFrame--; - delete _videoSlots[slot]; - _videoSlots[slot] = 0; + return true; } -void VideoPlayer::slotCopyFrame(int slot, byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp) { - - if ((slot < 0) || (((uint) slot) >= _videoSlots.size()) || !_videoSlots[slot]) - return; +void VideoPlayer::checkAbort(Video &video, Properties &properties) { + _vm->_util->processInput(); - _videoSlots[slot]->getVideo()->copyCurrentFrame(dest, - left, top, width, height, x, y, pitch, transp); -} + if (_vm->shouldQuit()) { + video.decoder->disableSound(); -void VideoPlayer::slotCopyPalette(int slot, int16 palStart, int16 palEnd) { - if ((slot < 0) || (((uint) slot) >= _videoSlots.size()) || !_videoSlots[slot]) + properties.canceled = true; return; + } - copyPalette(*(_videoSlots[slot]->getVideo()), palStart, palEnd); -} + if (properties.breakKey != 0) { + _vm->_util->getMouseState(&_vm->_global->_inter_mouseX, + &_vm->_global->_inter_mouseY, &_vm->_game->_mouseButtons); -void VideoPlayer::slotWaitEndFrame(int slot, bool onlySound) { - Video *video = getVideoBySlot(slot); + _vm->_inter->storeKey(_vm->_util->checkKey()); + if (VAR(0) == (unsigned) properties.breakKey) { + video.decoder->disableSound(); - if (video) { - Graphics::CoktelVideo &cVideo = *video->getVideo(); + // Seek to the last frame. Some scripts depend on that. + video.decoder->seek(properties.endFrame + 1, SEEK_SET, true); - if (!onlySound || (cVideo.getFeatures() & Graphics::CoktelVideo::kFeaturesSound)) - cVideo.waitEndFrame(); + properties.canceled = true; + } } } bool VideoPlayer::slotIsOpen(int slot) const { - if ((slot >= 0) && (((uint) slot) < _videoSlots.size()) && _videoSlots[slot]) - return true; - - return false; -} - -void VideoPlayer::slotSetDoubleMode(int slot, bool doubleMode) { - Video *video = getVideoBySlot(slot); - - if (video) - video->getVideo()->setDoubleMode(doubleMode); + return getVideoBySlot(slot) != 0; } -const VideoPlayer::Video *VideoPlayer::getVideoBySlot(int slot) const { - if (slot < 0) { - if (_primaryVideo->isOpen()) - return _primaryVideo; - } else if (((uint) slot) < _videoSlots.size() && _videoSlots[slot]) - return _videoSlots[slot]; +Common::String VideoPlayer::getFileName(int slot) const { + const Video *video = getVideoBySlot(slot); + if (!video) + return ""; - return 0; + return video->fileName; } -VideoPlayer::Video *VideoPlayer::getVideoBySlot(int slot) { - if (slot < 0) { - if (_primaryVideo->isOpen()) - return _primaryVideo; - } else if (((uint) slot) < _videoSlots.size() && _videoSlots[slot]) - return _videoSlots[slot]; +uint32 VideoPlayer::getFrameCount(int slot) const { + const Video *video = getVideoBySlot(slot); + if (!video) + return 0; - return 0; + return video->decoder->getFrameCount(); } -const char *VideoPlayer::getFileName(int slot) const { +uint32 VideoPlayer::getCurrentFrame(int slot) const { const Video *video = getVideoBySlot(slot); + if (!video) + return 0; - if (video) - return video->getFileName(); - - return ""; + return video->decoder->getCurFrame(); } -uint16 VideoPlayer::getFlags(int slot) const { +uint16 VideoPlayer::getWidth(int slot) const { const Video *video = getVideoBySlot(slot); + if (!video) + return 0; - if (video) - return video->getVideo()->getFlags(); - - return 0; + return video->decoder->getWidth(); } -int16 VideoPlayer::getFramesCount(int slot) const { +uint16 VideoPlayer::getHeight(int slot) const { const Video *video = getVideoBySlot(slot); + if (!video) + return 0; - if (video) - return video->getVideo()->getFramesCount(); - - return 0; + return video->decoder->getHeight(); } -int16 VideoPlayer::getCurrentFrame(int slot) const { +uint16 VideoPlayer::getDefaultX(int slot) const { const Video *video = getVideoBySlot(slot); + if (!video) + return 0; - if (video) - return video->getVideo()->getCurrentFrame(); - - return 0; + return video->decoder->getDefaultX(); } -int16 VideoPlayer::getWidth(int slot) const { +uint16 VideoPlayer::getDefaultY(int slot) const { const Video *video = getVideoBySlot(slot); + if (!video) + return 0; - if (video) - return video->getVideo()->getWidth(); - - return 0; + return video->decoder->getDefaultY(); } -int16 VideoPlayer::getHeight(int slot) const { +const Common::List<Common::Rect> *VideoPlayer::getDirtyRects(int slot) const { const Video *video = getVideoBySlot(slot); + if (!video) + return 0; - if (video) - return video->getVideo()->getHeight(); - - return 0; + return &video->decoder->getDirtyRects(); } -int16 VideoPlayer::getDefaultX(int slot) const { +bool VideoPlayer::hasEmbeddedFile(const Common::String &fileName, int slot) const { const Video *video = getVideoBySlot(slot); + if (!video) + return false; - if (video) - return video->getDefaultX(); - - return 0; + return video->decoder->hasEmbeddedFile(fileName); } -int16 VideoPlayer::getDefaultY(int slot) const { +Common::MemoryReadStream *VideoPlayer::getEmbeddedFile(const Common::String &fileName, int slot) { const Video *video = getVideoBySlot(slot); + if (!video) + return 0; - if (video) - return video->getDefaultY(); - - return 0; + return video->decoder->getEmbeddedFile(fileName); } -uint32 VideoPlayer::getFeatures(int slot) const { +int32 VideoPlayer::getSubtitleIndex(int slot) const { const Video *video = getVideoBySlot(slot); + if (!video) + return -1; - if (video) - return video->getFeatures(); - - return 0; + return video->decoder->getSubtitleIndex(); } -Graphics::CoktelVideo::State VideoPlayer::getState(int slot) const { - const Video *video = getVideoBySlot(slot); - Graphics::CoktelVideo::State state; +void VideoPlayer::writeVideoInfo(const Common::String &file, int16 varX, int16 varY, + int16 varFrames, int16 varWidth, int16 varHeight) { - if (video) - state = video->getState(); + Properties properties; - return state; -} + int slot = openVideo(false, file, properties); + if (slot >= 0) { + Video &video = _videoSlots[slot]; -bool VideoPlayer::hasExtraData(const char *fileName, int slot) const { - const Video *video = getVideoBySlot(slot); + int16 x = -1, y = -1, width = -1, height = -1; - if (video) - return video->hasExtraData(fileName); + x = video.decoder->getDefaultX(); + y = video.decoder->getDefaultY(); + width = video.decoder->getWidth(); + height = video.decoder->getHeight(); - return false; -} + if (VAR_OFFSET(varX) == 0xFFFFFFFF) + video.decoder->getFrameCoords(1, x, y, width, height); -Common::MemoryReadStream *VideoPlayer::getExtraData(const char *fileName, int slot) { - Video *video = getVideoBySlot(slot); + WRITE_VAR_OFFSET(varX , x); + WRITE_VAR_OFFSET(varY , y); + WRITE_VAR_OFFSET(varFrames, video.decoder->getFrameCount()); + WRITE_VAR_OFFSET(varWidth , width); + WRITE_VAR_OFFSET(varHeight, height); - if (video) - return video->getExtraData(fileName); + closeVideo(slot); - return 0; + } else { + WRITE_VAR_OFFSET(varX , (uint32) -1); + WRITE_VAR_OFFSET(varY , (uint32) -1); + WRITE_VAR_OFFSET(varFrames, (uint32) -1); + WRITE_VAR_OFFSET(varWidth , (uint32) -1); + WRITE_VAR_OFFSET(varHeight, (uint32) -1); + } } -void VideoPlayer::playFrame(int16 frame, int16 breakKey, - uint16 palCmd, int16 palStart, int16 palEnd, - int16 palFrame, int16 endFrame, bool noRetrace) { +bool VideoPlayer::copyFrame(int slot, byte *dest, + uint16 left, uint16 top, uint16 width, uint16 height, + uint16 x, uint16 y, uint16 pitch, int16 transp) const { - if (!_primaryVideo) - return; + const Video *video = getVideoBySlot(slot); + if (!video) + return false; - Video &video = *_primaryVideo; - Graphics::CoktelVideo &cVideo = *video.getVideo(); + const Graphics::Surface *surface = video->decoder->getSurface(); + if (!surface) + return false; - if (cVideo.getCurrentFrame() != frame) - cVideo.seekFrame(frame); - if (palFrame < 0) - palFrame = 0; - if (endFrame < 0) - endFrame = cVideo.getFramesCount() - 1; + int32 w = MIN<int32>(width , surface->w); + int32 h = MIN<int32>(height, surface->h); + const byte *src = (byte*)surface->pixels + (top * surface->pitch) + left; + byte *dst = dest + (y * pitch) + x; - bool modifiedPal = false; + if (transp < 0) { + // No transparency - if ((frame == palFrame) || ((frame == endFrame) && (palCmd == 8))) { - modifiedPal = true; - _vm->_draw->_applyPal = true; + if ((x == 0) && (left == 0) && (pitch == surface->pitch) && (width == surface->w)) { + // Dimensions fit, we can copy everything at once - if (palCmd >= 4) - copyPalette(cVideo, palStart, palEnd); - } + memcpy(dst, src, w * h); + return true; + } - if (modifiedPal && (palCmd == 8) && !_backSurf) - _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc); + // Copy row-by-row + while (h-- > 0) { + const byte *srcRow = src; + byte *dstRow = dst; - if (_needBlit) - _vm->_draw->forceBlit(); + memcpy(dstRow, srcRow, w); - Graphics::CoktelVideo::State state = video.nextFrame(); - WRITE_VAR(11, frame); + src += surface->pitch; + dst += pitch; + } - if (_woodruffCohCottWorkaround && (frame == 32)) { - // WORKAROUND: This frame mistakenly masks Coh Cott, making her vanish - // To prevent that, we'll never draw that part - state.left += 50; + return true; } - if (_needBlit) - _vm->_draw->forceBlit(true); + // Copy pixel-by-pixel + while (h-- > 0) { + const byte *srcRow = src; + byte *dstRow = dst; - if (modifiedPal && (palCmd == 16)) { - if (_backSurf) - _vm->_draw->forceBlit(); - _vm->_palAnim->fade(_vm->_global->_pPaletteDesc, -2, 0); - _vm->_draw->_noInvalidated = true; - _vm->_video->dirtyRectsAll(); + for (int32 i = 0; i < w; i++, srcRow++, dstRow++) + if (*srcRow != transp) + *dstRow = *srcRow; + + src += surface->pitch; + dst += pitch; } - if ((state.flags & Graphics::CoktelVideo::kStatePalette) && (palCmd > 1)) { - copyPalette(cVideo, palStart, palEnd); + return true; +} - if (!_backSurf) - _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc); - else - _vm->_draw->_applyPal = true; - } +const VideoPlayer::Video *VideoPlayer::getVideoBySlot(int slot) const { + if ((slot < 0) || (slot >= kVideoSlotCount)) + return 0; - if (modifiedPal && (palCmd == 8) && _backSurf) - _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc); + if (_videoSlots[slot].isEmpty()) + return 0; + return &_videoSlots[slot]; +} - if (!_ownSurf) { - if (_backSurf) { - _vm->_draw->invalidateRect(state.left, state.top, state.right, state.bottom); - _vm->_draw->blitInvalidated(); - } else - _vm->_video->dirtyRectsAdd(state.left, state.top, state.right, state.bottom); +VideoPlayer::Video *VideoPlayer::getVideoBySlot(int slot) { + if ((slot < 0) || (slot >= kVideoSlotCount)) + return 0; - if (!noRetrace) - _vm->_video->retrace(); - } + if (_videoSlots[slot].isEmpty()) + return 0; - // Subtitle - if (state.flags & Graphics::CoktelVideo::kStateSpeech) - _vm->_draw->printTotText(state.speechId); + return &_videoSlots[slot]; +} - if (modifiedPal && ((palCmd == 2) || (palCmd == 4))) - _vm->_palAnim->fade(_vm->_global->_pPaletteDesc, -2, 0); +int VideoPlayer::getNextFreeSlot() { + // Starting with 1, since 0 is reserved for the "primary" video + for (int i = 1; i < kVideoSlotCount; i++) + if (_videoSlots[i].isEmpty()) + return i; + + return -1; } -bool VideoPlayer::doPlay(int16 frame, int16 breakKey, - uint16 palCmd, int16 palStart, int16 palEnd, - int16 palFrame, int16 endFrame, bool noRetrace) { +void VideoPlayer::evalBgShading(Video &video) { + if (video.decoder->isSoundPlaying()) + _vm->_sound->bgShade(); + else + _vm->_sound->bgUnshade(); +} - playFrame(frame, breakKey, palCmd, palStart, palEnd, palFrame, endFrame, noRetrace); +Common::String VideoPlayer::findFile(const Common::String &file, Properties &properties) { - _vm->_util->processInput(); + bool hasExtension = false; - if (_vm->shouldQuit()) { - _primaryVideo->getVideo()->disableSound(); - return true; - } + Common::String base = file; + Common::String fileName = file; - if (breakKey != 0) { - _vm->_util->getMouseState(&_vm->_global->_inter_mouseX, - &_vm->_global->_inter_mouseY, &_vm->_game->_mouseButtons); + const char *posDot = strrchr(base.c_str(), '.'); + if (posDot) { + hasExtension = true; + base = Common::String(base.c_str(), posDot); + posDot++; + } - _vm->_inter->storeKey(_vm->_util->checkKey()); - if (VAR(0) == (unsigned) breakKey) { - _primaryVideo->getVideo()->disableSound(); - // Seek to the last frame. Some scripts depend on that. - _primaryVideo->getVideo()->seekFrame(endFrame, SEEK_SET, true); - return true; + if (hasExtension) { + int i; + for (i = 0; i < ARRAYSIZE(_extensions); i++) { + if (!scumm_stricmp(posDot, _extensions[i])) { + if ((properties.type != kVideoTypeTry) && (properties.type == ((Type) i))) { + warning("Attempted to open video \"%s\", but requested a different type", fileName.c_str()); + return ""; + } + properties.type = (Type) i; + break; + } } + if (i >= ARRAYSIZE(_extensions)) + hasExtension = false; } - return false; -} + if (!hasExtension) { + // No or unrecognized extension. Probing. -void VideoPlayer::copyPalette(Graphics::CoktelVideo &video, int16 palStart, int16 palEnd) { - if (!(video.getFeatures() & Graphics::CoktelVideo::kFeaturesPalette)) - return; + int i; + for (i = 0; i < ARRAYSIZE(_extensions); i++) { + if ((properties.type == kVideoTypeTry) || (properties.type == ((Type) i))) { + fileName = base + "." + _extensions[i]; - if (palStart < 0) - palStart = 0; - if (palEnd < 0) - palEnd = 255; + if (_vm->_dataIO->existData(fileName.c_str())) { + properties.type = (Type) i; + break; + } + } + } + if ((i >= ARRAYSIZE(_extensions)) || (properties.type == kVideoTypeTry)) { + warning("Couldn't open video \"%s\"", file.c_str()); + return ""; + } - memcpy(((char *)(_vm->_global->_pPaletteDesc->vgaPal)) + palStart * 3, - video.getPalette() + palStart * 3, - (palEnd - palStart + 1) * 3); -} + } -void VideoPlayer::writeVideoInfo(const char *videoFile, int16 varX, int16 varY, - int16 varFrames, int16 varWidth, int16 varHeight) { + return fileName; +} - if (primaryOpen(videoFile)) { - int16 x, y, width, height; +Graphics::CoktelDecoder *VideoPlayer::openVideo(const Common::String &file, Properties &properties) { + Common::String fileName = findFile(file, properties); + if (fileName.empty()) + return 0; - x = _primaryVideo->getVideo()->getX(); - y = _primaryVideo->getVideo()->getY(); - width = _primaryVideo->getVideo()->getWidth(); - height = _primaryVideo->getVideo()->getHeight(); + Common::SeekableReadStream *stream = _vm->_dataIO->getDataStream(fileName.c_str()); + if (!stream) + return 0; - if (VAR_OFFSET(varX) == 0xFFFFFFFF) - _primaryVideo->getVideo()->getFrameCoords(1, x, y, width, height); + Graphics::CoktelDecoder *video = 0; + if (properties.type == kVideoTypeIMD) + video = new Graphics::IMDDecoder(_vm->_mixer, Audio::Mixer::kSFXSoundType); + else if (properties.type == kVideoTypePreIMD) + video = new Graphics::PreIMDDecoder(properties.width, properties.height, _vm->_mixer, Audio::Mixer::kSFXSoundType); + else if (properties.type == kVideoTypeVMD) + video = new Graphics::VMDDecoder(_vm->_mixer, Audio::Mixer::kSFXSoundType); + else if (properties.type == kVideoTypeRMD) + video = new Graphics::VMDDecoder(_vm->_mixer, Audio::Mixer::kSFXSoundType); + else + warning("Couldn't open video \"%s\": Invalid video Type", fileName.c_str()); - WRITE_VAR_OFFSET(varX, x); - WRITE_VAR_OFFSET(varY, y); - WRITE_VAR_OFFSET(varFrames, _primaryVideo->getVideo()->getFramesCount()); - WRITE_VAR_OFFSET(varWidth, width); - WRITE_VAR_OFFSET(varHeight, height); + if (!video) { + delete stream; + return 0; + } - primaryClose(); - } else { - WRITE_VAR_OFFSET(varX, (uint32) -1); - WRITE_VAR_OFFSET(varY, (uint32) -1); - WRITE_VAR_OFFSET(varFrames, (uint32) -1); - WRITE_VAR_OFFSET(varWidth, (uint32) -1); - WRITE_VAR_OFFSET(varHeight, (uint32) -1); + if (!video->load(stream)) { + delete video; + return 0; } + + properties.width = video->getWidth(); + properties.height = video->getHeight(); + + return video; } -void VideoPlayer::evalBgShading(Graphics::CoktelVideo &video) { - if (video.isSoundPlaying()) - _vm->_sound->bgShade(); - else - _vm->_sound->bgUnshade(); +void VideoPlayer::copyPalette(const Video &video, int16 palStart, int16 palEnd) { + if (!video.decoder->hasPalette()) + return; + + if (palStart < 0) + palStart = 0; + if (palEnd < 0) + palEnd = 255; + + palStart = palStart * 3; + palEnd = (palEnd + 1) * 3; + + for (int i = palStart; i <= palEnd; i++) + ((char *)(_vm->_global->_pPaletteDesc->vgaPal))[i] = video.decoder->getPalette()[i] >> 2; } } // End of namespace Gob diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h index 8ca8aebf44..d91d0a3845 100644 --- a/engines/gob/videoplayer.h +++ b/engines/gob/videoplayer.h @@ -27,11 +27,15 @@ #define GOB_VIDEOPLAYER_H #include "common/array.h" +#include "common/list.h" +#include "common/rect.h" #include "common/str.h" -#include "graphics/video/coktelvideo/coktelvideo.h" +#include "graphics/surface.h" +#include "graphics/video/coktel_decoder.h" #include "gob/util.h" +#include "gob/draw.h" namespace Gob { @@ -41,132 +45,135 @@ class DataStream; class VideoPlayer { public: enum Flags { - kFlagNone = 0, - kFlagUseBackSurfaceContent = 0x40, - kFlagFrontSurface = 0x80, - kFlagNoVideo = 0x100, - kFlagOtherSurface = 0x800, - kFlagScreenSurface = 0x400000 + kFlagNone = 0x000000, + kFlagUseBackSurfaceContent = 0x000040, ///< Use the back surface as a video "base". + kFlagFrontSurface = 0x000080, ///< Draw directly into the front surface. + kFlagNoVideo = 0x000100, ///< Only sound. + kFlagOtherSurface = 0x000800, ///< Draw into a specific sprite. + kFlagScreenSurface = 0x400000 ///< Draw into a newly created sprite of screen dimensions. }; + /** Video format. */ enum Type { - kVideoTypeTry = -1, - kVideoTypeIMD = 0, - kVideoTypePreIMD = 1, - kVideoTypeVMD = 2, - kVideoTypeRMD = 3 + kVideoTypeTry = -1, ///< Try any format. + kVideoTypeIMD = 0, + kVideoTypePreIMD = 1, ///< Early IMD format found in Fascination. + kVideoTypeVMD = 2, + kVideoTypeRMD = 3 ///< VMD containing "reversed" video. }; - VideoPlayer(GobEngine *vm); - ~VideoPlayer(); + struct Properties { + Type type; ///< Type of the video to open. - bool primaryOpen(const char *videoFile, int16 x = -1, int16 y = -1, - int32 flags = kFlagFrontSurface, Type which = kVideoTypeTry, - int16 width = -1, int16 height = -1); - bool primaryPlay(int16 startFrame = -1, int16 lastFrame = -1, - int16 breakKey = kShortKeyEscape, - uint16 palCmd = 8, int16 palStart = 0, int16 palEnd = 255, - int16 palFrame = -1, int16 endFrame = -1, bool fade = false, - int16 reverseTo = -1, bool forceSeek = false); - void primaryClose(); - - void playFrame(int16 frame, int16 breakKey = kShortKeyEscape, - uint16 palCmd = 8, int16 palStart = 0, int16 palEnd = 255, - int16 palFrame = -1 , int16 endFrame = -1, bool noRetrace = false); - - int slotOpen(const char *videoFile, Type which = kVideoTypeTry, - int16 width = -1, int16 height = -1); - void slotPlay(int slot, int16 frame = -1); - void slotClose(int slot); - void slotCopyFrame(int slot, byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp = -1); - void slotCopyPalette(int slot, int16 palStart = -1, int16 palEnd = -1); - void slotWaitEndFrame(int slot = -1, bool onlySound = false); + int sprite; ///< The sprite onto which to draw the video. - void slotSetDoubleMode(int slot, bool doubleMode); + int32 x; ///< X coordinate of the video. + int32 y; ///< Y coordinate of the video. + int32 width; ///< Width of the video. + int32 height; ///< Height of the video. - bool slotIsOpen(int slot) const; + uint32 flags; ///< Video flags. - const char *getFileName(int slot = -1) const; - uint16 getFlags(int slot = -1) const; - int16 getFramesCount(int slot = -1) const; - int16 getCurrentFrame(int slot = -1) const; - int16 getWidth(int slot = -1) const; - int16 getHeight(int slot = -1) const; - int16 getDefaultX(int slot = -1) const; - int16 getDefaultY(int slot = -1) const; + int32 startFrame; ///< Frame to start playback from. + int32 lastFrame; ///< Frame to stop playback at. + int32 endFrame; ///< Last frame of this playback cycle. - Graphics::CoktelVideo::State getState(int slot = -1) const; - uint32 getFeatures(int slot = -1) const; + bool forceSeek; ///< Force the seeking to the start frame. - bool hasExtraData(const char *fileName, int slot = -1) const; - Common::MemoryReadStream *getExtraData(const char *fileName, int slot = -1); + int16 breakKey; ///< Keycode of the break/abort key. - void writeVideoInfo(const char *videoFile, int16 varX, int16 varY, - int16 varFrames, int16 varWidth, int16 varHeight); + uint16 palCmd; ///< Palette command. + int16 palStart; ///< Palette entry to start with. + int16 palEnd; ///< Palette entry to end at. + int32 palFrame; ///< Frame to apply the palette command at. -private: - class Video { - public: - Video(GobEngine *vm); - ~Video(); + bool fade; ///< Fade in? + + bool waitEndFrame; ///< Wait for the frame's time to run out? + + bool canceled; ///< Was the video canceled? + + Properties(); + }; + + VideoPlayer(GobEngine *vm); + ~VideoPlayer(); + + void evaluateFlags(Properties &properties); + + int openVideo(bool primary, const Common::String &file, Properties &properties); + bool closeVideo(int slot = 0); + + bool play(int slot, Properties &properties); + void waitEndFrame(int slot, bool onlySound = false); - bool open(const char *fileName, Type which, int16 width, int16 height); - void close(); + bool slotIsOpen(int slot = 0) const; - bool isOpen() const; + Common::String getFileName(int slot = 0) const; - const char *getFileName() const; - Graphics::CoktelVideo *getVideo(); - const Graphics::CoktelVideo *getVideo() const; + uint32 getFrameCount (int slot = 0) const; + uint32 getCurrentFrame(int slot = 0) const; + uint16 getWidth (int slot = 0) const; + uint16 getHeight (int slot = 0) const; + uint16 getDefaultX (int slot = 0) const; + uint16 getDefaultY (int slot = 0) const; - Graphics::CoktelVideo::State getState() const; - uint32 getFeatures() const; + const Common::List<Common::Rect> *getDirtyRects(int slot = 0) const; - int16 getDefaultX() const; - int16 getDefaultY() const; + bool hasEmbeddedFile(const Common::String &fileName, int slot = 0) const; + Common::MemoryReadStream *getEmbeddedFile(const Common::String &fileName, int slot = 0); - bool hasExtraData(const char *fileName) const; - Common::MemoryReadStream *getExtraData(const char *fileName); + int32 getSubtitleIndex(int slot = 0) const; - Graphics::CoktelVideo::State nextFrame(); + void writeVideoInfo(const Common::String &file, int16 varX, int16 varY, + int16 varFrames, int16 varWidth, int16 varHeight); + + bool copyFrame(int slot, byte *dest, + uint16 left, uint16 top, uint16 width, uint16 height, + uint16 x, uint16 y, uint16 pitch, int16 transp = -1) const; + +private: + struct Video { + Graphics::CoktelDecoder *decoder; + Common::String fileName; + + SurfaceDescPtr surface; - private: - GobEngine *_vm; + Video(); - Common::String _fileName; - DataStream *_stream; - Graphics::CoktelVideo *_video; - Graphics::CoktelVideo::State _state; - int16 _defaultX, _defaultY; + bool isEmpty() const; + void close(); }; + static const int kVideoSlotCount = 32; + static const char *_extensions[]; GobEngine *_vm; - Common::Array<Video *> _videoSlots; - Video *_primaryVideo; - bool _ownSurf; - bool _backSurf; + // _videoSlots[0] is reserved for the "primary" video + Video _videoSlots[kVideoSlotCount]; + bool _needBlit; - bool _noCursorSwitch; + bool _noCursorSwitch; bool _woodruffCohCottWorkaround; - bool findFile(char *fileName, Type &which); - - const Video *getVideoBySlot(int slot = -1) const; - Video *getVideoBySlot(int slot = -1); + const Video *getVideoBySlot(int slot) const; + Video *getVideoBySlot(int slot); int getNextFreeSlot(); - void copyPalette(Graphics::CoktelVideo &video, int16 palStart = -1, int16 palEnd = -1); - bool doPlay(int16 frame, int16 breakKey, - uint16 palCmd, int16 palStart, int16 palEnd, - int16 palFrame, int16 endFrame, bool noRetrace = false); - void evalBgShading(Graphics::CoktelVideo &video); + Common::String findFile(const Common::String &file, Properties &properties); + + Graphics::CoktelDecoder *openVideo(const Common::String &file, Properties &properties); + + bool playFrame(int slot, Properties &properties); + + void checkAbort(Video &video, Properties &properties); + void evalBgShading(Video &video); + + void copyPalette(const Video &video, int16 palStart, int16 palEnd); }; } // End of namespace Gob diff --git a/engines/kyra/detection_tables.h b/engines/kyra/detection_tables.h index fe4cc7298f..2e1d5afc17 100644 --- a/engines/kyra/detection_tables.h +++ b/engines/kyra/detection_tables.h @@ -194,7 +194,7 @@ const KYRAGameDescription adGameDescs[] = { Common::EN_ANY, Common::kPlatformAmiga, ADGF_NO_FLAGS, - Common::GUIO_NOSPEECH + Common::GUIO_NOSPEECH | Common::GUIO_MIDIAMIGA }, KYRA1_AMIGA_FLAGS }, @@ -211,7 +211,7 @@ const KYRAGameDescription adGameDescs[] = { Common::DE_DEU, Common::kPlatformAmiga, ADGF_NO_FLAGS, - Common::GUIO_NOSPEECH + Common::GUIO_NOSPEECH | Common::GUIO_MIDIAMIGA }, KYRA1_AMIGA_FLAGS }, @@ -1113,6 +1113,23 @@ const KYRAGameDescription adGameDescs[] = { "lol", "Extracted", { + { "GENERAL.PAK", 0, "0f1fabc1f67b772a30d8e05ece720ac5", -1 }, + { "CHAPTER7.PAK", 0, "482308aba1c40ee32449b91b0c63b990", -1 }, + { 0, 0, 0, 0 } + }, + Common::EN_ANY, + Common::kPlatformPC, + ADGF_NO_FLAGS, + Common::GUIO_NOSPEECH | Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM | Common::GUIO_MIDIPCSPK + }, + LOL_FLOPPY_FLAGS + }, + + { + { + "lol", + "Extracted", + { { "GENERAL.PAK", 0, "996e66e81054d36249907a1d8158da3d", -1 }, { "CHAPTER7.PAK", 0, "cabee57f00d6d84b65a732b6868a4959", -1 }, { 0, 0, 0, 0 } diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index 98f0e31b69..03d52ec4ac 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -4291,7 +4291,7 @@ void LoLEngine::drawMapPage(int pageNum) { if (!_defaultLegendData[ii].enable) continue; _screen->copyBlockAndApplyOverlay(_screen->_curPage, 235, (tY << 3) + 21 + yOffset, _screen->_curPage, 235 + xOffset, (tY << 3) + 21 + yOffset, 7, 6, 0, _mapOverlay); - _screen->drawShape(_screen->_curPage, _automapShapes[_defaultLegendData[ii].shapeIndex << 2], 232 + xOffset, (tY << 3) + 18 + yOffset + _defaultLegendData[ii].x, 0, 0); + _screen->drawShape(_screen->_curPage, _automapShapes[_defaultLegendData[ii].shapeIndex << 2], 232 + xOffset, (tY << 3) + 18 + yOffset + _defaultLegendData[ii].y, 0, 0); printMapText(_defaultLegendData[ii].stringId, 244 + xOffset, (tY << 3) + 22 + yOffset); tY++; } diff --git a/engines/kyra/lol.h b/engines/kyra/lol.h index b5a657ac15..57c127a94f 100644 --- a/engines/kyra/lol.h +++ b/engines/kyra/lol.h @@ -256,7 +256,7 @@ struct LevelTempData { struct MapLegendData { uint8 shapeIndex; bool enable; - int8 x; + int8 y; uint16 stringId; }; diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp index 8d01d47262..d27b075906 100644 --- a/engines/kyra/sound_towns.cpp +++ b/engines/kyra/sound_towns.cpp @@ -65,7 +65,9 @@ bool SoundTowns::init() { if (!loadInstruments()) return false; - _driver->cdaSetVolume(1, 118, 118); + _driver->intf()->callback(68); + _driver->intf()->callback(70, 0x33); + _driver->setOutputVolume(1, 118, 118); return true; } @@ -91,7 +93,7 @@ void SoundTowns::playTrack(uint8 track) { beginFadeOut(); if (_musicEnabled == 2 && trackNum != -1) { - _driver->cdaSetVolume(1, 118, 118); + _driver->setOutputVolume(1, 118, 118); g_system->getAudioCDManager()->play(trackNum + 1, loop ? -1 : 1, 0, 0); g_system->getAudioCDManager()->updateCD(); _cdaPlaying = true; @@ -229,24 +231,24 @@ void SoundTowns::stopAllSoundEffects() { void SoundTowns::beginFadeOut() { if (_cdaPlaying) { for (int i = 118; i > 103; i--) { - _driver->cdaSetVolume(1, i, i); + _driver->setOutputVolume(1, i, i); _vm->delay(2 * _vm->tickLength()); } for (int i = 103; i > 83; i -= 2) { - _driver->cdaSetVolume(1, i, i); + _driver->setOutputVolume(1, i, i); _vm->delay(2 * _vm->tickLength()); } for (int i = 83; i > 58; i -= 2) { - _driver->cdaSetVolume(1, i, i); + _driver->setOutputVolume(1, i, i); _vm->delay(_vm->tickLength()); } for (int i = 58; i > 0; i--) - _driver->cdaSetVolume(1, i, i); + _driver->setOutputVolume(1, i, i); - _driver->cdaSetVolume(1, 0, 0); + _driver->setOutputVolume(1, 0, 0); } else { if (_lastTrack == -1) @@ -335,9 +337,9 @@ void SoundTowns::playEuphonyTrack(uint32 offset, int loop) { for (int i = 0; i < 32; i++) _driver->chanOrdr(i, *src++); for (int i = 0; i < 32; i++) - _driver->chanLevel(i, *src++); + _driver->chanVolumeShift(i, *src++); for (int i = 0; i < 32; i++) - _driver->chanTranspose(i, *src++); + _driver->chanNoteShift(i, *src++); src = _musicTrackData + 1748; for (int i = 0; i < 6; i++) diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp index 274acae22c..4b71b1d69d 100644 --- a/engines/kyra/staticres.cpp +++ b/engines/kyra/staticres.cpp @@ -42,7 +42,7 @@ namespace Kyra { -#define RESFILE_VERSION 71 +#define RESFILE_VERSION 72 namespace { bool checkKyraDat(Common::SeekableReadStream *file) { diff --git a/engines/kyra/staticres_lol.cpp b/engines/kyra/staticres_lol.cpp index dbf6808e37..3287ee37d6 100644 --- a/engines/kyra/staticres_lol.cpp +++ b/engines/kyra/staticres_lol.cpp @@ -372,31 +372,32 @@ void LoLEngine::initStaticResource() { _autoMapStrings = _staticres->loadRawDataBe16(kLolMapStringId, _autoMapStringsSize); - int tmpSize = 0; - const uint8 *tmp = _staticres->loadRawData(kLolLegendData, tmpSize); - tmpSize /= 5; - if (tmp) { - _defaultLegendData = new MapLegendData[tmpSize]; - for (int i = 0; i < tmpSize; i++) { + int tempSize; + const uint8 *tmp = _staticres->loadRawData(kLolLegendData, tempSize); + uint8 entrySize = tempSize / 12; + tempSize /= entrySize; + if (tempSize) { + _defaultLegendData = new MapLegendData[tempSize]; + for (int i = 0; i < tempSize; i++) { _defaultLegendData[i].shapeIndex = *tmp++; _defaultLegendData[i].enable = *tmp++ ? true : false; - _defaultLegendData[i].x = (int8)*tmp++; + _defaultLegendData[i].y = (entrySize == 5) ? (int8)*tmp++ : (i == 10 ? -5 : 0); _defaultLegendData[i].stringId = READ_LE_UINT16(tmp); tmp += 2; } _staticres->unloadId(kLolLegendData); } - tmp = _staticres->loadRawData(kLolMapCursorOvl, tmpSize); - _mapCursorOverlay = new uint8[tmpSize]; - memcpy(_mapCursorOverlay, tmp, tmpSize); + tmp = _staticres->loadRawData(kLolMapCursorOvl, tempSize); + _mapCursorOverlay = new uint8[tempSize]; + memcpy(_mapCursorOverlay, tmp, tempSize); _staticres->unloadId(kLolMapCursorOvl); _updateSpellBookCoords = _staticres->loadRawData(kLolSpellbookCoords, _updateSpellBookCoordsSize); _updateSpellBookAnimData = _staticres->loadRawData(kLolSpellbookAnim, _updateSpellBookAnimDataSize); _healShapeFrames = _staticres->loadRawData(kLolHealShapeFrames, _healShapeFramesSize); - tmp = _staticres->loadRawData(kLolLightningDefs, tmpSize); + tmp = _staticres->loadRawData(kLolLightningDefs, tempSize); if (tmp) { _lightningProps = new LightningProperty[5]; for (int i = 0; i < 5; i++) { diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index 2432d84faa..7acbe56a12 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -51,7 +51,7 @@ #include "graphics/video/avi_decoder.h" #include "sci/video/seq_decoder.h" #ifdef ENABLE_SCI32 -#include "sci/video/vmd_decoder.h" +#include "graphics/video/coktel_decoder.h" #endif #include "common/file.h" @@ -234,7 +234,7 @@ void Console::postEnter() { videoDecoder = seqDecoder; #ifdef ENABLE_SCI32 } else if (_videoFile.hasSuffix(".vmd")) { - videoDecoder = new VMDDecoder(g_system->getMixer()); + videoDecoder = new Graphics::VMDDecoder(g_system->getMixer()); #endif } else if (_videoFile.hasSuffix(".avi")) { videoDecoder = new Graphics::AviDecoder(g_system->getMixer()); @@ -245,6 +245,9 @@ void Console::postEnter() { uint16 y = (g_system->getHeight() - videoDecoder->getHeight()) / 2; bool skipVideo = false; + if (videoDecoder->hasDirtyPalette()) + videoDecoder->setSystemPalette(); + while (!g_engine->shouldQuit() && !videoDecoder->endOfVideo() && !skipVideo) { if (videoDecoder->needsUpdate()) { Graphics::Surface *frame = videoDecoder->decodeNextFrame(); @@ -443,6 +446,7 @@ bool Console::cmdGetVersion(int argc, const char **argv) { DebugPrintf("Resource volume version: %s\n", g_sci->getResMan()->getVolVersionDesc()); DebugPrintf("Resource map version: %s\n", g_sci->getResMan()->getMapVersionDesc()); DebugPrintf("Contains selector vocabulary (vocab.997): %s\n", hasVocab997 ? "yes" : "no"); + DebugPrintf("Has CantBeHere selector: %s\n", g_sci->getKernel()->_selectorCache.cantBeHere != -1 ? "yes" : "no"); DebugPrintf("Game version (VERSION file): %s\n", gameVersion.c_str()); DebugPrintf("\n"); diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 0614eff6e6..a74c34f517 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -643,6 +643,15 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::ES_ESP, Common::kPlatformWindows, 0, GUIO_NONE }, + // Gabriel Knight - English Macintosh + {"gk1", "", { + {"Data1", 0, "7a89c96365a4da5d3b3efdc3a94bab3e", 5831362}, + {"Data2", 0, "db70638e972c3706e4dc9e01ef3a30ea", 6696048}, + {"Data3", 0, "d740126293aea176c4f8a6c71634cff4", 3683997}, + {"Data4", 0, "f6cbf2605f618ce035bed162d66b2b8a", 3233086}, + AD_LISTEND}, + Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK, GUIO_NONE }, + // Gabriel Knight 2 - English Windows Non-Interactive Demo // Executable scanning reports "2.100.002" {"gk2", "Demo", { @@ -2554,17 +2563,6 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, -#endif - - // Slater & Charlie go camping - {"slater", "", { - {"resource.000", 0, "1846b57fe84774be72f7c50ab3c90df0", 2256126}, - {"resource.map", 0, "21f85414124dc23e54544a5536dc35cd", 4044}, - {"resource.msg", 0, "c44f51fb955eae266fecf360ebcd5ad2", 1132}, - AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH }, - -#ifdef ENABLE_SCI32 // RAMA - English DOS/Windows Demo // Executable scanning reports "2.100.002", VERSION file reports "000.000.008" {"rama", "Demo", { @@ -2660,6 +2658,14 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + // Slater & Charlie Go Camping - English DOS/Windows + {"slater", "", { + {"resource.000", 0, "1846b57fe84774be72f7c50ab3c90df0", 2256126}, + {"resource.map", 0, "21f85414124dc23e54544a5536dc35cd", 4044}, + {"resource.msg", 0, "c44f51fb955eae266fecf360ebcd5ad2", 1132}, + AD_LISTEND}, + Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + // Space Quest 1 VGA Remake - English Amiga (from www.back2roots.org) // SCI interpreter version 1.000.510 (just a guess) {"sq1sci", "VGA Remake", { @@ -3010,13 +3016,16 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, - // Space Quest 5 - English DOS +#if 0 + // Space Quest 5 - English DOS - THIS IS THE UNOFFICIAL BETA VERSION, WHICH IS OBVIOUSLY PIRATED AND CONTAINS MANY BUGS + // ffs. http://www.akril15.com/sr/sq5alt/sq5alt.html =DO NOT RE-ADD= // SCI interpreter version 1.001.067 {"sq5", "", { {"resource.map", 0, "8bde0a9adb9a3e9aaa861826874c9834", 6473}, {"resource.000", 0, "f4a48705764544d7cc64a7bb22a610df", 6025184}, AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, +#endif // Space Quest 5 v1.04 - German DOS (from Tobis87, updated information by markcool from bug reports #2723935 and #2724762) // SCI interpreter version 1.001.068 diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h index b2b8eb593e..e71e97e95d 100644 --- a/engines/sci/engine/kernel_tables.h +++ b/engines/sci/engine/kernel_tables.h @@ -320,7 +320,7 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_CALL(CosDiv), SIG_EVERYWHERE, "ii", NULL, NULL }, { MAP_CALL(DeleteKey), SIG_EVERYWHERE, "l.", NULL, NULL }, { MAP_CALL(DeviceInfo), SIG_EVERYWHERE, "i(r)(r)(i)", NULL, kDeviceInfo_workarounds }, // subop - { MAP_CALL(Display), SIG_EVERYWHERE, "[ir]([ir!]*)", NULL, NULL }, + { MAP_CALL(Display), SIG_EVERYWHERE, "[ir]([ir!]*)", NULL, kDisplay_workarounds }, // ^ we allow invalid references here, because kDisplay gets called with those in e.g. pq3 during intro // restoreBits() checks and skips invalid handles, so that's fine. Sierra SCI behaved the same { MAP_CALL(DirLoop), SIG_EVERYWHERE, "oi", NULL, NULL }, diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index e1e92b1cf9..a3f7a90da3 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -300,8 +300,8 @@ reg_t kGraphFillBoxAny(EngineState *s, int argc, reg_t *argv) { Common::Rect rect = getGraphRect(argv); int16 colorMask = argv[4].toUint16(); int16 color = argv[5].toSint16(); - int16 priority = (argc > 6) ? argv[6].toSint16() : -1; - int16 control = (argc > 7) ? argv[7].toSint16() : -1; + int16 priority = argv[6].toSint16(); // yes, we may read from stack sometimes here + int16 control = argv[7].toSint16(); // sierra did the same g_sci->_gfxPaint16->kernelGraphFillBox(rect, colorMask, color, priority, control); return s->r_acc; diff --git a/engines/sci/engine/kmath.cpp b/engines/sci/engine/kmath.cpp index f3769b653b..332fbb62f8 100644 --- a/engines/sci/engine/kmath.cpp +++ b/engines/sci/engine/kmath.cpp @@ -63,11 +63,11 @@ reg_t kRandom(EngineState *s, int argc, reg_t *argv) { } reg_t kAbs(EngineState *s, int argc, reg_t *argv) { - return make_reg(0, abs(argv[0].toSint16())); + return make_reg(0, ABS(argv[0].toSint16())); } reg_t kSqrt(EngineState *s, int argc, reg_t *argv) { - return make_reg(0, (int16) sqrt((float) abs(argv[0].toSint16()))); + return make_reg(0, (int16) sqrt((float) ABS(argv[0].toSint16()))); } reg_t kGetAngle(EngineState *s, int argc, reg_t *argv) { diff --git a/engines/sci/engine/kmovement.cpp b/engines/sci/engine/kmovement.cpp index dfd1aa699e..8c43a35fea 100644 --- a/engines/sci/engine/kmovement.cpp +++ b/engines/sci/engine/kmovement.cpp @@ -86,7 +86,7 @@ reg_t kSetJump(EngineState *s, int argc, reg_t *argv) { int vy = 0; // y velocity int dxWasNegative = (dx < 0); - dx = abs(dx); + dx = ABS(dx); assert(gy >= 0); @@ -104,8 +104,8 @@ reg_t kSetJump(EngineState *s, int argc, reg_t *argv) { // we ensure vx will be less than sqrt(gy * dx)). if (dx + dy < 0) { // dy is negative and |dy| > |dx| - c = (2 * abs(dy)) / dx; - //tmp = abs(dy); // ALMOST the resulting value, except for obvious rounding issues + c = (2 * ABS(dy)) / dx; + //tmp = ABS(dy); // ALMOST the resulting value, except for obvious rounding issues } else { // dy is either positive, or |dy| <= |dx| c = (dx * 3 / 2 - dy) / dx; @@ -122,8 +122,8 @@ reg_t kSetJump(EngineState *s, int argc, reg_t *argv) { } // POST: c >= 1 tmp = c * dx + dy; - // POST: (dx != 0) ==> abs(tmp) > abs(dx) - // POST: (dx != 0) ==> abs(tmp) ~>=~ abs(dy) + // POST: (dx != 0) ==> ABS(tmp) > ABS(dx) + // POST: (dx != 0) ==> ABS(tmp) ~>=~ ABS(dy) debugC(2, kDebugLevelBresen, "c: %d, tmp: %d", c, tmp); @@ -145,7 +145,7 @@ reg_t kSetJump(EngineState *s, int argc, reg_t *argv) { // FIXME: This choice of vy makes t roughly (2+sqrt(2))/gy * sqrt(dy); // so if gy==3, then t is roughly sqrt(dy)... - vy = (int)sqrt((double)gy * abs(2 * dy)) + 1; + vy = (int)sqrt((double)gy * ABS(2 * dy)) + 1; } else { // As stated above, the vertical direction is correlated to the horizontal by the // (non-zero) factor c. @@ -155,7 +155,7 @@ reg_t kSetJump(EngineState *s, int argc, reg_t *argv) { } // Always force vy to be upwards - vy = -abs(vy); + vy = -ABS(vy); debugC(2, kDebugLevelBresen, "SetJump for object at %04x:%04x", PRINT_REG(object)); debugC(2, kDebugLevelBresen, "xStep: %d, yStep: %d", vx, vy); @@ -173,8 +173,8 @@ static void initialize_bresen(SegManager *segMan, int argc, reg_t *argv, reg_t m reg_t client = readSelector(segMan, mover, SELECTOR(client)); int stepx = (int16)readSelectorValue(segMan, client, SELECTOR(xStep)) * step_factor; int stepy = (int16)readSelectorValue(segMan, client, SELECTOR(yStep)) * step_factor; - int numsteps_x = stepx ? (abs(deltax) + stepx - 1) / stepx : 0; - int numsteps_y = stepy ? (abs(deltay) + stepy - 1) / stepy : 0; + int numsteps_x = stepx ? (ABS(deltax) + stepx - 1) / stepx : 0; + int numsteps_y = stepy ? (ABS(deltay) + stepy - 1) / stepy : 0; int bdi, i1; int numsteps; int deltax_step; @@ -190,22 +190,22 @@ static void initialize_bresen(SegManager *segMan, int argc, reg_t *argv, reg_t m deltax_step = numsteps ? deltax / numsteps : deltax; } -/* if (abs(deltax) > abs(deltay)) {*/ // Bresenham on y +/* if (ABS(deltax) > ABS(deltay)) {*/ // Bresenham on y if (numsteps_y < numsteps_x) { writeSelectorValue(segMan, mover, SELECTOR(b_xAxis), _K_BRESEN_AXIS_Y); writeSelectorValue(segMan, mover, SELECTOR(b_incr), (deltay < 0) ? -1 : 1); - //i1 = 2 * (abs(deltay) - abs(deltay_step * numsteps)) * abs(deltax_step); - //bdi = -abs(deltax); - i1 = 2 * (abs(deltay) - abs(deltay_step * (numsteps - 1))) * abs(deltax_step); - bdi = -abs(deltax); + //i1 = 2 * (ABS(deltay) - ABS(deltay_step * numsteps)) * ABS(deltax_step); + //bdi = -ABS(deltax); + i1 = 2 * (ABS(deltay) - ABS(deltay_step * (numsteps - 1))) * ABS(deltax_step); + bdi = -ABS(deltax); } else { // Bresenham on x writeSelectorValue(segMan, mover, SELECTOR(b_xAxis), _K_BRESEN_AXIS_X); writeSelectorValue(segMan, mover, SELECTOR(b_incr), (deltax < 0) ? -1 : 1); - //i1= 2 * (abs(deltax) - abs(deltax_step * numsteps)) * abs(deltay_step); - //bdi = -abs(deltay); - i1 = 2 * (abs(deltax) - abs(deltax_step * (numsteps - 1))) * abs(deltay_step); - bdi = -abs(deltay); + //i1= 2 * (ABS(deltax) - ABS(deltax_step * numsteps)) * ABS(deltay_step); + //bdi = -ABS(deltay); + i1 = 2 * (ABS(deltax) - ABS(deltax_step * (numsteps - 1))) * ABS(deltay_step); + bdi = -ABS(deltay); } @@ -306,23 +306,17 @@ reg_t kDoBresen(EngineState *s, int argc, reg_t *argv) { if ((MOVING_ON_X && (((x < destx) && (oldx >= destx)) // Moving left, exceeded? || ((x > destx) && (oldx <= destx)) // Moving right, exceeded? - || ((x == destx) && (abs(dx) > abs(dy))) // Moving fast, reached? + || ((x == destx) && (ABS(dx) > ABS(dy))) // Moving fast, reached? // Treat this last case specially- when doing sub-pixel movements // on the other axis, we could still be far away from the destination )) || (MOVING_ON_Y && (((y < desty) && (oldy >= desty)) /* Moving upwards, exceeded? */ || ((y > desty) && (oldy <= desty)) /* Moving downwards, exceeded? */ - || ((y == desty) && (abs(dy) >= abs(dx))) /* Moving fast, reached? */ + || ((y == desty) && (ABS(dy) >= ABS(dx))) /* Moving fast, reached? */ ))) { // Whew... in short: If we have reached or passed our target position - // Sanity check: make sure that destx, desty are inside the screen coordinates. - // They can go off screen in some cases, e.g. in SQ5 while scrubbing the floor (bug #3037351) - if (destx < g_sci->_gfxScreen->getWidth() && desty < g_sci->_gfxScreen->getHeight()) { - x = destx; - y = desty; - } else { - warning("kDoBresen: destination x, y would be off-screen(%d, %d)", destx, desty); - } + x = destx; + y = desty; completed = 1; debugC(2, kDebugLevelBresen, "Finished mover %04x:%04x", PRINT_REG(mover)); diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp index fdebc0599c..07d0a31f0b 100644 --- a/engines/sci/engine/kpathing.cpp +++ b/engines/sci/engine/kpathing.cpp @@ -265,7 +265,8 @@ struct PathfindingState { static Common::Point read_point(SegManager *segMan, reg_t list, int offset) { SegmentRef list_r = segMan->dereference(list); if (!list_r.isValid() || list_r.skipByte) { - warning("read_point(): Attempt to dereference invalid pointer %04x:%04x", PRINT_REG(list)); + // If this happens, then the code below will probably go OOB and crash + error("read_point(): Attempt to dereference invalid pointer %04x:%04x", PRINT_REG(list)); } Common::Point point; diff --git a/engines/sci/engine/kvideo.cpp b/engines/sci/engine/kvideo.cpp index 3ad2d95f58..ac6cfb6835 100644 --- a/engines/sci/engine/kvideo.cpp +++ b/engines/sci/engine/kvideo.cpp @@ -34,7 +34,7 @@ #include "graphics/video/qt_decoder.h" #include "sci/video/seq_decoder.h" #ifdef ENABLE_SCI32 -#include "sci/video/vmd_decoder.h" +#include "graphics/video/coktel_decoder.h" #endif namespace Sci { @@ -60,6 +60,9 @@ void playVideo(Graphics::VideoDecoder *videoDecoder) { uint16 y = (screenHeight - height) / 2; bool skipVideo = false; + if (videoDecoder->hasDirtyPalette()) + videoDecoder->setSystemPalette(); + while (!g_engine->shouldQuit() && !videoDecoder->endOfVideo() && !skipVideo) { if (videoDecoder->needsUpdate()) { Graphics::Surface *frame = videoDecoder->decodeNextFrame(); @@ -203,7 +206,7 @@ reg_t kPlayVMD(EngineState *s, int argc, reg_t *argv) { if (argv[2] != NULL_REG) warning("kPlayVMD: third parameter isn't 0 (it's %04x:%04x - %s)", PRINT_REG(argv[2]), s->_segMan->getObjectName(argv[2])); - videoDecoder = new VMDDecoder(g_system->getMixer()); + videoDecoder = new Graphics::VMDDecoder(g_system->getMixer()); if (!videoDecoder->loadFile(fileName)) { warning("Could not open VMD %s", fileName.c_str()); diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index a7716516e7..dfc41cc56a 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -659,8 +659,10 @@ void SegManager::reconstructClones() { CloneTable::Entry &seeker = ct->_table[j]; const Object *baseObj = getObject(seeker.getSpeciesSelector()); seeker.cloneFromObject(baseObj); - if (!baseObj) - error("Clone entry without a base class: %d", j); + if (!baseObj) { + // Can happen when loading some KQ6 savegames + warning("Clone entry without a base class: %d", j); + } } // end for } // end if } // end for diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp index 645094d9ec..f4129bb1ea 100644 --- a/engines/sci/engine/script.cpp +++ b/engines/sci/engine/script.cpp @@ -123,6 +123,9 @@ void Script::load(ResourceManager *resMan) { assert(_bufSize >= script->size); memcpy(_buf, script->data, script->size); + // Check scripts for matching signatures and patch those, if found + matchSignatureAndPatch(_nr, _buf, script->size); + if (getSciVersion() >= SCI_VERSION_1_1) { Resource *heap = resMan->findResource(ResourceId(kResourceTypeHeap, _nr), 0); assert(heap != 0); @@ -326,12 +329,29 @@ uint16 Script::validateExportFunc(int pubfunct) { uint16 offset = READ_SCI11ENDIAN_UINT16(_exportTable + pubfunct); VERIFY(offset < _bufSize, "invalid export function pointer"); + if (offset == 0) { + // Check if the game has a second export table (e.g. script 912 in Camelot) + // Fixes bug #3039785 + if (g_sci->getGameId() != GID_CAMELOT) // cheap fix + return offset; + // we are getting assert()s in eco quest 1 (right on startup) and kq6 and maybe more + // [md5] plz look into this TODO FIXME + const uint16 *secondExportTable = (const uint16 *)findBlock(SCI_OBJ_EXPORTS, 0); + + if (secondExportTable) { + secondExportTable += 3; // skip header plus 2 bytes (secondExportTable is a uint16 pointer) + offset = READ_SCI11ENDIAN_UINT16(secondExportTable + pubfunct); + VERIFY(offset < _bufSize, "invalid export function pointer"); + } + } + return offset; } -byte *Script::findBlock(int type) { +byte *Script::findBlock(int type, int skipBlockIndex) { byte *buf = _buf; bool oldScriptHeader = (getSciVersion() == SCI_VERSION_0_EARLY); + int blockIndex = 0; if (oldScriptHeader) buf += 2; @@ -341,12 +361,13 @@ byte *Script::findBlock(int type) { if (seekerType == 0) break; - if (seekerType == type) + if (seekerType == type && blockIndex != skipBlockIndex) return buf; int seekerSize = READ_LE_UINT16(buf + 2); assert(seekerSize > 0); buf += seekerSize; + blockIndex++; } while (1); return NULL; diff --git a/engines/sci/engine/script.h b/engines/sci/engine/script.h index 3817f8aae1..c60cc4b19f 100644 --- a/engines/sci/engine/script.h +++ b/engines/sci/engine/script.h @@ -33,6 +33,7 @@ namespace Sci { struct EngineState; class ResourceManager; +struct SciScriptSignature; enum ScriptObjectTypes { SCI_OBJ_TERMINATOR, @@ -100,6 +101,10 @@ public: void init(int script_nr, ResourceManager *resMan); void load(ResourceManager *resMan); + void matchSignatureAndPatch(uint16 scriptNr, byte *scriptData, const uint32 scriptSize); + int32 findSignature(const SciScriptSignature *signature, const byte *scriptData, const uint32 scriptSize); + void applyPatch(const uint16 *patch, byte *scriptData, const uint32 scriptSize, int32 signatureOffset); + virtual bool isValidOffset(uint16 offset) const; virtual SegmentRef dereference(reg_t pointer); virtual reg_t findCanonicAddress(SegManager *segMan, reg_t sub_addr) const; @@ -242,7 +247,7 @@ public: /** * Finds the pointer where a block of a specific type starts from */ - byte *findBlock(int type); + byte *findBlock(int type, int skipBlockIndex = -1); private: /** diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp new file mode 100644 index 0000000000..77818dd138 --- /dev/null +++ b/engines/sci/engine/script_patches.cpp @@ -0,0 +1,565 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +#include "sci/sci.h" +#include "sci/engine/script.h" + +#include "common/util.h" + +namespace Sci { + +#define PATCH_END 0xFFFF +#define PATCH_ADDTOOFFSET 0x8000 +#define PATCH_GETORIGINALBYTE 0x4000 +#define PATCH_MAGICDWORD(a, b, c, d) CONSTANT_LE_32(a | (b << 8) | (c << 16) | (d << 24)) + +struct SciScriptSignature { + uint16 scriptNr; + const char *description; + uint32 magicDWord; + int magicOffset; + const byte *data; + const uint16 *patch; +}; + +// signatures are built like this: +// - first a counter of the bytes that follow +// - then the actual bytes that need to get matched +// - then another counter of bytes (0 for EOS) +// - if not EOS, an adjust offset and the actual bytes +// - rinse and repeat + +// =========================================================================== +// stayAndHelp::changeState (0) is called when ego swims to the left or right +// boundaries of room 660. Normally a textbox is supposed to get on screen +// but the call is wrong, so not only do we get an error message the script +// is also hanging because the cue won't get sent out +// This also happens in sierra sci - ffs. bug #3038387 +const byte ecoquest1SignatureStayAndHelp[] = { + 40, + 0x3f, 0x01, // link 01 + 0x87, 0x01, // lap param[1] + 0x65, 0x14, // aTop state + 0x36, // push + 0x3c, // dup + 0x35, 0x00, // ldi 00 + 0x1a, // eq? + 0x31, 0x1c, // bnt [next state] + 0x76, // push0 + 0x45, 0x01, 0x00, // callb export1 from script 0 (switching control off) + 0x38, 0x22, 0x01, // pushi 0122 + 0x78, // push1 + 0x76, // push0 + 0x81, 0x00, // lag global[0] + 0x4a, 0x06, // send 06 - ego::setMotion(0) + 0x39, 0x6e, // pushi 6e (selector init) + 0x39, 0x04, // pushi 04 + 0x76, // push0 + 0x76, // push0 + 0x39, 0x17, // pushi 17 + 0x7c, // pushSelf + 0x51, 0x82, // class EcoNarrator + 0x4a, 0x0c, // send 0c - EcoNarrator::init(0, 0, 23, self) (BADLY BROKEN!) + 0x33, // jmp [end] + 0 +}; + +const uint16 ecoquest1PatchStayAndHelp[] = { + 0x87, 0x01, // lap param[1] + 0x65, 0x14, // aTop state + 0x36, // push + 0x2f, 0x22, // bt [next state] (this optimization saves 6 bytes) + 0x39, 0x00, // pushi 0 (wasting 1 byte here) + 0x45, 0x01, 0x00, // callb export1 from script 0 (switching control off) + 0x38, 0x22, 0x01, // pushi 0122 + 0x78, // push1 + 0x76, // push0 + 0x81, 0x00, // lag global[0] + 0x4a, 0x06, // send 06 - ego::setMotion(0) + 0x39, 0x6e, // pushi 6e (selector init) + 0x39, 0x06, // pushi 06 + 0x39, 0x02, // pushi 02 (additional 2 bytes) + 0x76, // push0 + 0x76, // push0 + 0x39, 0x17, // pushi 17 + 0x7c, // pushSelf + 0x38, 0x80, 0x02, // pushi 280 (additional 3 bytes) + 0x51, 0x82, // class EcoNarrator + 0x4a, 0x10, // send 10 - EcoNarrator::init(2, 0, 0, 23, self, 640) + PATCH_END +}; + +// script, description, magic DWORD, adjust +const SciScriptSignature ecoquest1Signatures[] = { + { 660, "CD: bad messagebox and freeze", PATCH_MAGICDWORD(0x38, 0x22, 0x01, 0x78), -17, ecoquest1SignatureStayAndHelp, ecoquest1PatchStayAndHelp }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +// daySixBeignet::changeState (4) is called when the cop goes out and sets cycles to 220. +// this is not enough time to get to the door, so we patch that to 23 seconds +const byte gk1SignatureDay6PoliceBeignet[] = { + 4, + 0x35, 0x04, // ldi 04 + 0x1a, // eq? + 0x30, // bnt [next state check] + +2, 5, // [skip 2 bytes, offset of bnt] + 0x38, 0x93, 0x00, // pushi 93 (selector dispose) + 0x76, // push0 + 0x72, // lofsa deskSarg + +2, 9, // [skip 2 bytes, offset of lofsa] + 0x4a, 0x04, 0x00, // send 04 + 0x34, 0xdc, 0x00, // ldi 220 + 0x65, 0x1a, // aTop cycles + 0x32, // jmp [end] + 0 +}; + +const uint16 gk1PatchDay6PoliceBeignet[] = { + PATCH_ADDTOOFFSET | +16, + 0x34, 0x17, 0x00, // ldi 23 + 0x65, 0x1c, // aTop seconds + PATCH_END +}; + +// sargSleeping::changeState (8) is called when the cop falls asleep and sets cycles to 220. +// this is not enough time to get to the door, so we patch it to 42 seconds +const byte gk1SignatureDay6PoliceSleep[] = { + 4, + 0x35, 0x08, // ldi 08 + 0x1a, // eq? + 0x31, // bnt [next state check] + +1, 6, // [skip 1 byte, offset of bnt] + 0x34, 0xdc, 0x00, // ldi 220 + 0x65, 0x1a, // aTop cycles + 0x32, // jmp [end] + 0 +}; + +const uint16 gk1PatchDay6PoliceSleep[] = { + PATCH_ADDTOOFFSET | +5, + 0x34, 0x2a, 0x00, // ldi 42 + 0x65, 0x1c, // aTop seconds + PATCH_END +}; + +// startOfDay5::changeState (20h) - when gabriel goes to the phone the script will hang +const byte gk1SignatureDay5PhoneFreeze[] = { + 5, + 0x35, 0x03, // ldi 03 + 0x65, 0x1a, // aTop cycles + 0x32, // jmp [end] + +2, 3, // [skip 2 bytes, offset of jmp] + 0x3c, // dup + 0x35, 0x21, // ldi 21 + 0 +}; + +const uint16 gk1PatchDay5PhoneFreeze[] = { + 0x35, 0x06, // ldi 06 + 0x65, 0x20, // aTop ticks + PATCH_END +}; + +// script, description, magic DWORD, adjust +const SciScriptSignature gk1Signatures[] = { + { 212, "day 5 phone freeze", PATCH_MAGICDWORD(0x35, 0x03, 0x65, 0x1a), 0, gk1SignatureDay5PhoneFreeze, gk1PatchDay5PhoneFreeze }, + { 230, "day 6 police beignet timer issue", PATCH_MAGICDWORD(0x34, 0xdc, 0x00, 0x65), -16, gk1SignatureDay6PoliceBeignet, gk1PatchDay6PoliceBeignet }, + { 230, "day 6 police sleep timer issue", PATCH_MAGICDWORD(0x34, 0xdc, 0x00, 0x65), -5, gk1SignatureDay6PoliceSleep, gk1PatchDay6PoliceSleep }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +// =========================================================================== +// this here gets called on entry and when going out of game windows +// uEvt::port will not get changed after kDisposeWindow but a bit later, so +// we would get an invalid port handle to a kSetPort call. We just patch in +// resetting of the port selector. We destroy the stop/fade code in there, +// it seems it isn't used at all in the game. +const byte hoyle4SignaturePortFix[] = { + 28, + 0x39, 0x09, // pushi 09 + 0x89, 0x0b, // lsg 0b + 0x39, 0x64, // pushi 64 + 0x38, 0xc8, 0x00, // pushi 00c8 + 0x38, 0x2c, 0x01, // pushi 012c + 0x38, 0x90, 0x01, // pushi 0190 + 0x38, 0xf4, 0x01, // pushi 01f4 + 0x38, 0x58, 0x02, // pushi 0258 + 0x38, 0xbc, 0x02, // pushi 02bc + 0x38, 0x20, 0x03, // pushi 0320 + 0x46, // calle [xxxx] [xxxx] [xx] + +5, 43, // [skip 5 bytes] + 0x30, 0x27, 0x00, // bnt 0027 -> end of routine + 0x87, 0x00, // lap 00 + 0x30, 0x19, 0x00, // bnt 0019 -> fade out + 0x87, 0x01, // lap 01 + 0x30, 0x14, 0x00, // bnt 0014 -> fade out + 0x38, 0xa7, 0x00, // pushi 00a7 + 0x76, // push0 + 0x80, 0x29, 0x01, // lag 0129 + 0x4a, 0x04, // send 04 (song::stop) + 0x39, 0x27, // pushi 27 + 0x78, // push1 + 0x8f, 0x01, // lsp 01 + 0x51, 0x54, // class 54 + 0x4a, 0x06, // send 06 (PlaySong::play) + 0x33, 0x09, // jmp 09 -> end of routine + 0x38, 0xaa, 0x00, // pushi 00aa + 0x76, // push0 + 0x80, 0x29, 0x01, // lag 0129 + 0x4a, 0x04, // send 04 + 0x48, // ret + 0 +}; + +const uint16 hoyle4PatchPortFix[] = { + PATCH_ADDTOOFFSET | +33, + 0x38, 0x31, 0x01, // pushi 0131 (selector curEvent) + 0x76, // push0 + 0x80, 0x50, 0x00, // lag 0050 (global var 80h, "User") + 0x4a, 0x04, // send 04 (read User::curEvent) + + 0x38, 0x93, 0x00, // pushi 0093 (selector port) + 0x78, // push1 + 0x76, // push0 + 0x4a, 0x06, // send 06 (write 0 to that object::port) + 0x48, // ret + PATCH_END +}; + +// script, description, magic DWORD, adjust +const SciScriptSignature hoyle4Signatures[] = { + { 0, "port fix when disposing windows", PATCH_MAGICDWORD(0x64, 0x38, 0xC8, 0x00), -5, hoyle4SignaturePortFix, hoyle4PatchPortFix }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +// =========================================================================== +// at least during harpy scene export 29 of script 0 is called in kq5cd and +// has an issue for those calls, where temp 3 won't get inititialized, but +// is later used to set master volume. This issue makes sierra sci set +// the volume to max. We fix the export, so volume won't get modified in +// those cases. +const byte kq5SignatureCdHarpyVolume[] = { + 34, + 0x80, 0x91, 0x01, // lag global[191h] + 0x18, // not + 0x30, 0x2c, 0x00, // bnt [jump further] (jumping, if global 191h is 1) + 0x35, 0x01, // ldi 01 + 0xa0, 0x91, 0x01, // sag global[191h] (setting global 191h to 1) + 0x38, 0x7b, 0x01, // pushi 017b + 0x76, // push0 + 0x81, 0x01, // lag global[1] + 0x4a, 0x04, // send 04 (getting KQ5::masterVolume) + 0xa5, 0x03, // sat temp[3] (store volume in temp 3) + 0x38, 0x7b, 0x01, // pushi 017b + 0x76, // push0 + 0x81, 0x01, // lag global[1] + 0x4a, 0x04, // send 04 (getting KQ5::masterVolume) + 0x36, // push + 0x35, 0x04, // ldi 04 + 0x20, // ge? (followed by bnt) + 0 +}; + +const uint16 kq5PatchCdHarpyVolume[] = { + 0x38, 0x2f, 0x02, // pushi 022f (selector theVol) (3 new bytes) + 0x76, // push0 (1 new byte) + 0x51, 0x88, // class SpeakTimer (2 new bytes) + 0x4a, 0x04, // send 04 (2 new bytes) -> read SpeakTimer::theVol + 0xa5, 0x03, // sat temp[3] (2 new bytes) -> write to temp 3 + 0x80, 0x91, 0x01, // lag global[191h] + // saving 1 byte due optimization + 0x2e, 0x23, 0x00, // bt [jump further] (jumping, if global 191h is 1) + 0x35, 0x01, // ldi 01 + 0xa0, 0x91, 0x01, // sag global[191h] (setting global 191h to 1) + 0x38, 0x7b, 0x01, // pushi 017b + 0x76, // push0 + 0x81, 0x01, // lag global[1] + 0x4a, 0x04, // send 04 (getting KQ5::masterVolume) + 0xa5, 0x03, // sat temp[3] (store volume in temp 3) + // saving 8 bytes due removing of duplicate code + 0x39, 0x04, // pushi 04 (saving 1 byte due swapping) + 0x22, // lt? (because we switched values) + PATCH_END +}; + +// script, description, magic DWORD, adjust +const SciScriptSignature kq5Signatures[] = { + { 0, "CD: harpy volume change", PATCH_MAGICDWORD(0x80, 0x91, 0x01, 0x18), 0, kq5SignatureCdHarpyVolume, kq5PatchCdHarpyVolume }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +// =========================================================================== +// this is called on every death dialog. Problem is at least the german +// version of lsl6 gets title text that is far too long for the +// available temp space resulting in temp space corruption +// This patch moves the title text around, so this overflow +// doesn't happen anymore. We would otherwise get a crash +// calling for invalid views (this happens of course also +// in sierra sci) +const byte larry6SignatureDeathDialog[] = { + 7, + 0x3e, 0x33, 0x01, // link 0133 (offset 0x20) + 0x35, 0xff, // ldi ff + 0xa3, 0x00, // sal 00 + +255, 0, + +255, 0, + +170, 12, // [skip 680 bytes] + 0x8f, 0x01, // lsp 01 (offset 0x2cf) + 0x7a, // push2 + 0x5a, 0x04, 0x00, 0x0e, 0x01, // lea 0004 010e + 0x36, // push + 0x43, 0x7c, 0x0e, // kMessage[7c] 0e + +90, 10, // [skip 90 bytes] + 0x38, 0xd6, 0x00, // pushi 00d6 (offset 0x335) + 0x78, // push1 + 0x5a, 0x04, 0x00, 0x0e, 0x01, // lea 0004 010e + 0x36, // push + +76, 11, // [skip 76 bytes] + 0x38, 0xcd, 0x00, // pushi 00cd (offset 0x38b) + 0x39, 0x03, // pushi 03 + 0x5a, 0x04, 0x00, 0x0e, 0x01, // lea 0004 010e + 0x36, + 0 +}; + +const uint16 larry6PatchDeathDialog[] = { + 0x3e, 0x00, 0x02, // link 0200 + PATCH_ADDTOOFFSET | +687, + 0x5a, 0x04, 0x00, 0x40, 0x01, // lea 0004 0140 + PATCH_ADDTOOFFSET | +98, + 0x5a, 0x04, 0x00, 0x40, 0x01, // lea 0004 0140 + PATCH_ADDTOOFFSET | +82, + 0x5a, 0x04, 0x00, 0x40, 0x01, // lea 0004 0140 + PATCH_END +}; + +// script, description, magic DWORD, adjust +const SciScriptSignature larry6Signatures[] = { + { 82, "death dialog memory corruption", PATCH_MAGICDWORD(0x3e, 0x33, 0x01, 0x35), 0, larry6SignatureDeathDialog, larry6PatchDeathDialog }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +// =========================================================================== +// rm560::doit was supposed to close the painting, when heimlich enters the +// room. The code is buggy, so it actually closes the painting, when heimlich +// is not in the room. We fix that. +const byte laurabow2SignaturePaintingClosing[] = { + 17, + 0x4a, 0x04, // send 04 (gets aHeimlich::room) + 0x36, // push + 0x81, 0x0b, // lag global[11d] -> current room + 0x1c, // ne? + 0x31, 0x0e, // bnt [don't close] + 0x35, 0x00, // ldi 00 + 0xa3, 0x00, // sal local[0] + 0x38, 0x92, 0x00, // pushi 0092 + 0x78, // push1 + 0x72, // lofsa sDumpSafe + 0 +}; + +const uint16 laurabow2PatchPaintingClosing[] = { + PATCH_ADDTOOFFSET | +6, + 0x2f, 0x0e, // bt [don't close] + PATCH_END +}; + +// script, description, magic DWORD, adjust +const SciScriptSignature laurabow2Signatures[] = { + { 560, "painting closing immediately", PATCH_MAGICDWORD(0x36, 0x81, 0x0b, 0x1c), -2, laurabow2SignaturePaintingClosing, laurabow2PatchPaintingClosing }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +// =========================================================================== +// script 298 of sq4/floppy has an issue. object "nest" uses another property +// which isn't included in property count. We return 0 in that case, the game +// adds it to nest::x. The problem is that the script also checks if x exceeds +// we never reach that of course, so the pterodactyl-flight will go endlessly +// we could either calculate property count differently somehow fixing this +// but I think just patching it out is cleaner (ffs. bug #3037938) +const byte sq4FloppySignatureEndlessFlight[] = { + 8, + 0x39, 0x04, // pushi 04 (selector x) + 0x78, // push1 + 0x67, 0x08, // pTos 08 (property x) + 0x63, 0x44, // pToa 44 (invalid property) + 0x02, // add + 0 +}; + +const uint16 sq4FloppyPatchEndlessFlight[] = { + PATCH_ADDTOOFFSET | +5, + 0x35, 0x03, // ldi 03 (which would be the content of the property) + PATCH_END +}; + +// script, description, magic DWORD, adjust +const SciScriptSignature sq4Signatures[] = { + { 298, "Floppy: endless flight", PATCH_MAGICDWORD(0x67, 0x08, 0x63, 0x44), -3, sq4FloppySignatureEndlessFlight, sq4FloppyPatchEndlessFlight }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +// =========================================================================== +// It seems to scripts warp ego outside the screen somehow (or maybe kDoBresen?) +// ego::mover is set to 0 and rm119::doit will crash in that case. This here +// fixes part of the problem and actually checks ego::mover to be 0 and skips +// TODO: this should get further investigated by waltervn and maybe properly +// patched. For now ego will shortly disappear and reappear a bit after +// this isn't good, but sierra sci also "crashed" (endless looped) so this +// is at least better than the original code +const byte sq5SignatureScrubbing[] = { + 19, + 0x18, // not + 0x31, 0x37, // bnt 37 + 0x78, // push1 (selector x) + 0x76, // push0 + 0x39, 0x38, // pushi 38 (selector mover) + 0x76, // push0 + 0x81, 0x00, // lag 00 + 0x4a, 0x04, // send 04 (read ego::mover) + 0x4a, 0x04, // send 04 (read ego::mover::x) + 0x36, // push + 0x34, 0xa0, 0x00, // ldi 00a0 + 0x1c, // ne? + 0 +}; + +const uint16 sq5PatchScrubbing[] = { + 0x18, // not + 0x31, 0x37, // bnt 37 +// 0x2f, 0x38, // bt 37 (would save another byte, isn't needed + 0x39, 0x38, // pushi 38 (selector mover) + 0x76, // push0 + 0x81, 0x00, // lag 00 + 0x4a, 0x04, // send 04 (read ego::mover) + 0x31, 0x2e, // bnt 2e (jump if ego::mover is 0) + 0x78, // push1 (selector x) + 0x76, // push0 + 0x4a, 0x04, // send 04 (read ego::mover::x) + 0x39, 0xa0, // pushi a0 (saving 2 bytes) + 0x1c, // ne? + PATCH_END +}; + +// script, description, magic DWORD, adjust +const SciScriptSignature sq5Signatures[] = { + { 119, "scrubbing send crash", PATCH_MAGICDWORD(0x18, 0x31, 0x37, 0x78), 0, sq5SignatureScrubbing, sq5PatchScrubbing }, + { 0, NULL, 0, 0, NULL, NULL } +}; + + +// will actually patch previously found signature area +void Script::applyPatch(const uint16 *patch, byte *scriptData, const uint32 scriptSize, int32 signatureOffset) { + int32 offset = signatureOffset; + uint16 patchWord = *patch; + + while (patchWord != PATCH_END) { + if (patchWord & PATCH_ADDTOOFFSET) { + offset += patchWord & ~PATCH_ADDTOOFFSET; + } else if (patchWord & PATCH_GETORIGINALBYTE) { + // TODO: implement this + } else { + scriptData[offset] = patchWord & 0xFF; + offset++; + } + patch++; + patchWord = *patch; + } +} + +// will return -1 if no match was found, otherwise an offset to the start of the signature match +int32 Script::findSignature(const SciScriptSignature *signature, const byte *scriptData, const uint32 scriptSize) { + if (scriptSize < 4) // we need to find a DWORD, so less than 4 bytes is not okay + return -1; + + const uint32 magicDWord = signature->magicDWord; // is platform-specific BE/LE form, so that the later match will work + const uint32 searchLimit = scriptSize - 3; + uint32 DWordOffset = 0; + // first search for the magic DWORD + while (DWordOffset < searchLimit) { + if (magicDWord == *(const uint32 *)(scriptData + DWordOffset)) { + // magic DWORD found, check if actual signature matches + uint32 offset = DWordOffset + signature->magicOffset; + uint32 byteOffset = offset; + const byte *signatureData = signature->data; + byte matchAdjust = 1; + while (matchAdjust) { + byte matchBytesCount = *signatureData++; + if ((byteOffset + matchBytesCount) > scriptSize) // Out-Of-Bounds? + break; + if (memcmp(signatureData, &scriptData[byteOffset], matchBytesCount)) // Byte-Mismatch? + break; + // those bytes matched, adjust offsets accordingly + signatureData += matchBytesCount; + byteOffset += matchBytesCount; + // get offset... + matchAdjust = *signatureData++; + byteOffset += matchAdjust; + } + if (!matchAdjust) // all matches worked? + return offset; + } + DWordOffset++; + } + // nothing found + return -1; +} + +void Script::matchSignatureAndPatch(uint16 scriptNr, byte *scriptData, const uint32 scriptSize) { + const SciScriptSignature *signatureTable = NULL; + if (g_sci->getGameId() == GID_ECOQUEST) + signatureTable = ecoquest1Signatures; + if (g_sci->getGameId() == GID_GK1) + signatureTable = gk1Signatures; +// hoyle4 now works due workaround inside GfxPorts +// if (g_sci->getGameId() == GID_HOYLE4) +// signatureTable = hoyle4Signatures; + if (g_sci->getGameId() == GID_KQ5) + signatureTable = kq5Signatures; + if (g_sci->getGameId() == GID_LAURABOW2) + signatureTable = laurabow2Signatures; + if (g_sci->getGameId() == GID_LSL6) + signatureTable = larry6Signatures; + if (g_sci->getGameId() == GID_SQ4) + signatureTable = sq4Signatures; + if (g_sci->getGameId() == GID_SQ5) + signatureTable = sq5Signatures; + + if (signatureTable) { + while (signatureTable->data) { + if (scriptNr == signatureTable->scriptNr) { + int32 foundOffset = findSignature(signatureTable, scriptData, scriptSize); + if (foundOffset != -1) { + // found, so apply the patch + warning("matched and patched %s on script %d offset %d", signatureTable->description, scriptNr, foundOffset); + applyPatch(signatureTable->patch, scriptData, scriptSize, foundOffset); + } + } + signatureTable++; + } + } +} + +} // End of namespace Sci diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp index cb908979a3..b16dd5a5e5 100644 --- a/engines/sci/engine/segment.cpp +++ b/engines/sci/engine/segment.cpp @@ -414,7 +414,7 @@ int Object::locateVarSelector(SegManager *segMan, Selector slc) const { } else { const Object *obj = getClass(segMan); varnum = obj->getVariable(1).toUint16(); - buf = (byte *)obj->_baseVars; + buf = (const byte *)obj->_baseVars; } for (uint i = 0; i < varnum; i++) diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index 7bcc5b43a3..0500cc601b 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -75,7 +75,6 @@ static ExecStack *add_exec_stack_entry(Common::List<ExecStack> &execStack, reg_t reg_t objp, int argc, StackPtr argp, Selector selector, int exportId, int localCallOffset, reg_t sendp, int origin, SegmentId local_segment); - /** * Adds one varselector access to the execution stack. * This function is called from send_selector only. @@ -93,8 +92,6 @@ static ExecStack *add_exec_stack_varselector(Common::List<ExecStack> &execStack, int origin); - - // validation functionality static reg_t &validate_property(Object *obj, int index) { @@ -103,14 +100,10 @@ static reg_t &validate_property(Object *obj, int index) { // may modify the value of the returned reg_t. static reg_t dummyReg = NULL_REG; - // FIXME/TODO: Where does this occur? Returning a dummy reg here could lead - // to all sorts of issues! Turned it into an error for now... // If this occurs, it means there's probably something wrong with the garbage // collector, so don't hide it with fake return values - if (!obj) { + if (!obj) error("validate_property: Sending to disposed object"); - //return dummyReg; - } if (index < 0 || (uint)index >= obj->getVarCount()) { // This is same way sierra does it and there are some games, that contain such scripts like @@ -136,12 +129,7 @@ static int validate_arithmetic(reg_t reg) { if (reg.segment) { // The results of this are likely unpredictable... It most likely means that a kernel function is returning something wrong. // If such an error occurs, we usually need to find the last kernel function called and check its return value. - if (g_sci->getGameId() == GID_QFG2 && g_sci->getEngineState()->currentRoomNumber() == 200) { - // WORKAROUND: This happens in QFG2, room 200, when talking to the astrologer (bug #3039879) - script bug. - // Returning 0 in this case. - } else { - error("[VM] Attempt to read arithmetic value from non-zero segment [%04x]. Address: %04x:%04x", reg.segment, PRINT_REG(reg)); - } + error("[VM] Attempt to read arithmetic value from non-zero segment [%04x]. Address: %04x:%04x", reg.segment, PRINT_REG(reg)); return 0; } @@ -171,11 +159,6 @@ static bool validate_variable(reg_t *r, reg_t *stack_base, int type, int max, in error("%s. [VM] Access would be outside even of the stack (%d); access denied", txt.c_str(), total_offset); return false; } else { - // WORKAROUND: Mixed-Up Mother Goose tries to use an invalid parameter in Event::new(). - // Just skip around it here so we don't error out in validate_arithmetic. - if (g_sci->getGameId() == GID_MOTHERGOOSE && type == VAR_PARAM && index == 1) - return false; - debugC(2, kDebugLevelVM, "%s", txt.c_str()); debugC(2, kDebugLevelVM, "[VM] Access within stack boundaries; access granted."); return true; @@ -434,7 +417,9 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt printSendActions = g_sci->checkSelectorBreakpoint(send_obj, selector); #ifdef VM_DEBUG_SEND - printf("Send to %04x:%04x, selector %04x (%s):", PRINT_REG(send_obj), selector, g_sci->getKernel()->getSelectorName(selector).c_str()); + printf("Send to %04x:%04x (%s), selector %04x (%s):", PRINT_REG(send_obj), + s->_segMan->getObjectName(send_obj), selector, + g_sci->getKernel()->getSelectorName(selector).c_str()); #endif // VM_DEBUG_SEND ObjVarRef varp; @@ -462,7 +447,9 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt if (printSendActions && argc) { reg_t oldReg = *varp.getPointer(s->_segMan); reg_t newReg = argp[1]; - debug("[write to selector: change %04x:%04x to %04x:%04x]\n", PRINT_REG(oldReg), PRINT_REG(newReg)); + warning("[write to selector (%s:%s): change %04x:%04x to %04x:%04x]\n", + s->_segMan->getObjectName(send_obj), g_sci->getKernel()->getSelectorName(selector).c_str(), + PRINT_REG(oldReg), PRINT_REG(newReg)); printSendActions = false; } @@ -1144,7 +1131,7 @@ void run_vm(EngineState *s) { if (validate_unsignedInteger(r_temp, value1) && validate_unsignedInteger(s->r_acc, value2)) s->r_acc = make_reg(0, value1 & value2); else - s->r_acc = arithmetic_lookForWorkaround(opcode, NULL, r_temp, s->r_acc); + s->r_acc = arithmetic_lookForWorkaround(opcode, opcodeAndWorkarounds, r_temp, s->r_acc); break; } @@ -1265,7 +1252,7 @@ void run_vm(EngineState *s) { if (validate_signedInteger(r_temp, compare1) && validate_signedInteger(s->r_acc, compare2)) s->r_acc = make_reg(0, compare1 <= compare2); else - s->r_acc = arithmetic_lookForWorkaround(opcode, NULL, r_temp, s->r_acc); + s->r_acc = arithmetic_lookForWorkaround(opcode, opcodeLeWorkarounds, r_temp, s->r_acc); } break; @@ -1809,24 +1796,32 @@ void run_vm(EngineState *s) { case op_lagi: // 0x48 (72) case op_lali: // 0x49 (73) case op_lati: // 0x4a (74) - case op_lapi: // 0x4b (75) + case op_lapi: { // 0x4b (75) // Load global, local, temp or param variable into the accumulator, // using the accumulator as an additional index var_type = opcode & 0x3; // Gets the variable type: g, l, t or p - var_number = opparams[0] + signed_validate_arithmetic(s->r_acc); + int16 value; + if (!validate_signedInteger(s->r_acc, value)) + value = arithmetic_lookForWorkaround(opcode, opcodeLaiWorkarounds, s->r_acc, NULL_REG).offset; + var_number = opparams[0] + value; s->r_acc = READ_VAR(var_type, var_number); break; + } case op_lsgi: // 0x4c (76) case op_lsli: // 0x4d (77) case op_lsti: // 0x4e (78) - case op_lspi: // 0x4f (79) + case op_lspi: { // 0x4f (79) // Load global, local, temp or param variable into the stack, // using the accumulator as an additional index var_type = opcode & 0x3; // Gets the variable type: g, l, t or p - var_number = opparams[0] + signed_validate_arithmetic(s->r_acc); + int16 value; + if (!validate_signedInteger(s->r_acc, value)) + value = arithmetic_lookForWorkaround(opcode, opcodeLsiWorkarounds, s->r_acc, NULL_REG).offset; + var_number = opparams[0] + value; PUSH32(READ_VAR(var_type, var_number)); break; + } case op_sag: // 0x50 (80) case op_sal: // 0x51 (81) diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp index bc6d457f7f..95674ceaad 100644 --- a/engines/sci/engine/workarounds.cpp +++ b/engines/sci/engine/workarounds.cpp @@ -53,14 +53,39 @@ const SciWorkaroundEntry opcodeGeWorkarounds[] = { }; // gameID, room,script,lvl, object-name, method-name, call,index, workaround +const SciWorkaroundEntry opcodeLeWorkarounds[] = { + { GID_PEPPER, 370, 23, 0, "eastExitFeature", "onMe", -1, 0, { WORKAROUND_FAKE, 1 } }, // Pugh's office, when trying to use either the left or right exits, gets called on an integer and a pointer - bug #3040142 + SCI_WORKAROUNDENTRY_TERMINATOR +}; + +// gameID, room,script,lvl, object-name, method-name, call,index, workaround +const SciWorkaroundEntry opcodeLaiWorkarounds[] = { + { GID_CAMELOT, 92, 92, 0, "endingCartoon2", "changeState", 0x20d, 0, { WORKAROUND_FAKE, 0 } }, // during the ending, sub gets called with no parameters, uses parameter 1 which is theGrail in this case - bug #3044734 + SCI_WORKAROUNDENTRY_TERMINATOR +}; + +// gameID, room,script,lvl, object-name, method-name, call,index, workaround +const SciWorkaroundEntry opcodeLsiWorkarounds[] = { + { GID_QFG2, 200, 200, 0, "astro", "messages", -1, 0, { WORKAROUND_FAKE, 0 } }, // when getting asked for your name by the astrologer bug #3039879 + SCI_WORKAROUNDENTRY_TERMINATOR +}; + +// gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry opcodeMulWorkarounds[] = { { GID_FANMADE, 516, 983, 0, "Wander", "setTarget", -1, 0, { WORKAROUND_FAKE, 0 } }, // The Legend of the Lost Jewel Demo (fan made): called with object as second parameter when attacked by insects - bug #3038913 SCI_WORKAROUNDENTRY_TERMINATOR }; // gameID, room,script,lvl, object-name, method-name, call,index, workaround +const SciWorkaroundEntry opcodeAndWorkarounds[] = { + { GID_MOTHERGOOSE, -1, 999, 0, "Event", "new", -1, 0, { WORKAROUND_FAKE, 0 } }, // constantly during the game + // ^^ TODO: which of the mother goose versions is affected by this? EGA? SCI1? SCI1.1? + SCI_WORKAROUNDENTRY_TERMINATOR +}; + +// gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry opcodeOrWorkarounds[] = { - { GID_ECOQUEST2, 100, 0, 0, "Rain", "points", 0xcc6, 0, { WORKAROUND_FAKE, 0 } }, // when giving the papers to the customs officer, gets called against a pointer instead of a number - bug #3034464 + { GID_ECOQUEST2, 100, 0, 0, "Rain", "points", 0xcc6, 0, { WORKAROUND_FAKE, 0 } }, // when giving the papers to the customs officer, gets called against a pointer instead of a number - bug #3034464 SCI_WORKAROUNDENTRY_TERMINATOR }; @@ -71,11 +96,12 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = { { GID_CNICK_KQ, 200, 0, 1, "Character", "<noname446>", -1, 505, { WORKAROUND_FAKE, 0 } }, // checkers, like in hoyle 3 { GID_CNICK_KQ, -1, 700, 0, "gcWindow", "<noname183>", -1, -1, { WORKAROUND_FAKE, 0 } }, // when entering control menu, like in hoyle 3 { GID_CNICK_LONGBOW, 0, 0, 0, "RH Budget", "<noname110>", -1, 1, { WORKAROUND_FAKE, 0 } }, // when starting the game - { GID_ECOQUEST, -1, -1, 0, NULL, "doVerb", -1, 0, { WORKAROUND_FAKE, 0 } }, // almost clicking anywhere triggers this in almost all rooms + { GID_ECOQUEST, -1, -1, 0, NULL, "doVerb", -1, 0, { WORKAROUND_FAKE, 0 } }, // almost clicking anywhere triggers this in almost all rooms { GID_FANMADE, 516, 979, 0, "", "export 0", -1, 20, { WORKAROUND_FAKE, 0 } }, // Happens in Grotesteing after the logos { GID_FANMADE, 528, 990, 0, "GDialog", "doit", -1, 4, { WORKAROUND_FAKE, 0 } }, // Happens in Cascade Quest when closing the glossary - bug #3038757 { GID_FREDDYPHARKAS, -1, 24, 0, "gcWin", "open", -1, 5, { WORKAROUND_FAKE, 0xf } }, // is used as priority for game menu { GID_FREDDYPHARKAS, -1, 31, 0, "quitWin", "open", -1, 5, { WORKAROUND_FAKE, 0xf } }, // is used as priority for game menu + { GID_FREDDYPHARKAS, 540, 540, 0, "WaverCode", "init", -1, -1, { WORKAROUND_FAKE, 0 } }, // Gun pratice mini-game (bug #3044218) { GID_GK1, -1, 64950, -1, "Feature", "handleEvent", -1, 0, { WORKAROUND_FAKE, 0 } }, // sometimes when walk-clicking { GID_GK2, -1, 11, 0, "", "export 10", -1, 3, { WORKAROUND_FAKE, 0 } }, // called when the game starts { GID_GK2, -1, 11, 0, "", "export 10", -1, 4, { WORKAROUND_FAKE, 0 } }, // called during the game @@ -85,7 +111,9 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = { { GID_HOYLE3, -1, 0, 1, "Character", "say", -1, 505, { WORKAROUND_FAKE, 0 } }, // when starting checkers or dominoes, first time a character says something { GID_HOYLE3, -1, 700, 0, "gcWindow", "open", -1, -1, { WORKAROUND_FAKE, 0 } }, // when entering control menu { GID_HOYLE4, -1, 0, 0, "gcWindow", "open", -1, -1, { WORKAROUND_FAKE, 0 } }, // when selecting "Control" from the menu (temp vars 0-3) - bug #3039294 + { GID_HOYLE4, 910, 18, 0, "Tray", "init", -1, 0, { WORKAROUND_FAKE, 0 } }, // during tutorial - bug #3042756 { GID_HOYLE4, 910, 910, 0, "IconBarList", "setup", -1, 3, { WORKAROUND_FAKE, 0 } }, // when selecting "Tutorial" from the main menu - bug #3039294 + { GID_ISLANDBRAIN, 100, 937, 0, "IconBar", "dispatchEvent", -1, 58, { WORKAROUND_FAKE, 0 } }, // when using ENTER at the startup menu - bug #3045225 { GID_ISLANDBRAIN, 140, 140, 0, "piece", "init", -1, 3, { WORKAROUND_FAKE, 1 } }, // first puzzle right at the start, some initialization variable. bnt is done on it, and it should be non-0 { GID_ISLANDBRAIN, 200, 268, 0, "anElement", "select", -1, 0, { WORKAROUND_FAKE, 0 } }, // elements puzzle, gets used before super TextIcon { GID_JONES, 1, 232, 0, "weekendText", "draw", 0x3d3, 0, { WORKAROUND_FAKE, 0 } }, // jones/cd only - gets called during the game @@ -93,8 +121,10 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = { { GID_JONES, 1, 255, 0, "", "export 0", -1, 14, { WORKAROUND_FAKE, 0 } }, // jones/cd only - called when a game ends { GID_JONES, 764, 255, 0, "", "export 0", -1, 13, { WORKAROUND_FAKE, 0 } }, // jones/ega&vga only - called when the game starts { GID_JONES, 764, 255, 0, "", "export 0", -1, 14, { WORKAROUND_FAKE, 0 } }, // jones/ega&vga only - called when the game starts - { GID_KQ5, -1, 0, 0, "", "export 29", -1, 3, { WORKAROUND_FAKE, 0 } }, // called when playing harp for the harpies or when aborting dialog in toy shop, is used for kDoAudio - bug #3034700 + //{ GID_KQ5, -1, 0, 0, "", "export 29", -1, 3, { WORKAROUND_FAKE, 0xf } }, // called when playing harp for the harpies or when aborting dialog in toy shop, is used for kDoAudio - bug #3034700 + // ^^ shouldn't be needed anymore, we got a script patch instead (kq5PatchCdHarpyVolume) { GID_KQ5, 25, 25, 0, "rm025", "doit", -1, 0, { WORKAROUND_FAKE, 0 } }, // inside witch forest, when going to the room where the walking rock is + { GID_KQ5, 55, 55, 0, "helpScript", "doit", -1, 0, { WORKAROUND_FAKE, 0 } }, // when giving the tambourine to the monster in the labyrinth (only happens at one of the locations) - bug #3041262 { GID_KQ6, -1, 30, 0, "rats", "changeState", -1, -1, { WORKAROUND_FAKE, 0 } }, // rats in the catacombs (temps 1 - 5) - bugs #3034597, #3035495, #3035824 { GID_KQ6, 210, 210, 0, "rm210", "scriptCheck", -1, 0, { WORKAROUND_FAKE, 1 } }, // using inventory in that room - bug #3034565 { GID_KQ6, 500, 500, 0, "rm500", "init", -1, 0, { WORKAROUND_FAKE, 0 } }, // going to island of the beast @@ -105,6 +135,7 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = { { GID_LAURABOW, -1, 967, 0, "myIcon", "cycle", -1, 1, { WORKAROUND_FAKE, 0 } }, // having any portrait conversation coming up (initial bug #3034985) { GID_LAURABOW2, -1, 24, 0, "gcWin", "open", -1, 5, { WORKAROUND_FAKE, 0xf } }, // is used as priority for game menu { GID_LAURABOW2, -1, 21, 0, "dropCluesCode", "doit", -1, 1, { WORKAROUND_FAKE, 0x7fff } }, // when asking some questions (e.g. the reporter about the burglary, or the policeman about Ziggy). Must be big, as the game scripts perform lt on it and start deleting journal entries - bugs #3035068, #3036274 + { GID_LAURABOW2, -1, 90, 1, "MuseumActor", "init", -1, 6, { WORKAROUND_FAKE, 0 } }, // Random actors in museum (bug #3041257) { GID_LAURABOW2, 240, 240, 0, "sSteveAnimates", "changeState", -1, 0, { WORKAROUND_FAKE, 0 } }, // Steve Dorian's idle animation at the docks - bug #3036291 { GID_LONGBOW, -1, 213, 0, "clear", "handleEvent", -1, 0, { WORKAROUND_FAKE, 0 } }, // When giving an answer using the druid hand sign code in any room { GID_LONGBOW, -1, 213, 0, "letter", "handleEvent", 0xa8, 1, { WORKAROUND_FAKE, 0 } }, // When using the druid hand sign code in any room - bug #3036601 @@ -119,24 +150,31 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = { { GID_LSL6HIRES, 0, 85, 0, "LL6Inv", "init", -1, 0, { WORKAROUND_FAKE, 0 } }, // on startup { GID_LSL6HIRES, -1, 64950, 1, "Feature", "handleEvent", -1, 0, { WORKAROUND_FAKE, 0 } }, // at least when entering swimming pool area { GID_LSL6HIRES, -1, 64964, 0, "DPath", "init", -1, 1, { WORKAROUND_FAKE, 0 } }, // during the game + { GID_MOTHERGOOSE, -1, 0, 0, "MG", "doit", -1, 5, { WORKAROUND_FAKE, 0 } }, // SCI1.1: When moving the cursor all the way to the left during the game (bug #3043955) { GID_MOTHERGOOSE, 18, 992, 0, "AIPath", "init", -1, 0, { WORKAROUND_FAKE, 0 } }, // DEMO: Called when walking north from mother goose's house two screens { GID_MOTHERGOOSEHIRES,-1,64950, 1, "Feature", "handleEvent", -1, 0, { WORKAROUND_FAKE, 0 } }, // right when clicking on a child at the start and probably also later { GID_MOTHERGOOSEHIRES,-1,64950, 1, "View", "handleEvent", -1, 0, { WORKAROUND_FAKE, 0 } }, // see above + { GID_PEPPER, -1, 894, 0, "Package", "doVerb", -1, 3, { WORKAROUND_FAKE, 0 } }, // using the hand on the book in the inventory - bug #3040012 { GID_QFG1, -1, 210, 0, "Encounter", "init", 0xbd0, 0, { WORKAROUND_FAKE, 0 } }, // hq1: going to the brigands hideout { GID_QFG1, -1, 210, 0, "Encounter", "init", 0xbe4, 0, { WORKAROUND_FAKE, 0 } }, // qfg1: going to the brigands hideout { GID_QFG2, -1, 71, 0, "theInvSheet", "doit", -1, 1, { WORKAROUND_FAKE, 0 } }, // accessing the inventory { GID_QFG2, -1, 701, -1, "Alley", "at", -1, 0, { WORKAROUND_FAKE, 0 } }, // when walking inside the alleys in the town - bug #3035835 & #3038367 { GID_QFG2, -1, 990, 0, "Restore", "doit", -1, 364, { WORKAROUND_FAKE, 0 } }, // when pressing enter in restore dialog w/o any saved games present - { GID_QFG2, 260, 260, 0, "abdulS", "changeState",0x2d22, -1, { WORKAROUND_FAKE, 0 } }, // During the thief's first mission (in the house), just before the second brother is about to enter the house (where you have to hide in the wardrobe), bug #3039891, temps 1 and 2 + { GID_QFG2, 260, 260, 0, "abdulS", "changeState",0x2d22, -1, { WORKAROUND_FAKE, 0 } }, // During the thief's first mission (in the house), just before Abdul is about to enter the house (where you have to hide in the wardrobe), bug #3039891, temps 1 and 2 + { GID_QFG2, 260, 260, 0, "jabbarS", "changeState",0x2d22, -1, { WORKAROUND_FAKE, 0 } }, // During the thief's first mission (in the house), just before Jabbar is about to enter the house (where you have to hide in the wardrobe), bug #3040469, temps 1 and 2 + { GID_QFG3, 140, 140, 0, "rm140", "init", 0x1008, 0, { WORKAROUND_FAKE, 0 } }, // when importing a character and selecting the previous profession - bug #3040460 { GID_QFG3, 330, 330, -1, "Teller", "doChild", -1, -1, { WORKAROUND_FAKE, 0 } }, // when talking to King Rajah about "Rajah" (bug #3036390, temp 1) or "Tarna" (temp 0), or when clicking on yourself and saying "Greet" (bug #3039774, temp 1) + { GID_QFG3, 700, 700, -1, "monsterIsDead", "changeState", -1, 0, { WORKAROUND_FAKE, 0 } }, // in the jungle, after winning any fight, bug #3040624 + { GID_QFG3, 470, 470, -1, "rm470", "notify", -1, 0, { WORKAROUND_FAKE, 0 } }, // closing the character screen in the Simbani village in the room with the bridge, bug #3040565 + { GID_QFG3, 490, 490, -1, "computersMove", "changeState", -1, 0, { WORKAROUND_FAKE, 0 } }, // when finishing awari game, bug #3040579 { GID_QFG4, -1, 15, -1, "charInitScreen", "dispatchEvent", -1, 5, { WORKAROUND_FAKE, 0 } }, // floppy version, when viewing the character screen { GID_QFG4, -1, 64917, -1, "controlPlane", "setBitmap", -1, 3, { WORKAROUND_FAKE, 0 } }, // floppy version, when entering the game menu { GID_QFG4, -1, 64917, -1, "Plane", "setBitmap", -1, 3, { WORKAROUND_FAKE, 0 } }, // floppy version, happen sometimes in fights { GID_SQ1, 103, 103, 0, "hand", "internalEvent", -1, -1, { WORKAROUND_FAKE, 0 } }, // Spanish (and maybe early versions?) only: when moving cursor over input pad, temps 1 and 2 { GID_SQ1, -1, 703, 0, "", "export 1", -1, 0, { WORKAROUND_FAKE, 0 } }, // sub that's called from several objects while on sarien battle cruiser { GID_SQ1, -1, 703, 0, "firePulsar", "changeState", 0x18a, 0, { WORKAROUND_FAKE, 0 } }, // export 1, but called locally (when shooting at aliens) - { GID_SQ4, -1, 398, 0, "showBox", "changeState", -1, 0, { WORKAROUND_FAKE, 0 } }, // sq4cd: called when rummaging in Software Excess bargain bin - { GID_SQ4, -1, 928, 0, "Narrator", "startText", -1, 1000, { WORKAROUND_FAKE, 1 } }, // sq4cd: method returns this to the caller + { GID_SQ4, -1, 398, 0, "showBox", "changeState", -1, 0, { WORKAROUND_FAKE, 0 } }, // CD: called when rummaging in Software Excess bargain bin + { GID_SQ4, -1, 928, 0, "Narrator", "startText", -1, 1000, { WORKAROUND_FAKE, 1 } }, // CD: method returns this to the caller { GID_SQ5, 201, 201, 0, "buttonPanel", "doVerb", -1, 0, { WORKAROUND_FAKE, 1 } }, // when looking at the orange or red button - bug #3038563 { GID_SQ6, 100, 0, 0, "SQ6", "init", -1, 2, { WORKAROUND_FAKE, 0 } }, // called when the game starts { GID_SQ6, 100, 64950, 0, "View", "handleEvent", -1, 0, { WORKAROUND_FAKE, 0 } }, // called when pressing "Start game" in the main menu @@ -149,21 +187,22 @@ const SciWorkaroundEntry kAbs_workarounds[] = { { GID_HOYLE1, 1, 1, 0, "room1", "doit", -1, 0, { WORKAROUND_FAKE, 0x3e9 } }, // crazy eights - called with objects instead of integers { GID_HOYLE1, 2, 2, 0, "room2", "doit", -1, 0, { WORKAROUND_FAKE, 0x3e9 } }, // old maid - called with objects instead of integers { GID_HOYLE1, 3, 3, 0, "room3", "doit", -1, 0, { WORKAROUND_FAKE, 0x3e9 } }, // hearts - called with objects instead of integers + { GID_QFG1VGA, -1, -1, 0, NULL, "doit", -1, 0, { WORKAROUND_FAKE, 0x3e9 } }, // when the game is patched with the NRS patch SCI_WORKAROUNDENTRY_TERMINATOR }; // gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry kCelHigh_workarounds[] = { - { GID_KQ5, -1, 255, 0, "deathIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // english floppy: when getting beaten up in the inn and probably more, called with 2nd parameter as object - bug #3037003 - { GID_PQ2, -1, 255, 0, "DIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // when showing picture within windows, called with 2nd/3rd parameters as objects + { GID_KQ5, -1, 255, 0, "deathIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // english floppy: when getting beaten up in the inn and probably more, called with 2nd parameter as object - bug #3037003 + { GID_PQ2, -1, 255, 0, "DIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // when showing picture within windows, called with 2nd/3rd parameters as objects { GID_SQ1, 1, 255, 0, "DIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // DEMO: Called with 2nd/3rd parameters as objects when clicking on the menu - bug #3035720 SCI_WORKAROUNDENTRY_TERMINATOR }; // gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry kCelWide_workarounds[] = { - { GID_KQ5, -1, 255, 0, "deathIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // english floppy: when getting beaten up in the inn and probably more, called with 2nd parameter as object - bug #3037003 - { GID_PQ2, -1, 255, 0, "DIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // when showing picture within windows, called with 2nd/3rd parameters as objects + { GID_KQ5, -1, 255, 0, "deathIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // english floppy: when getting beaten up in the inn and probably more, called with 2nd parameter as object - bug #3037003 + { GID_PQ2, -1, 255, 0, "DIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // when showing picture within windows, called with 2nd/3rd parameters as objects { GID_SQ1, 1, 255, 0, "DIcon", "setSize", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // DEMO: Called with 2nd/3rd parameters as objects when clicking on the menu - bug #3035720 SCI_WORKAROUNDENTRY_TERMINATOR }; @@ -185,9 +224,12 @@ const SciWorkaroundEntry kDeviceInfo_workarounds[] = { const SciWorkaroundEntry kDisplay_workarounds[] = { { GID_ISLANDBRAIN, 300, 300, 0, "geneDude", "show", -1, 0, { WORKAROUND_IGNORE, 0 } }, // when looking at the gene explanation chart - a parameter is an object { GID_PQ2, 23, 23, 0, "rm23Script", "elements", 0x4ae, 0, { WORKAROUND_IGNORE, 0 } }, // when looking at the 2nd page of pate's file - 0x75 as id + { GID_PQ2, 23, 23, 0, "rm23Script", "elements", 0x4c1, 0, { WORKAROUND_IGNORE, 0 } }, // when looking at the 2nd page of pate's file - 0x75 as id (another pq2 version, bug #3043904) { GID_QFG1, 11, 11, 0, "battle", "<noname90>", -1, 0, { WORKAROUND_IGNORE, 0 } }, // DEMO: When entering battle, 0x75 as id - { GID_SQ4, 391, 391, 0, "doCatalog", "mode", 0x84, 0, { WORKAROUND_IGNORE, 0 } }, // clicking on catalog in roboter sale - a parameter is an object - { GID_SQ4, 391, 391, 0, "choosePlug", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // ordering connector in roboter sale - a parameter is an object + { GID_SQ1, -1, 700, 0, "arcadaRegion", "doit", -1, 0, { WORKAROUND_IGNORE, 0 } }, // restoring in some rooms of the arcada (right at the start) + { GID_SQ4, 397, 0, 0, "", "export 12", -1, 0, { WORKAROUND_IGNORE, 0 } }, // FLOPPY: when going into the computer store (bug #3044044) + { GID_SQ4, 391, 391, 0, "doCatalog", "mode", 0x84, 0, { WORKAROUND_IGNORE, 0 } }, // CD: clicking on catalog in roboter sale - a parameter is an object + { GID_SQ4, 391, 391, 0, "choosePlug", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // CD: ordering connector in roboter sale - a parameter is an object SCI_WORKAROUNDENTRY_TERMINATOR }; @@ -214,7 +256,7 @@ const SciWorkaroundEntry kDoSoundFade_workarounds[] = { // gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry kGetAngle_workarounds[] = { { GID_FANMADE, 516, 992, 0, "Motion", "init", -1, 0, { WORKAROUND_IGNORE, 0 } }, // The Legend of the Lost Jewel Demo (fan made): called with third/fourth parameters as objects - { GID_KQ6, 740, 752, 0, "throwDazzle", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // after the Genie is exposed in the Palace (short and long ending), it starts shooting lightning bolts around. An extra 5th parameter is passed - bug #3034610 + { GID_KQ6, -1, 752, 0, "throwDazzle", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // room 740/790 after the Genie is exposed in the Palace (short and long ending), it starts shooting lightning bolts around. An extra 5th parameter is passed - bug #3034610 & #3041734 SCI_WORKAROUNDENTRY_TERMINATOR }; @@ -228,6 +270,8 @@ const SciWorkaroundEntry kFindKey_workarounds[] = { const SciWorkaroundEntry kGraphDrawLine_workarounds[] = { { GID_ISLANDBRAIN, 300, 300, 0, "dudeViewer", "show", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // when looking at the gene explanation chart, gets called with 1 extra parameter { GID_SQ1, 43, 43, 0, "someoneDied", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // when ordering beer, gets called with 1 extra parameter + { GID_SQ1, 71, 71, 0, "destroyXenon", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // during the Xenon destruction cutscene (which results in death), gets called with 1 extra parameter - bug #3040894 + { GID_SQ1, 53, 53, 0, "blastEgo", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // when Roger is found and zapped by the cleaning robot, gets called with 1 extra parameter - bug #3040905 SCI_WORKAROUNDENTRY_TERMINATOR }; @@ -259,19 +303,21 @@ const SciWorkaroundEntry kGraphFillBoxForeground_workarounds[] = { // gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry kGraphFillBoxAny_workarounds[] = { - { GID_SQ4, -1, 818, 0, "iconTextSwitch", "show", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // game menu "text/speech" display - parameter 5 is missing, but the right color number is on the stack + { GID_SQ4, -1, 818, 0, "iconTextSwitch", "show", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // CD: game menu "text/speech" display - parameter 5 is missing, but the right color number is on the stack SCI_WORKAROUNDENTRY_TERMINATOR }; // gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry kGraphRedrawBox_workarounds[] = { { GID_SQ4, 405, 405, 0, "swimAfterEgo", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // skateOrama when "swimming" in the air - accidental additional parameter specified + { GID_SQ4, 406, 406, 0, "egoFollowed", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // FLOPPY: when getting shot by the police - accidental additional parameter specified { GID_SQ4, 406, 406, 0, "swimAndShoot", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // skateOrama when "swimming" in the air - accidental additional parameter specified { GID_SQ4, 410, 410, 0, "swimAfterEgo", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // skateOrama when "swimming" in the air - accidental additional parameter specified { GID_SQ4, 411, 411, 0, "swimAndShoot", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // skateOrama when "swimming" in the air - accidental additional parameter specified { GID_SQ4, -1, 704, 0, "shootEgo", "changeState", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // When shot by Droid in Super Computer Maze (Rooms 500, 505, 510...) - accidental additional parameter specified { GID_KQ5, -1, 981, 0, "myWindow", "dispose", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // Happens in the floppy version, when closing any dialog box, accidental additional parameter specified - bug #3036331 { GID_KQ5, -1, 995, 0, "invW", "doit", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // Happens in the floppy version, when closing the inventory window, accidental additional parameter specified + { GID_KQ5, -1, 995, 0, "", "export 0", -1, 0, { WORKAROUND_STILLCALL, 0 } }, // Happens in the floppy version, when opening the gem pouch, accidental additional parameter specified - bug #3039395 SCI_WORKAROUNDENTRY_TERMINATOR }; @@ -317,11 +363,13 @@ const SciWorkaroundEntry kSetCursor_workarounds[] = { // gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry kSetPort_workarounds[] = { { GID_LSL6, 740, 740, 0, "rm740", "drawPic", -1, 0, { WORKAROUND_IGNORE, 0 } }, // ending scene, is called with additional 3 (!) parameters + { GID_QFG3, 830, 830, 0, "portalOpens", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // when the portal appears during the end, bug #3040844 SCI_WORKAROUNDENTRY_TERMINATOR }; // gameID, room,script,lvl, object-name, method-name, call,index, workaround const SciWorkaroundEntry kStrAt_workarounds[] = { + { GID_CASTLEBRAIN, 220, 220, 0, "robotJokes", "animateOnce", -1, 0, { WORKAROUND_FAKE, 0 } }, // when trying to view the terminal at the end of the maze without having collected any robot jokes - bug #3039036 { GID_ISLANDBRAIN, 300, 310, 0, "childBreed", "changeState",0x1c7c, 0, { WORKAROUND_FAKE, 0 } }, // when clicking Breed to get the second-generation cyborg hybrid (Standard difficulty), the two parameters are swapped - bug #3037835 SCI_WORKAROUNDENTRY_TERMINATOR }; @@ -332,7 +380,7 @@ const SciWorkaroundEntry kUnLoad_workarounds[] = { { GID_CAMELOT, 921, 921, 1, "Script", "init", 0x36, 0, { WORKAROUND_IGNORE, 0 } }, // DEMO: When being attacked by the boar (and other places), the reference is invalid - bug #3035000 { GID_CASTLEBRAIN, 320, 377, 0, "SWord", "upDate", -1, 0, { WORKAROUND_IGNORE, 0 } }, // after solving the cross-word-puzzle, trying to unload invalid reference { GID_CASTLEBRAIN, 320, 377, 0, "theWord", "show", -1, 0, { WORKAROUND_IGNORE, 0 } }, // 2nd word puzzle, when exiting before solving, trying to unload invalid reference - bug #3034473 - { GID_ECOQUEST, 380, 61, 0, "gotIt", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // after talking to the dolphin the first time + { GID_ECOQUEST, 380, 61, 0, "gotIt", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // after talking to the dolphin the first time { GID_LAURABOW2, 1, 1, 0, "sCartoon", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // DEMO: during the intro, a 3rd parameter is passed by accident - bug #3034902 { GID_LAURABOW2, 2, 2, 0, "sCartoon", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // DEMO: during the intro, a 3rd parameter is passed by accident - bug #3034902 { GID_LAURABOW2, 4, 4, 0, "sCartoon", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // DEMO: inside the museum, a 3rd parameter is passed by accident - bug #3034902 diff --git a/engines/sci/engine/workarounds.h b/engines/sci/engine/workarounds.h index 8a3edb6246..55a4b8f885 100644 --- a/engines/sci/engine/workarounds.h +++ b/engines/sci/engine/workarounds.h @@ -71,7 +71,11 @@ struct SciWorkaroundEntry { extern const SciWorkaroundEntry opcodeDivWorkarounds[]; extern const SciWorkaroundEntry opcodeDptoaWorkarounds[]; extern const SciWorkaroundEntry opcodeGeWorkarounds[]; +extern const SciWorkaroundEntry opcodeLeWorkarounds[]; +extern const SciWorkaroundEntry opcodeLaiWorkarounds[]; +extern const SciWorkaroundEntry opcodeLsiWorkarounds[]; extern const SciWorkaroundEntry opcodeMulWorkarounds[]; +extern const SciWorkaroundEntry opcodeAndWorkarounds[]; extern const SciWorkaroundEntry opcodeOrWorkarounds[]; extern const SciWorkaroundEntry uninitializedReadWorkarounds[]; extern const SciWorkaroundEntry kAbs_workarounds[]; diff --git a/engines/sci/graphics/animate.cpp b/engines/sci/graphics/animate.cpp index ab4362cda9..b962e819a6 100644 --- a/engines/sci/graphics/animate.cpp +++ b/engines/sci/graphics/animate.cpp @@ -190,7 +190,7 @@ void GfxAnimate::makeSortedList(List *list) { Common::sort(_list.begin(), _list.end(), sortHelper); } -void GfxAnimate::fill(byte &old_picNotValid) { +void GfxAnimate::fill(byte &old_picNotValid, bool maySetNsRect) { reg_t curObject; uint16 signal; GfxView *view = NULL; @@ -205,13 +205,28 @@ void GfxAnimate::fill(byte &old_picNotValid) { view = _cache->getView(it->viewId); // adjust loop and cel, if any of those is invalid - if (it->loopNo >= view->getLoopCount()) { + // this seems to be completely crazy code + // sierra sci checked signed int16 to be above or equal the counts and reseted to 0 in those cases + // later during view processing those are compared unsigned again and then set to maximum count - 1 + // Games rely on this behaviour. For example laura bow 1 has a knight standing around in room 37 + // which has cel set to 3. This cel does not exist and the actual knight is 0 + // In kq5 on the other hand during the intro, when the trunk is opened, cel is set to some real + // high number, which is negative when considered signed. This actually requires to get fixed to + // maximum cel, otherwise the trunk would be closed. + int16 viewLoopCount = view->getLoopCount(); + if (it->loopNo >= viewLoopCount) { it->loopNo = 0; writeSelectorValue(_s->_segMan, curObject, SELECTOR(loop), it->loopNo); + } else if (it->loopNo < 0) { + it->loopNo = viewLoopCount - 1; + // not setting selector is right, sierra sci didn't do it during view processing as well } - if (it->celNo >= view->getCelCount(it->loopNo)) { + int16 viewCelCount = view->getCelCount(it->loopNo); + if (it->celNo >= viewCelCount) { it->celNo = 0; writeSelectorValue(_s->_segMan, curObject, SELECTOR(cel), it->celNo); + } else if (it->celNo < 0) { + it->celNo = viewCelCount - 1; } // Process global scaling, if needed @@ -243,6 +258,8 @@ void GfxAnimate::fill(byte &old_picNotValid) { } } + //warning("%s view %d, loop %d, cel %d", _s->_segMan->getObjectName(curObject), it->viewId, it->loopNo, it->celNo); + if (!view->isScaleable()) { // Laura Bow 2 (especially floppy) depends on this, some views are not supposed to be scaleable // this "feature" was removed in later versions of SCI1.1 @@ -250,7 +267,7 @@ void GfxAnimate::fill(byte &old_picNotValid) { it->scaleY = it->scaleX = 128; } - bool setNsRect = true; + bool setNsRect = maySetNsRect; // Create rect according to coordinates and given cel if (it->scaleSignal & kScaleSignalDoScaling) { @@ -516,6 +533,19 @@ void GfxAnimate::reAnimate(Common::Rect rect) { } } +void GfxAnimate::preprocessAddToPicList() { + AnimateList::iterator it; + const AnimateList::iterator end = _list.end(); + + for (it = _list.begin(); it != end; ++it) { + if (it->priority == -1) + it->priority = _ports->kernelCoordinateToPriority(it->y); + + // Do not allow priority to get changed by fill() + it->signal |= kSignalFixedPriority; + } +} + void GfxAnimate::addToPicDrawCels() { reg_t curObject; GfxView *view = NULL; @@ -525,17 +555,11 @@ void GfxAnimate::addToPicDrawCels() { for (it = _list.begin(); it != end; ++it) { curObject = it->object; - if (it->priority == -1) - it->priority = _ports->kernelCoordinateToPriority(it->y); - // Get the corresponding view view = _cache->getView(it->viewId); - // Create rect according to coordinates and given cel - view->getCelRect(it->loopNo, it->celNo, it->x, it->y, it->z, it->celRect); - // draw corresponding cel - _paint16->drawCel(it->viewId, it->loopNo, it->celNo, it->celRect, it->priority, it->paletteNo); + _paint16->drawCel(it->viewId, it->loopNo, it->celNo, it->celRect, it->priority, it->paletteNo, it->scaleX, it->scaleY); if ((it->signal & kSignalIgnoreActor) == 0) { it->celRect.top = CLIP<int16>(_ports->kernelPriorityToCoordinate(it->priority) - 1, it->celRect.top, it->celRect.bottom - 1); _paint16->fillRect(it->celRect, GFX_SCREEN_MASK_CONTROL, 0, 0, 15); @@ -604,7 +628,7 @@ void GfxAnimate::kernelAnimate(reg_t listReference, bool cycle, int argc, reg_t disposeLastCast(); makeSortedList(list); - fill(old_picNotValid); + fill(old_picNotValid, true); if (old_picNotValid) { // beginUpdate()/endUpdate() were introduced SCI1. @@ -679,6 +703,7 @@ void GfxAnimate::addToPicSetPicNotValid() { void GfxAnimate::kernelAddToPicList(reg_t listReference, int argc, reg_t *argv) { List *list; + byte tempPicNotValid = 0; _ports->setPort((Port *)_ports->_picWind); @@ -687,6 +712,8 @@ void GfxAnimate::kernelAddToPicList(reg_t listReference, int argc, reg_t *argv) error("kAddToPic called with non-list as parameter"); makeSortedList(list); + preprocessAddToPicList(); + fill(tempPicNotValid, getSciVersion() >= SCI_VERSION_1_1 ? true : false); addToPicDrawCels(); addToPicSetPicNotValid(); diff --git a/engines/sci/graphics/animate.h b/engines/sci/graphics/animate.h index 7e82187eed..f25e54915e 100644 --- a/engines/sci/graphics/animate.h +++ b/engines/sci/graphics/animate.h @@ -94,12 +94,13 @@ public: void disposeLastCast(); bool invoke(List *list, int argc, reg_t *argv); void makeSortedList(List *list); - void fill(byte &oldPicNotValid); + void fill(byte &oldPicNotValid, bool maySetNsRect); void update(); void drawCels(); void updateScreen(byte oldPicNotValid); void restoreAndDelete(int argc, reg_t *argv); void reAnimate(Common::Rect rect); + void preprocessAddToPicList(); void addToPicDrawCels(); void addToPicDrawView(GuiResourceId viewId, int16 loopNo, int16 celNo, int16 leftPos, int16 topPos, int16 priority, int16 control); diff --git a/engines/sci/graphics/compare.cpp b/engines/sci/graphics/compare.cpp index 0a186115d0..1c961b2ad6 100644 --- a/engines/sci/graphics/compare.cpp +++ b/engines/sci/graphics/compare.cpp @@ -229,39 +229,32 @@ void GfxCompare::kernelBaseSetter(reg_t object) { if (viewId == 0xFFFF) // invalid view return; - // must be something wrong with this TODO check - currently it breaks qfg3 right after the intro - //uint16 scaleSignal = 0; - //if (getSciVersion() >= SCI_VERSION_1_1) { - // scaleSignal = readSelectorValue(_segMan, object, SELECTOR(scaleSignal)) & kScaleSignalDoScaling; - // if (scaleSignal) { - // int16 scaleY = readSelectorValue(_segMan, object, SELECTOR(scaleY)); - // if (scaleY < 64) - // scaleSignal = 0; - // } - //} + uint16 scaleSignal = 0; + if (getSciVersion() >= SCI_VERSION_1_1) { + scaleSignal = readSelectorValue(_segMan, object, SELECTOR(scaleSignal)); + } Common::Rect celRect; - //if (!scaleSignal) { - GfxView *tmpView = _cache->getView(viewId); - if (tmpView->isSci2Hires()) - _screen->adjustToUpscaledCoordinates(y, x); + GfxView *tmpView = _cache->getView(viewId); + if (tmpView->isSci2Hires()) + _screen->adjustToUpscaledCoordinates(y, x); + if (scaleSignal & kScaleSignalDoScaling) { + int16 scaleX = readSelectorValue(_segMan, object, SELECTOR(scaleX)); + int16 scaleY = readSelectorValue(_segMan, object, SELECTOR(scaleY)); + tmpView->getCelScaledRect(loopNo, celNo, x, y, z, scaleX, scaleY, celRect); + } else { tmpView->getCelRect(loopNo, celNo, x, y, z, celRect); + } - if (tmpView->isSci2Hires()) { - _screen->adjustBackUpscaledCoordinates(celRect.top, celRect.left); - _screen->adjustBackUpscaledCoordinates(celRect.bottom, celRect.right); - } + if (tmpView->isSci2Hires()) { + _screen->adjustBackUpscaledCoordinates(celRect.top, celRect.left); + _screen->adjustBackUpscaledCoordinates(celRect.bottom, celRect.right); + } - celRect.bottom = y + 1; - celRect.top = celRect.bottom - yStep; - //} else { - // celRect.left = readSelectorValue(_segMan, object, SELECTOR(nsLeft)); - // celRect.right = readSelectorValue(_segMan, object, SELECTOR(nsRight)); - // celRect.top = readSelectorValue(_segMan, object, SELECTOR(nsTop)); - // celRect.bottom = readSelectorValue(_segMan, object, SELECTOR(nsBottom)); - //} + celRect.bottom = y + 1; + celRect.top = celRect.bottom - yStep; writeSelectorValue(_segMan, object, SELECTOR(brLeft), celRect.left); writeSelectorValue(_segMan, object, SELECTOR(brRight), celRect.right); diff --git a/engines/sci/graphics/cursor.cpp b/engines/sci/graphics/cursor.cpp index f6e2077cb3..a906899113 100644 --- a/engines/sci/graphics/cursor.cpp +++ b/engines/sci/graphics/cursor.cpp @@ -23,10 +23,11 @@ * */ -#include "graphics/cursorman.h" -#include "common/util.h" #include "common/events.h" +#include "common/macresman.h" #include "common/system.h" +#include "common/util.h" +#include "graphics/cursorman.h" #include "sci/sci.h" #include "sci/event.h" @@ -206,7 +207,7 @@ void GfxCursor::kernelSetMacCursor(GuiResourceId viewNum, int loopNum, int celNu // See http://developer.apple.com/legacy/mac/library/documentation/mac/QuickDraw/QuickDraw-402.html // for more information. - // View 998 seems to be a fake resource used to call for the Mac CURS resources. + // View 998 seems to be a fake resource used to call for Mac cursor resources. // For other resources, they're still in the views, so use them. if (viewNum != 998) { kernelSetView(viewNum, loopNum, celNum, hotspot); @@ -214,43 +215,53 @@ void GfxCursor::kernelSetMacCursor(GuiResourceId viewNum, int loopNum, int celNu } // TODO: What about the 2000 resources? Inventory items? How to handle? - // TODO: What games does this work for? At least it does for KQ6. - // TODO: Stop asking rhetorical questions. - // TODO: It was fred all along! + // TODO: 1000 + celNum won't work for GK1 Resource *resource = _resMan->findResource(ResourceId(kResourceTypeCursor, 1000 + celNum), false); if (!resource) { - warning("CURS %d not found", 1000 + celNum); + warning("Mac cursor %d not found", 1000 + celNum); return; } assert(resource); - byte *cursorBitmap = new byte[16 * 16]; - byte *data = resource->data; + if (resource->size == 32 * 2 + 4) { + // Mac CURS cursor + byte *cursorBitmap = new byte[16 * 16]; + byte *data = resource->data; - // Get B&W data - for (byte i = 0; i < 32; i++) { - byte imageByte = *data++; - for (byte b = 0; b < 8; b++) - cursorBitmap[i * 8 + b] = (byte)((imageByte & (0x80 >> b)) > 0 ? 0x00 : 0xFF); - } + // Get B&W data + for (byte i = 0; i < 32; i++) { + byte imageByte = *data++; + for (byte b = 0; b < 8; b++) + cursorBitmap[i * 8 + b] = (byte)((imageByte & (0x80 >> b)) > 0 ? 0x00 : 0xFF); + } - // Apply mask data - for (byte i = 0; i < 32; i++) { - byte imageByte = *data++; - for (byte b = 0; b < 8; b++) - if ((imageByte & (0x80 >> b)) == 0) - cursorBitmap[i * 8 + b] = SCI_CURSOR_SCI0_TRANSPARENCYCOLOR; // Doesn't matter, just is transparent - } + // Apply mask data + for (byte i = 0; i < 32; i++) { + byte imageByte = *data++; + for (byte b = 0; b < 8; b++) + if ((imageByte & (0x80 >> b)) == 0) + cursorBitmap[i * 8 + b] = SCI_CURSOR_SCI0_TRANSPARENCYCOLOR; // Doesn't matter, just is transparent + } - uint16 hotspotX = READ_BE_UINT16(data); - uint16 hotspotY = READ_BE_UINT16(data + 2); + uint16 hotspotX = READ_BE_UINT16(data); + uint16 hotspotY = READ_BE_UINT16(data + 2); - CursorMan.replaceCursor(cursorBitmap, 16, 16, hotspotX, hotspotY, SCI_CURSOR_SCI0_TRANSPARENCYCOLOR); + CursorMan.replaceCursor(cursorBitmap, 16, 16, hotspotX, hotspotY, SCI_CURSOR_SCI0_TRANSPARENCYCOLOR); - delete[] cursorBitmap; + delete[] cursorBitmap; + } else { + // Mac crsr cursor + byte *cursorBitmap, *palette; + int width, height, hotspotX, hotspotY, palSize, keycolor; + Common::MacResManager::convertCrsrCursor(resource->data, resource->size, &cursorBitmap, &width, &height, &hotspotX, &hotspotY, &keycolor, true, &palette, &palSize); + CursorMan.replaceCursor(cursorBitmap, width, height, hotspotX, hotspotY, keycolor); + CursorMan.replaceCursorPalette(palette, 0, palSize); + free(cursorBitmap); + free(palette); + } kernelShow(); } diff --git a/engines/sci/graphics/helpers.h b/engines/sci/graphics/helpers.h index 8f26ca296b..4b4cd673b4 100644 --- a/engines/sci/graphics/helpers.h +++ b/engines/sci/graphics/helpers.h @@ -55,11 +55,12 @@ struct Port { bool greyedOutput; int16 penClr, backClr; int16 penMode; + uint16 counterTillFree; Port(uint16 theId) : id(theId), top(0), left(0), curTop(0), curLeft(0), fontHeight(0), fontId(0), greyedOutput(false), - penClr(0), backClr(0xFF), penMode(0) { + penClr(0), backClr(0xFF), penMode(0), counterTillFree(0) { } }; diff --git a/engines/sci/graphics/paint16.cpp b/engines/sci/graphics/paint16.cpp index 4551e9dafc..dbc738e2f7 100644 --- a/engines/sci/graphics/paint16.cpp +++ b/engines/sci/graphics/paint16.cpp @@ -221,7 +221,7 @@ void GfxPaint16::paintRect(const Common::Rect &rect) { fillRect(rect, GFX_SCREEN_MASK_VISUAL, _ports->_curPort->penClr); } -void GfxPaint16::fillRect(const Common::Rect &rect, int16 drawFlags, byte clrPen, byte clrBack, byte bControl) { +void GfxPaint16::fillRect(const Common::Rect &rect, int16 drawFlags, byte color, byte priority, byte control) { Common::Rect r = rect; r.clip(_ports->_curPort->rect); if (r.isEmpty()) // nothing to fill @@ -238,17 +238,17 @@ void GfxPaint16::fillRect(const Common::Rect &rect, int16 drawFlags, byte clrPen for (y = r.top; y < r.bottom; y++) { for (x = r.left; x < r.right; x++) { curVisual = _screen->getVisual(x, y); - if (curVisual == clrPen) { - _screen->putPixel(x, y, GFX_SCREEN_MASK_VISUAL, clrBack, 0, 0); - } else if (curVisual == clrBack) { - _screen->putPixel(x, y, GFX_SCREEN_MASK_VISUAL, clrPen, 0, 0); + if (curVisual == color) { + _screen->putPixel(x, y, GFX_SCREEN_MASK_VISUAL, priority, 0, 0); + } else if (curVisual == priority) { + _screen->putPixel(x, y, GFX_SCREEN_MASK_VISUAL, color, 0, 0); } } } - } else { // just fill rect with ClrPen + } else { // just fill rect with color for (y = r.top; y < r.bottom; y++) { for (x = r.left; x < r.right; x++) { - _screen->putPixel(x, y, GFX_SCREEN_MASK_VISUAL, clrPen, 0, 0); + _screen->putPixel(x, y, GFX_SCREEN_MASK_VISUAL, color, 0, 0); } } } @@ -258,10 +258,14 @@ void GfxPaint16::fillRect(const Common::Rect &rect, int16 drawFlags, byte clrPen return; drawFlags &= GFX_SCREEN_MASK_PRIORITY|GFX_SCREEN_MASK_CONTROL; + // we need to isolate the bits, sierra sci saved priority and control inside one byte, we don't + priority &= 0x0f; + control &= 0x0f; + if (oldPenMode != 2) { for (y = r.top; y < r.bottom; y++) { for (x = r.left; x < r.right; x++) { - _screen->putPixel(x, y, drawFlags, 0, clrBack, bControl); + _screen->putPixel(x, y, drawFlags, 0, priority, control); } } } else { @@ -413,6 +417,7 @@ void GfxPaint16::kernelGraphFrameBox(const Common::Rect &rect, int16 color) { } void GfxPaint16::kernelGraphDrawLine(Common::Point startPoint, Common::Point endPoint, int16 color, int16 priority, int16 control) { + _ports->clipLine(startPoint, endPoint); _ports->offsetLine(startPoint, endPoint); _screen->drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y, color, priority, control); } diff --git a/engines/sci/graphics/paint16.h b/engines/sci/graphics/paint16.h index e944c71bdd..4f709fd7c6 100644 --- a/engines/sci/graphics/paint16.h +++ b/engines/sci/graphics/paint16.h @@ -62,7 +62,7 @@ public: void invertRectViaXOR(const Common::Rect &rect); void eraseRect(const Common::Rect &rect); void paintRect(const Common::Rect &rect); - void fillRect(const Common::Rect &rect, int16 drawFlags, byte clrPen, byte clrBack = 0, byte bControl = 0); + void fillRect(const Common::Rect &rect, int16 drawFlags, byte color, byte priority = 0, byte control = 0); void frameRect(const Common::Rect &rect); void bitsShow(const Common::Rect &r); diff --git a/engines/sci/graphics/ports.cpp b/engines/sci/graphics/ports.cpp index 2e9128cda6..dddd9b1c86 100644 --- a/engines/sci/graphics/ports.cpp +++ b/engines/sci/graphics/ports.cpp @@ -66,6 +66,8 @@ void GfxPorts::init(bool usesOldGfxFunctions, GfxPaint16 *paint16, GfxText16 *te _paint16 = paint16; _text16 = text16; + _freeCounter = 0; + // _menuPort has actually hardcoded id 0xFFFF. Its not meant to be known to windowmanager according to sierra sci _menuPort = new Port(0xFFFF); openPort(_menuPort); @@ -155,25 +157,37 @@ void GfxPorts::init(bool usesOldGfxFunctions, GfxPaint16 *paint16, GfxText16 *te // but in some games there are still windows active when restoring. Leaving those windows open // would create all sorts of issues, that's why we remove them void GfxPorts::reset() { - PortList::iterator it = _windowList.begin(); - const PortList::iterator end = _windowList.end(); - setPort(_picWind); - while (it != end) { - Port *pPort = *it; - if (pPort->id > 2) { - // found a window beyond _picWind - freeWindow((Window *)pPort); - } - it++; + // free everything after _picWind + for (uint id = PORTS_FIRSTSCRIPTWINDOWID; id < _windowsById.size(); id++) { + Window *window = (Window *)_windowsById[id]; + if (window) + freeWindow(window); } + _freeCounter = 0; _windowList.clear(); _windowList.push_front(_wmgrPort); _windowList.push_back(_picWind); } void GfxPorts::kernelSetActive(uint16 portId) { + if (_freeCounter) { + // Windows waiting to get freed + for (uint id = PORTS_FIRSTSCRIPTWINDOWID; id < _windowsById.size(); id++) { + Window *window = (Window *)_windowsById[id]; + if (window) { + if (window->counterTillFree) { + window->counterTillFree--; + if (!window->counterTillFree) { + freeWindow(window); + _freeCounter--; + } + } + } + } + } + switch (portId) { case 0: setPort(_wmgrPort); @@ -225,35 +239,14 @@ reg_t GfxPorts::kernelNewWindow(Common::Rect dims, Common::Rect restoreRect, uin void GfxPorts::kernelDisposeWindow(uint16 windowId, bool reanimate) { Window *wnd = (Window *)getPortById(windowId); - if (wnd) - removeWindow(wnd, reanimate); - else - error("GfxPorts::kernelDisposeWindow: Request to dispose invalid port id %d", windowId); - - if ((g_sci->getGameId() == GID_HOYLE4) && (!g_sci->isDemo())) { - // WORKAROUND: hoyle 4 has a broken User::handleEvent implementation - // first of all iconbar is always set and always gets called with - // events checking if event got claimed got removed inside that code - // and it will call handleEvent on gameObj afterwards. Iconbar windows - // are handled inside iconbar as well including disposing - // e.g. iconOK::doit, script 14) and claimed isn't even set. gameObj - // handleEvent calling will result in coordinate adjust with a now - // invalid port. - // We fix this by adjusting the port variable to be global - // again when hoyle4 is disposing windows. - // This worked because sierra sci leaves old port data, so the pointer - // was still valid for a short period of time - // TODO: maybe this could get implemented as script patch somehow - // although this could get quite tricky to implement (script 996) - // IconBar::handleEvent (script 937) - // maybe inside export 8 of script 0, which is called by iconOK - // and iconReplay - // or inside GameControls::hide (script 978) which is called to - // actually remove the window - reg_t eventObject = _segMan->findObjectByName("uEvt"); - if (!eventObject.isNull()) { - writeSelectorValue(_segMan, eventObject, SELECTOR(port), 0); + if (wnd) { + if (!wnd->counterTillFree) { + removeWindow(wnd, reanimate); + } else { + error("kDisposeWindow: used already disposed window id %d", windowId); } + } else { + error("kDisposeWindow: used unknown window id %d", windowId); } } @@ -293,8 +286,18 @@ void GfxPorts::endUpdate(Window *wnd) { Window *GfxPorts::addWindow(const Common::Rect &dims, const Common::Rect *restoreRect, const char *title, uint16 style, int16 priority, bool draw) { // Find an unused window/port id - uint id = 1; + uint id = PORTS_FIRSTWINDOWID; while (id < _windowsById.size() && _windowsById[id]) { + if (_windowsById[id]->counterTillFree) { + // port that is already disposed, but not freed yet + freeWindow((Window *)_windowsById[id]); + _freeCounter--; + break; // reuse the handle + // we do this especially for sq4cd. it creates and disposes the + // inventory window all the time, but reuses old handles as well + // this worked somewhat under the original interpreter, because + // it put the new window where the old was. + } ++id; } if (id == _windowsById.size()) @@ -444,15 +447,25 @@ void GfxPorts::drawWindow(Window *pWnd) { void GfxPorts::removeWindow(Window *pWnd, bool reanimate) { setPort(_wmgrPort); _paint16->bitsRestore(pWnd->hSaved1); + pWnd->hSaved1 = NULL_REG; _paint16->bitsRestore(pWnd->hSaved2); + pWnd->hSaved2 = NULL_REG; if (!reanimate) _paint16->bitsShow(pWnd->restoreRect); else _paint16->kernelGraphRedrawBox(pWnd->restoreRect); _windowList.remove(pWnd); setPort(_windowList.back()); - _windowsById[pWnd->id] = NULL; - delete pWnd; + // We will actually free this window after 15 kSetPort-calls + // Sierra sci freed the pointer immediately, but pointer to that port + // still worked till the memory got overwritten. Some games depend + // on this (dispose a window and then kSetPort to it again for once) + // Those are actually script bugs, but patching all of those out + // would be quite a hassle and this just keeps compatibility + // (examples: hoyle 4 game menu and sq4cd inventory) + // sq4cd gum wrapper requires more than 10 + pWnd->counterTillFree = 15; + _freeCounter++; } void GfxPorts::freeWindow(Window *pWnd) { @@ -460,7 +473,7 @@ void GfxPorts::freeWindow(Window *pWnd) { _segMan->freeHunkEntry(pWnd->hSaved1); if (!pWnd->hSaved2.isNull()) _segMan->freeHunkEntry(pWnd->hSaved1); - _windowsById[pWnd->id] = 0; + _windowsById[pWnd->id] = NULL; delete pWnd; } @@ -563,6 +576,13 @@ void GfxPorts::offsetLine(Common::Point &start, Common::Point &end) { end.y += _curPort->top; } +void GfxPorts::clipLine(Common::Point &start, Common::Point &end) { + start.y = CLIP<int16>(start.y, _curPort->rect.top, _curPort->rect.bottom - 1); + start.x = CLIP<int16>(start.x, _curPort->rect.left, _curPort->rect.right - 1); + end.y = CLIP<int16>(end.y, _curPort->rect.top, _curPort->rect.bottom - 1); + end.x = CLIP<int16>(end.x, _curPort->rect.left, _curPort->rect.right - 1); +} + void GfxPorts::priorityBandsInit(int16 bandCount, int16 top, int16 bottom) { int16 y; int32 bandSize; diff --git a/engines/sci/graphics/ports.h b/engines/sci/graphics/ports.h index f7f0721eb7..453cb50986 100644 --- a/engines/sci/graphics/ports.h +++ b/engines/sci/graphics/ports.h @@ -36,6 +36,9 @@ class GfxPaint16; class GfxScreen; class GfxText16; +#define PORTS_FIRSTWINDOWID 2 +#define PORTS_FIRSTSCRIPTWINDOWID 3 + /** * Ports class, includes all port managment for SCI0->SCI1.1 games. Ports are some sort of windows in SCI * this class also handles adjusting coordinates to a specific port @@ -80,6 +83,7 @@ public: void offsetRect(Common::Rect &r); void offsetLine(Common::Point &start, Common::Point &end); + void clipLine(Common::Point &start, Common::Point &end); void priorityBandsInit(int16 bandCount, int16 top, int16 bottom); void priorityBandsInit(byte *data); @@ -111,6 +115,9 @@ private: uint16 _styleUser; + // counts windows that got disposed but are not freed yet + uint16 _freeCounter; + /** The list of open 'windows' (and ports), in visual order. */ PortList _windowList; diff --git a/engines/sci/graphics/text16.cpp b/engines/sci/graphics/text16.cpp index fc07febe14..f5eb268863 100644 --- a/engines/sci/graphics/text16.cpp +++ b/engines/sci/graphics/text16.cpp @@ -92,7 +92,7 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1 const char *textCode = text; int16 textCodeSize = 0; char curCode; - unsigned char curCodeParm; + signed char curCodeParm; // Find the end of the textcode while ((++textCodeSize) && (*text != 0) && (*text++ != 0x7C)) { } @@ -105,11 +105,11 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1 if (isdigit(curCodeParm)) { curCodeParm -= '0'; } else { - curCodeParm = 0; + curCodeParm = -1; } switch (curCode) { case 'c': // set text color - if (curCodeParm == 0) { + if (curCodeParm == -1) { _ports->_curPort->penClr = orgPenColor; } else { if (curCodeParm < _codeColorsCount) { @@ -117,8 +117,8 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1 } } break; - case 'f': - if (curCodeParm == 0) { + case 'f': // set text font + if (curCodeParm == -1) { SetFont(orgFontId); } else { if (curCodeParm < _codeFontsCount) { @@ -126,6 +126,9 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1 } } break; + case 'r': // reference?! + // Used in Pepper, no idea how this works out + break; } return textCodeSize; } diff --git a/engines/sci/graphics/view.cpp b/engines/sci/graphics/view.cpp index 1c865f6bcf..5f48574dcb 100644 --- a/engines/sci/graphics/view.cpp +++ b/engines/sci/graphics/view.cpp @@ -256,6 +256,8 @@ void GfxView::initData(GuiResourceId resourceId) { cel->scriptHeight = cel->height = READ_SCI11ENDIAN_UINT16(celData + 2); cel->displaceX = READ_SCI11ENDIAN_UINT16(celData + 4); cel->displaceY = READ_SCI11ENDIAN_UINT16(celData + 6); + if (cel->displaceY < 0) + cel->displaceY += 255; // sierra did this adjust in their sci1.1 getCelRect() - not sure about sci32 assert(cel->width && cel->height); diff --git a/engines/sci/module.mk b/engines/sci/module.mk index dae2807cc2..238209c446 100644 --- a/engines/sci/module.mk +++ b/engines/sci/module.mk @@ -30,6 +30,7 @@ MODULE_OBJS := \ engine/savegame.o \ engine/script.o \ engine/scriptdebug.o \ + engine/script_patches.o \ engine/selector.o \ engine/seg_manager.o \ engine/segment.o \ @@ -76,8 +77,7 @@ ifdef ENABLE_SCI32 MODULE_OBJS += \ graphics/frameout.o \ graphics/paint32.o \ - graphics/robot.o \ - video/vmd_decoder.o + graphics/robot.o endif # This module can be built as a plugin diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index 4bf26ff0bf..00f50714af 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -365,8 +365,6 @@ Common::SeekableReadStream *ResourceManager::getVolumeFile(ResourceSource *sourc return NULL; } -static uint32 resTypeToMacTag(ResourceType type); - void ResourceManager::loadResource(Resource *res) { res->_source->loadResource(this, res); } @@ -382,8 +380,14 @@ void PatchResourceSource::loadResource(ResourceManager *resMan, Resource *res) { } } +static Common::Array<uint32> resTypeToMacTags(ResourceType type); + void MacResourceForkResourceSource::loadResource(ResourceManager *resMan, Resource *res) { - Common::SeekableReadStream *stream = _macResMan->getResource(resTypeToMacTag(res->getType()), res->getNumber()); + Common::SeekableReadStream *stream = 0; + Common::Array<uint32> tagArray = resTypeToMacTags(res->getType()); + + for (uint32 i = 0; i < tagArray.size() && !stream; i++) + stream = _macResMan->getResource(tagArray[i], res->getNumber()); if (!stream) error("Could not get Mac resource fork resource: %s %d", getResourceTypeName(res->getType()), res->getNumber()); @@ -989,7 +993,7 @@ void ResourceManager::unlockResource(Resource *res) { assert(res); if (res->_status != kResStatusLocked) { - warning("[resMan] Attempt to unlock unlocked resource %s", res->_id.toString().c_str()); + debugC(kDebugLevelResMan, 2, "[resMan] Attempt to unlock unlocked resource %s", res->_id.toString().c_str()); return; } @@ -1588,12 +1592,14 @@ struct { { MKID_BE('SYN '), kResourceTypeSync } }; -static uint32 resTypeToMacTag(ResourceType type) { +static Common::Array<uint32> resTypeToMacTags(ResourceType type) { + Common::Array<uint32> tags; + for (uint32 i = 0; i < ARRAYSIZE(macResTagMap); i++) if (macResTagMap[i].type == type) - return macResTagMap[i].tag; + tags.push_back(macResTagMap[i].tag); - return 0; + return tags; } void MacResourceForkResourceSource::scanSource(ResourceManager *resMan) { @@ -2051,6 +2057,15 @@ void ResourceManager::detectSciVersion() { s_sciVersion = SCI_VERSION_1_1; return; } + // FIXME: this is really difficult, lsl1 spanish has map/vol sci1late + // and the only current detection difference is movecounttype which + // is increment here, but ignore for all the regular sci1late games + // the problem is, we dont have access to that detection till later + // so maybe (part of?) that detection should get moved in here + if ((g_sci->getGameId() == GID_LSL1) && (g_sci->getLanguage() == Common::ES_ESP)) { + s_sciVersion = SCI_VERSION_1_MIDDLE; + return; + } s_sciVersion = SCI_VERSION_1_LATE; return; case kResVersionSci11: diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index d0c578bd45..7a9a786121 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -211,8 +211,11 @@ Common::Error SciEngine::run() { _console = new Console(this); _kernel = new Kernel(_resMan, segMan); _features = new GameFeatures(segMan, _kernel); - // Only SCI0 and SCI01 games used a parser + // Only SCI0, SCI01 and SCI1 EGA games used a parser _vocabulary = (getSciVersion() <= SCI_VERSION_1_EGA) ? new Vocabulary(_resMan, false) : NULL; + // Also, XMAS1990 apparently had a parser too. Refer to http://forums.scummvm.org/viewtopic.php?t=9135 + if (getGameId() == GID_CHRISTMAS1990) + _vocabulary = new Vocabulary(_resMan, false); _audio = new AudioPlayer(_resMan); _gamestate = new EngineState(segMan); _eventMan = new EventManager(_resMan->detectFontExtended()); diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp index 6ec28a8b02..769df73365 100644 --- a/engines/sci/sound/midiparser_sci.cpp +++ b/engines/sci/sound/midiparser_sci.cpp @@ -445,7 +445,12 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) { } if (_signalSet) { _signalSet = false; - _pSnd->signal = _signalToSet; + if (!_pSnd->signal) { + _pSnd->signal = _signalToSet; + } else { + // signal already set and waiting for getting to scripts, queue new one + _pSnd->signalQueue.push_back(_signalToSet); + } debugC(4, kDebugLevelSound, "signal %04x", _signalToSet); } @@ -608,7 +613,12 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) { jumpToTick(_loopTick); } else { _pSnd->status = kSoundStopped; - _pSnd->signal = SIGNAL_OFFSET; + if (!_pSnd->signal) { + _pSnd->signal = SIGNAL_OFFSET; + } else { + // signal already set and waiting for getting to scripts, queue new one + _pSnd->signalQueue.push_back(SIGNAL_OFFSET); + } debugC(4, kDebugLevelSound, "signal EOT"); } diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp index 061f380ebc..fc1e56fcea 100644 --- a/engines/sci/sound/music.cpp +++ b/engines/sci/sound/music.cpp @@ -465,6 +465,17 @@ void SciMusic::soundKill(MusicEntry *pSnd) { } void SciMusic::soundPause(MusicEntry *pSnd) { + // SCI seems not to be pausing samples played back by kDoSound at all + // It only stops looping samples (actually doesn't loop them again before they are unpaused) + // Examples: Space Quest 1 death by acid drops (pause is called even specifically for the sample, see bug #3038048) + // Eco Quest 1 during the intro when going to the abort-menu + // In both cases sierra sci keeps playing + // Leisure Suit Larry 1 doll scene - it seems that pausing here actually just stops + // further looping from happening + // This is a somewhat bigger change, I'm leaving in the old code in here just in case + // I'm currently pausing looped sounds directly, non-looped sounds won't get paused + if ((pSnd->pStreamAud) && (!pSnd->pLoopStream)) + return; pSnd->pauseCounter++; if (pSnd->status != kSoundPlaying) return; @@ -627,6 +638,14 @@ MusicEntry::~MusicEntry() { } void MusicEntry::onTimer() { + if (!signal) { + if (!signalQueue.empty()) { + // no signal set, but signal in queue, set that one + signal = signalQueue[0]; + signalQueue.remove_at(0); + } + } + if (status != kSoundPlaying) return; diff --git a/engines/sci/sound/music.h b/engines/sci/sound/music.h index 37e3c30030..3cf600fcf3 100644 --- a/engines/sci/sound/music.h +++ b/engines/sci/sound/music.h @@ -51,6 +51,8 @@ enum SoundStatus { class MidiParser_SCI; class SegManager; +typedef Common::Array<uint16> SignalQueue; + class MusicEntry : public Common::Serializable { public: // Do not get these directly for the sound objects! @@ -90,6 +92,11 @@ public: MidiParser_SCI *pMidiParser; + // this is used for storing signals, when the current signal is not yet + // sent to the scripts. We shouldn't need to save it, this normally only + // happens in rare situations like lb1, knocking on the door in the attic + SignalQueue signalQueue; + // TODO: We need to revise how we store the different // audio stream objects we require. Audio::RewindableAudioStream *pStreamAud; diff --git a/engines/sci/video/vmd_decoder.cpp b/engines/sci/video/vmd_decoder.cpp deleted file mode 100644 index 680a449207..0000000000 --- a/engines/sci/video/vmd_decoder.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* 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. - * - * $URL$ - * $Id$ - * - */ - -#ifdef ENABLE_SCI32 - -#include "sci/video/vmd_decoder.h" - -#include "common/endian.h" -#include "common/util.h" -#include "common/stream.h" -#include "common/system.h" - -#include "graphics/dither.h" - -#include "sound/mixer.h" -#include "sound/audiostream.h" - -namespace Sci { - -VMDDecoder::VMDDecoder(Audio::Mixer *mixer) : _mixer(mixer) { - _vmdDecoder = new Graphics::Vmd(new Graphics::PaletteLUT(5, Graphics::PaletteLUT::kPaletteYUV)); - _surface = 0; - _dirtyPalette = false; - _fileStream = 0; -} - -VMDDecoder::~VMDDecoder() { - close(); -} - -bool VMDDecoder::load(Common::SeekableReadStream *stream) { - close(); - - if (!_vmdDecoder->load(stream)) - return false; - - _fileStream = stream; - - if (_vmdDecoder->getFeatures() & Graphics::CoktelVideo::kFeaturesPalette) - loadPaletteFromVMD(); - - if (_vmdDecoder->getFeatures() & Graphics::CoktelVideo::kFeaturesSound) - _vmdDecoder->enableSound(*_mixer); - - if (_vmdDecoder->hasExtraData()) - warning("This VMD video has extra embedded data, which is currently not handled"); - - _surface = new Graphics::Surface(); - _surface->create(_vmdDecoder->getWidth(), _vmdDecoder->getHeight(), 1); - _vmdDecoder->setVideoMemory((byte *)_surface->pixels, _surface->w, _surface->h); - return true; -} - -void VMDDecoder::close() { - if (!_fileStream) - return; - - _vmdDecoder->unload(); - - delete _fileStream; - _fileStream = 0; - - _surface->free(); - delete _surface; - _surface = 0; - - reset(); -} - -Graphics::Surface *VMDDecoder::decodeNextFrame() { - Graphics::CoktelVideo::State state = _vmdDecoder->nextFrame(); - - if (state.flags & Graphics::CoktelVideo::kStatePalette) - loadPaletteFromVMD(); - - if (_curFrame == -1) - _startTime = g_system->getMillis(); - - _curFrame++; - return _surface; -} - -void VMDDecoder::loadPaletteFromVMD() { - const byte *pal = _vmdDecoder->getPalette(); - - for (int i = 0; i < 256; i++) { - _palette[i * 3 + 0] = pal[i * 3 + 0] << 2; - _palette[i * 3 + 1] = pal[i * 3 + 1] << 2; - _palette[i * 3 + 2] = pal[i * 3 + 2] << 2; - } - - _dirtyPalette = true; -} - -} // End of namespace Graphics - -#endif diff --git a/engines/sci/video/vmd_decoder.h b/engines/sci/video/vmd_decoder.h deleted file mode 100644 index e79064b1f7..0000000000 --- a/engines/sci/video/vmd_decoder.h +++ /dev/null @@ -1,89 +0,0 @@ -/* 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. - * - * $URL$ - * $Id$ - * - */ - -#ifdef ENABLE_SCI32 - -#ifndef GRAPHICS_VIDEO_VMD_DECODER_H -#define GRAPHICS_VIDEO_VMD_DECODER_H - -#include "graphics/video/coktelvideo/coktelvideo.h" -#include "graphics/video/video_decoder.h" -#include "sound/mixer.h" - -namespace Sci { - -/** - * Wrapper for the Coktel Vision VMD video decoder - * for videos by Coktel Vision/Sierra. - * - * VMD videos were used in the following SCI21/SCI3 - * adventure games, developed by Sierra: - * - Gabriel Knight 2: The Beast Within - * - Leisure Suit Larry 7 - * - Lighthouse - * - Phantasmagoria 1 - * - RAMA - * - Shivers - * - Shivers 2: Harvest of Souls - * - Torin's Passage - */ -class VMDDecoder : public Graphics::FixedRateVideoDecoder { -public: - VMDDecoder(Audio::Mixer *mixer); - virtual ~VMDDecoder(); - - uint32 getFrameWaitTime(); - - bool load(Common::SeekableReadStream *stream); - void close(); - - bool isVideoLoaded() const { return _fileStream != 0; } - uint16 getWidth() const { return _surface->w; } - uint16 getHeight() const { return _surface->h; } - uint32 getFrameCount() const { return _vmdDecoder->getFramesCount(); } - Graphics::Surface *decodeNextFrame(); - Graphics::PixelFormat getPixelFormat() const { return Graphics::PixelFormat::createFormatCLUT8(); } - byte *getPalette() { _dirtyPalette = false; return _palette; } - bool hasDirtyPalette() const { return _dirtyPalette; } - -protected: - Common::Rational getFrameRate() const { return _vmdDecoder->getFrameRate(); } - -private: - Graphics::Vmd *_vmdDecoder; - Audio::Mixer *_mixer; - Graphics::Surface *_surface; - Common::SeekableReadStream *_fileStream; - byte _palette[256 * 3]; - bool _dirtyPalette; - - void loadPaletteFromVMD(); -}; - -} // End of namespace Graphics - -#endif - -#endif diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h index d8987c816f..f275b1c93f 100644 --- a/engines/scumm/detection_tables.h +++ b/engines/scumm/detection_tables.h @@ -207,37 +207,37 @@ using Common::GUIO_NOSPEECH; // only a single unique variant. This is used to help the detector quickly // decide whether it has to worry about distinguishing multiple variants or not. static const GameSettings gameVariantsTable[] = { - {"maniac", "Apple II", 0, GID_MANIAC, 0, 0, MDT_PCSPK, 0, Common::kPlatformApple2GS, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"maniac", "C64", 0, GID_MANIAC, 0, 0, MDT_PCSPK, 0, Common::kPlatformC64, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"maniac", "V1", "v1", GID_MANIAC, 1, 0, MDT_PCSPK, 0, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"maniac", "V1 Demo", "v1", GID_MANIAC, 1, 0, MDT_PCSPK, GF_DEMO, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"maniac", "Apple II", 0, GID_MANIAC, 0, 0, MDT_APPLEIIGS, 0, Common::kPlatformApple2GS, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"maniac", "C64", 0, GID_MANIAC, 0, 0, MDT_C64, 0, Common::kPlatformC64, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"maniac", "V1", "v1", GID_MANIAC, 1, 0, MDT_PCSPK | MDT_PCJR, 0, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"maniac", "V1 Demo", "v1", GID_MANIAC, 1, 0, MDT_PCSPK | MDT_PCJR, GF_DEMO, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, {"maniac", "NES", 0, GID_MANIAC, 1, 0, MDT_NONE, 0, Common::kPlatformNES, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"maniac", "V2", "v2", GID_MANIAC, 2, 0, MDT_PCSPK, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"maniac", "V2 Demo", "v2", GID_MANIAC, 2, 0, MDT_PCSPK, GF_DEMO, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"maniac", "V2", "v2", GID_MANIAC, 2, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"maniac", "V2 Demo", "v2", GID_MANIAC, 2, 0, MDT_PCSPK | MDT_PCJR, GF_DEMO, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"zak", "V1", "v1", GID_ZAK, 1, 0, MDT_PCSPK, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"zak", "V2", "v2", GID_ZAK, 2, 0, MDT_PCSPK, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"zak", "V1", "v1", GID_ZAK, 1, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"zak", "V2", "v2", GID_ZAK, 2, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, {"zak", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"indy3", "EGA", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_CMS | MDT_ADLIB, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"indy3", "No AdLib", "ega", GID_INDY3, 3, 0, MDT_PCSPK, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"indy3", "VGA", "vga", GID_INDY3, 3, 0, MDT_PCSPK | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"indy3", "EGA", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"indy3", "No AdLib", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"indy3", "VGA", "vga", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, {"indy3", "FM-TOWNS", 0, GID_INDY3, 3, 0, MDT_TOWNS, GF_OLD256 | GF_FEW_LOCALS | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"loom", "EGA", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NOSPEECH}, - {"loom", "No AdLib", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_CMS, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"loom", "EGA", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NOSPEECH}, + {"loom", "No AdLib", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, #ifdef USE_RGB_COLOR {"loom", "PC-Engine", 0, GID_LOOM, 3, 0, MDT_NONE, GF_AUDIOTRACKS | GF_OLD256 | GF_16BIT_COLOR, Common::kPlatformPCEngine, GUIO_NOSPEECH | GUIO_NOMIDI}, #endif {"loom", "FM-TOWNS", 0, GID_LOOM, 3, 0, MDT_TOWNS, GF_AUDIOTRACKS | GF_OLD256, Common::kPlatformFMTowns, GUIO_NOSPEECH | GUIO_NOMIDI}, {"loom", "VGA", "vga", GID_LOOM, 4, 0, MDT_NONE, GF_AUDIOTRACKS, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"pass", 0, 0, GID_PASS, 4, 0, MDT_PCSPK | MDT_ADLIB, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"pass", 0, 0, GID_PASS, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_ADLIB, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"monkey", "VGA", "vga", GID_MONKEY_VGA, 4, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NOSPEECH}, - {"monkey", "EGA", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH}, - {"monkey", "No AdLib", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK, GF_16COLOR, Common::kPlatformAtariST, GUIO_NOSPEECH | GUIO_NOMIDI}, - {"monkey", "Demo", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_ADLIB, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"monkey", "VGA", "vga", GID_MONKEY_VGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NOSPEECH}, + {"monkey", "EGA", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH}, + {"monkey", "No AdLib", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR, GF_16COLOR, Common::kPlatformAtariST, GUIO_NOSPEECH | GUIO_NOMIDI}, + {"monkey", "Demo", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_ADLIB, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, {"monkey", "CD", 0, GID_MONKEY, 5, 0, MDT_ADLIB, GF_AUDIOTRACKS, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, {"monkey", "FM-TOWNS", 0, GID_MONKEY, 5, 0, MDT_ADLIB, GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO_NOSPEECH | GUIO_NOMIDI}, {"monkey", "SEGA", 0, GID_MONKEY, 5, 0, MDT_NONE, GF_AUDIOTRACKS, Common::kPlatformSegaCD, GUIO_NOSPEECH | GUIO_NOMIDI}, diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index be9f69ffb5..29f0c025d2 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -708,7 +708,7 @@ void ScummEngine::writeVar(uint var, int value) { error("Illegal varbits (w)"); } -void ScummEngine::getResultPos() { +void ScummEngine_v5::getResultPos() { int a; _resultVarNumber = fetchScriptWord(); @@ -723,7 +723,7 @@ void ScummEngine::getResultPos() { } } -void ScummEngine::setResult(int value) { +void ScummEngine_v5::setResult(int value) { writeVar(_resultVarNumber, value); } diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index ab7be02c48..50901b8f9e 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -214,7 +214,6 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _opcode = 0; vm.numNestedScripts = 0; _lastCodePtr = NULL; - _resultVarNumber = 0; _scummStackPos = 0; memset(_vmStack, 0, sizeof(_vmStack)); _fileOffset = 0; @@ -631,6 +630,10 @@ ScummEngine_v5::ScummEngine_v5(OSystem *syst, const DetectorResult &dr) _flashlight.xStrips = 7; _flashlight.yStrips = 7; _flashlight.buffer = NULL; + + memset(_saveLoadVarsFilename, 0, sizeof(_saveLoadVarsFilename)); + + _resultVarNumber = 0; } ScummEngine_v4::ScummEngine_v4(OSystem *syst, const DetectorResult &dr) @@ -1642,9 +1645,11 @@ void ScummEngine::setupMusic(int midi) { _musicType = MDT_NONE; break; case MT_PCSPK: - case MT_PCJR: _musicType = MDT_PCSPK; break; + case MT_PCJR: + _musicType = MDT_PCJR; + break; //case MT_CMS: #if 1 _musicType = MDT_ADLIB; @@ -1658,6 +1663,12 @@ void ScummEngine::setupMusic(int midi) { case MT_ADLIB: _musicType = MDT_ADLIB; break; + case MT_C64: + _musicType = MDT_C64; + break; + case MT_APPLEIIGS: + _musicType = MDT_APPLEIIGS; + break; default: _musicType = MDT_MIDI; break; @@ -1706,7 +1717,7 @@ void ScummEngine::setupMusic(int midi) { * automatically when samples need to be generated */ if (!_mixer->isReady()) { warning("Sound mixer initialization failed"); - if (_musicType == MDT_ADLIB || _musicType == MDT_PCSPK || _musicType == MDT_CMS) { + if (_musicType == MDT_ADLIB || _musicType == MDT_PCSPK || _musicType == MDT_PCJR || _musicType == MDT_CMS) { dev = 0; _musicType = MDT_NONE; warning("MIDI driver depends on sound mixer, switching to null MIDI driver"); @@ -1740,7 +1751,7 @@ void ScummEngine::setupMusic(int midi) { _musicEngine = new Player_V1(this, _mixer, MidiDriver::getMusicType(dev) != MT_PCSPK); } else if (_game.version <= 2) { _musicEngine = new Player_V2(this, _mixer, MidiDriver::getMusicType(dev) != MT_PCSPK); - } else if ((_musicType == MDT_PCSPK) && (_game.version > 2 && _game.version <= 4)) { + } else if ((_musicType == MDT_PCSPK || _musicType == MDT_PCJR) && (_game.version > 2 && _game.version <= 4)) { _musicEngine = new Player_V2(this, _mixer, MidiDriver::getMusicType(dev) != MT_PCSPK); } else if (_musicType == MDT_CMS) { _musicEngine = new Player_V2CMS(this, _mixer); diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 42322ba5a2..8c3df21238 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -689,7 +689,7 @@ protected: const byte *_scriptPointer, *_scriptOrgPointer; byte _opcode, _currentScript; const byte * const *_lastCodePtr; - int _resultVarNumber, _scummStackPos; + int _scummStackPos; int _vmStack[150]; OpcodeEntry _opcodes[256]; @@ -745,8 +745,6 @@ protected: int fetchScriptDWordSigned(); void ignoreScriptWord() { fetchScriptWord(); } void ignoreScriptByte() { fetchScriptByte(); } - virtual void getResultPos(); - void setResult(int result); void push(int a); int pop(); virtual int readVar(uint var); diff --git a/engines/scumm/scumm_v5.h b/engines/scumm/scumm_v5.h index 2580384fd8..71222470f4 100644 --- a/engines/scumm/scumm_v5.h +++ b/engines/scumm/scumm_v5.h @@ -50,6 +50,8 @@ protected: PARAM_3 = 0x20 }; + int _resultVarNumber; + public: ScummEngine_v5(OSystem *syst, const DetectorResult &dr); @@ -77,6 +79,9 @@ protected: virtual int getVarOrDirectByte(byte mask); virtual int getVarOrDirectWord(byte mask); + virtual void getResultPos(); + void setResult(int result); + virtual void animateCursor(); virtual void setBuiltinCursor(int index); diff --git a/engines/scumm/sound.cpp b/engines/scumm/sound.cpp index 840f8fc779..99ab1b23b7 100644 --- a/engines/scumm/sound.cpp +++ b/engines/scumm/sound.cpp @@ -169,7 +169,18 @@ void Sound::playSound(int soundID) { static const char tracks[20] = {3, 4, 5, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 19, 20, 21}; _currentCDSound = soundID; - playCDTrack(tracks[soundID - 13], 1, 0, 0); + + // The original game had hard-coded lengths for all + // tracks, but this one track is the only one (as far + // as we know) where this actually matters. See bug + // #3024173 - LOOM-PCE: Music stops prematurely. + + int track = tracks[soundID - 13]; + if (track == 6) { + playCDTrack(track, 1, 0, 260); + } else { + playCDTrack(track, 1, 0, 0); + } } else { if (_vm->_musicEngine) { _vm->_musicEngine->startSound(soundID); @@ -1133,7 +1144,7 @@ int ScummEngine::readSoundResource(int idx) { switch (basetag) { case MKID_BE('MIDI'): case MKID_BE('iMUS'): - if (_musicType != MDT_PCSPK) { + if (_musicType != MDT_PCSPK && _musicType != MDT_PCJR) { _fileHandle->seek(-8, SEEK_CUR); _fileHandle->read(_res->createResource(rtSound, idx, total_size + 8), total_size + 8); return 1; @@ -1176,12 +1187,12 @@ int ScummEngine::readSoundResource(int idx) { break; case MKID_BE('SPK '): pri = -1; -// if (_musicType == MDT_PCSPK) +// if (_musicType == MDT_PCSPK || _musicType == MDT_PCJR) // pri = 11; break; } - if ((_musicType == MDT_PCSPK || _musicType == MDT_CMS) && pri != 11) + if ((_musicType == MDT_PCSPK || _musicType == MDT_PCJR || _musicType == MDT_CMS) && pri != 11) pri = -1; debugC(DEBUG_RESOURCE, " tag: %s, total_size=%d, pri=%d", tag2str(tag), size, pri); @@ -2113,7 +2124,7 @@ int ScummEngine::readSoundResourceSmallHeader(int idx) { } } - if ((_musicType == MDT_PCSPK) && wa_offs != 0) { + if ((_musicType == MDT_PCSPK || _musicType == MDT_PCJR) && wa_offs != 0) { if (_game.features & GF_OLD_BUNDLE) { _fileHandle->seek(wa_offs, SEEK_SET); _fileHandle->read(_res->createResource(rtSound, idx, wa_size), wa_size); diff --git a/engines/scumm/vars.cpp b/engines/scumm/vars.cpp index cacfd0101b..d1d3ed63a4 100644 --- a/engines/scumm/vars.cpp +++ b/engines/scumm/vars.cpp @@ -727,6 +727,9 @@ void ScummEngine::resetScummVars() { case MDT_PCSPK: VAR(VAR_SOUNDCARD) = 0; break; + case MDT_PCJR: + VAR(VAR_SOUNDCARD) = 1; + break; case MDT_CMS: VAR(VAR_SOUNDCARD) = 2; break; diff --git a/graphics/module.mk b/graphics/module.mk index 75e3919370..445001ae6b 100644 --- a/graphics/module.mk +++ b/graphics/module.mk @@ -23,6 +23,7 @@ MODULE_OBJS := \ VectorRenderer.o \ VectorRendererSpec.o \ video/avi_decoder.o \ + video/coktel_decoder.o \ video/dxa_decoder.o \ video/flic_decoder.o \ video/mpeg_player.o \ @@ -37,8 +38,7 @@ MODULE_OBJS := \ video/codecs/qtrle.o \ video/codecs/rpza.o \ video/codecs/smc.o \ - video/coktelvideo/indeo3.o \ - video/coktelvideo/coktelvideo.o + video/codecs/indeo3.o ifdef USE_SCALERS MODULE_OBJS += \ diff --git a/graphics/video/avi_decoder.cpp b/graphics/video/avi_decoder.cpp index 06589d99b0..4973cb3eb0 100644 --- a/graphics/video/avi_decoder.cpp +++ b/graphics/video/avi_decoder.cpp @@ -38,6 +38,7 @@ #include "graphics/video/codecs/cinepak.h" #include "graphics/video/codecs/msvideo1.h" #include "graphics/video/codecs/msrle.h" +#include "graphics/video/codecs/indeo3.h" namespace Graphics { @@ -387,10 +388,14 @@ Codec *AviDecoder::createCodec() { case ID_MSVC: case ID_WHAM: return new MSVideo1Decoder(_bmInfo.width, _bmInfo.height, _bmInfo.bitCount); - case ID_RLE : + case ID_RLE: return new MSRLEDecoder(_bmInfo.width, _bmInfo.height, _bmInfo.bitCount); case ID_CVID: return new CinepakDecoder(); +#ifdef USE_INDEO3 + case ID_IV32: + return new Indeo3Decoder(_bmInfo.width, _bmInfo.height); +#endif default: warning ("Unknown/Unhandled compression format \'%s\'", tag2str(_vidsHeader.streamHandler)); } diff --git a/graphics/video/codecs/cinepak.cpp b/graphics/video/codecs/cinepak.cpp index 9892f9d966..a14eaf9acf 100644 --- a/graphics/video/codecs/cinepak.cpp +++ b/graphics/video/codecs/cinepak.cpp @@ -73,14 +73,12 @@ Surface *CinepakDecoder::decodeImage(Common::SeekableReadStream *stream) { debug (4, "Cinepak Frame: Width = %d, Height = %d, Strip Count = %d", _curFrame.width, _curFrame.height, _curFrame.stripCount); -#if 0 // Borrowed from FFMPEG. This should cut out the extra data Cinepak for Sega has (which is useless). // The theory behind this is that this is here to confuse standard Cinepak decoders. But, we won't let that happen! ;) if (_curFrame.length != (uint32)stream->size()) { if (stream->readUint16BE() == 0xFE00) stream->readUint32BE(); } -#endif if (!_curFrame.surface) { _curFrame.surface = new Surface(); @@ -105,8 +103,6 @@ Surface *CinepakDecoder::decodeImage(Common::SeekableReadStream *stream) { _curFrame.strips[i].rect.bottom = _y + stream->readUint16BE(); _curFrame.strips[i].rect.right = _curFrame.width; stream->readUint16BE(); // Ignore, substitute with our own - //printf ("Left = %d, Top = %d, Right = %d, Bottom = %d\n", _curFrame.strips[i].rect.left, _curFrame.strips[i].rect.top, _curFrame.strips[i].rect.right, _curFrame.strips[i].rect.bottom); - // Sanity check. Because Cinepak is based on 4x4 blocks, the width and height of each strip needs to be divisible by 4. assert(!(_curFrame.strips[i].rect.width() % 4) && !(_curFrame.strips[i].rect.height() % 4)); @@ -184,10 +180,9 @@ void CinepakDecoder::loadCodebook(Common::SeekableReadStream *stream, uint16 str codebook[i].u = stream->readByte() + 128; codebook[i].v = stream->readByte() + 128; } else { - /* this codebook type indicates either greyscale or - * palettized video; if palettized, U & V components will - * not be used so it is safe to set them to 128 for the - * benefit of greyscale rendering in YUV420P */ + // This codebook type indicates either greyscale or + // palettized video. We don't handle palettized video + // currently. codebook[i].u = 128; codebook[i].v = 128; } diff --git a/graphics/video/coktelvideo/indeo3.cpp b/graphics/video/codecs/indeo3.cpp index 983705ab9c..f59ae81e81 100644 --- a/graphics/video/coktelvideo/indeo3.cpp +++ b/graphics/video/codecs/indeo3.cpp @@ -38,33 +38,38 @@ #include "common/frac.h" #include "common/file.h" -#include "graphics/dither.h" -#include "graphics/video/coktelvideo/indeo3.h" +#include "graphics/conversion.h" + +#include "graphics/video/codecs/indeo3.h" namespace Graphics { -Indeo3::Indeo3(int16 width, int16 height, Graphics::PaletteLUT *palLUT) { - assert((width > 0) && (height > 0)); +Indeo3Decoder::Indeo3Decoder(uint16 width, uint16 height) : _ModPred(0), _corrector_type(0) { + _iv_frame[0].the_buf = 0; + _iv_frame[1].the_buf = 0; - _width = width; - _height = height; - _palLUT = palLUT; + _pixelFormat = g_system->getScreenFormat(); - _ditherSL = 0; - setDither(kDitherSierraLight); + _surface = new Surface; + _surface->create(width, height, _pixelFormat.bytesPerPixel); buildModPred(); allocFrames(); } -Indeo3::~Indeo3() { +Indeo3Decoder::~Indeo3Decoder() { + delete _surface; + delete[] _iv_frame[0].the_buf; delete[] _ModPred; delete[] _corrector_type; - delete _ditherSL; } -bool Indeo3::isIndeo3(byte *data, uint32 dataLen) { +PixelFormat Indeo3Decoder::getPixelFormat() const { + return _pixelFormat; +} + +bool Indeo3Decoder::isIndeo3(byte *data, uint32 dataLen) { // No data, no Indeo 3 if (!data) return false; @@ -90,23 +95,7 @@ bool Indeo3::isIndeo3(byte *data, uint32 dataLen) { return true; } -void Indeo3::setDither(DitherAlgorithm dither) { - delete _ditherSL; - _ditherSL = 0; - - _dither = dither; - - switch (dither) { - case kDitherSierraLight: - _ditherSL = new Graphics::SierraLight(_width, _palLUT); - break; - - default: - return; - } -} - -void Indeo3::buildModPred() { +void Indeo3Decoder::buildModPred() { _ModPred = new byte[8 * 128]; for (int i = 0; i < 128; i++) { @@ -133,12 +122,12 @@ void Indeo3::buildModPred() { } } -void Indeo3::allocFrames() { - int32 luma_width = (_width + 3) & (~3); - int32 luma_height = (_height + 3) & (~3); +void Indeo3Decoder::allocFrames() { + int32 luma_width = (_surface->w + 3) & (~3); + int32 luma_height = (_surface->h + 3) & (~3); - int32 chroma_width = ((luma_width >> 2) + 3) & (~3); - int32 chroma_height = ((luma_height>> 2) + 3) & (~3); + int32 chroma_width = ((luma_width >> 2) + 3) & (~3); + int32 chroma_height = ((luma_height >> 2) + 3) & (~3); int32 luma_pixels = luma_width * luma_height; int32 chroma_pixels = chroma_width * chroma_height; @@ -184,21 +173,23 @@ void Indeo3::allocFrames() { } } -bool Indeo3::decompressFrame(byte *inData, uint32 dataLen, - byte *outData, uint16 width, uint16 height) { +Surface *Indeo3Decoder::decodeImage(Common::SeekableReadStream *stream) { + uint32 dataLen = stream->size(); + + byte *inData = new byte[dataLen]; + + if (stream->read(inData, dataLen) != dataLen) + return 0; // Not Indeo 3? Fail if (!isIndeo3(inData, dataLen)) - return false; - - assert(outData); - assert(_palLUT); + return 0; uint32 frameDataLen = READ_LE_UINT32(inData + 12); // Less data than the frame should have? Fail if (dataLen < (frameDataLen - 16)) - return false; + return 0; Common::MemoryReadStream frame(inData, dataLen); @@ -219,7 +210,7 @@ bool Indeo3::decompressFrame(byte *inData, uint32 dataLen, } if (flags3 == 0x80) - return true; + return _surface; frame.skip(3); @@ -262,85 +253,40 @@ bool Indeo3::decompressFrame(byte *inData, uint32 dataLen, decodeChunk(_cur_frame->Ubuf, _ref_frame->Ubuf, chromaWidth, chromaHeight, buf_pos + offs * 2, flags2, hdr_pos, buf_pos, MIN<int>(chromaWidth, 40)); - BlitState blitState; - - blitState.widthY = _cur_frame->y_w; - blitState.widthUV = _cur_frame->uv_w; - blitState.uwidthUV = chromaWidth; - blitState.uwidthOut = fWidth; - blitState.heightY = _cur_frame->y_h; - blitState.heightUV = _cur_frame->uv_h; - blitState.uheightUV = chromaHeight; - blitState.uheightOut = fHeight; - blitState.scaleWYUV = blitState.widthY / blitState.widthUV; - blitState.scaleHYUV = blitState.heightY / blitState.heightUV; - blitState.scaleWYOut = blitState.widthY / blitState.uwidthOut; - blitState.scaleHYOut = blitState.heightY / blitState.uheightOut; - blitState.lineWidthOut = blitState.scaleWYOut * blitState.uwidthOut; - blitState.lineHeightOut = blitState.scaleHYOut * blitState.uheightOut; - blitState.bufY = _cur_frame->Ybuf; - blitState.bufU = _cur_frame->Ubuf; - blitState.bufV = _cur_frame->Vbuf; - blitState.bufOut = outData; - - blitFrame(blitState); + // Blit the frame onto the surface + const byte *srcY = _cur_frame->Ybuf; + const byte *srcU = _cur_frame->Ubuf; + const byte *srcV = _cur_frame->Vbuf; + byte *dest = (byte *)_surface->pixels; + for (uint32 y = 0; y < fHeight; y++) { + byte *rowDest = dest; - return true; -} - -void Indeo3::blitFrame(BlitState &s) { - if (_ditherSL) - _ditherSL->newFrame(); - - for (s.curY = 0; s.curY < s.uheightOut; s.curY++) { - if (_dither == kDitherNone) - blitLine(s); - else - blitLineDither(s); - } -} + for (uint32 x = 0; x < fWidth; x++, rowDest += _surface->bytesPerPixel) { + const byte cY = srcY[x]; + const byte cU = srcU[x >> 2]; + const byte cV = srcV[x >> 2]; -void Indeo3::blitLine(BlitState &s) { - byte *lineU = s.bufU + (s.curY >> 2) * s.uwidthUV; - byte *lineV = s.bufV + (s.curY >> 2) * s.uwidthUV; + byte r = 0, g = 0, b = 0; + YUV2RGB(cY, cU, cV, r, g, b); - for (s.curX = 0; s.curX < s.uwidthOut; s.curX++) { - byte dataY = *s.bufY++; - byte dataU = lineU[s.curX >> 2]; - byte dataV = lineV[s.curX >> 2]; - - for (int n = 0; n < s.scaleWYOut; n++) - *s.bufOut++ = _palLUT->findNearest(dataY, dataU, dataV); - } + const uint32 color = _pixelFormat.RGBToColor(r, g, b); - byte *lineDest = s.bufOut - s.lineWidthOut; - for (int n = 1; n < s.scaleHYOut; n++) { - memcpy(s.bufOut, lineDest, s.lineWidthOut); - s.bufOut += s.lineWidthOut; - } -} - -void Indeo3::blitLineDither(BlitState &s) { - byte *lineU = s.bufU + (s.curY >> 2) * s.uwidthUV; - byte *lineV = s.bufV + (s.curY >> 2) * s.uwidthUV; - - for (uint16 i = 0; i < s.scaleHYOut; i++) { - byte *bufY = s.bufY; - - for (s.curX = 0; s.curX < s.uwidthOut; s.curX++) { - byte dataY = *bufY++; - byte dataU = lineU[s.curX >> 2]; - byte dataV = lineV[s.curX >> 2]; + if (_surface->bytesPerPixel == 1) + *((uint8 *)rowDest) = (uint8)color; + else if (_surface->bytesPerPixel == 2) + *((uint16 *)rowDest) = (uint16)color; + } - for (int n = 0; n < s.scaleWYOut; n++) - *s.bufOut++ = _ditherSL->dither(dataY, dataU, dataV, s.curX * s.scaleWYOut + n); + dest += _surface->pitch; + srcY += fWidth; + if ((y & 3) == 3) { + srcU += fWidth >> 2; + srcV += fWidth >> 2; } - - _ditherSL->nextLine(); } - s.bufY += s.uwidthOut; + return _surface; } typedef struct { @@ -397,7 +343,7 @@ typedef struct { } \ lp2 = 4; -void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height, +void Indeo3Decoder::decodeChunk(byte *cur, byte *ref, int width, int height, const byte *buf1, uint32 fflags2, const byte *hdr, const byte *buf2, int min_width_160) { @@ -729,7 +675,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height, break; case 9: - warning("Indeo3::decodeChunk: Untested (1)"); + warning("Indeo3Decoder::decodeChunk: Untested (1)"); lv1 = *buf1++; lv = (lv1 & 0x7F) << 1; lv += (lv << 8); @@ -906,7 +852,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height, break; case 9: - warning("Indeo3::decodeChunk: Untested (2)"); + warning("Indeo3Decoder::decodeChunk: Untested (2)"); lv1 = *buf1; lv = (lv1 & 0x7F) << 1; lv += (lv << 8); @@ -1002,7 +948,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height, break; case 9: - warning("Indeo3::decodeChunk: Untested (3)"); + warning("Indeo3Decoder::decodeChunk: Untested (3)"); lv1 = *buf1; lv = (lv1 & 0x7F) << 1; lv += (lv << 8); @@ -1099,7 +1045,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height, break; case 9: - warning("Indeo3::decodeChunk: Untested (4)"); + warning("Indeo3Decoder::decodeChunk: Untested (4)"); lv1 = *buf1++; lv = (lv1 & 0x7F) << 1; lv += (lv << 8); @@ -1127,7 +1073,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height, // FIXME: I've seen case 13 happen in Urban // Runner. Perhaps it uses a more recent form of // Indeo 3? There appears to have been several. - warning("Indeo3::decodeChunk: Unknown case %d", k); + warning("Indeo3Decoder::decodeChunk: Unknown case %d", k); return; } } @@ -1157,15 +1103,15 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height, // static data -const int Indeo3::_corrector_type_0[24] = { +const int Indeo3Decoder::_corrector_type_0[24] = { 195, 159, 133, 115, 101, 93, 87, 77, 195, 159, 133, 115, 101, 93, 87, 77, 128, 79, 79, 79, 79, 79, 79, 79 }; -const int Indeo3::_corrector_type_2[8] = { 9, 7, 6, 8, 5, 4, 3, 2 }; +const int Indeo3Decoder::_corrector_type_2[8] = { 9, 7, 6, 8, 5, 4, 3, 2 }; -const uint32 Indeo3::correction[] = { +const uint32 Indeo3Decoder::correction[] = { 0x00000000, 0x00000202, 0xfffffdfe, 0x000002ff, 0xfffffd01, 0xffffff03, 0x000000fd, 0x00000404, 0xfffffbfc, 0x00000501, 0xfffffaff, 0x00000105, 0xfffffefb, 0x000003fc, 0xfffffc04, 0x000005fe, 0xfffffa02, 0xfffffe06, 0x000001fa, 0x00000904, 0xfffff6fc, 0x00000409, 0xfffffbf7, 0x00000909, @@ -1937,7 +1883,7 @@ const uint32 Indeo3::correction[] = { }; -const uint32 Indeo3::correctionloworder[] = { +const uint32 Indeo3Decoder::correctionloworder[] = { 0x00000000, 0x02020202, 0xfdfdfdfe, 0x0302feff, 0xfcfd0101, 0xfeff0303, 0x0100fcfd, 0x04040404, 0xfbfbfbfc, 0x05050101, 0xfafafeff, 0x01010505, 0xfefefafb, 0x0403fbfc, 0xfbfc0404, 0x0605fdfe, 0xf9fa0202, 0xfdfe0606, 0x0201f9fa, 0x09090404, 0xf6f6fbfc, 0x04040909, 0xfbfbf6f7, 0x09090909, @@ -2709,7 +2655,7 @@ const uint32 Indeo3::correctionloworder[] = { }; -const uint32 Indeo3::correctionhighorder[] = { +const uint32 Indeo3Decoder::correctionhighorder[] = { 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, diff --git a/graphics/video/coktelvideo/indeo3.h b/graphics/video/codecs/indeo3.h index af6ef26449..8d50b74b1e 100644 --- a/graphics/video/coktelvideo/indeo3.h +++ b/graphics/video/codecs/indeo3.h @@ -34,36 +34,28 @@ * written, produced, and directed by Alan Smithee */ -#ifndef GRAPHICS_VIDEO_INDEO3_H -#define GRAPHICS_VIDEO_INDEO3_H +#ifndef GRAPHICS_INDEO3_H +#define GRAPHICS_INDEO3_H -#include "common/stream.h" +#include "graphics/video/codecs/codec.h" namespace Graphics { - class PaletteLUT; - class SierraLight; -} -namespace Graphics { - -class Indeo3 { +class Indeo3Decoder : public Codec { public: - enum DitherAlgorithm { - kDitherNone = 0, - kDitherSierraLight - }; + Indeo3Decoder(uint16 width, uint16 height); + ~Indeo3Decoder(); - Indeo3(int16 width, int16 height, Graphics::PaletteLUT *palLUT); - ~Indeo3(); + Surface *decodeImage(Common::SeekableReadStream *stream); + PixelFormat getPixelFormat() const; static bool isIndeo3(byte *data, uint32 dataLen); - void setDither(DitherAlgorithm dither); +private: + Surface *_surface; - bool decompressFrame(byte *inData, uint32 dataLen, - byte *outData, uint16 width, uint16 height); + PixelFormat _pixelFormat; -private: static const int _corrector_type_0[24]; static const int _corrector_type_2[8]; static const uint32 correction[]; @@ -80,8 +72,6 @@ private: uint16 uv_w, uv_h; }; - int16 _width; - int16 _height; YUVBufs _iv_frame[2]; YUVBufs *_cur_frame; YUVBufs *_ref_frame; @@ -89,38 +79,16 @@ private: byte *_ModPred; uint16 *_corrector_type; - Graphics::PaletteLUT *_palLUT; - - DitherAlgorithm _dither; - Graphics::SierraLight *_ditherSL; - - struct BlitState { - uint32 curX, curY; - uint16 widthY, widthUV; - uint16 heightY, heightUV; - uint16 uwidthUV, uwidthOut; - uint16 uheightUV, uheightOut; - uint16 scaleWYUV, scaleWYOut; - uint16 scaleHYUV, scaleHYOut; - uint16 lineWidthOut, lineHeightOut; - byte *bufY, *bufU, *bufV, *bufOut; - }; - void buildModPred(); void allocFrames(); void decodeChunk(byte *cur, byte *ref, int width, int height, const byte *buf1, uint32 fflags2, const byte *hdr, const byte *buf2, int min_width_160); - - void blitFrame(BlitState &s); - - void blitLine(BlitState &s); - void blitLineDither(BlitState &s); }; } // End of namespace Graphics -#endif // GRAPHICS_VIDEO_INDEO3_H +#endif // GRAPHICS_INDEO3_H #endif // USE_INDEO3 diff --git a/graphics/video/coktel_decoder.cpp b/graphics/video/coktel_decoder.cpp new file mode 100644 index 0000000000..0709288091 --- /dev/null +++ b/graphics/video/coktel_decoder.cpp @@ -0,0 +1,2469 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +#include "graphics/video/coktel_decoder.h" +#include "graphics/video/codecs/codec.h" +#include "graphics/video/codecs/indeo3.h" + +#ifdef GRAPHICS_VIDEO_COKTELDECODER_H + +#include "sound/audiostream.h" +#include "sound/decoders/raw.h" + +static const uint32 kVideoCodecIndeo3 = MKID_BE('iv32'); + +namespace Graphics { + +CoktelDecoder::State::State() : flags(0), speechId(0) { +} + + +CoktelDecoder::CoktelDecoder(Audio::Mixer *mixer, Audio::Mixer::SoundType soundType) : + _mixer(mixer), _soundType(soundType), _width(0), _height(0), _x(0), _y(0), + _defaultX(0), _defaultY(0), _features(0), _frameCount(0), _paletteDirty(false), + _ownSurface(true), _frameRate(12), _hasSound(false), _soundEnabled(false), + _soundStage(kSoundNone), _audioStream(0) { + + assert(_mixer); + + memset(_palette, 0, 768); +} + +CoktelDecoder::~CoktelDecoder() { +} + +bool CoktelDecoder::evaluateSeekFrame(int32 &frame, int whence) const { + if (!isVideoLoaded()) + // Nothing to do + return false; + + // Find the frame to which to seek + if (whence == SEEK_CUR) + frame += _curFrame; + else if (whence == SEEK_END) + frame = _frameCount - frame - 1; + else if (whence == SEEK_SET) + frame--; + else + return false; + + if ((frame < -1) || (frame >= ((int32) _frameCount))) + // Out of range + return false; + + return true; +} + +void CoktelDecoder::setSurfaceMemory(void *mem, uint16 width, uint16 height, uint8 bpp) { + freeSurface(); + + // Sanity checks + assert((width > 0) && (height > 0)); + assert(bpp == getPixelFormat().bytesPerPixel); + + // Create a surface over this memory + _surface.w = width; + _surface.h = height; + _surface.pitch = width * bpp; + _surface.pixels = mem; + _surface.bytesPerPixel = bpp; + + _ownSurface = false; +} + +void CoktelDecoder::setSurfaceMemory() { + freeSurface(); + createSurface(); + + _ownSurface = true; +} + +const Surface *CoktelDecoder::getSurface() const { + if (!isVideoLoaded()) + return 0; + + return &_surface; +} + +bool CoktelDecoder::hasSurface() { + return _surface.pixels != 0; +} + +void CoktelDecoder::createSurface() { + if (hasSurface()) + return; + + if ((_width > 0) && (_height > 0)) + _surface.create(_width, _height, getPixelFormat().bytesPerPixel); + + _ownSurface = true; +} + +void CoktelDecoder::freeSurface() { + if (!_ownSurface) { + _surface.w = 0; + _surface.h = 0; + _surface.pitch = 0; + _surface.pixels = 0; + _surface.bytesPerPixel = 0; + } else + _surface.free(); + + _ownSurface = true; +} + +void CoktelDecoder::setXY(uint16 x, uint16 y) { + _x = x; + _y = y; +} + +void CoktelDecoder::setXY() { + setXY(_defaultX, _defaultY); +} + +void CoktelDecoder::setFrameRate(Common::Rational frameRate) { + _frameRate = frameRate; +} + +uint16 CoktelDecoder::getDefaultX() const { + return _defaultX; +} + +uint16 CoktelDecoder::getDefaultY() const { + return _defaultY; +} + +const Common::List<Common::Rect> &CoktelDecoder::getDirtyRects() const { + return _dirtyRects; +} + +bool CoktelDecoder::hasPalette() const { + return (_features & kFeaturesPalette) != 0; +} + +bool CoktelDecoder::hasSound() const { + return _hasSound; +} + +bool CoktelDecoder::isSoundEnabled() const { + return _soundEnabled; +} + +bool CoktelDecoder::isSoundPlaying() const { + return _audioStream && _mixer->isSoundHandleActive(_audioHandle); +} + +void CoktelDecoder::enableSound() { + if (!hasSound() || isSoundEnabled()) + return; + + // Sanity check + if (_mixer->getOutputRate() == 0) + return; + + // Only possible on the first frame + if (_curFrame > -1) + return; + + _soundEnabled = true; +} + +void CoktelDecoder::disableSound() { + if (_audioStream) { + + if (_soundStage == kSoundPlaying) { + _audioStream->finish(); + _mixer->stopHandle(_audioHandle); + } else + delete _audioStream; + + } + + _soundEnabled = false; + _soundStage = kSoundNone; + + _audioStream = 0; +} + +bool CoktelDecoder::getFrameCoords(int16 frame, int16 &x, int16 &y, int16 &width, int16 &height) { + return false; +} + +bool CoktelDecoder::hasEmbeddedFiles() const { + return false; +} + +bool CoktelDecoder::hasEmbeddedFile(const Common::String &fileName) const { + return false; +} + +Common::MemoryReadStream *CoktelDecoder::getEmbeddedFile(const Common::String &fileName) const { + return 0; +} + +int32 CoktelDecoder::getSubtitleIndex() const { + return -1; +} + +void CoktelDecoder::close() { + disableSound(); + freeSurface(); + + _x = 0; + _y = 0; + + _defaultX = 0; + _defaultY = 0; + + _features = 0; + + _frameCount = 0; + + _hasSound = false; +} + +uint16 CoktelDecoder::getWidth() const { + return _width; +} + +uint16 CoktelDecoder::getHeight() const { + return _height; +} + +uint32 CoktelDecoder::getFrameCount() const { + return _frameCount; +} + +byte *CoktelDecoder::getPalette() { + return _palette; +} + +bool CoktelDecoder::hasDirtyPalette() const { + return (_features & kFeaturesPalette) && _paletteDirty; +} + +void CoktelDecoder::deLZ77(byte *dest, byte *src) { + int i; + byte buf[4370]; + uint16 chunkLength; + uint32 frameLength; + uint16 bufPos1; + uint16 bufPos2; + uint16 tmp; + uint8 chunkBitField; + uint8 chunkCount; + bool mode; + + frameLength = READ_LE_UINT32(src); + src += 4; + + if ((READ_LE_UINT16(src) == 0x1234) && (READ_LE_UINT16(src + 2) == 0x5678)) { + src += 4; + bufPos1 = 273; + mode = 1; // 123Ch (cmp al, 12h) + } else { + bufPos1 = 4078; + mode = 0; // 275h (jnz +2) + } + + memset(buf, 32, bufPos1); + chunkCount = 1; + chunkBitField = 0; + + while (frameLength > 0) { + chunkCount--; + if (chunkCount == 0) { + tmp = *src++; + chunkCount = 8; + chunkBitField = tmp; + } + if (chunkBitField % 2) { + chunkBitField >>= 1; + buf[bufPos1] = *src; + *dest++ = *src++; + bufPos1 = (bufPos1 + 1) % 4096; + frameLength--; + continue; + } + chunkBitField >>= 1; + + tmp = READ_LE_UINT16(src); + src += 2; + chunkLength = ((tmp & 0xF00) >> 8) + 3; + + if ((mode && ((chunkLength & 0xFF) == 0x12)) || + (!mode && (chunkLength == 0))) + chunkLength = *src++ + 0x12; + + bufPos2 = (tmp & 0xFF) + ((tmp >> 4) & 0x0F00); + if (((tmp + chunkLength) >= 4096) || + ((chunkLength + bufPos1) >= 4096)) { + + for (i = 0; i < chunkLength; i++, dest++) { + *dest = buf[bufPos2]; + buf[bufPos1] = buf[bufPos2]; + bufPos1 = (bufPos1 + 1) % 4096; + bufPos2 = (bufPos2 + 1) % 4096; + } + + } else if (((tmp + chunkLength) < bufPos1) || + ((chunkLength + bufPos1) < bufPos2)) { + + memcpy(dest, buf + bufPos2, chunkLength); + memmove(buf + bufPos1, buf + bufPos2, chunkLength); + + dest += chunkLength; + bufPos1 += chunkLength; + bufPos2 += chunkLength; + + } else { + + for (i = 0; i < chunkLength; i++, dest++, bufPos1++, bufPos2++) { + *dest = buf[bufPos2]; + buf[bufPos1] = buf[bufPos2]; + } + + } + frameLength -= chunkLength; + + } +} + +void CoktelDecoder::deRLE(byte *&destPtr, const byte *&srcPtr, int16 destLen, int16 srcLen) { + srcPtr++; + + if (srcLen & 1) { + byte data = *srcPtr++; + + if (destLen > 0) { + *destPtr++ = data; + destLen--; + } + } + + srcLen >>= 1; + + while (srcLen > 0) { + uint8 tmp = *srcPtr++; + if (tmp & 0x80) { // Verbatim copy + tmp &= 0x7F; + + int16 copyCount = MAX<int16>(0, MIN<int16>(destLen, tmp * 2)); + + memcpy(destPtr, srcPtr, copyCount); + + srcPtr += tmp * 2; + destPtr += copyCount; + destLen -= copyCount; + } else { // 2 bytes tmp times + for (int i = 0; (i < tmp) && (destLen > 0); i++) { + for (int j = 0; j < 2; j++) { + if (destLen <= 0) + break; + + *destPtr++ = srcPtr[j]; + destLen--; + } + } + srcPtr += 2; + } + srcLen -= tmp; + } +} + +// A whole, completely filled block +void CoktelDecoder::renderBlockWhole(const byte *src, Common::Rect &rect) { + Common::Rect srcRect = rect; + + rect.clip(_surface.w, _surface.h); + + byte *dst = (byte *)_surface.pixels + (rect.top * _surface.pitch) + rect.left; + for (int i = 0; i < rect.height(); i++) { + memcpy(dst, src, rect.width()); + + src += srcRect.width(); + dst += _surface.pitch; + } +} + +// A quarter-wide whole, completely filled block +void CoktelDecoder::renderBlockWhole4X(const byte *src, Common::Rect &rect) { + Common::Rect srcRect = rect; + + rect.clip(_surface.w, _surface.h); + + byte *dst = (byte *)_surface.pixels + (rect.top * _surface.pitch) + rect.left; + for (int i = 0; i < rect.height(); i++) { + byte *dstRow = dst; + const byte *srcRow = src; + + int16 count = rect.width(); + while (count >= 0) { + memset(dstRow, *srcRow, MIN<int16>(count, 4)); + + count -= 4; + dstRow += 4; + srcRow += 1; + } + + src += srcRect.width() / 4; + dst += _surface.pitch; + } +} + +// A half-high whole, completely filled block +void CoktelDecoder::renderBlockWhole2Y(const byte *src, Common::Rect &rect) { + Common::Rect srcRect = rect; + + rect.clip(_surface.w, _surface.h); + + int16 height = rect.height(); + + byte *dst = (byte *)_surface.pixels + (rect.top * _surface.pitch) + rect.left; + while (height > 1) { + memcpy(dst , src, rect.width()); + memcpy(dst + _surface.pitch, src, rect.width()); + + height -= 2; + src += srcRect.width(); + dst += 2 * _surface.pitch; + } + + if (height == 1) + memcpy(dst, src, rect.width()); +} + +// A sparse block +void CoktelDecoder::renderBlockSparse(const byte *src, Common::Rect &rect) { + Common::Rect srcRect = rect; + + rect.clip(_surface.w, _surface.h); + + byte *dst = (byte *)_surface.pixels + (rect.top * _surface.pitch) + rect.left; + for (int i = 0; i < rect.height(); i++) { + byte *dstRow = dst; + int16 pixWritten = 0; + + while (pixWritten < srcRect.width()) { + int16 pixCount = *src++; + + if (pixCount & 0x80) { // Data + int16 copyCount; + + pixCount = MIN((pixCount & 0x7F) + 1, srcRect.width() - pixWritten); + copyCount = CLIP<int16>(rect.width() - pixWritten, 0, pixCount); + memcpy(dstRow, src, copyCount); + + pixWritten += pixCount; + dstRow += pixCount; + src += pixCount; + } else { // "Hole" + pixWritten += pixCount + 1; + dstRow += pixCount + 1; + } + + } + + dst += _surface.pitch; + } +} + +// A half-high sparse block +void CoktelDecoder::renderBlockSparse2Y(const byte *src, Common::Rect &rect) { + warning("renderBlockSparse2Y"); + + Common::Rect srcRect = rect; + + rect.clip(_surface.w, _surface.h); + + byte *dst = (byte *)_surface.pixels + (rect.top * _surface.pitch) + rect.left; + for (int i = 0; i < rect.height(); i += 2) { + byte *dstRow = dst; + int16 pixWritten = 0; + + while (pixWritten < srcRect.width()) { + int16 pixCount = *src++; + + if (pixCount & 0x80) { // Data + int16 copyCount; + + pixCount = MIN((pixCount & 0x7F) + 1, srcRect.width() - pixWritten); + copyCount = CLIP<int16>(rect.width() - pixWritten, 0, pixCount); + memcpy(dstRow , src, pixCount); + memcpy(dstRow + _surface.pitch, src, pixCount); + + pixWritten += pixCount; + dstRow += pixCount; + src += pixCount; + } else { // "Hole" + pixWritten += pixCount + 1; + dstRow += pixCount + 1; + } + + } + + dst += _surface.pitch; + } +} + +void CoktelDecoder::renderBlockRLE(const byte *src, Common::Rect &rect) { + Common::Rect srcRect = rect; + + rect.clip(_surface.w, _surface.h); + + byte *dst = (byte *)_surface.pixels + (rect.top * _surface.pitch) + rect.left; + for (int i = 0; i < rect.height(); i++) { + byte *dstRow = dst; + int16 pixWritten = 0; + + while (pixWritten < srcRect.width()) { + int16 pixCount = *src++; + + if (pixCount & 0x80) { + int16 copyCount; + + pixCount = MIN((pixCount & 0x7F) + 1, srcRect.width() - pixWritten); + copyCount = CLIP<int16>(rect.width() - pixWritten, 0, pixCount); + + if (*src != 0xFF) { // Normal copy + + memcpy(dstRow, src, copyCount); + dstRow += copyCount; + src += pixCount; + } else + deRLE(dstRow, src, copyCount, pixCount); + + pixWritten += pixCount; + } else { // "Hole" + int16 copyCount = CLIP<int16>(rect.width() - pixWritten, 0, pixCount + 1); + + dstRow += copyCount; + pixWritten += pixCount + 1; + } + + } + + dst += _surface.pitch; + } +} + +Common::Rational CoktelDecoder::getFrameRate() const { + return _frameRate; +} + +uint32 CoktelDecoder::getTimeToNextFrame() const { + // If there is no audio, just return the static time between + // frames without any elaborate sync calculation. This is + // needed for the gob engine, since it has a lot of control + // between the videos and often plays just few frames out of + // the middle of a long video. + + if (!hasSound()) + return Common::Rational(1000, _frameRate).toInt(); + + // If there /is/ audio, we do need to keep video and audio + // in sync, though. + + return FixedRateVideoDecoder::getTimeToNextFrame(); +} + +inline void CoktelDecoder::unsignedToSigned(byte *buffer, int length) { + while (length-- > 0) *buffer++ ^= 0x80; +} + + +PreIMDDecoder::PreIMDDecoder(uint16 width, uint16 height, + Audio::Mixer *mixer, Audio::Mixer::SoundType soundType) : CoktelDecoder(mixer, soundType), + _stream(0), _videoBuffer(0), _videoBufferSize(0) { + + _width = width; + _height = height; +} + +PreIMDDecoder::~PreIMDDecoder() { + close(); +} + +bool PreIMDDecoder::seek(int32 frame, int whence, bool restart) { + if (!evaluateSeekFrame(frame, whence)) + return false; + + if (frame == _curFrame) + // Nothing to do + return true; + + // Run through the frames + _curFrame = -1; + _stream->seek(2); + while (_curFrame != frame) { + uint16 frameSize = _stream->readUint16LE(); + + _stream->skip(frameSize + 2); + + _curFrame++; + } + + return true; +} + +bool PreIMDDecoder::load(Common::SeekableReadStream *stream) { + // Since PreIMDs don't have any width and height values stored, + // we need them to be specified in the constructor + assert((_width > 0) && (_height > 0)); + + close(); + + _stream = stream; + + _stream->seek(0); + + _frameCount = _stream->readUint16LE(); + + _videoBufferSize = _width * _height; + _videoBuffer = new byte[_videoBufferSize]; + + memset(_videoBuffer, 0, _videoBufferSize); + + return true; +} + +void PreIMDDecoder::close() { + reset(); + + CoktelDecoder::close(); + + delete _stream; + + delete[] _videoBuffer; + + _stream = 0; + + _videoBuffer = 0; + _videoBufferSize = 0; +} + +bool PreIMDDecoder::isVideoLoaded() const { + return _stream != 0; +} + +Surface *PreIMDDecoder::decodeNextFrame() { + if (!isVideoLoaded() || endOfVideo()) + return 0; + + createSurface(); + + processFrame(); + renderFrame(); + + if (_curFrame == 0) + _startTime = g_system->getMillis(); + + return &_surface; +} + +void PreIMDDecoder::processFrame() { + uint16 frameSize = _stream->readUint16LE(); + + uint32 nextFramePos = _stream->pos() + frameSize + 2; + + byte cmd; + + cmd = _stream->readByte(); + frameSize--; + + if (cmd == 0) { + // Palette. Ignored by Fascination, though. + + // NOTE: If we ever find another game using this format, + // palettes may need to be evaluated. + + _stream->skip(768); + + frameSize -= 769; + + cmd = _stream->readByte(); + } + + if (cmd != 2) { + // Partial frame data + + uint32 fSize = frameSize; + uint32 vidSize = _videoBufferSize; + + byte *vidBuffer = _videoBuffer; + + while ((fSize > 0) && (vidSize > 0)) { + uint32 n = _stream->readByte(); + fSize--; + + if ((n & 0x80) != 0) { + // Data + + n = MIN<uint32>((n & 0x7F) + 1, MIN(fSize, vidSize)); + + _stream->read(vidBuffer, n); + + vidBuffer += n; + vidSize -= n; + fSize -= n; + + } else { + // Skip + + n = MIN<uint32>(n + 1, vidSize); + + vidBuffer += n; + vidSize -= n; + } + } + + } else { + // Full direct frame + + uint32 vidSize = MIN<uint32>(_videoBufferSize, frameSize); + + _stream->read(_videoBuffer, vidSize); + } + + _stream->seek(nextFramePos); + + _curFrame++; +} + +// Just a simple blit +void PreIMDDecoder::renderFrame() { + _dirtyRects.clear(); + + uint16 w = CLIP<int32>(_surface.w - _x, 0, _width); + uint16 h = CLIP<int32>(_surface.h - _y, 0, _height); + + const byte *src = _videoBuffer; + byte *dst = (byte *)_surface.pixels + (_y * _surface.pitch) + _x; + + uint32 frameDataSize = _videoBufferSize; + + while (h-- > 0) { + uint32 n = MIN<uint32>(w, frameDataSize); + + memcpy(dst, src, n); + + src += _width; + dst += _surface.pitch; + + frameDataSize -= n; + } + + _dirtyRects.push_back(Common::Rect(_x, _y, _x + _width, _y + _height)); +} + +PixelFormat PreIMDDecoder::getPixelFormat() const { + return PixelFormat::createFormatCLUT8(); +} + + +IMDDecoder::IMDDecoder(Audio::Mixer *mixer, Audio::Mixer::SoundType soundType) : CoktelDecoder(mixer, soundType), + _stream(0), _version(0), _stdX(-1), _stdY(-1), _stdWidth(-1), _stdHeight(-1), + _flags(0), _firstFramePos(0), _framePos(0), _frameCoords(0), + _frameData(0), _frameDataSize(0), _frameDataLen(0), + _videoBuffer(0), _videoBufferSize(0), + _soundFlags(0), _soundFreq(0), _soundSliceSize(0), _soundSlicesCount(0) { + +} + +IMDDecoder::~IMDDecoder() { + close(); +} + +bool IMDDecoder::seek(int32 frame, int whence, bool restart) { + if (!evaluateSeekFrame(frame, whence)) + return false; + + if (frame == _curFrame) + // Nothing to do + return true; + + // Try every possible way to find a file offset to that frame + uint32 framePos = 0; + if (frame == -1) { + // First frame, we know that position + + framePos = _firstFramePos; + + } else if (frame == 0) { + // Second frame, can be calculated from the first frame's position + + framePos = _firstFramePos; + _stream->seek(framePos); + framePos += _stream->readUint16LE() + 4; + + } else if (_framePos) { + // If we have an array of frame positions, use that + + framePos = _framePos[frame + 1]; + + } else if (restart && (_soundStage == kSoundNone)) { + // If we are asked to restart the video if necessary and have no + // audio to worry about, restart the video and run through the frames + + _curFrame = 0; + _stream->seek(_firstFramePos); + + for (int i = ((frame > _curFrame) ? _curFrame : 0); i <= frame; i++) + processFrame(); + + return true; + + } else { + // Not possible + + warning("IMDDecoder::seek(): Frame %d is not directly accessible", frame + 1); + return false; + } + + // Seek + _stream->seek(framePos); + _curFrame = frame; + + return true; +} + +void IMDDecoder::setXY(uint16 x, uint16 y) { + // Adjusting the standard coordinates + if (_stdX != -1) { + if (x != 0xFFFF) + _stdX = _stdX - _x + x; + if (y != 0xFFFF) + _stdY = _stdY - _y + y; + } + + // Going through the coordinate table as well + if (_frameCoords) { + for (uint32 i = 0; i < _frameCount; i++) { + if (_frameCoords[i].left != -1) { + if (x != 0xFFFF) { + _frameCoords[i].left = _frameCoords[i].left - _x + x; + _frameCoords[i].right = _frameCoords[i].right - _x + x; + } + if (y != 0xFFFF) { + _frameCoords[i].top = _frameCoords[i].top - _y + y; + _frameCoords[i].bottom = _frameCoords[i].bottom - _y + y; + } + } + } + } + + if (x != 0xFFFF) + _x = x; + if (y != 0xFFFF) + _y = y; +} + +bool IMDDecoder::load(Common::SeekableReadStream *stream) { + close(); + + _stream = stream; + + uint16 handle; + + handle = _stream->readUint16LE(); + _version = _stream->readByte(); + + // Version checking + if ((handle != 0) || (_version < 2)) { + warning("IMDDecoder::load(): Version incorrect (%d, 0x%X)", handle, _version); + close(); + return false; + } + + // Rest header + _features = _stream->readByte(); + _frameCount = _stream->readUint16LE(); + _defaultX = _stream->readSint16LE(); + _defaultY = _stream->readSint16LE(); + _width = _stream->readSint16LE(); + _height = _stream->readSint16LE(); + _flags = _stream->readUint16LE(); + _firstFramePos = _stream->readUint16LE(); + + _x = _defaultX; + _y = _defaultY; + + // IMDs always have video + _features |= kFeaturesVideo; + // IMDs always have palettes + _features |= kFeaturesPalette; + + // Palette + for (int i = 0; i < 768; i++) + _palette[i] = _stream->readByte() << 2; + + _paletteDirty = true; + + if (!loadCoordinates()) { + close(); + return false; + } + + uint32 framePosPos, frameCoordsPos; + if (!loadFrameTableOffsets(framePosPos, frameCoordsPos)) { + close(); + return false; + } + + if (!assessAudioProperties()) { + close(); + return false; + } + + if (!assessVideoProperties()) { + close(); + return false; + } + + if (!loadFrameTables(framePosPos, frameCoordsPos)) { + close(); + return false; + } + + // Seek to the first frame + _stream->seek(_firstFramePos); + + return true; +} + +bool IMDDecoder::loadCoordinates() { + // Standard coordinates + if (_version >= 3) { + uint16 count = _stream->readUint16LE(); + if (count > 1) { + warning("IMDDecoder::loadCoordinates(): More than one standard coordinate quad found (%d)", count); + return false; + } + + if (count != 0) { + _stdX = _stream->readSint16LE(); + _stdY = _stream->readSint16LE(); + _stdWidth = _stream->readSint16LE(); + _stdHeight = _stream->readSint16LE(); + _features |= kFeaturesStdCoords; + } else + _stdX = _stdY = _stdWidth = _stdHeight = -1; + + } else + _stdX = _stdY = _stdWidth = _stdHeight = -1; + + return true; +} + +bool IMDDecoder::loadFrameTableOffsets(uint32 &framePosPos, uint32 &frameCoordsPos) { + framePosPos = 0; + frameCoordsPos = 0; + + // Frame positions + if (_version >= 4) { + framePosPos = _stream->readUint32LE(); + if (framePosPos != 0) { + _framePos = new uint32[_frameCount]; + _features |= kFeaturesFramePos; + } + } + + // Frame coordinates + if (_features & kFeaturesFrameCoords) + frameCoordsPos = _stream->readUint32LE(); + + return true; +} + +bool IMDDecoder::assessVideoProperties() { + // Sizes of the frame data and extra video buffer + if (_features & kFeaturesDataSize) { + _frameDataSize = _stream->readUint16LE(); + if (_frameDataSize == 0) { + _frameDataSize = _stream->readUint32LE(); + _videoBufferSize = _stream->readUint32LE(); + } else + _videoBufferSize = _stream->readUint16LE(); + } else { + _frameDataSize = _width * _height + 500; + if (!(_flags & 0x100) || (_flags & 0x1000)) + _videoBufferSize = _frameDataSize; + } + + // Allocating working memory + _frameData = new byte[_frameDataSize + 500]; + memset(_frameData, 0, _frameDataSize + 500); + + _videoBuffer = new byte[_videoBufferSize + 500]; + memset(_videoBuffer, 0, _videoBufferSize + 500); + + return true; +} + +bool IMDDecoder::assessAudioProperties() { + if (_features & kFeaturesSound) { + _soundFreq = _stream->readSint16LE(); + _soundSliceSize = _stream->readSint16LE(); + _soundSlicesCount = _stream->readSint16LE(); + + if (_soundFreq < 0) + _soundFreq = -_soundFreq; + + if (_soundSlicesCount < 0) + _soundSlicesCount = -_soundSlicesCount - 1; + + if (_soundSlicesCount > 40) { + warning("IMDDecoder::assessAudioProperties(): More than 40 sound slices found (%d)", _soundSlicesCount); + return false; + } + + _frameRate = Common::Rational(_soundFreq, _soundSliceSize); + + _hasSound = true; + _soundEnabled = true; + _soundStage = kSoundLoaded; + + _audioStream = Audio::makeQueuingAudioStream(_soundFreq, false); + } + + return true; +} + +bool IMDDecoder::loadFrameTables(uint32 framePosPos, uint32 frameCoordsPos) { + // Positions table + if (_framePos) { + _stream->seek(framePosPos); + for (uint32 i = 0; i < _frameCount; i++) + _framePos[i] = _stream->readUint32LE(); + } + + // Coordinates table + if (_features & kFeaturesFrameCoords) { + _stream->seek(frameCoordsPos); + _frameCoords = new Coord[_frameCount]; + assert(_frameCoords); + for (uint32 i = 0; i < _frameCount; i++) { + _frameCoords[i].left = _stream->readSint16LE(); + _frameCoords[i].top = _stream->readSint16LE(); + _frameCoords[i].right = _stream->readSint16LE(); + _frameCoords[i].bottom = _stream->readSint16LE(); + } + } + + return true; +} + +void IMDDecoder::close() { + reset(); + + CoktelDecoder::close(); + + delete _stream; + + delete[] _framePos; + delete[] _frameCoords; + + delete[] _frameData; + + delete[] _videoBuffer; + + _stream = 0; + + _version = 0; + + _stdX = -1; + _stdY = -1; + _stdWidth = -1; + _stdHeight = -1; + + _flags = 0; + + _firstFramePos = 0; + _framePos = 0; + _frameCoords = 0; + + _frameData = 0; + _frameDataSize = 0; + _frameDataLen = 0; + + _videoBuffer = 0; + _videoBufferSize = 0; + + _soundFlags = 0; + _soundFreq = 0; + _soundSliceSize = 0; + _soundSlicesCount = 0; + + _hasSound = false; + _soundEnabled = false; + _soundStage = kSoundNone; +} + +bool IMDDecoder::isVideoLoaded() const { + return _stream != 0; +} + +Surface *IMDDecoder::decodeNextFrame() { + if (!isVideoLoaded() || endOfVideo()) + return 0; + + createSurface(); + + processFrame(); + + if (_curFrame == 0) + _startTime = g_system->getMillis(); + + return &_surface; +} + +void IMDDecoder::processFrame() { + _curFrame++; + + _dirtyRects.clear(); + + _paletteDirty = false; + + uint32 cmd = 0; + bool hasNextCmd = false; + bool startSound = false; + + do { + cmd = _stream->readUint16LE(); + + if ((cmd & kCommandBreakMask) == kCommandBreak) { + // Flow control + + if (cmd == kCommandBreak) { + _stream->skip(2); + cmd = _stream->readUint16LE(); + } + + // Break + if (cmd == kCommandBreakSkip0) { + continue; + } else if (cmd == kCommandBreakSkip16) { + cmd = _stream->readUint16LE(); + _stream->skip(cmd); + continue; + } else if (cmd == kCommandBreakSkip32) { + cmd = _stream->readUint32LE(); + _stream->skip(cmd); + continue; + } + } + + // Audio + if (cmd == kCommandNextSound) { + + nextSoundSlice(hasNextCmd); + cmd = _stream->readUint16LE(); + + } else if (cmd == kCommandStartSound) { + + startSound = initialSoundSlice(hasNextCmd); + cmd = _stream->readUint16LE(); + + } else + emptySoundSlice(hasNextCmd); + + // Set palette + if (cmd == kCommandPalette) { + _stream->skip(2); + + _paletteDirty = true; + + for (int i = 0; i < 768; i++) + _palette[i] = _stream->readByte() << 2; + + cmd = _stream->readUint16LE(); + } + + hasNextCmd = false; + + if (cmd == kCommandJump) { + // Jump to frame + + int16 frame = _stream->readSint16LE(); + if (_framePos) { + _curFrame = frame - 1; + _stream->seek(_framePos[frame]); + + hasNextCmd = true; + } + + } else if (cmd == kCommandVideoData) { + + _frameDataLen = _stream->readUint32LE() + 2; + _stream->read(_frameData, _frameDataLen); + + Common::Rect rect = calcFrameCoords(_curFrame); + + if (renderFrame(rect)) + _dirtyRects.push_back(rect); + + } else if (cmd != 0) { + + _frameDataLen = cmd + 2; + _stream->read(_frameData, _frameDataLen); + + Common::Rect rect = calcFrameCoords(_curFrame); + + if (renderFrame(rect)) + _dirtyRects.push_back(rect); + + } + + } while (hasNextCmd); + + // Start the audio stream if necessary + if (startSound && _soundEnabled) { + _mixer->playStream(_soundType, &_audioHandle, _audioStream); + _soundStage = kSoundPlaying; + } + + // End the audio stream if necessary + if ((_curFrame >= (int32)(_frameCount - 1)) && (_soundStage == kSoundPlaying)) { + _audioStream->finish(); + _mixer->stopHandle(_audioHandle); + _audioStream = 0; + _soundStage = kSoundNone; + } + +} + +Common::Rect IMDDecoder::calcFrameCoords(uint32 frame) { + Common::Rect rect; + + if (frame == 0) { + // First frame is always a full "keyframe" + + rect.left = _x; + rect.top = _y; + rect.right = _x + _width; + rect.bottom = _y + _height; + } else if (_frameCoords && ((_frameCoords[frame].left != -1))) { + // We have frame coordinates for that frame + + rect.left = _frameCoords[frame].left; + rect.top = _frameCoords[frame].top; + rect.right = _frameCoords[frame].right + 1; + rect.bottom = _frameCoords[frame].bottom + 1; + } else if (_stdX != -1) { + // We have standard coordinates + + rect.left = _stdX; + rect.top = _stdY; + rect.right = _stdX + _stdWidth; + rect.bottom = _stdY + _stdHeight; + } else { + // Otherwise, it must be a full "keyframe" + + rect.left = _x; + rect.top = _y; + rect.right = _x + _width; + rect.bottom = _y + _height; + } + + return rect; +} + +bool IMDDecoder::renderFrame(Common::Rect &rect) { + if (!rect.isValidRect()) + // Invalid rendering area + return false; + + // Clip the rendering area to the video's visible area + rect.clip(Common::Rect(_x, _y, _x + _width, _y + _height)); + if (!rect.isValidRect() || rect.isEmpty()) + // Result is empty => nothing to do + return false; + + byte *dataPtr = _frameData; + + uint8 type = *dataPtr++; + + if (type & 0x10) { + // Palette data + + // One byte index + int index = *dataPtr++; + + int count = MIN((255 - index) * 3, 48); + for (int i = 0; i < count; i++) + _palette[index * 3 + i] = dataPtr[i] << 2; + + dataPtr += 48; + type ^= 0x10; + + _paletteDirty = true; + } + + if (type & 0x80) { + // Frame data is compressed + + type &= 0x7F; + + if ((type == 2) && (rect.width() == _surface.w) && (_x == 0)) { + // Directly uncompress onto the video surface + deLZ77((byte *)_surface.pixels + (_y * _surface.pitch), dataPtr); + return true; + } + + deLZ77(_videoBuffer, dataPtr); + + dataPtr = _videoBuffer; + } + + // Evaluate the block type + if (type == 0x01) + renderBlockSparse (dataPtr, rect); + else if (type == 0x02) + renderBlockWhole (dataPtr, rect); + else if (type == 0x42) + renderBlockWhole4X (dataPtr, rect); + else if ((type & 0x0F) == 0x02) + renderBlockWhole2Y (dataPtr, rect); + else + renderBlockSparse2Y(dataPtr, rect); + + return true; +} + +void IMDDecoder::nextSoundSlice(bool hasNextCmd) { + if (hasNextCmd || !_soundEnabled) { + // Skip sound + + _stream->skip(_soundSliceSize); + return; + } + + // Read, convert, queue + + byte *soundBuf = (byte *)malloc(_soundSliceSize); + + _stream->read(soundBuf, _soundSliceSize); + unsignedToSigned(soundBuf, _soundSliceSize); + + _audioStream->queueBuffer(soundBuf, _soundSliceSize, DisposeAfterUse::YES, 0); +} + +bool IMDDecoder::initialSoundSlice(bool hasNextCmd) { + int dataLength = _soundSliceSize * _soundSlicesCount; + + if (hasNextCmd || !_soundEnabled) { + // Skip sound + + _stream->skip(dataLength); + return false; + } + + // Read, convert, queue + + byte *soundBuf = (byte *)malloc(dataLength); + + _stream->read(soundBuf, dataLength); + unsignedToSigned(soundBuf, dataLength); + + _audioStream->queueBuffer(soundBuf, dataLength, DisposeAfterUse::YES, 0); + + return _soundStage == kSoundLoaded; +} + +void IMDDecoder::emptySoundSlice(bool hasNextCmd) { + if (hasNextCmd || !_soundEnabled) + return; + + // Create an empty sound buffer and queue it + + byte *soundBuf = (byte *)malloc(_soundSliceSize); + + memset(soundBuf, 0, _soundSliceSize); + + _audioStream->queueBuffer(soundBuf, _soundSliceSize, DisposeAfterUse::YES, 0); +} + +PixelFormat IMDDecoder::getPixelFormat() const { + return PixelFormat::createFormatCLUT8(); +} + + +VMDDecoder::File::File() { + offset = 0; + size = 0; + realSize = 0; +} + + +VMDDecoder::Part::Part() { + type = kPartTypeSeparator; + field_1 = 0; + field_E = 0; + size = 0; + left = 0; + top = 0; + right = 0; + bottom = 0; + id = 0; + flags = 0; +} + + +VMDDecoder::Frame::Frame() { + parts = 0; + offset = 0; +} + +VMDDecoder::Frame::~Frame() { + delete[] parts; +} + + +const uint16 VMDDecoder::_tableDPCM[128] = { + 0x0000, 0x0008, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0060, 0x0070, 0x0080, + 0x0090, 0x00A0, 0x00B0, 0x00C0, 0x00D0, 0x00E0, 0x00F0, 0x0100, 0x0110, 0x0120, + 0x0130, 0x0140, 0x0150, 0x0160, 0x0170, 0x0180, 0x0190, 0x01A0, 0x01B0, 0x01C0, + 0x01D0, 0x01E0, 0x01F0, 0x0200, 0x0208, 0x0210, 0x0218, 0x0220, 0x0228, 0x0230, + 0x0238, 0x0240, 0x0248, 0x0250, 0x0258, 0x0260, 0x0268, 0x0270, 0x0278, 0x0280, + 0x0288, 0x0290, 0x0298, 0x02A0, 0x02A8, 0x02B0, 0x02B8, 0x02C0, 0x02C8, 0x02D0, + 0x02D8, 0x02E0, 0x02E8, 0x02F0, 0x02F8, 0x0300, 0x0308, 0x0310, 0x0318, 0x0320, + 0x0328, 0x0330, 0x0338, 0x0340, 0x0348, 0x0350, 0x0358, 0x0360, 0x0368, 0x0370, + 0x0378, 0x0380, 0x0388, 0x0390, 0x0398, 0x03A0, 0x03A8, 0x03B0, 0x03B8, 0x03C0, + 0x03C8, 0x03D0, 0x03D8, 0x03E0, 0x03E8, 0x03F0, 0x03F8, 0x0400, 0x0440, 0x0480, + 0x04C0, 0x0500, 0x0540, 0x0580, 0x05C0, 0x0600, 0x0640, 0x0680, 0x06C0, 0x0700, + 0x0740, 0x0780, 0x07C0, 0x0800, 0x0900, 0x0A00, 0x0B00, 0x0C00, 0x0D00, 0x0E00, + 0x0F00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x3000, 0x4000 +}; + +const int32 VMDDecoder::_tableADPCM[] = { + 7, 8, 9, 10, 11, 12, 13, 14, + 16, 17, 19, 21, 23, 25, 28, 31, + 34, 37, 41, 45, 50, 55, 60, 66, + 73, 80, 88, 97, 107, 118, 130, 143, + 157, 173, 190, 209, 230, 253, 279, 307, + 337, 371, 408, 449, 494, 544, 598, 658, + 724, 796, 876, 963, 1060, 1166, 1282, 1411, + 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, + 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, + 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, + 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, + 32767, 0 +}; + +const int32 VMDDecoder::_tableADPCMStep[] = { + -1, -1, -1, -1, 2, 4, 6, 8, + -1, -1, -1, -1, 2, 4, 6, 8 +}; + +VMDDecoder::VMDDecoder(Audio::Mixer *mixer, Audio::Mixer::SoundType soundType) : CoktelDecoder(mixer, soundType), + _stream(0), _version(0), _flags(0), _frameInfoOffset(0), _partsPerFrame(0), _frames(0), + _soundFlags(0), _soundFreq(0), _soundSliceSize(0), _soundSlicesCount(0), + _soundBytesPerSample(0), _soundStereo(0), _soundHeaderSize(0), _soundDataSize(0), + _audioFormat(kAudioFormat8bitRaw), _hasVideo(false), _videoCodec(0), + _blitMode(0), _bytesPerPixel(0), _firstFramePos(0), + _frameData(0), _frameDataSize(0), _frameDataLen(0), + _videoBuffer(0), _videoBufferSize(0), _externalCodec(false), _codec(0), + _subtitle(-1) { + +} + +VMDDecoder::~VMDDecoder() { + close(); +} + +bool VMDDecoder::seek(int32 frame, int whence, bool restart) { + if (!evaluateSeekFrame(frame, whence)) + return false; + + if (frame == _curFrame) + // Nothing to do + return true; + + // Restart sound + if (_hasSound && (frame == -1) && (_soundStage == kSoundNone) && !_audioStream) { + _soundStage = kSoundLoaded; + _audioStream = Audio::makeQueuingAudioStream(_soundFreq, _soundStereo != 0); + } + + // Seek + _stream->seek(_frames[frame + 1].offset); + _curFrame = frame; + + _subtitle = -1; + + return true; +} + +void VMDDecoder::setXY(uint16 x, uint16 y) { + for (uint32 i = 0; i < _frameCount; i++) { + for (int j = 0; j < _partsPerFrame; j++) { + + if (_frames[i].parts[j].type == kPartTypeVideo) { + if (x != 0xFFFF) { + _frames[i].parts[j].left = _frames[i].parts[j].left - _x + x; + _frames[i].parts[j].right = _frames[i].parts[j].right - _x + x; + } + if (y != 0xFFFF) { + _frames[i].parts[j].top = _frames[i].parts[j].top - _y + y; + _frames[i].parts[j].bottom = _frames[i].parts[j].bottom - _y + y; + } + } + + } + } + + if (x != 0xFFFF) + _x = x; + if (y != 0xFFFF) + _y = y; +} + +bool VMDDecoder::load(Common::SeekableReadStream *stream) { + close(); + + _stream = stream; + + _stream->seek(0); + + uint16 headerLength; + uint16 handle; + + headerLength = _stream->readUint16LE(); + handle = _stream->readUint16LE(); + _version = _stream->readUint16LE(); + + // Version checking + if (headerLength == 50) { + // Newer version, used in Addy 5 upwards + warning("VMDDecoder::load(): TODO: Addy 5 videos"); + } else if (headerLength == 814) { + // Old version + _features |= kFeaturesPalette; + } else { + warning("VMDDecoder::load(): Version incorrect (%d, %d, %d)", headerLength, handle, _version); + close(); + return false; + } + + _frameCount = _stream->readUint16LE(); + + _defaultX = _stream->readSint16LE(); + _defaultY = _stream->readSint16LE(); + _width = _stream->readSint16LE(); + _height = _stream->readSint16LE(); + + _x = _defaultX; + _y = _defaultY; + + if ((_width != 0) && (_height != 0)) { + + _hasVideo = true; + _features |= kFeaturesVideo; + + } else + _hasVideo = false; + + _bytesPerPixel = 1; + if (_version & 4) + _bytesPerPixel = handle + 1; + + if (_bytesPerPixel != 1) { + warning("TODO: _bytesPerPixel = %d", _bytesPerPixel); + close(); + return false; + } + + if (_bytesPerPixel > 3) { + warning("VMDDecoder::load(): Requested %d bytes per pixel (%d, %d, %d)", + _bytesPerPixel, headerLength, handle, _version); + close(); + return false; + } + + _flags = _stream->readUint16LE(); + + _partsPerFrame = _stream->readUint16LE(); + _firstFramePos = _stream->readUint32LE(); + + _videoCodec = _stream->readUint32BE(); + + if (_features & kFeaturesPalette) { + for (int i = 0; i < 768; i++) + _palette[i] = _stream->readByte() << 2; + + _paletteDirty = true; + } + + _frameDataSize = _stream->readUint32LE(); + _videoBufferSize = _stream->readUint32LE(); + + if (_hasVideo) { + if (!assessVideoProperties()) { + close(); + return false; + } + } + + _soundFreq = _stream->readSint16LE(); + _soundSliceSize = _stream->readSint16LE(); + _soundSlicesCount = _stream->readSint16LE(); + _soundFlags = _stream->readUint16LE(); + + _hasSound = (_soundFreq != 0); + + if (_hasSound) { + if (!assessAudioProperties()) { + close(); + return false; + } + } else + _frameRate = 12; + + _frameInfoOffset = _stream->readUint32LE(); + + int numFiles; + if (!readFrameTable(numFiles)) { + close(); + return false; + } + + _stream->seek(_firstFramePos); + + if (numFiles == 0) + return true; + + _files.reserve(numFiles); + if (!readFiles()) { + close(); + return false; + } + + _stream->seek(_firstFramePos); + return true; +} + +bool VMDDecoder::assessVideoProperties() { + if ((_version & 2) && !(_version & 8)) { + _externalCodec = true; + _frameDataSize = _videoBufferSize = 0; + } else + _externalCodec = false; + + if (_externalCodec) { + if (_videoCodec == kVideoCodecIndeo3) { +#ifdef USE_INDEO3 + _codec = new Indeo3Decoder(_width, _height); +#else + warning("VMDDecoder::assessVideoProperties(): Indeo3 decoder not compiled in"); +#endif + } else { + warning("VMDDecoder::assessVideoProperties(): Unknown video codec FourCC \"%s\"", + tag2str(_videoCodec)); + return false; + } + } + + if (_externalCodec) + _blitMode = 0; + else if (_bytesPerPixel == 1) + _blitMode = 0; + else if ((_bytesPerPixel == 2) || (_bytesPerPixel == 3)) { + int n = (_flags & 0x80) ? 2 : 3; + + _blitMode = n - 1; + _bytesPerPixel = n; + } + + if (_hasVideo) { + if ((_frameDataSize == 0) || (_frameDataSize > 1048576)) + _frameDataSize = _width * _height + 1000; + if ((_videoBufferSize == 0) || (_videoBufferSize > 1048576)) + _videoBufferSize = _frameDataSize; + + _frameData = new byte[_frameDataSize]; + memset(_frameData, 0, _frameDataSize); + + _videoBuffer = new byte[_videoBufferSize]; + memset(_videoBuffer, 0, _videoBufferSize); + } + + return true; +} + +bool VMDDecoder::assessAudioProperties() { + bool supportedFormat = true; + + _features |= kFeaturesSound; + + _soundStereo = (_soundFlags & 0x8000) ? 1 : ((_soundFlags & 0x200) ? 2 : 0); + + if (_soundSliceSize < 0) { + _soundBytesPerSample = 2; + _soundSliceSize = -_soundSliceSize; + + if (_soundFlags & 0x10) { + _audioFormat = kAudioFormat16bitADPCM; + _soundHeaderSize = 3; + _soundDataSize = _soundSliceSize >> 1; + + if (_soundStereo > 0) + supportedFormat = false; + + } else { + _audioFormat = kAudioFormat16bitDPCM; + _soundHeaderSize = 1; + _soundDataSize = _soundSliceSize; + + if (_soundStereo == 1) { + supportedFormat = false; + } else if (_soundStereo == 2) { + _soundDataSize = 2 * _soundDataSize + 2; + _soundHeaderSize = 4; + } + + } + } else { + _soundBytesPerSample = 1; + _audioFormat = kAudioFormat8bitRaw; + _soundHeaderSize = 0; + _soundDataSize = _soundSliceSize; + + if (_soundStereo > 0) + supportedFormat = false; + } + + if (!supportedFormat) { + warning("VMDDecoder::assessAudioProperties(): Unsupported audio format: %d bits, encoding %d, stereo %d", + _soundBytesPerSample * 8, _audioFormat, _soundStereo); + return false; + } + + _frameRate = Common::Rational(_soundFreq, _soundSliceSize); + + _hasSound = true; + _soundEnabled = true; + _soundStage = kSoundLoaded; + + _audioStream = Audio::makeQueuingAudioStream(_soundFreq, _soundStereo != 0); + + return true; +} + +bool VMDDecoder::readFrameTable(int &numFiles) { + numFiles = 0; + + _stream->seek(_frameInfoOffset); + _frames = new Frame[_frameCount]; + for (uint16 i = 0; i < _frameCount; i++) { + _frames[i].parts = new Part[_partsPerFrame]; + _stream->skip(2); // Unknown + _frames[i].offset = _stream->readUint32LE(); + } + + for (uint16 i = 0; i < _frameCount; i++) { + bool separator = false; + + for (uint16 j = 0; j < _partsPerFrame; j++) { + + _frames[i].parts[j].type = (PartType) _stream->readByte(); + _frames[i].parts[j].field_1 = _stream->readByte(); + _frames[i].parts[j].size = _stream->readUint32LE(); + + if (_frames[i].parts[j].type == kPartTypeAudio) { + + _frames[i].parts[j].flags = _stream->readByte(); + _stream->skip(9); // Unknown + + } else if (_frames[i].parts[j].type == kPartTypeVideo) { + + _frames[i].parts[j].left = _stream->readUint16LE(); + _frames[i].parts[j].top = _stream->readUint16LE(); + _frames[i].parts[j].right = _stream->readUint16LE(); + _frames[i].parts[j].bottom = _stream->readUint16LE(); + _frames[i].parts[j].field_E = _stream->readByte(); + _frames[i].parts[j].flags = _stream->readByte(); + + } else if (_frames[i].parts[j].type == kPartTypeSubtitle) { + _frames[i].parts[j].id = _stream->readUint16LE(); + // Speech text file name + _stream->skip(8); + } else if (_frames[i].parts[j].type == kPartTypeFile) { + if (!separator) + numFiles++; + _stream->skip(10); + } else if (_frames[i].parts[j].type == kPartTypeSeparator) { + separator = true; + _stream->skip(10); + } else { + // Unknown type + _stream->skip(10); + } + + } + } + + return true; +} + +bool VMDDecoder::readFiles() { + uint32 ssize = _stream->size(); + for (uint16 i = 0; i < _frameCount; i++) { + _stream->seek(_frames[i].offset); + + for (uint16 j = 0; j < _partsPerFrame; j++) { + if (_frames[i].parts[j].type == kPartTypeSeparator) + break; + + if (_frames[i].parts[j].type == kPartTypeFile) { + File file;; + + file.offset = _stream->pos() + 20; + file.size = _frames[i].parts[j].size; + file.realSize = _stream->readUint32LE(); + + char name[16]; + + _stream->read(name, 16); + name[15] = '\0'; + + file.name = name; + + _stream->skip(_frames[i].parts[j].size - 20); + + if ((((uint32) file.realSize) >= ssize) || (file.name == "")) + continue; + + _files.push_back(file); + + } else + _stream->skip(_frames[i].parts[j].size); + } + } + + return true; +} + +void VMDDecoder::close() { + reset(); + + CoktelDecoder::close(); + + delete _stream; + + delete[] _frames; + + delete[] _frameData; + delete[] _videoBuffer; + + delete _codec; + + _files.clear(); + + + _stream = 0; + + _version = 0; + _flags = 0; + + _frameInfoOffset = 0; + _partsPerFrame = 0; + _frames = 0; + + _soundFlags = 0; + _soundFreq = 0; + _soundSliceSize = 0; + _soundSlicesCount = 0; + _soundBytesPerSample = 0; + _soundStereo = 0; + _soundHeaderSize = 0; + _soundDataSize = 0; + _audioFormat = kAudioFormat8bitRaw; + + _hasVideo = false; + _videoCodec = 0; + _blitMode = 0; + _bytesPerPixel = 0; + + _firstFramePos = 0; + + _frameData = 0; + _frameDataSize = 0; + _frameDataLen = 0; + + _videoBuffer = 0; + _videoBufferSize = 0; + + _externalCodec = false; + _codec = 0; +} + +bool VMDDecoder::isVideoLoaded() const { + return _stream != 0; +} + +Surface *VMDDecoder::decodeNextFrame() { + if (!isVideoLoaded() || endOfVideo()) + return 0; + + createSurface(); + + processFrame(); + + if (_curFrame == 0) + _startTime = g_system->getMillis(); + + return &_surface; +} + +void VMDDecoder::processFrame() { + _curFrame++; + + _dirtyRects.clear(); + + _paletteDirty = false; + _subtitle = -1; + + bool startSound = false; + + for (uint16 i = 0; i < _partsPerFrame; i++) { + uint32 pos = _stream->pos(); + + Part &part = _frames[_curFrame].parts[i]; + + if (part.type == kPartTypeAudio) { + + if (part.flags == 1) { + // Next sound slice data + + if (_soundEnabled) { + filledSoundSlice(part.size); + + if (_soundStage == kSoundLoaded) + startSound = true; + + } else + _stream->skip(part.size); + + } else if (part.flags == 2) { + // Initial sound data (all slices) + + if (_soundEnabled) { + uint32 mask = _stream->readUint32LE(); + filledSoundSlices(part.size - 4, mask); + + if (_soundStage == kSoundLoaded) + startSound = true; + + } else + _stream->skip(part.size); + + } else if (part.flags == 3) { + // Empty sound slice + + if (_soundEnabled) { + emptySoundSlice(_soundDataSize * _soundBytesPerSample); + + if (_soundStage == kSoundLoaded) + startSound = true; + } + + _stream->skip(part.size); + } else if (part.flags == 4) { + warning("VMDDecoder::processFrame(): TODO: Addy 5 sound type 4 (%d)", part.size); + disableSound(); + _stream->skip(part.size); + } else { + warning("VMDDecoder::processFrame(): Unknown sound type %d", part.flags); + _stream->skip(part.size); + } + + _stream->seek(pos + part.size); + + } else if ((part.type == kPartTypeVideo) && !_hasVideo) { + + warning("VMDDecoder::processFrame(): Header claims there's no video, but video found (%d)", part.size); + _stream->skip(part.size); + + } else if ((part.type == kPartTypeVideo) && _hasVideo) { + + uint32 size = part.size; + + // New palette + if (part.flags & 2) { + uint8 index = _stream->readByte(); + uint8 count = _stream->readByte(); + + for (int j = 0; j < ((count + 1) * 3); j++) + _palette[index * 3 + j] = _stream->readByte() << 2; + + _stream->skip((255 - count) * 3); + + _paletteDirty = true; + + size -= (768 + 2); + } + + _stream->read(_frameData, size); + _frameDataLen = size; + + Common::Rect rect(part.left, part.top, part.right + 1, part.bottom + 1); + if (renderFrame(rect)) + _dirtyRects.push_back(rect); + + } else if (part.type == kPartTypeSeparator) { + + // Ignore + + } else if (part.type == kPartTypeFile) { + + // Ignore + _stream->skip(part.size); + + } else if (part.type == kPartType4) { + + // Unknown, ignore + _stream->skip(part.size); + + } else if (part.type == kPartTypeSubtitle) { + + _subtitle = part.id; + _stream->skip(part.size); + + } else { + + warning("VMDDecoder::processFrame(): Unknown frame part type %d, size %d (%d of %d)", + part.type, part.size, i + 1, _partsPerFrame); + + } + } + + if (startSound && _soundEnabled) { + if (_hasSound && _audioStream) { + _mixer->playStream(Audio::Mixer::kSFXSoundType, &_audioHandle, _audioStream); + _soundStage = kSoundPlaying; + } else + _soundStage = kSoundNone; + } + + if (((uint32)_curFrame == (_frameCount - 1)) && (_soundStage == 2)) { + _audioStream->finish(); + _mixer->stopHandle(_audioHandle); + _audioStream = 0; + _soundStage = kSoundNone; + } +} + +bool VMDDecoder::renderFrame(Common::Rect &rect) { + if (!rect.isValidRect()) + // Invalid rendering area + return false; + + // Clip the rendering area to the video's visible area + rect.clip(Common::Rect(_x, _y, _x + _width, _y + _height)); + if (!rect.isValidRect() || rect.isEmpty()) + // Result is empty => nothing to do + return false; + + if (_externalCodec) { + // TODO + warning("_external codec"); + return false; + } + + if (_blitMode > 0) { + // TODO + warning("_blitMode == %d", _blitMode); + return false; + } + + byte *dataPtr = _frameData; + + uint8 type = *dataPtr++; + + if (type & 0x80) { + // Frame data is compressed + + type &= 0x7F; + + if ((type == 2) && (rect.width() == _surface.w) && (_x == 0)) { + // Directly uncompress onto the video surface + deLZ77((byte *)_surface.pixels + (_y * _surface.pitch), dataPtr); + return true; + } + + deLZ77(_videoBuffer, dataPtr); + + dataPtr = _videoBuffer; + } + + // Evaluate the block type + if (type == 0x01) + renderBlockSparse (dataPtr, rect); + else if (type == 0x02) + renderBlockWhole (dataPtr, rect); + else if (type == 0x03) + renderBlockRLE (dataPtr, rect); + else if (type == 0x42) + renderBlockWhole4X (dataPtr, rect); + else if ((type & 0x0F) == 0x02) + renderBlockWhole2Y (dataPtr, rect); + else + renderBlockSparse2Y(dataPtr, rect); + + return true; +} + +void VMDDecoder::emptySoundSlice(uint32 size) { + byte *sound = soundEmpty(size); + + if (sound) { + uint32 flags = 0; + flags |= (_soundBytesPerSample == 2) ? Audio::FLAG_16BITS : 0; + flags |= (_soundStereo > 0) ? Audio::FLAG_STEREO : 0; + + _audioStream->queueBuffer(sound, size, DisposeAfterUse::YES, flags); + } +} + +void VMDDecoder::filledSoundSlice(uint32 size) { + byte *sound = 0; + if (_audioFormat == kAudioFormat8bitRaw) + sound = sound8bitRaw(size); + else if (_audioFormat == kAudioFormat16bitDPCM) + sound = sound16bitDPCM(size); + else if (_audioFormat == kAudioFormat16bitADPCM) + sound = sound16bitADPCM(size); + + if (sound) { + uint32 flags = 0; + flags |= (_soundBytesPerSample == 2) ? Audio::FLAG_16BITS : 0; + flags |= (_soundStereo > 0) ? Audio::FLAG_STEREO : 0; + + _audioStream->queueBuffer(sound, size, DisposeAfterUse::YES, flags); + } +} + +void VMDDecoder::filledSoundSlices(uint32 size, uint32 mask) { + bool fillInfo[32]; + + uint8 max; + uint8 n = evaluateMask(mask, fillInfo, max); + + int32 extraSize; + + extraSize = size - n * _soundDataSize; + + if (_soundSlicesCount > 32) + extraSize -= (_soundSlicesCount - 32) * _soundDataSize; + + if (n > 0) + extraSize /= n; + + for (uint8 i = 0; i < max; i++) + if (fillInfo[i]) + filledSoundSlice(_soundDataSize + extraSize); + else + emptySoundSlice(_soundDataSize * _soundBytesPerSample); + + if (_soundSlicesCount > 32) + filledSoundSlice((_soundSlicesCount - 32) * _soundDataSize + _soundHeaderSize); +} + +uint8 VMDDecoder::evaluateMask(uint32 mask, bool *fillInfo, uint8 &max) { + max = MIN<int>(_soundSlicesCount - 1, 31); + + uint8 n = 0; + for (int i = 0; i < max; i++) { + + if (!(mask & 1)) { + n++; + *fillInfo++ = true; + } else + *fillInfo++ = false; + + mask >>= 1; + } + + return n; +} + +byte *VMDDecoder::soundEmpty(uint32 &size) { + if (!_audioStream) + return 0; + + byte *soundBuf = (byte *)malloc(size); + memset(soundBuf, 0, size); + + return soundBuf; +} + +byte *VMDDecoder::sound8bitRaw(uint32 &size) { + if (!_audioStream) { + _stream->skip(size); + return 0; + } + + byte *soundBuf = (byte *)malloc(size); + _stream->read(soundBuf, size); + unsignedToSigned(soundBuf, size); + + return soundBuf; +} + +byte *VMDDecoder::sound16bitDPCM(uint32 &size) { + if (!_audioStream) { + _stream->skip(size); + return 0; + } + + int32 init[2]; + + init[0] = _stream->readSint16LE(); + size -= 2; + + if (_soundStereo > 0) { + init[1] = _stream->readSint16LE(); + size -= 2; + } + + byte *data = new byte[size]; + byte *sound = 0; + + if (_stream->read(data, size) == size) + sound = deDPCM(data, size, init); + + delete[] data; + + return sound; +} + +byte *VMDDecoder::sound16bitADPCM(uint32 &size) { + if (!_audioStream) { + _stream->skip(size); + return 0; + } + + int32 init = _stream->readSint16LE(); + size -= 2; + + int32 index = _stream->readByte(); + size--; + + byte *data = new byte[size]; + byte *sound = 0; + + if (_stream->read(data, size) == size) + sound = deADPCM(data, size, init, index); + + delete[] data; + + return sound; +} + +byte *VMDDecoder::deDPCM(const byte *data, uint32 &size, int32 init[2]) { + if (!data || (size == 0)) + return 0; + + int channels = (_soundStereo > 0) ? 2 : 1; + + uint32 inSize = size; + uint32 outSize = size + channels; + + int16 *out = (int16 *)malloc(outSize * 2); + byte *sound = (byte *) out; + + int channel = 0; + + for (int i = 0; i < channels; i++) { + *out++ = TO_BE_16(init[channel]); + + channel = (channel + 1) % channels; + } + + while (inSize-- > 0) { + if (*data & 0x80) + init[channel] -= _tableDPCM[*data++ & 0x7F]; + else + init[channel] += _tableDPCM[*data++]; + + init[channel] = CLIP<int32>(init[channel], -32768, 32767); + *out++ = TO_BE_16(init[channel]); + + channel = (channel + 1) % channels; + } + + size = outSize * 2; + return sound; +} + +// Yet another IMA ADPCM variant +byte *VMDDecoder::deADPCM(const byte *data, uint32 &size, int32 init, int32 index) { + if (!data || (size == 0)) + return 0; + + uint32 outSize = size * 2; + + int16 *out = (int16 *)malloc(outSize * 2); + byte *sound = (byte *) out; + + index = CLIP<int32>(index, 0, 88); + + int32 predictor = _tableADPCM[index]; + + uint32 dataByte = 0; + bool newByte = true; + + size *= 2; + while (size -- > 0) { + byte code = 0; + + if (newByte) { + dataByte = *data++; + code = (dataByte >> 4) & 0xF; + } else + code = dataByte & 0xF; + + newByte = !newByte; + + index += _tableADPCMStep[code]; + index = CLIP<int32>(index, 0, 88); + + int32 value = predictor / 8; + + if (code & 4) + value += predictor; + if (code & 2) + value += predictor / 2; + if (code & 1) + value += predictor / 4; + + if (code & 8) + init -= value; + else + init += value; + + init = CLIP<int32>(init, -32768, 32767); + + predictor = _tableADPCM[index]; + + *out++ = TO_BE_16(init); + } + + size = outSize * 2; + return sound; +} + +PixelFormat VMDDecoder::getPixelFormat() const { + return PixelFormat::createFormatCLUT8(); +} + +bool VMDDecoder::getPartCoords(int16 frame, PartType type, int16 &x, int16 &y, int16 &width, int16 &height) { + if (frame >= ((int32) _frameCount)) + return false; + + Frame &f = _frames[frame]; + + // Look for a part matching the requested type, stopping at a separator + Part *part = 0; + for (int i = 0; i < _partsPerFrame; i++) { + Part &p = f.parts[i]; + + if ((p.type == kPartTypeSeparator) || (p.type == type)) { + part = &p; + break; + } + } + + if (!part) + return false; + + x = part->left; + y = part->top; + width = part->right - part->left + 1; + height = part->bottom - part->top + 1; + + return true; +} + +bool VMDDecoder::getFrameCoords(int16 frame, int16 &x, int16 &y, int16 &width, int16 &height) { + return getPartCoords(frame, kPartTypeVideo, x, y, width, height); +} + +bool VMDDecoder::hasEmbeddedFiles() const { + return !_files.empty(); +} + +bool VMDDecoder::hasEmbeddedFile(const Common::String &fileName) const { + for (Common::Array<File>::const_iterator file = _files.begin(); file != _files.end(); ++file) + if (!file->name.compareToIgnoreCase(fileName)) + return true; + + return false; +} + +Common::MemoryReadStream *VMDDecoder::getEmbeddedFile(const Common::String &fileName) const { + const File *file = 0; + + for (Common::Array<File>::const_iterator it = _files.begin(); it != _files.end(); ++it) + if (!it->name.compareToIgnoreCase(fileName)) { + file = &*it; + break; + } + + if (!file) + return 0; + + if ((file->size - 20) != file->realSize) { + warning("VMDDecoder::getEmbeddedFile(): Sizes for \"%s\" differ! (%d, %d)", + fileName.c_str(), (file->size - 20), file->realSize); + return 0; + } + + if (!_stream->seek(file->offset)) { + warning("VMDDecoder::getEmbeddedFile(): Can't seek to offset %d to (file \"%s\")", + file->offset, fileName.c_str()); + return 0; + } + + byte *data = (byte *) malloc(file->realSize); + if (_stream->read(data, file->realSize) != file->realSize) { + free(data); + warning("VMDDecoder::getEmbeddedFile(): Couldn't read %d bytes (file \"%s\")", + file->realSize, fileName.c_str()); + } + + Common::MemoryReadStream *stream = + new Common::MemoryReadStream(data, file->realSize, DisposeAfterUse::YES); + + return stream; +} + +int32 VMDDecoder::getSubtitleIndex() const { + return _subtitle; +} + +} // End of namespace Graphics + +#endif // GRAPHICS_VIDEO_COKTELDECODER_H diff --git a/graphics/video/coktel_decoder.h b/graphics/video/coktel_decoder.h new file mode 100644 index 0000000000..97be9df44b --- /dev/null +++ b/graphics/video/coktel_decoder.h @@ -0,0 +1,505 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +// Currently, only GOB and SCI32 games play IMDs and VMDs, so skip compiling if GOB and SCI32 is disabled. +#if !(defined(ENABLE_GOB) || defined(ENABLE_SCI32) || defined(DYNAMIC_MODULES)) + +// Do not compile the CoktelDecoder code + +#else + +#ifndef GRAPHICS_VIDEO_COKTELDECODER_H +#define GRAPHICS_VIDEO_COKTELDECODER_H + +#include "common/list.h" +#include "common/array.h" +#include "common/rect.h" + +#include "graphics/video/video_decoder.h" + +#include "sound/mixer.h" + +namespace Audio { + class QueuingAudioStream; +} + +namespace Graphics { + +class Codec; + +class CoktelDecoder : public FixedRateVideoDecoder { +public: + struct State { + /** Set accordingly to what was done. */ + uint32 flags; + /** The id of the spoken words. */ + uint16 speechId; + + State(); + }; + + CoktelDecoder(Audio::Mixer *mixer, + Audio::Mixer::SoundType soundType = Audio::Mixer::kPlainSoundType); + ~CoktelDecoder(); + + virtual bool seek(int32 frame, int whence = SEEK_SET, bool restart = false) = 0; + + /** Draw directly onto the specified video memory. */ + void setSurfaceMemory(void *mem, uint16 width, uint16 height, uint8 bpp); + /** Reset the video memory. */ + void setSurfaceMemory(); + + const Surface *getSurface() const; + + /** Draw the video starting at this position within the video memory. */ + virtual void setXY(uint16 x, uint16 y); + /** Draw the video at the default position. */ + void setXY(); + + /** Override the video's frame rate. */ + void setFrameRate(Common::Rational frameRate); + + /** Get the video's default X position. */ + uint16 getDefaultX() const; + /** Get the video's default Y position. */ + uint16 getDefaultY() const; + + /** Return a list of rectangles that changed in the last frame. */ + const Common::List<Common::Rect> &getDirtyRects() const; + + bool hasPalette() const; + + bool hasSound() const; + bool isSoundEnabled() const; + bool isSoundPlaying() const; + + void enableSound(); + void disableSound(); + + /** Return the coordinates of the specified frame. */ + virtual bool getFrameCoords(int16 frame, int16 &x, int16 &y, int16 &width, int16 &height); + + /** Return whether that video has any embedded files. */ + virtual bool hasEmbeddedFiles() const; + + /** Return whether that embedded file exists. */ + virtual bool hasEmbeddedFile(const Common::String &fileName) const; + + /** Return that embedded file. */ + virtual Common::MemoryReadStream *getEmbeddedFile(const Common::String &fileName) const; + + /** Return the current subtitle index. */ + virtual int32 getSubtitleIndex() const; + + + // VideoDecoder interface + + void close(); + + uint16 getWidth() const; + uint16 getHeight() const; + + uint32 getFrameCount() const; + + byte *getPalette(); + bool hasDirtyPalette() const; + + + // FixedRateVideoDecoder interface + + uint32 getTimeToNextFrame() const; + +protected: + enum SoundStage { + kSoundNone = 0, ///< No sound. + kSoundLoaded = 1, ///< Sound loaded. + kSoundPlaying = 2 ///< Sound is playing. + }; + + enum Features { + kFeaturesNone = 0x0000, + kFeaturesPalette = 0x0008, ///< Has an own palette. + kFeaturesDataSize = 0x0020, ///< Suggests a data size. + kFeaturesSound = 0x0040, ///< Has sound. + kFeaturesFrameCoords = 0x0080, ///< Has specific frame coordinates. + kFeaturesStdCoords = 0x0100, ///< Has general standard coordinates. + kFeaturesFramePos = 0x0200, ///< Has a frame positions table. + kFeaturesVideo = 0x0400 ///< Has video. + }; + + Audio::Mixer *_mixer; + Audio::Mixer::SoundType _soundType; + + uint16 _width; + uint16 _height; + + uint16 _x; + uint16 _y; + + uint16 _defaultX; + uint16 _defaultY; + + uint32 _features; + + uint32 _frameCount; + + byte _palette[768]; + bool _paletteDirty; + + bool _ownSurface; + Surface _surface; + + Common::List<Common::Rect> _dirtyRects; + + Common::Rational _frameRate; + + // Current sound state + bool _hasSound; + bool _soundEnabled; + SoundStage _soundStage; + + Audio::QueuingAudioStream *_audioStream; + Audio::SoundHandle _audioHandle; + + bool evaluateSeekFrame(int32 &frame, int whence) const; + + // Surface management + bool hasSurface(); + void createSurface(); + void freeSurface(); + + // Decompression + void deLZ77(byte *dest, byte *src); + void deRLE(byte *&destPtr, const byte *&srcPtr, int16 destLen, int16 srcLen); + + // Block rendering + void renderBlockWhole (const byte *src, Common::Rect &rect); + void renderBlockWhole4X (const byte *src, Common::Rect &rect); + void renderBlockWhole2Y (const byte *src, Common::Rect &rect); + void renderBlockSparse (const byte *src, Common::Rect &rect); + void renderBlockSparse2Y(const byte *src, Common::Rect &rect); + void renderBlockRLE (const byte *src, Common::Rect &rect); + + // Sound helper functions + inline void unsignedToSigned(byte *buffer, int length); + + + // FixedRateVideoDecoder interface + + Common::Rational getFrameRate() const; +}; + +class PreIMDDecoder : public CoktelDecoder { +public: + PreIMDDecoder(uint16 width, uint16 height, Audio::Mixer *mixer, + Audio::Mixer::SoundType soundType = Audio::Mixer::kPlainSoundType); + ~PreIMDDecoder(); + + bool seek(int32 frame, int whence = SEEK_SET, bool restart = false); + + + // VideoDecoder interface + + bool load(Common::SeekableReadStream *stream); + void close(); + + bool isVideoLoaded() const; + + Surface *decodeNextFrame(); + + PixelFormat getPixelFormat() const; + +private: + Common::SeekableReadStream *_stream; + + // Buffer for processed frame data + byte *_videoBuffer; + uint32 _videoBufferSize; + + // Frame decoding + void processFrame(); + void renderFrame(); +}; + +class IMDDecoder : public CoktelDecoder { +public: + IMDDecoder(Audio::Mixer *mixer, Audio::Mixer::SoundType soundType = Audio::Mixer::kPlainSoundType); + ~IMDDecoder(); + + bool seek(int32 frame, int whence = SEEK_SET, bool restart = false); + + void setXY(uint16 x, uint16 y); + + + // VideoDecoder interface + + bool load(Common::SeekableReadStream *stream); + void close(); + + bool isVideoLoaded() const; + + Surface *decodeNextFrame(); + + PixelFormat getPixelFormat() const; + +private: + enum Command { + kCommandNextSound = 0xFF00, + kCommandStartSound = 0xFF01, + + kCommandBreak = 0xFFF0, + kCommandBreakSkip0 = 0xFFF1, + kCommandBreakSkip16 = 0xFFF2, + kCommandBreakSkip32 = 0xFFF3, + kCommandBreakMask = 0xFFF8, + + kCommandPalette = 0xFFF4, + kCommandVideoData = 0xFFFC, + + kCommandJump = 0xFFFD + }; + + struct Coord { + int16 left; + int16 top; + int16 right; + int16 bottom; + }; + + Common::SeekableReadStream *_stream; + + byte _version; + + // Standard coordinates gives by the header + int16 _stdX; + int16 _stdY; + int16 _stdWidth; + int16 _stdHeight; + + uint32 _flags; + + uint32 _firstFramePos; ///< Position of the first frame's data within the stream. + uint32 *_framePos; ///< Positions of all frames. + Coord *_frameCoords; ///< Coordinates of all frames. + + // Buffer for raw frame data + byte *_frameData; + uint32 _frameDataSize; + uint32 _frameDataLen; + + // Buffer for processed frame data + byte *_videoBuffer; + uint32 _videoBufferSize; + + // Sound properties + uint16 _soundFlags; + int16 _soundFreq; + int16 _soundSliceSize; + int16 _soundSlicesCount; + + // Loading helper functions + bool loadCoordinates(); + bool loadFrameTableOffsets(uint32 &framePosPos, uint32 &frameCoordsPos); + bool assessVideoProperties(); + bool assessAudioProperties(); + bool loadFrameTables(uint32 framePosPos, uint32 frameCoordsPos); + + // Frame decoding + void processFrame(); + Common::Rect calcFrameCoords(uint32 frame); + + // Video + bool renderFrame(Common::Rect &rect); + + // Sound + void nextSoundSlice(bool hasNextCmd); + bool initialSoundSlice(bool hasNextCmd); + void emptySoundSlice(bool hasNextCmd); +}; + +class VMDDecoder : public CoktelDecoder { +public: + VMDDecoder(Audio::Mixer *mixer, Audio::Mixer::SoundType soundType = Audio::Mixer::kPlainSoundType); + ~VMDDecoder(); + + bool seek(int32 frame, int whence = SEEK_SET, bool restart = false); + + void setXY(uint16 x, uint16 y); + + bool getFrameCoords(int16 frame, int16 &x, int16 &y, int16 &width, int16 &height); + + bool hasEmbeddedFiles() const; + bool hasEmbeddedFile(const Common::String &fileName) const; + Common::MemoryReadStream *getEmbeddedFile(const Common::String &fileName) const; + + int32 getSubtitleIndex() const; + + + // VideoDecoder interface + + bool load(Common::SeekableReadStream *stream); + void close(); + + bool isVideoLoaded() const; + + Surface *decodeNextFrame(); + + PixelFormat getPixelFormat() const; + +private: + enum PartType { + kPartTypeSeparator = 0, + kPartTypeAudio = 1, + kPartTypeVideo = 2, + kPartTypeFile = 3, + kPartType4 = 4, + kPartTypeSubtitle = 5 + }; + + enum AudioFormat { + kAudioFormat8bitRaw = 0, + kAudioFormat16bitDPCM = 1, + kAudioFormat16bitADPCM = 2 + }; + + struct File { + Common::String name; + + uint32 offset; + uint32 size; + uint32 realSize; + + File(); + }; + + struct Part { + PartType type; + byte field_1; + byte field_E; + uint32 size; + int16 left; + int16 top; + int16 right; + int16 bottom; + uint16 id; + byte flags; + + Part(); + }; + + struct Frame { + uint32 offset; + Part *parts; + + Frame(); + ~Frame(); + }; + + // Tables for the audio decompressors + static const uint16 _tableDPCM[128]; + static const int32 _tableADPCM[]; + static const int32 _tableADPCMStep[]; + + Common::SeekableReadStream *_stream; + + byte _version; + uint32 _flags; + + uint32 _frameInfoOffset; + uint16 _partsPerFrame; + Frame *_frames; + + Common::Array<File> _files; + + // Sound properties + uint16 _soundFlags; + int16 _soundFreq; + int16 _soundSliceSize; + int16 _soundSlicesCount; + byte _soundBytesPerSample; + byte _soundStereo; // (0: mono, 1: old-style stereo, 2: new-style stereo) + uint32 _soundHeaderSize; + uint32 _soundDataSize; + AudioFormat _audioFormat; + + // Video properties + bool _hasVideo; + uint32 _videoCodec; + byte _blitMode; + byte _bytesPerPixel; + + uint32 _firstFramePos; ///< Position of the first frame's data within the stream. + + // Buffer for raw frame data + byte *_frameData; + uint32 _frameDataSize; + uint32 _frameDataLen; + + // Buffer for processed frame data + byte *_videoBuffer; + uint32 _videoBufferSize; + + bool _externalCodec; + Codec *_codec; + + int32 _subtitle; + + // Loading helper functions + bool assessVideoProperties(); + bool assessAudioProperties(); + bool readFrameTable(int &numFiles); + bool readFiles(); + + // Frame decoding + void processFrame(); + + // Video + bool renderFrame(Common::Rect &rect); + + // Sound + void emptySoundSlice (uint32 size); + void filledSoundSlice (uint32 size); + void filledSoundSlices(uint32 size, uint32 mask); + + uint8 evaluateMask(uint32 mask, bool *fillInfo, uint8 &max); + + // Generating sound slices + byte *soundEmpty (uint32 &size); + byte *sound8bitRaw (uint32 &size); + byte *sound16bitDPCM (uint32 &size); + byte *sound16bitADPCM(uint32 &size); + + // Sound decompression + byte *deDPCM (const byte *data, uint32 &size, int32 init[2]); + byte *deADPCM(const byte *data, uint32 &size, int32 init, int32 index); + + bool getPartCoords(int16 frame, PartType type, int16 &x, int16 &y, int16 &width, int16 &height); +}; + +} // End of namespace Graphics + +#endif // GRAPHICS_VIDEO_COKTELDECODER_H + +#endif // Engine and dynamic plugins guard diff --git a/graphics/video/coktelvideo/coktelvideo.cpp b/graphics/video/coktelvideo/coktelvideo.cpp deleted file mode 100644 index 9ee9fd68d0..0000000000 --- a/graphics/video/coktelvideo/coktelvideo.cpp +++ /dev/null @@ -1,2657 +0,0 @@ -/* 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. - * - * $URL$ - * $Id$ - * - */ - -#include "graphics/video/coktelvideo/coktelvideo.h" - -#ifdef GRAPHICS_VIDEO_COKTELVIDEO_H - -#include "common/endian.h" -#include "common/system.h" - -#include "graphics/dither.h" -#include "graphics/video/coktelvideo/indeo3.h" - -#include "sound/audiostream.h" -#include "sound/decoders/raw.h" - -namespace Graphics { - -PreImd::PreImd() { - zeroData(); - - _forcedWidth = 0; - _forcedHeight = 0; -} - -PreImd::PreImd(int16 width, int16 height) { - zeroData(); - - _forcedWidth = width; - _forcedHeight = height; -} - -PreImd::~PreImd() { - deleteData(); - zeroData(); -} - -uint32 PreImd::getFeatures() const { - return _features; -} - -uint16 PreImd::getFlags() const { - return _flags; -} - -int16 PreImd::getX() const { - return _x; -} - -int16 PreImd::getY() const { - return _y; -} - -int16 PreImd::getWidth() const { - return _width; -} - -int16 PreImd::getHeight() const { - return _height; -} - -uint16 PreImd::getFramesCount() const { - return _framesCount; -} - -uint16 PreImd::getCurrentFrame() const { - return _curFrame; -} - -void PreImd::setFrameRate(int16 frameRate) { - if (frameRate == 0) - frameRate = 1; - - _frameRate = frameRate; - _frameLength = 1000 / _frameRate; -} - -int16 PreImd::getFrameRate() const { - return 0; -} - -uint32 PreImd::getSyncLag() const { - return 0; -} - -const byte *PreImd::getPalette() const { - return _palette; -} - -bool PreImd::getFrameCoords(int16 frame, - int16 &x, int16 &y, int16 &width, int16 &height) { - - return false; -} - -bool PreImd::hasExtraData() const { - return false; -} - -bool PreImd::hasExtraData(const char *fileName) const { - return false; -} - -Common::MemoryReadStream *PreImd::getExtraData(const char *fileName) { - return 0; -} - -bool PreImd::load(Common::SeekableReadStream *stream) { - // Since PreIMDs don't have any width and height values stored, - // we need them to be specified in the constructor - assert((_forcedWidth > 0) && (_forcedHeight > 0)); - - unload(); - - _stream = stream; - - _stream->seek(0); - - _framesCount = _stream->readUint16LE(); - - _width = _forcedWidth; - _height = _forcedHeight; - - _vidBufferSize = _width * _height; - _vidBuffer = new byte[_vidBufferSize]; - memset(_vidBuffer, 0, _vidBufferSize); - - return true; -} - -void PreImd::unload() { - clear(); -} - -void PreImd::setXY(int16 x, int16 y) { - _x = x; - _y = y; -} - -void PreImd::setVideoMemory(byte *vidMem, uint16 width, uint16 height) { - deleteVidMem(); - - _hasOwnVidMem = false; - _vidMem = vidMem; - _vidMemWidth = width; - _vidMemHeight = height; -} - -void PreImd::setVideoMemory() { - deleteVidMem(); - - if ((_width > 0) && (_height > 0)) { - setXY(0, 0); - _hasOwnVidMem = true; - _vidMem = new byte[_width * _height]; - _vidMemWidth = _width; - _vidMemHeight = _height; - - memset(_vidMem, 0, _width * _height); - } -} - -void PreImd::setDoubleMode(bool doubleMode) { -} - -void PreImd::enableSound(Audio::Mixer &mixer) { -} - -void PreImd::disableSound() { -} - -bool PreImd::isSoundPlaying() const { - return false; -} - -void PreImd::seekFrame(int32 frame, int16 whence, bool restart) { - if (!_stream) - // Nothing to do - return; - - // Find the frame to which to seek - if (whence == SEEK_CUR) - frame += _curFrame; - else if (whence == SEEK_END) - frame = _framesCount - frame - 1; - else if (whence != SEEK_SET) - return; - - if ((frame < 0) || (frame >= _framesCount) || (frame == _curFrame)) - // Nothing to do - return; - - // Run through the frames - _curFrame = 0; - _stream->seek(2); - while (_curFrame != frame) { - uint16 frameSize = _stream->readUint16LE(); - - _stream->skip(frameSize + 2); - - _curFrame++; - } -} - -CoktelVideo::State PreImd::nextFrame() { - return processFrame(_curFrame); -} - -uint32 PreImd::getFrameWaitTime() { - return _frameLength; -} - -void PreImd::waitEndFrame() { - uint32 waitTime = getFrameWaitTime(); - if (waitTime > 0) - g_system->delayMillis(waitTime); -} - -void PreImd::copyCurrentFrame(byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp) { -} - -void PreImd::zeroVidMem() { - _hasOwnVidMem = false; - _vidMem = 0; - _vidMemWidth = 0; - _vidMemHeight = 0; -} - -void PreImd::deleteVidMem() { - if (_hasOwnVidMem) - delete[] _vidMem; - - zeroVidMem(); -} - -void PreImd::zeroData() { - _stream = 0; - - _features = 0; - _flags = 0; - - _x = 0; - _y = 0; - _width = 0; - _height = 0; - - _framesCount = 0; - _curFrame = 0; - _frameRate = 12; - _frameLength = 1000 / _frameRate; - - memset(_palette, 0, 768); - - zeroVidMem(); - - _vidBufferSize = 0; - _vidBuffer = 0; -} - -void PreImd::deleteData() { - deleteVidMem(); - - delete[] _vidBuffer; -} - -void PreImd::clear() { - deleteData(); - zeroData(); -} - -CoktelVideo::State PreImd::processFrame(uint16 frame) { - assert((_width > 0) && (_height > 0)); - - State state; - - if (!_stream || (frame >= _framesCount)) { - state.flags = kStateBreak; - return state; - } - - if (frame != _curFrame) { - state.flags |= kStateSeeked; - seekFrame(frame); - } - - if (!_vidMem) - setVideoMemory(); - - uint16 frameSize = _stream->readUint16LE(); - - uint32 nextFramePos = _stream->pos() + frameSize + 2; - - byte cmd; - - cmd = _stream->readByte(); - frameSize--; - - bool hasPalette = false; - if (cmd == 0) { - // Palette. Ignored by Fascination, though - - hasPalette = true; - - _stream->read(_palette, 768); - - frameSize -= 769; - - cmd = _stream->readByte(); - } - - if (cmd != 2) { - // Partial frame data - - uint32 fSize = frameSize; - uint32 vidSize = _vidBufferSize; - byte *vidBuffer = _vidBuffer; - - while ((fSize > 0) && (vidSize > 0)) { - uint32 n = _stream->readByte(); - fSize--; - - if ((n & 0x80) != 0) { - // Data - - n = MIN<uint32>((n & 0x7F) + 1, MIN(fSize, vidSize)); - - _stream->read(vidBuffer, n); - - vidBuffer += n; - vidSize -= n; - fSize -= n; - - } else { - // Skip - - n = MIN<uint32>(n + 1, vidSize); - - vidBuffer += n; - vidSize -= n; - } - } - - } else { - // Full direct frame - - uint32 vidSize = MIN<uint32>(_vidBufferSize, frameSize); - - _stream->read(_vidBuffer, vidSize); - } - - renderFrame(); - - _stream->seek(nextFramePos); - - _curFrame++; - - // Complete frame needs to be updated - state.left = _x; - state.top = _y; - state.right = _x + _width - 1; - state.bottom = _y + _height - 1; - - return state; -} - -// Simple blit -void PreImd::renderFrame() { - assert(_vidMem); - - uint16 w = MIN<uint16>(_vidMemWidth , _width); - uint16 h = MIN<uint16>(_vidMemHeight, _height); - - const byte *src = _vidBuffer; - byte *dst = _vidMem + (_y * _vidMemWidth) + _x; - - uint32 frameDataSize = _vidBufferSize; - - while (h-- > 0) { - uint32 n = MIN<uint32>(w, frameDataSize); - - memcpy(dst, src, n); - - src += _width; - dst += _vidMemWidth; - - frameDataSize -= n; - } -} - - -Imd::Imd() { - zeroData(); -} - -Imd::~Imd() { - deleteData(); - zeroData(); -} - -void Imd::setFrameRate(int16 frameRate) { - if (frameRate == 0) - frameRate = 1; - - _frameRate = frameRate; - _frameLength = 1000 / _frameRate; -} - -int16 Imd::getFrameRate() const { - if (!_hasSound) - return _frameRate; - - return 1000 / (_soundSliceLength >> 16); -} - -uint32 Imd::getSyncLag() const { - return _skipFrames; -} - -bool Imd::loadCoordinates() { - // Standard coordinates - if (_version >= 3) { - _stdX = _stream->readUint16LE(); - if (_stdX > 1) { - warning("IMD: More than one standard coordinate quad found (%d)", _stdX); - return false; - } - if (_stdX != 0) { - _stdX = _stream->readSint16LE(); - _stdY = _stream->readSint16LE(); - _stdWidth = _stream->readSint16LE(); - _stdHeight = _stream->readSint16LE(); - _features |= kFeaturesStdCoords; - } else - _stdX = -1; - } else - _stdX = -1; - - return true; -} - -bool Imd::loadFrameTableOffsets(uint32 &framesPosPos, uint32 &framesCoordsPos) { - framesPosPos = 0; - framesCoordsPos = 0; - - // Frame positions - if (_version >= 4) { - framesPosPos = _stream->readUint32LE(); - if (framesPosPos != 0) { - _framesPos = new uint32[_framesCount]; - assert(_framesPos); - _features |= kFeaturesFramesPos; - } - } - - // Frame coordinates - if (_features & kFeaturesFrameCoords) - framesCoordsPos = _stream->readUint32LE(); - - return true; -} - -bool Imd::assessVideoProperties() { - // Sizes of the frame data and extra video buffer - if (_features & kFeaturesDataSize) { - _frameDataSize = _stream->readUint16LE(); - if (_frameDataSize == 0) { - _frameDataSize = _stream->readUint32LE(); - _vidBufferSize = _stream->readUint32LE(); - } else - _vidBufferSize = _stream->readUint16LE(); - } else { - _frameDataSize = _width * _height + 500; - if (!(_flags & 0x100) || (_flags & 0x1000)) - _vidBufferSize = _frameDataSize; - } - - // Allocating working memory - _frameData = new byte[_frameDataSize + 500]; - assert(_frameData); - memset(_frameData, 0, _frameDataSize + 500); - _vidBuffer = new byte[_vidBufferSize + 500]; - assert(_vidBuffer); - memset(_vidBuffer, 0, _vidBufferSize + 500); - - return true; -} - -bool Imd::assessAudioProperties() { - if (_features & kFeaturesSound) { - _soundFreq = _stream->readSint16LE(); - _soundSliceSize = _stream->readSint16LE(); - _soundSlicesCount = _stream->readSint16LE(); - - if (_soundFreq < 0) - _soundFreq = -_soundFreq; - - if (_soundSlicesCount < 0) - _soundSlicesCount = -_soundSlicesCount - 1; - - if (_soundSlicesCount > 40) { - warning("Imd::load(): More than 40 sound slices found (%d)", _soundSlicesCount); - return false; - } - - _soundSliceLength = (uint32) (((double) (1000 << 16)) / - ((double) _soundFreq / (double) _soundSliceSize)); - _frameLength = _soundSliceLength >> 16; - - _soundStage = 1; - _hasSound = true; - - _audioStream = Audio::makeQueuingAudioStream(_soundFreq, false); - } else - _frameLength = 1000 / _frameRate; - - return true; -} - -bool Imd::loadFrameTables(uint32 framesPosPos, uint32 framesCoordsPos) { - // Positions table - if (_framesPos) { - _stream->seek(framesPosPos, SEEK_SET); - for (int i = 0; i < _framesCount; i++) - _framesPos[i] = _stream->readUint32LE(); - } - - // Coordinates table - if (_features & kFeaturesFrameCoords) { - _stream->seek(framesCoordsPos, SEEK_SET); - _frameCoords = new Coord[_framesCount]; - assert(_frameCoords); - for (int i = 0; i < _framesCount; i++) { - _frameCoords[i].left = _stream->readSint16LE(); - _frameCoords[i].top = _stream->readSint16LE(); - _frameCoords[i].right = _stream->readSint16LE(); - _frameCoords[i].bottom = _stream->readSint16LE(); - } - } - - return true; -} - -bool Imd::load(Common::SeekableReadStream *stream) { - unload(); - - _stream = stream; - - uint16 handle; - - handle = _stream->readUint16LE(); - _version = _stream->readByte(); - - // Version checking - if ((handle != 0) || (_version < 2)) { - warning("Imd::load(): Version incorrect (%d,%X)", handle, _version); - unload(); - return false; - } - - // Rest header - _features = _stream->readByte(); - _framesCount = _stream->readUint16LE(); - _x = _stream->readSint16LE(); - _y = _stream->readSint16LE(); - _width = _stream->readSint16LE(); - _height = _stream->readSint16LE(); - _flags = _stream->readUint16LE(); - _firstFramePos = _stream->readUint16LE(); - - // IMDs always have video - _features |= kFeaturesVideo; - // IMDs always have palettes - _features |= kFeaturesPalette; - - // Palette - _stream->read((byte *) _palette, 768); - - if (!loadCoordinates()) { - unload(); - return false; - } - - uint32 framesPosPos, frameCoordsPos; - if (!loadFrameTableOffsets(framesPosPos, frameCoordsPos)) { - unload(); - return false; - } - - if (!assessAudioProperties()) { - unload(); - return false; - } - - if (!assessVideoProperties()) { - unload(); - return false; - } - - if (!loadFrameTables(framesPosPos, frameCoordsPos)) { - unload(); - return false; - } - - // Seek to the first frame - _stream->seek(_firstFramePos, SEEK_SET); - - return true; -} - -void Imd::unload() { - clear(); -} - -void Imd::setXY(int16 x, int16 y) { - // Adjusting the standard coordinates - if (_stdX != -1) { - if (x >= 0) - _stdX = _stdX - _x + x; - if (y >= 0) - _stdY = _stdY - _y + y; - } - - // Going through the coordinate table as well - if (_frameCoords) { - for (int i = 0; i < _framesCount; i++) { - if (_frameCoords[i].left != -1) { - if (x >= 0) { - _frameCoords[i].left = _frameCoords[i].left - _x + x; - _frameCoords[i].right = _frameCoords[i].right - _x + x; - } - if (y >= 0) { - _frameCoords[i].top = _frameCoords[i].top - _y + y; - _frameCoords[i].bottom = _frameCoords[i].bottom - _y + y; - } - } - } - } - - if (x >= 0) - _x = x; - if (y >= 0) - _y = y; -} - -void Imd::enableSound(Audio::Mixer &mixer) { - // Sanity check - if (mixer.getOutputRate() == 0) - return; - - // Only possible on the first frame - if (_curFrame > 0) - return; - - _mixer = &mixer; - _soundEnabled = true; -} - -void Imd::disableSound() { - if (_audioStream) { - - if (_soundStage == 2) { - _audioStream->finish(); - _mixer->stopHandle(_audioHandle); - } else - delete _audioStream; - - _audioStream = 0; - _soundStage = 0; - } - _soundEnabled = false; - _mixer = 0; -} - -bool Imd::isSoundPlaying() const { - if (_audioStream && _mixer && _mixer->isSoundHandleActive(_audioHandle)) - return true; - - return false; -} - -void Imd::seekFrame(int32 frame, int16 whence, bool restart) { - if (!_stream) - // Nothing to do - return; - - // Find the frame to which to seek - if (whence == SEEK_CUR) - frame += _curFrame; - else if (whence == SEEK_END) - frame = _framesCount - frame - 1; - else if (whence != SEEK_SET) - return; - - if ((frame < 0) || (frame >= _framesCount) || (frame == _curFrame)) - // Nothing to do - return; - - // Try every possible way to find a file offset to that frame - uint32 framePos = 0; - if (frame == 0) { - framePos = _firstFramePos; - } else if (frame == 1) { - framePos = _firstFramePos; - _stream->seek(framePos, SEEK_SET); - framePos += _stream->readUint16LE() + 4; - } else if (_framesPos) { - framePos = _framesPos[frame]; - } else if (restart && (_soundStage == 0)) { - for (int i = ((frame > _curFrame) ? _curFrame : 0); i <= frame; i++) - processFrame(i); - return; -//FIXME: This workaround is needed for Bargon Attack intro, which was broken by a fix concerning Ween in r42995. - } else if (_soundStage == 0) { - warning("Imd::seekFrame(): Avoiding \"Frame %d is not directly accessible\"", frame); - _curFrame = frame; -//End of fixme - } else - error("Imd::seekFrame(): Frame %d is not directly accessible", frame); - - // Seek - _stream->seek(framePos); - _curFrame = frame; -} - -CoktelVideo::State Imd::nextFrame() { - return processFrame(_curFrame); -} - -uint32 Imd::getFrameWaitTime() { - if (_soundEnabled && _hasSound) {; - if (_soundStage != 2) - return 0; - - if (_skipFrames == 0) { - int32 waitTime = (int16) (((_curFrame * _soundSliceLength) - - (_mixer->getSoundElapsedTime(_audioHandle) << 16)) >> 16); - - if (waitTime < 0) { - _skipFrames = -waitTime / (_soundSliceLength >> 16); - warning("Video A/V sync broken, skipping %d frame(s)", _skipFrames + 1); - } else if (waitTime > 0) - return waitTime; - - } else - _skipFrames--; - } else - return _frameLength; - - return 0; -} - -void Imd::copyCurrentFrame(byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp) { - - if (!_vidMem) - return; - - if (((left + width) > _width) || ((top + height) > _height)) - return; - - dest += pitch * y; - byte *vidMem = _vidMem + _width * top; - - if (transp < 0) { - // No transparency - if ((x > 0) || (left > 0) || (pitch != _width) || (width != _width)) { - // Copy row-by-row - for (int i = 0; i < height; i++) { - byte *d = dest + x; - byte *s = vidMem + left; - - memcpy(d, s, width); - - dest += pitch; - vidMem += _width; - } - } else - // Dimensions fit, copy everything at once - memcpy(dest, vidMem, width * height); - - return; - } - - for (int i = 0; i < height; i++) { - byte *d = dest + x; - byte *s = vidMem + left; - - for (int j = 0; j < width; j++) { - if (*s != transp) - *d = *s; - - s++; - d++; - } - - dest += pitch; - vidMem += _width; - } - -} - -void Imd::zeroData() { - PreImd::zeroData(); - - _version = 0; - - _stdX = 0; - _stdY = 0; - _stdWidth = 0; - _stdHeight = 0; - - _framesPos = 0; - _firstFramePos = 0; - _frameCoords = 0; - - _frameDataSize = 0; - _frameData = 0; - _frameDataLen = 0; - - _hasSound = false; - _soundEnabled = false; - _soundStage = 0; - _skipFrames = 0; - - _soundFlags = 0; - _soundFreq = 0; - _soundSliceSize = 0; - _soundSlicesCount = 0; - _soundSliceLength = 0; - _audioStream = 0; - - _lastFrameTime = 0; -} - -void Imd::deleteData() { - PreImd::deleteData(); - - delete[] _framesPos; - delete[] _frameCoords; - delete[] _frameData; - - disableSound(); -} - -void Imd::clear() { - deleteData(); - zeroData(); -} - -void Imd::nextSoundSlice(bool hasNextCmd) { - if (hasNextCmd || !_soundEnabled) { - _stream->seek(_soundSliceSize, SEEK_CUR); - return; - } - - byte *soundBuf = (byte *)malloc(_soundSliceSize); - - _stream->read(soundBuf, _soundSliceSize); - unsignedToSigned(soundBuf, _soundSliceSize); - - _audioStream->queueBuffer(soundBuf, _soundSliceSize, DisposeAfterUse::YES, 0); -} - -bool Imd::initialSoundSlice(bool hasNextCmd) { - int dataLength = _soundSliceSize * _soundSlicesCount; - - if (hasNextCmd || !_soundEnabled) { - _stream->seek(dataLength, SEEK_CUR); - return false; - } - - byte *soundBuf = (byte *)malloc(dataLength); - - _stream->read(soundBuf, dataLength); - unsignedToSigned(soundBuf, dataLength); - - _audioStream->queueBuffer(soundBuf, dataLength, DisposeAfterUse::YES, 0); - - return _soundStage == 1; -} - -void Imd::emptySoundSlice(bool hasNextCmd) { - if (hasNextCmd || !_soundEnabled) - return; - - byte *soundBuf = (byte *)malloc(_soundSliceSize); - - memset(soundBuf, 0, _soundSliceSize); - - _audioStream->queueBuffer(soundBuf, _soundSliceSize, DisposeAfterUse::YES, 0); -} - -void Imd::videoData(uint32 size, State &state) { - _stream->read(_frameData, size); - _frameDataLen = size; - -/* - if (_vidMemWidth <= state.right) { - state.left = 0; - state.right -= state.left; - } - if (_vidMemWidth <= state.right) - state.right = _vidMemWidth - 1; - if (_vidMemHeight <= state.bottom) { - state.top = 0; - state.bottom -= state.top; - } - if (_vidMemHeight <= state.bottom) - state.bottom = _vidMemHeight -1; -*/ - - state.flags |= renderFrame(state.left, state.top, state.right, state.bottom); - state.flags |= _frameData[0]; -} - -void Imd::calcFrameCoords(uint16 frame, State &state) { - if (_stdX != -1) { - state.left = _stdX; - state.top = _stdY; - state.right = _stdWidth + state.left - 1; - state.bottom = _stdHeight + state.top - 1; - state.flags |= kStateStdCoords; - } - if (_frameCoords && - (_frameCoords[frame].left != -1)) { - state.left = _frameCoords[frame].left; - state.top = _frameCoords[frame].top; - state.right = _frameCoords[frame].right; - state.bottom = _frameCoords[frame].bottom; - state.flags |= kStateFrameCoords; - } -} - -CoktelVideo::State Imd::processFrame(uint16 frame) { - State state; - uint32 cmd = 0; - bool hasNextCmd = false; - bool startSound = false; - - if (!_stream || (frame >= _framesCount)) { - state.flags = kStateBreak; - return state; - } - - if (frame != _curFrame) { - state.flags |= kStateSeeked; - seekFrame(frame); - } - - if (!_vidMem) - setVideoMemory(); - - state.left = _x; - state.top = _y; - state.right = _width + state.left - 1; - state.bottom = _height + state.top - 1; - - do { - if (frame != 0) - calcFrameCoords(frame, state); - - cmd = _stream->readUint16LE(); - - if ((cmd & kCommandBreakMask) == kCommandBreak) { - // Flow control - - if (cmd == kCommandBreak) { - _stream->seek(2, SEEK_CUR); - cmd = _stream->readUint16LE(); - } - - // Break - if (cmd == kCommandBreakSkip0) { - state.flags = kStateBreak; - continue; - } else if (cmd == kCommandBreakSkip16) { - cmd = _stream->readUint16LE(); - _stream->seek(cmd, SEEK_CUR); - state.flags = kStateBreak; - continue; - } else if (cmd == kCommandBreakSkip32) { - cmd = _stream->readUint32LE(); - _stream->seek(cmd, SEEK_CUR); - state.flags = kStateBreak; - continue; - } - } - - // Audio - if (_soundStage != 0) { - if (cmd == kCommandNextSound) { - - nextSoundSlice(hasNextCmd); - cmd = _stream->readUint16LE(); - - } else if (cmd == kCommandStartSound) { - - startSound = initialSoundSlice(hasNextCmd); - cmd = _stream->readUint16LE(); - - } else - emptySoundSlice(hasNextCmd); - } - - // Set palette - if (cmd == kCommandPalette) { - _stream->seek(2, SEEK_CUR); - state.flags |= kStatePalette; - - _stream->read(_palette, 768); - cmd = _stream->readUint16LE(); - } - - hasNextCmd = false; - - if (cmd == kCommandJump) { - // Jump to frame - - frame = _stream->readSint16LE(); - if (_framesPos) { - _curFrame = frame; - _stream->seek(_framesPos[frame], SEEK_SET); - - hasNextCmd = true; - state.flags |= kStateJump; - } - - } else if (cmd == kCommandVideoData) { - uint32 size = _stream->readUint32LE() + 2; - - videoData(size, state); - - state.flags |= 1; - - } else if (cmd != 0) { - uint32 size = cmd + 2; - - videoData(size, state); - - } else - state.flags |= kStateNoVideoData; - - } while (hasNextCmd); - - if (startSound && _soundEnabled) { - _mixer->playStream(Audio::Mixer::kSFXSoundType, &_audioHandle, _audioStream); - _skipFrames = 0; - _soundStage = 2; - } - - _curFrame++; - if ((_curFrame == _framesCount) && (_soundStage == 2)) { - _audioStream->finish(); - _mixer->stopHandle(_audioHandle); - _audioStream = 0; - _soundStage = 0; - } - - _lastFrameTime = g_system->getMillis(); - return state; -} - -// A whole, completely filled block -void Imd::renderBlockWhole(byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch) { - - for (int i = 0; i < height; i++) { - memcpy(dest, src, width); - - src += srcPitch; - dest += destPitch; - } -} - -// A quarter-wide whole, completely filled block -void Imd::renderBlockWhole4X(byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch) { - - for (int i = 0; i < height; i++) { - byte *destRow = dest; - const byte *srcRow = src; - - for (int j = 0; j < width; j += 4, destRow += 4, srcRow++) - memset(destRow, *srcRow, 4); - - src += srcPitch; - dest += destPitch; - } -} - -// A half-high whole, completely filled block -void Imd::renderBlockWhole2Y(byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch) { - - while (height > 1) { - memcpy(dest , src, width); - memcpy(dest + destPitch, src, width); - - height -= 2; - dest += 2 * destPitch; - src += srcPitch; - } - - if (height == 1) - memcpy(dest, src, width); -} - -// A sparse block -void Imd::renderBlockSparse(byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch) { - - for (int i = 0; i < height; i++) { - byte *destRow = dest; - int16 pixWritten = 0; - - while (pixWritten < srcPitch) { - int16 pixCount = *src++; - - if (pixCount & 0x80) { // Data - int16 copyCount; - - pixCount = MIN((pixCount & 0x7F) + 1, srcPitch - pixWritten); - copyCount = MAX<int16>(0, MIN<int16>(pixCount, width - pixWritten)); - memcpy(destRow, src, copyCount); - - pixWritten += pixCount; - destRow += pixCount; - src += pixCount; - } else { // "Hole" - pixWritten += pixCount + 1; - destRow += pixCount + 1; - } - - } - - dest += destPitch; - } -} - -// A half-high sparse block -void Imd::renderBlockSparse2Y(byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch) { - - for (int i = 0; i < height; i += 2) { - byte *destRow = dest; - int16 pixWritten = 0; - - while (pixWritten < srcPitch) { - int16 pixCount = *src++; - - if (pixCount & 0x80) { // Data - int16 copyCount; - - pixCount = MIN((pixCount & 0x7F) + 1, srcPitch - pixWritten); - copyCount = MAX<int16>(0, MIN<int16>(pixCount, width - pixWritten)); - memcpy(destRow , src, pixCount); - memcpy(destRow + destPitch, src, pixCount); - - pixWritten += pixCount; - destRow += pixCount; - src += pixCount; - } else { // "Hole" - pixWritten += pixCount + 1; - destRow += pixCount + 1; - } - - } - - dest += destPitch; - } -} - -uint32 Imd::renderFrame(int16 left, int16 top, int16 right, int16 bottom) { - if (!_frameData || !_vidMem || (_width <= 0) || (_height <= 0)) - return 0; - - uint32 retVal = 0; - - int16 width = right - left + 1; - int16 height = bottom - top + 1; - int16 sW = _vidMemWidth; - int16 sH = _vidMemHeight; - - byte *dataPtr = _frameData; - byte *imdVidMem = _vidMem + sW * top + left; - byte *srcPtr; - - uint8 type = *dataPtr++; - - if (type & 0x10) { // Palette data - // One byte index - int index = *dataPtr++; - // 16 entries with each 3 bytes (RGB) - memcpy(_palette + index * 3, dataPtr, MIN((255 - index) * 3, 48)); - - retVal = kStatePalette; - dataPtr += 48; - type ^= 0x10; - } - - srcPtr = dataPtr; - - if (type & 0x80) { - // Frame data is compressed - - srcPtr = _vidBuffer; - type &= 0x7F; - if ((type == 2) && (width == sW)) { - // Directly uncompress onto the video surface - deLZ77(imdVidMem, dataPtr); - return retVal; - } else - deLZ77(srcPtr, dataPtr); - } - - int16 drawWidth = MAX<int16>(0, MIN<int16>(width , sW - left)); - int16 drawHeight = MAX<int16>(0, MIN<int16>(height, sH - top )); - - // Evaluate the block type - if (type == 0x01) - renderBlockSparse (imdVidMem, srcPtr, drawWidth, drawHeight, sW, width); - else if (type == 0x02) - renderBlockWhole (imdVidMem, srcPtr, drawWidth, drawHeight, sW, width); - else if (type == 0x42) - renderBlockWhole4X (imdVidMem, srcPtr, drawWidth, drawHeight, sW, width); - else if ((type & 0x0F) == 0x02) - renderBlockWhole2Y (imdVidMem, srcPtr, drawWidth, drawHeight, sW, width); - else - renderBlockSparse2Y(imdVidMem, srcPtr, drawWidth, drawHeight, sW, width); - - return retVal; -} - -void Imd::deLZ77(byte *dest, byte *src) { - int i; - byte buf[4370]; - uint16 chunkLength; - uint32 frameLength; - uint16 bufPos1; - uint16 bufPos2; - uint16 tmp; - uint8 chunkBitField; - uint8 chunkCount; - bool mode; - - frameLength = READ_LE_UINT32(src); - src += 4; - - if ((READ_LE_UINT16(src) == 0x1234) && (READ_LE_UINT16(src + 2) == 0x5678)) { - src += 4; - bufPos1 = 273; - mode = 1; // 123Ch (cmp al, 12h) - } else { - bufPos1 = 4078; - mode = 0; // 275h (jnz +2) - } - - memset(buf, 32, bufPos1); - chunkCount = 1; - chunkBitField = 0; - - while (frameLength > 0) { - chunkCount--; - if (chunkCount == 0) { - tmp = *src++; - chunkCount = 8; - chunkBitField = tmp; - } - if (chunkBitField % 2) { - chunkBitField >>= 1; - buf[bufPos1] = *src; - *dest++ = *src++; - bufPos1 = (bufPos1 + 1) % 4096; - frameLength--; - continue; - } - chunkBitField >>= 1; - - tmp = READ_LE_UINT16(src); - src += 2; - chunkLength = ((tmp & 0xF00) >> 8) + 3; - - if ((mode && ((chunkLength & 0xFF) == 0x12)) || - (!mode && (chunkLength == 0))) - chunkLength = *src++ + 0x12; - - bufPos2 = (tmp & 0xFF) + ((tmp >> 4) & 0x0F00); - if (((tmp + chunkLength) >= 4096) || - ((chunkLength + bufPos1) >= 4096)) { - - for (i = 0; i < chunkLength; i++, dest++) { - *dest = buf[bufPos2]; - buf[bufPos1] = buf[bufPos2]; - bufPos1 = (bufPos1 + 1) % 4096; - bufPos2 = (bufPos2 + 1) % 4096; - } - - } else if (((tmp + chunkLength) < bufPos1) || - ((chunkLength + bufPos1) < bufPos2)) { - - memcpy(dest, buf + bufPos2, chunkLength); - memmove(buf + bufPos1, buf + bufPos2, chunkLength); - - dest += chunkLength; - bufPos1 += chunkLength; - bufPos2 += chunkLength; - - } else { - - for (i = 0; i < chunkLength; i++, dest++, bufPos1++, bufPos2++) { - *dest = buf[bufPos2]; - buf[bufPos1] = buf[bufPos2]; - } - - } - frameLength -= chunkLength; - - } -} - -inline void Imd::unsignedToSigned(byte *buffer, int length) { - while (length-- > 0) *buffer++ ^= 0x80; -} - - -Vmd::ExtraData::ExtraData() { - memset(name, 0, 16); - - offset = 0; - size = 0; - realSize = 0; -} - - -Vmd::Part::Part() { - type = kPartTypeSeparator; - field_1 = 0; - field_E = 0; - size = 0; - left = 0; - top = 0; - right = 0; - bottom = 0; - id = 0; - flags = 0; -} - - -Vmd::Frame::Frame() { - parts = 0; - offset = 0; -} - -Vmd::Frame::~Frame() { - delete[] parts; -} - - -const uint16 Vmd::_tableDPCM[128] = { - 0x0000, 0x0008, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0060, 0x0070, 0x0080, - 0x0090, 0x00A0, 0x00B0, 0x00C0, 0x00D0, 0x00E0, 0x00F0, 0x0100, 0x0110, 0x0120, - 0x0130, 0x0140, 0x0150, 0x0160, 0x0170, 0x0180, 0x0190, 0x01A0, 0x01B0, 0x01C0, - 0x01D0, 0x01E0, 0x01F0, 0x0200, 0x0208, 0x0210, 0x0218, 0x0220, 0x0228, 0x0230, - 0x0238, 0x0240, 0x0248, 0x0250, 0x0258, 0x0260, 0x0268, 0x0270, 0x0278, 0x0280, - 0x0288, 0x0290, 0x0298, 0x02A0, 0x02A8, 0x02B0, 0x02B8, 0x02C0, 0x02C8, 0x02D0, - 0x02D8, 0x02E0, 0x02E8, 0x02F0, 0x02F8, 0x0300, 0x0308, 0x0310, 0x0318, 0x0320, - 0x0328, 0x0330, 0x0338, 0x0340, 0x0348, 0x0350, 0x0358, 0x0360, 0x0368, 0x0370, - 0x0378, 0x0380, 0x0388, 0x0390, 0x0398, 0x03A0, 0x03A8, 0x03B0, 0x03B8, 0x03C0, - 0x03C8, 0x03D0, 0x03D8, 0x03E0, 0x03E8, 0x03F0, 0x03F8, 0x0400, 0x0440, 0x0480, - 0x04C0, 0x0500, 0x0540, 0x0580, 0x05C0, 0x0600, 0x0640, 0x0680, 0x06C0, 0x0700, - 0x0740, 0x0780, 0x07C0, 0x0800, 0x0900, 0x0A00, 0x0B00, 0x0C00, 0x0D00, 0x0E00, - 0x0F00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x3000, 0x4000 -}; - -const int32 Vmd::_tableADPCM[] = { - 7, 8, 9, 10, 11, 12, 13, 14, - 16, 17, 19, 21, 23, 25, 28, 31, - 34, 37, 41, 45, 50, 55, 60, 66, - 73, 80, 88, 97, 107, 118, 130, 143, - 157, 173, 190, 209, 230, 253, 279, 307, - 337, 371, 408, 449, 494, 544, 598, 658, - 724, 796, 876, 963, 1060, 1166, 1282, 1411, - 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, - 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, - 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, - 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, - 32767, 0 -}; - -const int32 Vmd::_tableADPCMStep[] = { - -1, -1, -1, -1, 2, 4, 6, 8, - -1, -1, -1, -1, 2, 4, 6, 8 -}; - -Vmd::Vmd(Graphics::PaletteLUT *palLUT) : _palLUT(palLUT) { - zeroData(); -} - -Vmd::~Vmd() { - deleteData(); - zeroData(); -} - -bool Vmd::assessVideoProperties() { - if (_bytesPerPixel > 1) - _features |= kFeaturesFullColor; - else - _features |= kFeaturesPalette; - - if ((_version & 2) && !(_version & 8)) { - _externalCodec = true; - _frameDataSize = _vidBufferSize = 0; - } else - _externalCodec = false; - - if (_externalCodec) { - if (_videoCodec == MKID_BE('iv32')) { -#ifdef USE_INDEO3 - _features &= ~kFeaturesPalette; - _features |= kFeaturesFullColor; - _codecIndeo3 = new Indeo3(_width, _height, _palLUT); -#else - warning("Vmd::assessVideoProperties(): Indeo3 decoder not compiled in"); -#endif - } else { - char *fourcc = (char *) &_videoCodec; - - warning("Vmd::assessVideoProperties(): Unknow video codec FourCC \'%c%c%c%c\'", - fourcc[3], fourcc[2], fourcc[1], fourcc[0]); - return false; - } - } - - _preScaleX = 1; - _postScaleX = 1; - - if (_externalCodec) - _blitMode = 0; - else if (_bytesPerPixel == 1) - _blitMode = 0; - else if ((_bytesPerPixel == 2) || (_bytesPerPixel == 3)) { - int n = (_flags & 0x80) ? 2 : 3; - - _blitMode = n - 1; - - if (_bytesPerPixel == 2) { - _preScaleX = n; - _postScaleX = 1; - } else if (_bytesPerPixel == 3) { - _preScaleX = 1; - _postScaleX = n; - } - - _bytesPerPixel = n; - } - - _scaleExternalX = 1; - if (!_externalCodec && !(_flags & 0x1000)) - _scaleExternalX = _bytesPerPixel; - - if (_hasVideo) { - if ((_frameDataSize == 0) || (_frameDataSize > 1048576)) - _frameDataSize = _width * _height + 1000; - if ((_vidBufferSize == 0) || (_vidBufferSize > 1048576)) - _vidBufferSize = _frameDataSize; - - _frameData = new byte[_frameDataSize]; - assert(_frameData); - memset(_frameData, 0, _frameDataSize); - - _vidBuffer = new byte[_vidBufferSize]; - assert(_vidBuffer); - memset(_vidBuffer, 0, _vidBufferSize); - - if (_blitMode > 0) { - _vidMemBuffer = new byte[_bytesPerPixel * (_width * _height + 1000)]; - memset(_vidMemBuffer, 0, _bytesPerPixel * (_width * _height + 1000)); - } - } - -#ifdef USE_INDEO3 - if (_externalCodec && _codecIndeo3) - _features |= kFeaturesSupportsDouble; -#endif - - return true; -} - -bool Vmd::assessAudioProperties() { - bool supportedFormat = true; - - _features |= kFeaturesSound; - - _soundStereo = (_soundFlags & 0x8000) ? 1 : ((_soundFlags & 0x200) ? 2 : 0); - - if (_soundSliceSize < 0) { - _soundBytesPerSample = 2; - _soundSliceSize = -_soundSliceSize; - - if (_soundFlags & 0x10) { - _audioFormat = kAudioFormat16bitADPCM; - _soundHeaderSize = 3; - _soundDataSize = _soundSliceSize >> 1; - - if (_soundStereo > 0) - supportedFormat = false; - - } else { - _audioFormat = kAudioFormat16bitDPCM; - _soundHeaderSize = 1; - _soundDataSize = _soundSliceSize; - - if (_soundStereo == 1) { - supportedFormat = false; - } else if (_soundStereo == 2) { - _soundDataSize = 2 * _soundDataSize + 2; - _soundHeaderSize = 4; - } - - } - } else { - _soundBytesPerSample = 1; - _audioFormat = kAudioFormat8bitDirect; - _soundHeaderSize = 0; - _soundDataSize = _soundSliceSize; - - if (_soundStereo > 0) - supportedFormat = false; - } - - if (!supportedFormat) { - warning("Vmd::assessAudioProperties(): Unsupported audio format: %d bits, encoding %d, stereo %d", - _soundBytesPerSample * 8, _audioFormat, _soundStereo); - return false; - } - - _soundSliceLength = (uint32) (((double) (1000 << 16)) / - ((double) _soundFreq / (double) _soundSliceSize)); - _frameLength = _soundSliceLength >> 16; - - _soundStage = 1; - - _audioStream = Audio::makeQueuingAudioStream(_soundFreq, _soundStereo != 0); - - return true; -} - -void Vmd::readFrameTable(int &numExtraData) { - numExtraData = 0; - - _stream->seek(_frameInfoOffset); - _frames = new Frame[_framesCount]; - for (uint16 i = 0; i < _framesCount; i++) { - _frames[i].parts = new Part[_partsPerFrame]; - _stream->skip(2); // Unknown - _frames[i].offset = _stream->readUint32LE(); - } - - for (uint16 i = 0; i < _framesCount; i++) { - bool separator = false; - - for (uint16 j = 0; j < _partsPerFrame; j++) { - - _frames[i].parts[j].type = (PartType) _stream->readByte(); - _frames[i].parts[j].field_1 = _stream->readByte(); - _frames[i].parts[j].size = _stream->readUint32LE(); - - if (_frames[i].parts[j].type == kPartTypeAudio) { - - _frames[i].parts[j].flags = _stream->readByte(); - _stream->skip(9); // Unknown - - } else if (_frames[i].parts[j].type == kPartTypeVideo) { - - _frames[i].parts[j].left = _stream->readUint16LE(); - _frames[i].parts[j].top = _stream->readUint16LE(); - _frames[i].parts[j].right = _stream->readUint16LE(); - _frames[i].parts[j].bottom = _stream->readUint16LE(); - _frames[i].parts[j].field_E = _stream->readByte(); - _frames[i].parts[j].flags = _stream->readByte(); - - } else if (_frames[i].parts[j].type == kPartTypeSpeech) { - _frames[i].parts[j].id = _stream->readUint16LE(); - // Speech text file name - _stream->skip(8); - } else if (_frames[i].parts[j].type == kPartTypeExtraData) { - if (!separator) - numExtraData++; - _stream->skip(10); - } else if (_frames[i].parts[j].type == kPartTypeSeparator) { - separator = true; - _stream->skip(10); - } else { - // Unknow type - _stream->skip(10); - } - - } - } -} - -void Vmd::readExtraData() { - uint32 ssize = _stream->size(); - for (uint16 i = 0; i < _framesCount; i++) { - _stream->seek(_frames[i].offset); - - for (uint16 j = 0; j < _partsPerFrame; j++) { - if (_frames[i].parts[j].type == kPartTypeSeparator) - break; - - if (_frames[i].parts[j].type == kPartTypeExtraData) { - ExtraData data; - - data.offset = _stream->pos() + 20; - data.size = _frames[i].parts[j].size; - data.realSize = _stream->readUint32LE(); - - _stream->read(data.name, 16); - data.name[15] = '\0'; - - _stream->skip(_frames[i].parts[j].size - 20); - - if ((((uint32) data.realSize) >= ssize) || (data.name[0] == 0)) - continue; - - _extraData.push_back(data); - - } else - _stream->skip(_frames[i].parts[j].size); - } - } -} - -bool Vmd::load(Common::SeekableReadStream *stream) { - unload(); - - _stream = stream; - - uint16 headerLength; - uint16 handle; - - headerLength = _stream->readUint16LE(); - handle = _stream->readUint16LE(); - _version = _stream->readUint16LE(); - - bool readPalette; - - // Version checking - if (headerLength == 50) { - // Newer version, used in Addy 5 upwards - warning("Vmd::load(): TODO: Addy 5 videos"); - readPalette = false; - } else if (headerLength == 814) { - // Old version - readPalette = true; - } else { - warning("Vmd::load(): Version incorrect (%d, %d, %d)", headerLength, handle, _version); - unload(); - return false; - } - - _framesCount = _stream->readUint16LE(); - - _x = _stream->readSint16LE(); - _y = _stream->readSint16LE(); - _width = _stream->readSint16LE(); - _height = _stream->readSint16LE(); - - if ((_width != 0) && (_height != 0)) { - - _hasVideo = true; - _features |= kFeaturesVideo; - - } else - _hasVideo = false; - - _bytesPerPixel = 1; - if (_version & 4) - _bytesPerPixel = handle + 1; - - if (_bytesPerPixel > 3) { - warning("Vmd::load(): Requested %d bytes per pixel (%d, %d, %d)", _bytesPerPixel, headerLength, handle, _version); - unload(); - return false; - } - - _flags = _stream->readUint16LE(); - - _partsPerFrame = _stream->readUint16LE(); - _firstFramePos = _stream->readUint32LE(); - - _videoCodec = _stream->readUint32BE(); - - if (readPalette) - _stream->read((byte *) _palette, 768); - - _frameDataSize = _stream->readUint32LE(); - _vidBufferSize = _stream->readUint32LE(); - - _doubleMode = false; - - if (_hasVideo) { - if (!assessVideoProperties()) { - unload(); - return false; - } - } - - _soundFreq = _stream->readSint16LE(); - _soundSliceSize = _stream->readSint16LE(); - _soundSlicesCount = _stream->readSint16LE(); - _soundFlags = _stream->readUint16LE(); - - _hasSound = (_soundFreq != 0); - - if (_hasSound) { - if (!assessAudioProperties()) { - unload(); - return false; - } - } else - _frameLength = 1000 / _frameRate; - - _frameInfoOffset = _stream->readUint32LE(); - - int numExtraData; - readFrameTable(numExtraData); - - _stream->seek(_firstFramePos); - - if (numExtraData == 0) - return true; - - _extraData.reserve(numExtraData); - readExtraData(); - - _stream->seek(_firstFramePos); - return true; -} - -void Vmd::unload() { - clear(); -} - -int16 Vmd::getWidth() const { - return preScaleX(_width); -} - -void Vmd::setXY(int16 x, int16 y) { - - x *= _scaleExternalX; - - for (int i = 0; i < _framesCount; i++) { - for (int j = 0; j < _partsPerFrame; j++) { - - if (_frames[i].parts[j].type == kPartTypeVideo) { - if (x >= 0) { - _frames[i].parts[j].left = _frames[i].parts[j].left - _x + x; - _frames[i].parts[j].right = _frames[i].parts[j].right - _x + x; - } - if (y >= 0) { - _frames[i].parts[j].top = _frames[i].parts[j].top - _y + y; - _frames[i].parts[j].bottom = _frames[i].parts[j].bottom - _y + y; - } - } - - } - } - - if (x >= 0) - _x = x; - if (y >= 0) - _y = y; -} - -void Vmd::setDoubleMode(bool doubleMode) { - if (_doubleMode == doubleMode) - return; - - if (_vidBuffer) { - delete[] _vidBuffer; - - if (doubleMode) - _vidBufferSize *= 4; - else - _vidBufferSize /= 4; - - _vidBuffer = new byte[_vidBufferSize]; - assert(_vidBuffer); - memset(_vidBuffer, 0, _vidBufferSize); - - } - -#ifdef USE_INDEO3 - if (_codecIndeo3) { - delete _codecIndeo3; - - _codecIndeo3 = new Indeo3(_width * (doubleMode ? 2 : 1), - _height * (doubleMode ? 2 : 1), _palLUT); - } -#endif - - _doubleMode = doubleMode; -} - -void Vmd::seekFrame(int32 frame, int16 whence, bool restart) { - if (!_stream) - // Nothing to do - return; - - // Find the frame to which to seek - if (whence == SEEK_CUR) - frame += _curFrame; - else if (whence == SEEK_END) - frame = _framesCount - frame - 1; - else if (whence != SEEK_SET) - return; - - if ((frame < 0) || (frame >= _framesCount)) - // Nothing to do - return; - - // Restart sound - if (_hasSound && (frame == 0) && (_soundStage == 0) && !_audioStream) { - _soundStage = 1; - _audioStream = Audio::makeQueuingAudioStream(_soundFreq, _soundStereo != 0); - } - - // Seek - _stream->seek(_frames[frame].offset); - _curFrame = frame; -} - -CoktelVideo::State Vmd::nextFrame() { - State state; - - state = processFrame(_curFrame); - _curFrame++; - return state; -} - -void Vmd::zeroData() { - Imd::zeroData(); - - _hasVideo = true; - _videoCodec = 0; - -#ifdef USE_INDEO3 - _codecIndeo3 = 0; -#endif - - _partsPerFrame = 0; - _frames = 0; - - _extraData.clear(); - - _soundBytesPerSample = 1; - _soundStereo = 0; - _soundHeaderSize = 0; - _soundDataSize = 0; - _audioFormat = kAudioFormat8bitDirect; - - _externalCodec = false; - _doubleMode = false; - _blitMode = 0; - _bytesPerPixel = 1; - _preScaleX = 1; - _postScaleX = 1; - _scaleExternalX = 1; - _vidMemBuffer = 0; -} - -void Vmd::deleteData() { - Imd::deleteData(); - -#ifdef USE_INDEO3 - delete _codecIndeo3; -#endif - delete[] _frames; - delete[] _vidMemBuffer; -} - -void Vmd::clear() { - deleteData(); - zeroData(); -} - -CoktelVideo::State Vmd::processFrame(uint16 frame) { - State state; - bool startSound = false; - - seekFrame(frame); - - state.flags |= kStateNoVideoData; - state.left = 0x7FFF; - state.top = 0x7FFF; - state.right = 0; - state.bottom = 0; - - if (!_vidMem) - setVideoMemory(); - - for (uint16 i = 0; (i < _partsPerFrame) && (frame < _framesCount); i++) { - uint32 pos = _stream->pos(); - - Part &part = _frames[frame].parts[i]; - - if (part.type == kPartTypeAudio) { - // Next sound slice data - if (part.flags == 1) { - - if (_soundEnabled) { - filledSoundSlice(part.size); - - if (_soundStage == 1) - startSound = true; - - } else - _stream->skip(part.size); - - // Initial sound data (all slices) - } else if (part.flags == 2) { - - if (_soundEnabled) { - uint32 mask = _stream->readUint32LE(); - filledSoundSlices(part.size - 4, mask); - - if (_soundStage == 1) - startSound = true; - - } else - _stream->skip(part.size); - - // Empty sound slice - } else if (part.flags == 3) { - - if (_soundEnabled) { - emptySoundSlice(_soundDataSize * _soundBytesPerSample); - - if (_soundStage == 1) - startSound = true; - } - - _stream->skip(part.size); - } else if (part.flags == 4) { - warning("Vmd::processFrame(): TODO: Addy 5 sound type 4 (%d)", part.size); - disableSound(); - _stream->skip(part.size); - } else { - warning("Vmd::processFrame(): Unknown sound type %d", part.flags); - _stream->skip(part.size); - } - - _stream->seek(pos + part.size); - - } else if ((part.type == kPartTypeVideo) && !_hasVideo) { - warning("Vmd::processFrame(): Header claims there's no video, but video found (%d)", part.size); - _stream->skip(part.size); - } else if ((part.type == kPartTypeVideo) && _hasVideo) { - state.flags &= ~kStateNoVideoData; - - uint32 size = part.size; - - // New palette - if (part.flags & 2) { - uint8 index = _stream->readByte(); - uint8 count = _stream->readByte(); - - _stream->read(_palette + index * 3, (count + 1) * 3); - _stream->skip((255 - count) * 3); - - state.flags |= kStatePalette; - - size -= (768 + 2); - } - - _stream->read(_frameData, size); - _frameDataLen = size; - - int16 l = part.left, t = part.top, r = part.right, b = part.bottom; - if (renderFrame(l, t, r, b)) { - if (!_externalCodec) { - l = preScaleX(l); - r = preScaleX(r); - } - // Rendering succeeded, merging areas - state.left = MIN(state.left, l); - state.top = MIN(state.top, t); - state.right = MAX(state.right, r); - state.bottom = MAX(state.bottom, b); - } - - } else if (part.type == kPartTypeSeparator) { - } else if (part.type == kPartTypeExtraData) { - _stream->skip(part.size); - } else if (part.type == kPartType4) { - // Unknown - _stream->skip(part.size); - } else if (part.type == kPartTypeSpeech) { - state.flags |= kStateSpeech; - state.speechId = part.id; - // Always triggers when speech starts - _stream->skip(part.size); - } else { - warning("Vmd::processFrame(): Unknown frame part type %d, size %d (%d of %d)", part.type, part.size, i + 1, _partsPerFrame); - } - } - - if (startSound && _soundEnabled) { - if (_hasSound && _audioStream) { - _mixer->playStream(Audio::Mixer::kSFXSoundType, &_audioHandle, _audioStream); - _skipFrames = 0; - _soundStage = 2; - } else - _soundStage = 0; - } - - if ((_curFrame == (_framesCount - 1)) && (_soundStage == 2)) { - _audioStream->finish(); - _mixer->stopHandle(_audioHandle); - _audioStream = 0; - _soundStage = 0; - } - - // If these are still 0x7FFF, no video data has been processed - if ((state.left == 0x7FFF) || (state.top == 0x7FFF)) - state.left = state.top = state.right = state.bottom = 0; - - _lastFrameTime = g_system->getMillis(); - return state; -} - -void Vmd::deRLE(byte *&destPtr, const byte *&srcPtr, int16 destLen, int16 srcLen) { - srcPtr++; - - if (srcLen & 1) { - byte data = *srcPtr++; - - if (destLen > 0) { - *destPtr++ = data; - destLen--; - } - } - - srcLen >>= 1; - - while (srcLen > 0) { - uint8 tmp = *srcPtr++; - if (tmp & 0x80) { // Verbatim copy - tmp &= 0x7F; - - int16 copyCount = MAX<int16>(0, MIN<int16>(destLen, tmp * 2)); - - memcpy(destPtr, srcPtr, copyCount); - - srcPtr += tmp * 2; - destPtr += copyCount; - destLen -= copyCount; - } else { // 2 bytes tmp times - for (int i = 0; (i < tmp) && (destLen > 0); i++) { - for (int j = 0; j < 2; j++) { - if (destLen <= 0) - break; - - *destPtr++ = srcPtr[j]; - destLen--; - } - } - srcPtr += 2; - } - srcLen -= tmp; - } -} - -// A run-length-encoded sparse block -void Vmd::renderBlockRLE(byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch) { - - for (int i = 0; i < height; i++) { - byte *destRow = dest; - int16 pixWritten = 0; - - while (pixWritten < srcPitch) { - int16 pixCount = *src++; - - if (pixCount & 0x80) { - int16 copyCount; - - pixCount = (pixCount & 0x7F) + 1; - copyCount = MAX<int16>(0, MIN<int16>(pixCount, width - pixWritten)); - - if (*src != 0xFF) { // Normal copy - - memcpy(destRow, src, copyCount); - destRow += copyCount; - src += pixCount; - } else - deRLE(destRow, src, copyCount, pixCount); - - pixWritten += pixCount; - } else { // "Hole" - int16 copyCount = MAX<int16>(0, MIN<int16>(pixCount + 1, width - pixWritten)); - - destRow += copyCount; - pixWritten += pixCount + 1; - } - - } - - dest += destPitch; - } - -} - -uint32 Vmd::renderFrame(int16 &left, int16 &top, int16 &right, int16 &bottom) { - if (!_frameData || !_vidMem || (_width <= 0) || (_height <= 0)) - return 0; - - int16 width = right - left + 1; - int16 height = bottom - top + 1; - int16 sW = _vidMemWidth; - int16 sH = _vidMemHeight; - - byte *dataPtr = _frameData; - byte *imdVidMem = _vidMem + sW * top + left; - byte *srcPtr; - - if ((left < 0) || (top < 0) || (right < 0) || (bottom < 0)) - return 1; - if ((width <= 0) || (height <= 0)) - return 1; - - uint8 type; - byte *dest = imdVidMem; - -#ifdef USE_INDEO3 - uint32 dataLen = _frameDataLen; - - if (Indeo3::isIndeo3(dataPtr, dataLen)) { - if (!_codecIndeo3) - return 0; - - if (!_codecIndeo3->decompressFrame(dataPtr, dataLen, _vidBuffer, - width * (_doubleMode ? 2 : 1), height * (_doubleMode ? 2 : 1))) - return 0; - - type = 2; - srcPtr = _vidBuffer; - width = _width * (_doubleMode ? 2 : 1); - height = _height * (_doubleMode ? 2 : 1); - right = left + width - 1; - bottom = top + height - 1; - - } else { - - if (_externalCodec) { - warning("Unknown external codec"); - return 0; - } - -#else - - if (_externalCodec) { - return 0; - } else { - -#endif - - type = *dataPtr++; - srcPtr = dataPtr; - - if (_blitMode > 0) { - dest = _vidMemBuffer + postScaleX(_width) * (top - _y) + postScaleX((left - _x)); - imdVidMem = _vidMem + _vidMemWidth * top + preScaleX(left); - sW = postScaleX(_width); - sH = _height; - } - - if (type & 0x80) { - // Frame data is compressed - - srcPtr = _vidBuffer; - type &= 0x7F; - if ((type == 2) && (postScaleX(width) == sW)) { - // Directly uncompress onto the video surface - deLZ77(dest, dataPtr); - blit(imdVidMem, dest, width, height); - return 1; - } else - deLZ77(srcPtr, dataPtr); - } - - } - - width = postScaleX(width); - - int16 drawWidth = MAX<int16>(0, MIN<int16>(width , sW - left)); - int16 drawHeight = MAX<int16>(0, MIN<int16>(height, sH - top )); - - // Evaluate the block type - if (type == 0x01) - renderBlockSparse (dest, srcPtr, drawWidth, drawHeight, sW, width); - else if (type == 0x02) - renderBlockWhole (dest, srcPtr, drawWidth, drawHeight, sW, width); - else if (type == 0x03) - renderBlockRLE (dest, srcPtr, drawWidth, drawHeight, sW, width); - else if (type == 0x42) - renderBlockWhole4X (dest, srcPtr, drawWidth, drawHeight, sW, width); - else if ((type & 0x0F) == 0x02) - renderBlockWhole2Y (dest, srcPtr, drawWidth, drawHeight, sW, width); - else - renderBlockSparse2Y(dest, srcPtr, drawWidth, drawHeight, sW, width); - - dest = _vidMemBuffer + postScaleX(_width) * (top - _y) + postScaleX(left - _x); - blit(imdVidMem, dest, width, height); - - return 1; -} - -inline int32 Vmd::preScaleX(int32 x) const { - return x / _preScaleX; -} - -inline int32 Vmd::postScaleX(int32 x) const { - return x * _postScaleX; -} - -void Vmd::blit(byte *dest, byte *src, int16 width, int16 height) { - if (_blitMode == 0) - return; - - if (_blitMode == 1) - blit16(dest, src, preScaleX(_width), preScaleX(width), height); - else if (_blitMode == 2) - blit24(dest, src, preScaleX(_width), preScaleX(width), height); -} - -void Vmd::blit16(byte *dest, byte *src, int16 srcPitch, int16 width, int16 height) { - assert(_palLUT); - - Graphics::SierraLight *dither = - new Graphics::SierraLight(width, _palLUT); - - for (int i = 0; i < height; i++) { - byte *d = dest; - byte *s = src; - - for (int j = 0; j < width; j++, s += 2) { - uint16 data = READ_LE_UINT16(s); - byte r = ((data & 0x7C00) >> 10); - byte g = ((data & 0x03E0) >> 5); - byte b = ((data & 0x001F) >> 0); - byte dY, dU, dV; - - Graphics::PaletteLUT::RGB2YUV(r << 3, g << 3, b << 3, dY, dU, dV); - - byte p = dither->dither(dY, dU, dV, j); - - if ((dY == 0) || ((r == 0) && (g == 0) && (b == 0))) - *d++ = 0; - else - *d++ = p; - } - - dither->nextLine(); - dest += _vidMemWidth; - src += 2 * srcPitch; - } - - delete dither; -} - -void Vmd::blit24(byte *dest, byte *src, int16 srcPitch, int16 width, int16 height) { - assert(_palLUT); - - Graphics::SierraLight *dither = - new Graphics::SierraLight(width, _palLUT); - - for (int i = 0; i < height; i++) { - byte *d = dest; - byte *s = src; - - for (int j = 0; j < width; j++, s += 3) { - byte r = s[2]; - byte g = s[1]; - byte b = s[0]; - byte dY, dU, dV; - - Graphics::PaletteLUT::RGB2YUV(r, g, b, dY, dU, dV); - - byte p = dither->dither(dY, dU, dV, j); - - if ((dY == 0) || ((r == 0) && (g == 0) && (b == 0))) - *d++ = 0; - else - *d++ = p; - } - - dither->nextLine(); - dest += _vidMemWidth; - src += 3 * srcPitch; - } - - delete dither; -} - -byte *Vmd::deDPCM(const byte *data, uint32 &size, int32 init[2]) { - if (!data || (size == 0)) - return 0; - - int channels = (_soundStereo > 0) ? 2 : 1; - - uint32 inSize = size; - uint32 outSize = size + channels; - - int16 *out = (int16 *)malloc(outSize * 2); - byte *sound = (byte *) out; - - int channel = 0; - - for (int i = 0; i < channels; i++) { - *out++ = TO_BE_16(init[channel]); - - channel = (channel + 1) % channels; - } - - while (inSize-- > 0) { - if (*data & 0x80) - init[channel] -= _tableDPCM[*data++ & 0x7F]; - else - init[channel] += _tableDPCM[*data++]; - - init[channel] = CLIP<int32>(init[channel], -32768, 32767); - *out++ = TO_BE_16(init[channel]); - - channel = (channel + 1) % channels; - } - - size = outSize * 2; - return sound; -} - -// Yet another IMA ADPCM variant -byte *Vmd::deADPCM(const byte *data, uint32 &size, int32 init, int32 index) { - if (!data || (size == 0)) - return 0; - - uint32 outSize = size * 2; - - int16 *out = (int16 *)malloc(outSize * 2); - byte *sound = (byte *) out; - - index = CLIP<int32>(index, 0, 88); - - int32 predictor = _tableADPCM[index]; - - uint32 dataByte = 0; - bool newByte = true; - - size *= 2; - while (size -- > 0) { - byte code = 0; - - if (newByte) { - dataByte = *data++; - code = (dataByte >> 4) & 0xF; - } else - code = dataByte & 0xF; - - newByte = !newByte; - - index += _tableADPCMStep[code]; - index = CLIP<int32>(index, 0, 88); - - int32 value = predictor / 8; - - if (code & 4) - value += predictor; - if (code & 2) - value += predictor / 2; - if (code & 1) - value += predictor / 4; - - if (code & 8) - init -= value; - else - init += value; - - init = CLIP<int32>(init, -32768, 32767); - - predictor = _tableADPCM[index]; - - *out++ = TO_BE_16(init); - } - - size = outSize * 2; - return sound; -} - -byte *Vmd::soundEmpty(uint32 &size) { - if (!_audioStream) - return 0; - - byte *soundBuf = (byte *)malloc(size); - memset(soundBuf, 0, size); - - return soundBuf; -} - -byte *Vmd::sound8bitDirect(uint32 &size) { - if (!_audioStream) { - _stream->skip(size); - return 0; - } - - byte *soundBuf = (byte *)malloc(size); - _stream->read(soundBuf, size); - unsignedToSigned(soundBuf, size); - - return soundBuf; -} - -byte *Vmd::sound16bitDPCM(uint32 &size) { - if (!_audioStream) { - _stream->skip(size); - return 0; - } - - int32 init[2]; - - init[0] = _stream->readSint16LE(); - size -= 2; - - if (_soundStereo > 0) { - init[1] = _stream->readSint16LE(); - size -= 2; - } - - byte *data = new byte[size]; - byte *sound = 0; - - if (_stream->read(data, size) == size) - sound = deDPCM(data, size, init); - - delete[] data; - - return sound; -} - -byte *Vmd::sound16bitADPCM(uint32 &size) { - if (!_audioStream) { - _stream->skip(size); - return 0; - } - - int32 init = _stream->readSint16LE(); - size -= 2; - - int32 index = _stream->readByte(); - size--; - - byte *data = new byte[size]; - byte *sound = 0; - - if (_stream->read(data, size) == size) - sound = deADPCM(data, size, init, index); - - delete[] data; - - return sound; -} - -void Vmd::emptySoundSlice(uint32 size) { - byte *sound = soundEmpty(size); - - if (sound) { - uint32 flags = 0; - flags |= (_soundBytesPerSample == 2) ? Audio::FLAG_16BITS : 0; - flags |= (_soundStereo > 0) ? Audio::FLAG_STEREO : 0; - - _audioStream->queueBuffer(sound, size, DisposeAfterUse::YES, flags); - } -} - -void Vmd::filledSoundSlice(uint32 size) { - byte *sound = 0; - if (_audioFormat == kAudioFormat8bitDirect) - sound = sound8bitDirect(size); - else if (_audioFormat == kAudioFormat16bitDPCM) - sound = sound16bitDPCM(size); - else if (_audioFormat == kAudioFormat16bitADPCM) - sound = sound16bitADPCM(size); - - if (sound) { - uint32 flags = 0; - flags |= (_soundBytesPerSample == 2) ? Audio::FLAG_16BITS : 0; - flags |= (_soundStereo > 0) ? Audio::FLAG_STEREO : 0; - - _audioStream->queueBuffer(sound, size, DisposeAfterUse::YES, flags); - } -} - -uint8 Vmd::evaluateMask(uint32 mask, bool *fillInfo, uint8 &max) { - max = MIN<int>(_soundSlicesCount - 1, 31); - - uint8 n = 0; - for (int i = 0; i < max; i++) { - - if (!(mask & 1)) { - n++; - *fillInfo++ = true; - } else - *fillInfo++ = false; - - mask >>= 1; - } - - return n; -} - -void Vmd::filledSoundSlices(uint32 size, uint32 mask) { - bool fillInfo[32]; - - uint8 max; - uint8 n = evaluateMask(mask, fillInfo, max); - - int32 extraSize; - - extraSize = size - n * _soundDataSize; - - if (_soundSlicesCount > 32) - extraSize -= (_soundSlicesCount - 32) * _soundDataSize; - - if (n > 0) - extraSize /= n; - - for (uint8 i = 0; i < max; i++) - if (fillInfo[i]) - filledSoundSlice(_soundDataSize + extraSize); - else - emptySoundSlice(_soundDataSize * _soundBytesPerSample); - - if (_soundSlicesCount > 32) - filledSoundSlice((_soundSlicesCount - 32) * _soundDataSize + _soundHeaderSize); -} - -bool Vmd::getPartCoords(int16 frame, PartType type, - int16 &x, int16 &y, int16 &width, int16 &height) { - - if (frame >= _framesCount) - return false; - - Frame &f = _frames[frame]; - - // Look for a part matching the requested type, stopping at a separator - Part *part = 0; - for (int i = 0; i < _partsPerFrame; i++) { - Part &p = f.parts[i]; - - if ((p.type == kPartTypeSeparator) || (p.type == type)) { - part = &p; - break; - } - } - - if (!part) - return false; - - x = part->left; - y = part->top; - width = part->right - part->left + 1; - height = part->bottom - part->top + 1; - - return true; -} - -bool Vmd::getFrameCoords(int16 frame, - int16 &x, int16 &y, int16 &width, int16 &height) { - - return getPartCoords(frame, kPartTypeVideo, x, y, width, height); -} - -bool Vmd::hasExtraData() const { - return !_extraData.empty(); -} - -bool Vmd::hasExtraData(const char *fileName) const { - for (uint i = 0; i < _extraData.size(); i++) - if (!scumm_stricmp(_extraData[i].name, fileName)) - return true; - - return false; -} - -Common::MemoryReadStream *Vmd::getExtraData(const char *fileName) { - uint i = 0; - - for (i = 0; i < _extraData.size(); i++) - if (!scumm_stricmp(_extraData[i].name, fileName)) - break; - - if (i >= _extraData.size()) - return 0; - - if ((_extraData[i].size - 20) != _extraData[i].realSize) { - warning("Vmd::getExtraData(): Sizes for \"%s\" differ! (%d, %d)", - fileName, (_extraData[i].size - 20), _extraData[i].realSize); - return 0; - } - - if (!_stream->seek(_extraData[i].offset)) { - warning("Vmd::getExtraData(): Can't seek to offset %d to (file \"%s\")", - _extraData[i].offset, fileName); - return 0; - } - - byte *data = (byte *) malloc(_extraData[i].realSize); - if (_stream->read(data, _extraData[i].realSize) != _extraData[i].realSize) { - free(data); - warning("Vmd::getExtraData(): Couldn't read %d bytes (file \"%s\")", - _extraData[i].realSize, fileName); - } - - Common::MemoryReadStream *stream = - new Common::MemoryReadStream(data, _extraData[i].realSize, DisposeAfterUse::YES); - - return stream; -} - -} // End of namespace Graphics - -#endif // GRAPHICS_VIDEO_COKTELVIDEO_H diff --git a/graphics/video/coktelvideo/coktelvideo.h b/graphics/video/coktelvideo/coktelvideo.h deleted file mode 100644 index f8b1965f41..0000000000 --- a/graphics/video/coktelvideo/coktelvideo.h +++ /dev/null @@ -1,594 +0,0 @@ -/* 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. - * - * $URL$ - * $Id$ - * - */ - -// Currently, only GOB and SCI32 games play IMDs and VMDs -#if defined(ENABLE_GOB) || defined(ENABLE_SCI32) || defined(DYNAMIC_MODULES) - -#ifndef GRAPHICS_VIDEO_COKTELVIDEO_H -#define GRAPHICS_VIDEO_COKTELVIDEO_H - -#include "common/scummsys.h" -#include "common/stream.h" -#include "common/array.h" -#include "graphics/dither.h" -#include "sound/mixer.h" - -namespace Audio { - class QueuingAudioStream; -} - -namespace Graphics { - -#ifdef USE_INDEO3 -class Indeo3; -#endif - -/** Common interface for handling Coktel Vision videos and derivated formats. */ -class CoktelVideo { -public: - enum Features { - kFeaturesNone = 0, - /** Has an own palette. */ - kFeaturesPalette = 8, - /** Suggests a data size. */ - kFeaturesDataSize = 0x20, - /** Has sound. */ - kFeaturesSound = 0x40, - /** Has specific frame coordinates. */ - kFeaturesFrameCoords = 0x80, - /** Has general standard coordinates. */ - kFeaturesStdCoords = 0x100, - /** Has a frame positions table. */ - kFeaturesFramesPos = 0x200, - /** Has video. */ - kFeaturesVideo = 0x400, - /** Is a full color (non-paletted) video. */ - kFeaturesFullColor = 0x4000, - /** Supports automatic doubling. */ - kFeaturesSupportsDouble = 0x40000000 - }; - - enum StateFlags { - kStateNone = 0, - /** Changed the palette. */ - kStatePalette = 0x10, - /** Performed a jump to another frame. */ - kStateJump = 0x200, - /** Updated according to the specific frame coordinates. */ - kStateFrameCoords = 0x400, - /** Got no frame data. */ - kStateNoVideoData = 0x800, - /** Updated according to the general standard coordinates. */ - kStateStdCoords = 0x1000, - /** Had to explicitely seek to the frame. */ - kStateSeeked = 0x2000, - /** Reached a break-point. */ - kStateBreak = 0x8000, - /** Frame marks the beginning of speech. */ - kStateSpeech = 0x4000000 - }; - - struct State { - /** Left-most value of the updated rectangle. */ - int16 left; - /** Top-most value of the updated rectangle. */ - int16 top; - /** Right-most value of the updated rectangle. */ - int16 right; - /** Bottom-most value of the updated rectangle. */ - int16 bottom; - /** Set accordingly to what was done. */ - uint32 flags; - /** The id of the spoken words. */ - uint16 speechId; - - State() : left(0), top(0), right(0), bottom(0), flags(0), speechId(0) { } - }; - - virtual ~CoktelVideo() { } - - /** Returns the features the loaded video possesses. */ - virtual uint32 getFeatures() const = 0; - /** Returns the flags the loaded video possesses. */ - virtual uint16 getFlags() const = 0; - /** Returns the x coordinate of the video. */ - virtual int16 getX() const = 0; - /** Returns the y coordinate of the video. */ - virtual int16 getY() const = 0; - /** Returns the width of the video. */ - virtual int16 getWidth() const = 0; - /** Returns the height of the video. */ - virtual int16 getHeight() const = 0; - - /** Returns the number of frames the loaded video has. */ - virtual uint16 getFramesCount() const = 0; - /** Returns the current frame number. - * - * This is the current frame after the last nextFrame()-call, - * i.e. it's 0 after loading, 1 after the first nextFrame()-call, etc.. - */ - virtual uint16 getCurrentFrame() const = 0; - /** Returns the frame rate. */ - virtual int16 getFrameRate() const = 0; - /** Returns the number of frames the video lags behind the audio. */ - virtual uint32 getSyncLag() const = 0; - /** Returns the current frame's palette. */ - virtual const byte *getPalette() const = 0; - - /** Returns the frame's coordinates */ - virtual bool getFrameCoords(int16 frame, - int16 &x, int16 &y, int16 &width, int16 &height) = 0; - - /** Returns whether any extra data files are embedded in this video. */ - virtual bool hasExtraData() const = 0; - /** Returns whether that extra data file exists */ - virtual bool hasExtraData(const char *fileName) const = 0; - /** Returns an extra data file */ - virtual Common::MemoryReadStream *getExtraData(const char *fileName) = 0; - - /** Load a video out of a stream. */ - virtual bool load(Common::SeekableReadStream *stream) = 0; - /** Unload the currently loaded video. */ - virtual void unload() = 0; - - /** Set the frame rate. */ - virtual void setFrameRate(int16 frameRate) = 0; - - /** Set the coordinations where to draw the video. */ - virtual void setXY(int16 x, int16 y) = 0; - /** Use a specific memory block as video memory. */ - virtual void setVideoMemory(byte *vidMem, uint16 width, uint16 height) = 0; - /** Use an own memory block as video memory. */ - virtual void setVideoMemory() = 0; - - /** Double the video's resolution. */ - virtual void setDoubleMode(bool doubleMode) = 0; - - /** Play sound (if the video has sound). */ - virtual void enableSound(Audio::Mixer &mixer) = 0; - /** Don't play sound or stop currently playing sound. */ - virtual void disableSound() = 0; - - /** Is sound currently playing? */ - virtual bool isSoundPlaying() const = 0; - - /** Seek to a specific frame. - * - * @param frame The frame to which to seek. - * @param whence The offset from whence the frame is given. - * @param restart Restart the video to reach an otherwise inaccessible frame? - */ - virtual void seekFrame(int32 frame, int16 whence = SEEK_SET, bool restart = false) = 0; - - /** Render the next frame. */ - virtual State nextFrame() = 0; - /** Get the time in ms until the next frame can be displayed. Already includes A/V sync measures. */ - virtual uint32 getFrameWaitTime() = 0; - /** Wait for the frame to end. */ - virtual void waitEndFrame() = 0; - - /** Copy the current frame. - * - * @param dest The memory to which to copy the current frame. - * @param left The x position within the frame. - * @param top The y position within the frame. - * @param width The width of the area to copy. - * @param height The height of the area to copy. - * @param x The x position to where to copy. - * @param y The y position to where to copy. - * @param pitch The buffer's width. - * @param transp Which color should be seen as transparent? - */ - virtual void copyCurrentFrame(byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp = -1) = 0; -}; - -/** Coktel Vision's first simple IMD format, used by Fascination. - */ -class PreImd : public CoktelVideo { -public: - PreImd(); - PreImd(int16 width, int16 height); - ~PreImd(); - - uint32 getFeatures() const; - uint16 getFlags() const; - - int16 getX() const; - int16 getY() const; - int16 getWidth() const; - int16 getHeight() const; - - uint16 getFramesCount() const; - uint16 getCurrentFrame() const; - - void setFrameRate(int16 frameRate); - int16 getFrameRate() const; - - uint32 getSyncLag() const; - - const byte *getPalette() const; - - bool getFrameCoords(int16 frame, - int16 &x, int16 &y, int16 &width, int16 &height); - - bool hasExtraData() const; - bool hasExtraData(const char *fileName) const; - Common::MemoryReadStream *getExtraData(const char *fileName); - - bool load(Common::SeekableReadStream *stream); - void unload(); - - void setXY(int16 x, int16 y); - void setVideoMemory(byte *vidMem, uint16 width, uint16 height); - void setVideoMemory(); - - void setDoubleMode(bool doubleMode); - - void enableSound(Audio::Mixer &mixer); - void disableSound(); - - bool isSoundPlaying() const; - - void seekFrame(int32 frame, int16 whence = SEEK_SET, bool restart = false); - - State nextFrame(); - uint32 getFrameWaitTime(); - void waitEndFrame(); - - void copyCurrentFrame(byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp = -1); - -protected: - Common::SeekableReadStream *_stream; - - // Properties - uint32 _features; - uint16 _flags; - - int16 _forcedWidth; - int16 _forcedHeight; - - // Current coordinates - int16 _x; - int16 _y; - int16 _width; - int16 _height; - - uint16 _framesCount; - uint16 _curFrame; - int16 _frameRate; - uint32 _frameLength; - - byte _palette[768]; - - // Video memory - bool _hasOwnVidMem; - byte *_vidMem; - uint16 _vidMemWidth; - uint16 _vidMemHeight; - - byte *_vidBuffer; - uint32 _vidBufferSize; - - void clear(); - void zeroData(); - void deleteData(); - - void zeroVidMem(); - void deleteVidMem(); - - State processFrame(uint16 frame); - void renderFrame(); -}; - -/** Coktel Vision's IMD files. - */ -class Imd : public PreImd { -public: - Imd(); - ~Imd(); - - void setFrameRate(int16 frameRate); - int16 getFrameRate() const; - - uint32 getSyncLag() const; - - bool load(Common::SeekableReadStream *stream); - void unload(); - - void setXY(int16 x, int16 y); - - void enableSound(Audio::Mixer &mixer); - void disableSound(); - - bool isSoundPlaying() const; - - void seekFrame(int32 frame, int16 whence = SEEK_SET, bool restart = false); - - State nextFrame(); - uint32 getFrameWaitTime(); - - void copyCurrentFrame(byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp = -1); - -protected: - enum Command { - kCommandNextSound = 0xFF00, - kCommandStartSound = 0xFF01, - - kCommandBreak = 0xFFF0, - kCommandBreakSkip0 = 0xFFF1, - kCommandBreakSkip16 = 0xFFF2, - kCommandBreakSkip32 = 0xFFF3, - kCommandBreakMask = 0xFFF8, - - kCommandPalette = 0xFFF4, - kCommandVideoData = 0xFFFC, - - kCommandJump = 0xFFFD - }; - - struct Coord { - int16 left; - int16 top; - int16 right; - int16 bottom; - } PACKED_STRUCT; - - // Properties - uint16 _version; - - // Standard coordinates gives by the header - int16 _stdX; - int16 _stdY; - int16 _stdWidth; - int16 _stdHeight; - - uint32 *_framesPos; - uint32 _firstFramePos; - Coord *_frameCoords; - - // Buffer for raw frame data - byte *_frameData; - uint32 _frameDataSize; - uint32 _frameDataLen; - - // Sound properties - uint16 _soundFlags; - int16 _soundFreq; - int16 _soundSliceSize; - int16 _soundSlicesCount; - uint32 _soundSliceLength; - - // Current sound state - bool _hasSound; - bool _soundEnabled; - uint8 _soundStage; // (0: no sound, 1: loaded, 2: playing) - uint32 _skipFrames; - - Audio::QueuingAudioStream *_audioStream; - Audio::SoundHandle _audioHandle; - - uint32 _lastFrameTime; - - Audio::Mixer *_mixer; - - void clear(); - void zeroData(); - void deleteData(); - - void unsignedToSigned(byte *buffer, int length); - - bool loadCoordinates(); - bool loadFrameTableOffsets(uint32 &framesPosPos, uint32 &framesCoordsPos); - bool assessVideoProperties(); - bool assessAudioProperties(); - bool loadFrameTables(uint32 framesPosPos, uint32 framesCoordsPos); - - State processFrame(uint16 frame); - uint32 renderFrame(int16 left, int16 top, int16 right, int16 bottom); - void deLZ77(byte *dest, byte *src); - - void renderBlockWhole (byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch); - void renderBlockWhole4X (byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch); - void renderBlockWhole2Y (byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch); - void renderBlockSparse (byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch); - void renderBlockSparse2Y(byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch); - - void calcFrameCoords(uint16 frame, State &state); - - void nextSoundSlice(bool hasNextCmd); - bool initialSoundSlice(bool hasNextCmd); - void emptySoundSlice(bool hasNextCmd); - - void videoData(uint32 size, State &state); -}; - -class Vmd : public Imd { -public: - Vmd(Graphics::PaletteLUT *palLUT = 0); - ~Vmd(); - - bool getFrameCoords(int16 frame, - int16 &x, int16 &y, int16 &width, int16 &height); - - bool hasExtraData() const; - bool hasExtraData(const char *fileName) const; - Common::MemoryReadStream *getExtraData(const char *fileName); - - bool load(Common::SeekableReadStream *stream); - void unload(); - - int16 getWidth() const; - - void setXY(int16 x, int16 y); - - void setDoubleMode(bool doubleMode); - - void seekFrame(int32 frame, int16 whence = SEEK_SET, bool restart = false); - - State nextFrame(); - -protected: - enum PartType { - kPartTypeSeparator = 0, - kPartTypeAudio = 1, - kPartTypeVideo = 2, - kPartTypeExtraData = 3, - kPartType4 = 4, - kPartTypeSpeech = 5 - }; - - enum AudioFormat { - kAudioFormat8bitDirect = 0, - kAudioFormat16bitDPCM = 1, - kAudioFormat16bitADPCM = 2 - }; - - struct ExtraData { - char name[16]; - uint32 offset; - uint32 size; - uint32 realSize; - - ExtraData(); - } PACKED_STRUCT; - - struct Part { - PartType type; - byte field_1; - byte field_E; - uint32 size; - int16 left; - int16 top; - int16 right; - int16 bottom; - uint16 id; - byte flags; - - Part(); - } PACKED_STRUCT; - - struct Frame { - uint32 offset; - Part *parts; - - Frame(); - ~Frame(); - } PACKED_STRUCT; - - // Tables for the audio decompressors - static const uint16 _tableDPCM[128]; - static const int32 _tableADPCM[]; - static const int32 _tableADPCMStep[]; - - bool _hasVideo; - uint32 _videoCodec; - - uint32 _frameInfoOffset; - uint16 _partsPerFrame; - Frame *_frames; - - Common::Array<ExtraData> _extraData; - - // Sound properties - byte _soundBytesPerSample; - byte _soundStereo; // (0: mono, 1: old-style stereo, 2: new-style stereo) - uint32 _soundHeaderSize; - uint32 _soundDataSize; - AudioFormat _audioFormat; - - // Video properties - bool _externalCodec; - byte _blitMode; - byte _bytesPerPixel; - byte _preScaleX; - byte _postScaleX; - byte _scaleExternalX; - byte *_vidMemBuffer; - - bool _doubleMode; - - Graphics::PaletteLUT *_palLUT; - -#ifdef USE_INDEO3 - Indeo3 *_codecIndeo3; -#endif - - void clear(); - void zeroData(); - void deleteData(); - - bool getPartCoords(int16 frame, PartType type, - int16 &x, int16 &y, int16 &width, int16 &height); - - bool assessVideoProperties(); - bool assessAudioProperties(); - void readFrameTable(int &numExtraData); - void readExtraData(); - - State processFrame(uint16 frame); - uint32 renderFrame(int16 &left, int16 &top, int16 &right, int16 &bottom); - - void renderBlockRLE(byte *dest, const byte *src, int16 width, int16 height, - int16 destPitch, int16 srcPitch); - - void deRLE(byte *&destPtr, const byte *&srcPtr, int16 destLen, int16 srcLen); - - inline int32 preScaleX(int32 x) const; - inline int32 postScaleX(int32 x) const; - - void blit(byte *dest, byte *src, int16 width, int16 height); - void blit16(byte *dest, byte *src, int16 srcPitch, int16 width, int16 height); - void blit24(byte *dest, byte *src, int16 srcPitch, int16 width, int16 height); - - byte *deDPCM(const byte *data, uint32 &size, int32 init[2]); - byte *deADPCM(const byte *data, uint32 &size, int32 init, int32 v28); - - byte *soundEmpty(uint32 &size); - byte *sound8bitDirect(uint32 &size); - byte *sound16bitDPCM(uint32 &size); - byte *sound16bitADPCM(uint32 &size); - - uint8 evaluateMask(uint32 mask, bool *fillInfo, uint8 &max); - void emptySoundSlice(uint32 size); - void filledSoundSlice(uint32 size); - void filledSoundSlices(uint32 size, uint32 mask); -}; - -} // End of namespace Graphics - -#endif // GRAPHICS_VIDEO_COKTELVIDEO_H - -#endif // Engine and dynamic plugins guard diff --git a/graphics/video/mpeg_player.cpp b/graphics/video/mpeg_player.cpp index f237f76eed..ea1fa4ec1c 100644 --- a/graphics/video/mpeg_player.cpp +++ b/graphics/video/mpeg_player.cpp @@ -23,6 +23,69 @@ * */ +// The YUV to RGB conversion code is derived from SDL's YUV overlay code, which +// in turn appears to be derived from mpeg_play. The following copyright +// notices have been included in accordance with the original license. Please +// note that the term "software" in this context only applies to the +// buildLookup() and plotYUV*() functions below. + +// Copyright (c) 1995 The Regents of the University of California. +// All rights reserved. +// +// Permission to use, copy, modify, and distribute this software and its +// documentation for any purpose, without fee, and without written agreement is +// hereby granted, provided that the above copyright notice and the following +// two paragraphs appear in all copies of this software. +// +// IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR +// DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +// OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF +// CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +// AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +// ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO +// PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +// Copyright (c) 1995 Erik Corry +// All rights reserved. +// +// Permission to use, copy, modify, and distribute this software and its +// documentation for any purpose, without fee, and without written agreement is +// hereby granted, provided that the above copyright notice and the following +// two paragraphs appear in all copies of this software. +// +// IN NO EVENT SHALL ERIK CORRY BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF +// THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF ERIK CORRY HAS BEEN ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +// +// ERIK CORRY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" +// BASIS, AND ERIK CORRY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, +// UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +// Portions of this software Copyright (c) 1995 Brown University. +// All rights reserved. +// +// Permission to use, copy, modify, and distribute this software and its +// documentation for any purpose, without fee, and without written agreement +// is hereby granted, provided that the above copyright notice and the +// following two paragraphs appear in all copies of this software. +// +// IN NO EVENT SHALL BROWN UNIVERSITY BE LIABLE TO ANY PARTY FOR +// DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +// OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF BROWN +// UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// BROWN UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" +// BASIS, AND BROWN UNIVERSITY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, +// SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + #include "graphics/video/mpeg_player.h" #include "common/file.h" #include "common/system.h" @@ -284,69 +347,6 @@ void BaseAnimationState::buildLookup(int p, int lines) { #else -// The YUV to RGB conversion code is derived from SDL's YUV overlay code, which -// in turn appears to be derived from mpeg_play. The following copyright -// notices have been included in accordance with the original license. Please -// note that the term "software" in this context only applies to the two -// functions buildLookup() and plotYUV() below. - -// Copyright (c) 1995 The Regents of the University of California. -// All rights reserved. -// -// Permission to use, copy, modify, and distribute this software and its -// documentation for any purpose, without fee, and without written agreement is -// hereby granted, provided that the above copyright notice and the following -// two paragraphs appear in all copies of this software. -// -// IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR -// DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT -// OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF -// CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -// AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -// ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO -// PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - -// Copyright (c) 1995 Erik Corry -// All rights reserved. -// -// Permission to use, copy, modify, and distribute this software and its -// documentation for any purpose, without fee, and without written agreement is -// hereby granted, provided that the above copyright notice and the following -// two paragraphs appear in all copies of this software. -// -// IN NO EVENT SHALL ERIK CORRY BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, -// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF -// THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF ERIK CORRY HAS BEEN ADVISED -// OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ERIK CORRY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" -// BASIS, AND ERIK CORRY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, -// UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - -// Portions of this software Copyright (c) 1995 Brown University. -// All rights reserved. -// -// Permission to use, copy, modify, and distribute this software and its -// documentation for any purpose, without fee, and without written agreement -// is hereby granted, provided that the above copyright notice and the -// following two paragraphs appear in all copies of this software. -// -// IN NO EVENT SHALL BROWN UNIVERSITY BE LIABLE TO ANY PARTY FOR -// DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT -// OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF BROWN -// UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// BROWN UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" -// BASIS, AND BROWN UNIVERSITY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, -// SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - void BaseAnimationState::buildLookup() { // Do we already have lookup tables for this bit format? Graphics::PixelFormat format = _sys->getOverlayFormat(); diff --git a/gui/options.cpp b/gui/options.cpp index 072b20b393..4969f8ef3f 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -672,15 +672,16 @@ void OptionsDialog::addAudioControls(GuiObject *boss, const Common::String &pref for (MusicDevices::iterator d = i.begin(); d != i.end(); ++d) { const uint32 deviceGuiOption = MidiDriver::musicType2GUIO(d->getMusicType()); - if ((_domain == Common::ConfigManager::kApplicationDomain && d->getMusicType() != MT_TOWNS) // global dialog - skip useless FM-Towns option there - || (_domain != Common::ConfigManager::kApplicationDomain && !(_guioptions & allFlags)) // No flags are specified - || (_guioptions & deviceGuiOption) // flag is present - // HACK/FIXME: For now we have to show GM devices, even when the game only has GUIO_MIDIMT32 set, - // else we would not show for example external devices connected via ALSA, since they are always - // marked as General MIDI device. - || (deviceGuiOption == Common::GUIO_MIDIGM && (_guioptions & Common::GUIO_MIDIMT32)) - || d->getMusicDriverId() == "auto" || d->getMusicDriverId() == "null") // always add default and null device - _midiPopUp->appendEntry(d->getCompleteName(), d->getHandle()); + if ((_domain == Common::ConfigManager::kApplicationDomain && d->getMusicType() != MT_TOWNS // global dialog - skip useless FM-Towns, C64, Amiga, AppleIIGS options there + && d->getMusicType() != MT_C64 && d->getMusicType() != MT_AMIGA && d->getMusicType() != MT_APPLEIIGS) + || (_domain != Common::ConfigManager::kApplicationDomain && !(_guioptions & allFlags)) // No flags are specified + || (_guioptions & deviceGuiOption) // flag is present + // HACK/FIXME: For now we have to show GM devices, even when the game only has GUIO_MIDIMT32 set, + // else we would not show for example external devices connected via ALSA, since they are always + // marked as General MIDI device. + || (deviceGuiOption == Common::GUIO_MIDIGM && (_guioptions & Common::GUIO_MIDIMT32)) + || d->getMusicDriverId() == "auto" || d->getMusicDriverId() == "null") // always add default and null device + _midiPopUp->appendEntry(d->getCompleteName(), d->getHandle()); } } @@ -770,7 +771,7 @@ void OptionsDialog::addMT32Controls(GuiObject *boss, const Common::String &prefi _mt32DevicePopUp->setEnabled(false); } - _enableMIDISettings = true; + _enableMT32Settings = true; } // The function has an extra slider range parameter, since both the launcher and SCUMM engine diff --git a/gui/widget.cpp b/gui/widget.cpp index 07cf4407a2..f8713a14db 100644 --- a/gui/widget.cpp +++ b/gui/widget.cpp @@ -274,7 +274,7 @@ void StaticTextWidget::drawWidget() { ButtonWidget::ButtonWidget(GuiObject *boss, int x, int y, int w, int h, const Common::String &label, const char *tooltip, uint32 cmd, uint8 hotkey) : StaticTextWidget(boss, x, y, w, h, cleanupHotkey(label), Graphics::kTextAlignCenter, tooltip), CommandSender(boss), - _cmd(cmd) { + _cmd(cmd), _hotkey(hotkey) { if (hotkey == 0) _hotkey = parseHotkey(label); diff --git a/po/POTFILES b/po/POTFILES index 28ca60d31b..59af170c2f 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -26,7 +26,10 @@ sound/fmopl.cpp sound/musicplugin.cpp sound/null.h sound/null.cpp +sound/mods/paula.cpp sound/softsynth/adlib.cpp +sound/softsynth/appleiigs.cpp +sound/softsynth/sid.cpp sound/softsynth/mt32.cpp sound/softsynth/pcspk.cpp sound/softsynth/ym2612.cpp diff --git a/po/ca_ES.po b/po/ca_ES.po index 6647dcc837..99571c6bd6 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.2.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" +"POT-Creation-Date: 2010-08-11 22:12+0100\n" "PO-Revision-Date: 2010-06-26 16:45+0100\n" "Last-Translator: Jordi Vilalta Prat <jvprat@gmail.com>\n" "Language-Team: Catalan <scummvm-devel@lists.sf.net>\n" @@ -38,7 +38,7 @@ msgid "Go to previous directory level" msgstr "Torna al nivell de directoris anterior" #: gui/browser.cpp:70 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1029 +#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1030 #: gui/saveload.cpp:65 gui/saveload.cpp:157 gui/themebrowser.cpp:56 #: backends/platform/wii/options.cpp:48 msgid "Cancel" @@ -69,7 +69,7 @@ msgid "Map" msgstr "Mapeja" #: gui/KeysDialog.cpp:45 gui/launcher.cpp:281 gui/launcher.cpp:893 -#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1030 +#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -138,7 +138,7 @@ msgstr "" "Anglшs" #: gui/launcher.cpp:185 gui/launcher.cpp:196 gui/options.cpp:80 -#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1000 +#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "<per defecte>" @@ -151,11 +151,11 @@ msgstr "Plataforma:" msgid "Platform the game was originally designed for" msgstr "Plataforma per la que el joc es va dissenyar originalment" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "Graphics" msgstr "Grрfics" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "GFX" msgstr "GFX" @@ -163,7 +163,7 @@ msgstr "GFX" msgid "Override global graphic settings" msgstr "Fer canvis sobre les opcions globals de grрfics" -#: gui/launcher.cpp:215 gui/options.cpp:921 +#: gui/launcher.cpp:215 gui/options.cpp:922 msgid "Audio" msgstr "Рudio" @@ -171,7 +171,7 @@ msgstr "Рudio" msgid "Override global audio settings" msgstr "Fer canvis sobre les opcions globals d'рudio" -#: gui/launcher.cpp:225 gui/options.cpp:925 +#: gui/launcher.cpp:225 gui/options.cpp:926 msgid "Volume" msgstr "Volum" @@ -179,7 +179,7 @@ msgstr "Volum" msgid "Override global volume settings" msgstr "Fer canvis sobre les opcions globals de volum" -#: gui/launcher.cpp:234 gui/options.cpp:933 +#: gui/launcher.cpp:234 gui/options.cpp:934 msgid "MIDI" msgstr "MIDI" @@ -187,7 +187,7 @@ msgstr "MIDI" msgid "Override global MIDI settings" msgstr "Fer canvis sobre les opcions globals de MIDI" -#: gui/launcher.cpp:246 gui/options.cpp:939 +#: gui/launcher.cpp:246 gui/options.cpp:940 msgid "MT-32" msgstr "" @@ -196,7 +196,7 @@ msgstr "" msgid "Override global MT-32 settings" msgstr "Fer canvis sobre les opcions globals de MIDI" -#: gui/launcher.cpp:258 gui/options.cpp:945 +#: gui/launcher.cpp:258 gui/options.cpp:946 msgid "Paths" msgstr "Camins" @@ -204,7 +204,7 @@ msgstr "Camins" msgid "Game Path:" msgstr "Camэ del Joc:" -#: gui/launcher.cpp:268 gui/options.cpp:958 +#: gui/launcher.cpp:268 gui/options.cpp:959 msgid "Extra Path:" msgstr "Camэ Extra:" @@ -216,18 +216,18 @@ msgstr "Especifica el camэ de dades addicionals utilitzades pel joc" msgid "Save Path:" msgstr "Camэ de les Partides:" -#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:952 -#: gui/options.cpp:953 +#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "Especifica on es desaran les partides" #: gui/launcher.cpp:289 gui/launcher.cpp:369 gui/launcher.cpp:418 #: gui/options.cpp:230 gui/options.cpp:399 gui/options.cpp:497 -#: gui/options.cpp:555 gui/options.cpp:732 gui/options.cpp:956 -#: gui/options.cpp:959 gui/options.cpp:963 gui/options.cpp:1053 -#: gui/options.cpp:1059 gui/options.cpp:1065 gui/options.cpp:1073 -#: gui/options.cpp:1097 gui/options.cpp:1101 gui/options.cpp:1107 -#: gui/options.cpp:1114 gui/options.cpp:1213 +#: gui/options.cpp:555 gui/options.cpp:733 gui/options.cpp:957 +#: gui/options.cpp:960 gui/options.cpp:964 gui/options.cpp:1054 +#: gui/options.cpp:1060 gui/options.cpp:1066 gui/options.cpp:1074 +#: gui/options.cpp:1098 gui/options.cpp:1102 gui/options.cpp:1108 +#: gui/options.cpp:1115 gui/options.cpp:1214 msgid "None" msgstr "Cap" @@ -236,7 +236,7 @@ msgstr "Cap" msgid "Default" msgstr "Per defecte" -#: gui/launcher.cpp:411 gui/options.cpp:1207 +#: gui/launcher.cpp:411 gui/options.cpp:1208 msgid "Select SoundFont" msgstr "Seleccioneu el fitxer SoundFont" @@ -331,7 +331,7 @@ msgstr "Cerca a la llista de jocs" msgid "Search:" msgstr "Cerca:" -#: gui/launcher.cpp:549 gui/options.cpp:733 +#: gui/launcher.cpp:549 gui/options.cpp:734 msgid "Clear value" msgstr "Neteja el valor" @@ -506,19 +506,19 @@ msgstr "Especifica el dispositiu de so o l'emulador de tarja de so preferit" msgid "Specifies output sound device or sound card emulator" msgstr "Especifica el dispositiu de so o l'emulador de tarja de so de sortida" -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "Emulador d'AdLib:" -#: gui/options.cpp:688 gui/options.cpp:689 +#: gui/options.cpp:689 gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "AdLib s'utilitza per la mњsica de molts jocs" -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "Freqќшncia de sortida:" -#: gui/options.cpp:699 gui/options.cpp:700 +#: gui/options.cpp:700 gui/options.cpp:701 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -526,51 +526,51 @@ msgstr "" "Valors mщs alts especifiquen millor qualitat de so perђ pot ser que la " "vostra tarja de so no ho suporti" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "Dispositiu GM:" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "" "Especifica el dispositiu de so per defecte per a la sortida General MIDI" -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "Fitxer SoundFont:" -#: gui/options.cpp:731 gui/options.cpp:732 +#: gui/options.cpp:732 gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "Algunes targes de so, Fluidsynth i Timidity suporten SoundFont" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "Mode combinat AdLib/MIDI" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "Utilitza MIDI i la generaciѓ de so AdLib alhora" -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "Guany MIDI:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 #, fuzzy msgid "MT-32 Device:" msgstr "Dispositiu MT32:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" "Especifica el dispositiu de so per defecte per a la sortida de Roland MT-32/" "LAPC1/CM32l/CM64" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 real (desactiva l'emulaciѓ GM)" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -578,141 +578,141 @@ msgstr "" "Marqueu si voleu utilitzar el vostre dispositiu hardware real de so " "compatible amb Roland connectat al vostre ordinador" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "Activa el Mode Roland GS" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Desactiva la conversiѓ General MIDI pels jocs que tenen banda sonora per a " "Roland MT-32" -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "Text i Veus:" -#: gui/options.cpp:785 gui/options.cpp:791 +#: gui/options.cpp:786 gui/options.cpp:792 msgid "Speech" msgstr "Veus" -#: gui/options.cpp:786 gui/options.cpp:792 +#: gui/options.cpp:787 gui/options.cpp:793 msgid "Subtitles" msgstr "Subtэtols" -#: gui/options.cpp:787 gui/options.cpp:793 +#: gui/options.cpp:788 gui/options.cpp:794 msgid "Both" msgstr "Ambdѓs" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "Veus" -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "Subt" -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "Mostra els subtэtols i reprodueix la veu" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "Velocitat dels subtэtols:" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "Volum de la mњsica:" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "Silenciar tot" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "Volum dels efectes:" -#: gui/options.cpp:819 gui/options.cpp:820 +#: gui/options.cpp:820 gui/options.cpp:821 msgid "Special sound effects volume" msgstr "Volum dels sons d'efectes especials" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "Volum de la veu:" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "Camэ de les Partides: " -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "Camэ dels Temes:" -#: gui/options.cpp:958 gui/options.cpp:959 +#: gui/options.cpp:959 gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Especifica el camэ de les dades addicionals utilitzades per tots els jocs o " "pel ScummVM" -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "Camэ dels connectors:" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "Misc" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "Mode de pintat de la interfэcie d'usuari:" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "Desat automрtic:" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "Tecles" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "Idioma de la interfэcie d'usuari:" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "Idioma de la interfэcie d'usuari de ScummVM" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "Anglшs" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "Heu de reiniciar ScummVM perquш tots els canvis tingui efecte." -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "Seleccioneu el directori de les partides desades" -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" "No es pot escriure al directori seleccionat. Si us plau, escolliu-ne un " "altre." -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "Seleccioneu el directori dels temes de la Interfэcie d'Usuari" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "Seleccioneu el directori dels fitxers extra" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "Seleccioneu el directori dels connectors" @@ -951,10 +951,24 @@ msgstr "Emulador OPL de DOSBox" msgid "No music" msgstr "Sense mњsica" +#: sound/mods/paula.cpp:192 +#, fuzzy +msgid "Amiga Audio Emulator" +msgstr "Emulador d'AdLib" + #: sound/softsynth/adlib.cpp:1590 msgid "AdLib Emulator" msgstr "Emulador d'AdLib" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "" + +#: sound/softsynth/sid.cpp:1434 +#, fuzzy +msgid "C64 Audio Emulator" +msgstr "Emulador d'AdLib" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "Iniciant l'Emulador de MT-32" diff --git a/po/de_DE.po b/po/de_DE.po index 63e2307b43..7d8bcb94c3 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.2.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" -"PO-Revision-Date: 2010-07-09 20:37+0100\n" +"POT-Creation-Date: 2010-08-11 22:12+0100\n" +"PO-Revision-Date: 2010-08-12 00:56+0100\n" "Last-Translator: Simon Sawatzki\n" "Language-Team: Lothar Serra Mari <Lothar@Windowsbase.de> & Simon Sawatzki " "<SimSaw@gmx.de>\n" @@ -40,7 +40,7 @@ msgid "Go to previous directory level" msgstr "Zu hіherer Pfadebene wechseln" #: gui/browser.cpp:70 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1029 +#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1030 #: gui/saveload.cpp:65 gui/saveload.cpp:157 gui/themebrowser.cpp:56 #: backends/platform/wii/options.cpp:48 msgid "Cancel" @@ -71,7 +71,7 @@ msgid "Map" msgstr "Zuweisen" #: gui/KeysDialog.cpp:45 gui/launcher.cpp:281 gui/launcher.cpp:893 -#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1030 +#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -140,7 +140,7 @@ msgstr "" "Spiels in eine deutsche verwandeln." #: gui/launcher.cpp:185 gui/launcher.cpp:196 gui/options.cpp:80 -#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1000 +#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "<Standard>" @@ -153,11 +153,11 @@ msgstr "Plattform:" msgid "Platform the game was originally designed for" msgstr "Plattform, fќr die das Spiel ursprќnglich erstellt wurde" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "Graphics" msgstr "Grafik" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "GFX" msgstr "GFX" @@ -165,7 +165,7 @@ msgstr "GFX" msgid "Override global graphic settings" msgstr "Globale Grafikeinstellungen ќbergehen" -#: gui/launcher.cpp:215 gui/options.cpp:921 +#: gui/launcher.cpp:215 gui/options.cpp:922 msgid "Audio" msgstr "Audio" @@ -173,7 +173,7 @@ msgstr "Audio" msgid "Override global audio settings" msgstr "Globale Audioeinstellungen ќbergehen" -#: gui/launcher.cpp:225 gui/options.cpp:925 +#: gui/launcher.cpp:225 gui/options.cpp:926 msgid "Volume" msgstr "Lautstфrke" @@ -181,7 +181,7 @@ msgstr "Lautstфrke" msgid "Override global volume settings" msgstr "Globale Lautstфrke-Einstellungen ќbergehen" -#: gui/launcher.cpp:234 gui/options.cpp:933 +#: gui/launcher.cpp:234 gui/options.cpp:934 msgid "MIDI" msgstr "MIDI" @@ -189,16 +189,15 @@ msgstr "MIDI" msgid "Override global MIDI settings" msgstr "Globale MIDI-Einstellungen ќbergehen" -#: gui/launcher.cpp:246 gui/options.cpp:939 +#: gui/launcher.cpp:246 gui/options.cpp:940 msgid "MT-32" -msgstr "" +msgstr "MT-32" #: gui/launcher.cpp:248 -#, fuzzy msgid "Override global MT-32 settings" -msgstr "Globale MIDI-Einstellungen ќbergehen" +msgstr "Globale MT-32-Einstellungen ќbergehen" -#: gui/launcher.cpp:258 gui/options.cpp:945 +#: gui/launcher.cpp:258 gui/options.cpp:946 msgid "Paths" msgstr "Pfade" @@ -206,7 +205,7 @@ msgstr "Pfade" msgid "Game Path:" msgstr "Spielpfad:" -#: gui/launcher.cpp:268 gui/options.cpp:958 +#: gui/launcher.cpp:268 gui/options.cpp:959 msgid "Extra Path:" msgstr "Extrapfad:" @@ -218,18 +217,18 @@ msgstr "Legt das Verzeichnis fќr zusфtzliche Spieldateien fest." msgid "Save Path:" msgstr "Spielstфnde:" -#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:952 -#: gui/options.cpp:953 +#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "Legt fest, wo die Spielstфnde abgelegt werden." #: gui/launcher.cpp:289 gui/launcher.cpp:369 gui/launcher.cpp:418 #: gui/options.cpp:230 gui/options.cpp:399 gui/options.cpp:497 -#: gui/options.cpp:555 gui/options.cpp:732 gui/options.cpp:956 -#: gui/options.cpp:959 gui/options.cpp:963 gui/options.cpp:1053 -#: gui/options.cpp:1059 gui/options.cpp:1065 gui/options.cpp:1073 -#: gui/options.cpp:1097 gui/options.cpp:1101 gui/options.cpp:1107 -#: gui/options.cpp:1114 gui/options.cpp:1213 +#: gui/options.cpp:555 gui/options.cpp:733 gui/options.cpp:957 +#: gui/options.cpp:960 gui/options.cpp:964 gui/options.cpp:1054 +#: gui/options.cpp:1060 gui/options.cpp:1066 gui/options.cpp:1074 +#: gui/options.cpp:1098 gui/options.cpp:1102 gui/options.cpp:1108 +#: gui/options.cpp:1115 gui/options.cpp:1214 msgid "None" msgstr "-" @@ -238,7 +237,7 @@ msgstr "-" msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:411 gui/options.cpp:1207 +#: gui/launcher.cpp:411 gui/options.cpp:1208 msgid "Select SoundFont" msgstr "SoundFont auswфhlen" @@ -332,7 +331,7 @@ msgstr "In Spieleliste suchen" msgid "Search:" msgstr "Suchen:" -#: gui/launcher.cpp:549 gui/options.cpp:733 +#: gui/launcher.cpp:549 gui/options.cpp:734 msgid "Clear value" msgstr "Wert lіschen" @@ -508,19 +507,19 @@ msgstr "" msgid "Specifies output sound device or sound card emulator" msgstr "Legt das Musikwiedergabe-Gerфt oder den Soundkarten-Emulator fest." -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "AdLib-Emulator" -#: gui/options.cpp:688 gui/options.cpp:689 +#: gui/options.cpp:689 gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "AdLib wird fќr die Musik in vielen Spielen verwendet." -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "Ausgabefrequenz:" -#: gui/options.cpp:699 gui/options.cpp:700 +#: gui/options.cpp:700 gui/options.cpp:701 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -528,52 +527,51 @@ msgstr "" "Hіhere Werte bewirken eine bessere Soundqualitфt, werden aber mіglicherweise " "nicht von jeder Soundkarte unterstќtzt." -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "GM-Gerфt:" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "" "Legt das standardmфпige Musikwiedergabe-Gerфt fќr General-MIDI-Ausgabe fest." -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:731 gui/options.cpp:732 +#: gui/options.cpp:732 gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "" "SoundFont wird von einigen Soundkarten, Fluidsynth und Timidity unterstќtzt." -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "AdLib-/MIDI-Modus" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "Benutzt MIDI und AdLib zur Sounderzeugung." -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "MIDI-Lautstфrke:" -#: gui/options.cpp:749 -#, fuzzy +#: gui/options.cpp:750 msgid "MT-32 Device:" -msgstr "MT32-Gerфt:" +msgstr "MT-32-Gerфt:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" "Legt das standardmфпige Tonwiedergabe-Gerфt fќr die Ausgabe von Roland MT-32/" "LAPC1/CM32l/CM64 fest." -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Echte Roland-MT-32-Emulation (GM-Emulation deaktiviert)" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -581,141 +579,141 @@ msgstr "" "Wфhlen Sie dies aus, wenn Sie Ihre echte Hardware, die mit einer Roland-" "kompatiblen Soundkarte verbunden ist, verwenden mіchten." -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "Roland-GS-Modus" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Schaltet die General-MIDI-Zuweisung fќr Spiele mit Roland-MT-32-Audiospur " "aus." -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "Text und Sprache:" -#: gui/options.cpp:785 gui/options.cpp:791 +#: gui/options.cpp:786 gui/options.cpp:792 msgid "Speech" msgstr "Sprache" -#: gui/options.cpp:786 gui/options.cpp:792 +#: gui/options.cpp:787 gui/options.cpp:793 msgid "Subtitles" msgstr "Untertitel" -#: gui/options.cpp:787 gui/options.cpp:793 +#: gui/options.cpp:788 gui/options.cpp:794 msgid "Both" msgstr "Beides" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "Spr." -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "Untert." -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "Untertitel anzeigen und Sprachausgabe aktivieren" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "Untertitel-Tempo:" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "Musiklautstфrke:" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "Alles aus" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "Effektlautstфrke:" -#: gui/options.cpp:819 gui/options.cpp:820 +#: gui/options.cpp:820 gui/options.cpp:821 msgid "Special sound effects volume" msgstr "Lautstфrke spezieller Soundeffekte" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "Sprachlautstфrke:" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "Spielstфnde: " -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "Themenpfad:" -#: gui/options.cpp:958 gui/options.cpp:959 +#: gui/options.cpp:959 gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Legt das Verzeichnis fќr zusфtzliche Spieldateien fќr alle Spiele in ScummVM " "fest." -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "Plugin-Pfad:" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "Sonstiges" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "Thema:" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "GUI-Renderer:" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "Autom. Speichern:" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "Tasten" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "GUI-Sprache:" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "Sprache der ScummVM-Oberflфche" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "English" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "Sie mќssen ScummVM neustarten, um die Einstellungen zu ќbernehmen." -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "Verzeichnis fќr Spielstфnde auswфhlen" -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" "In das gewфhlte Verzeichnis kann nicht geschrieben werden. Bitte ein anderes " "auswфhlen." -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "Verzeichnis fќr Oberflфchen-Themen" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "Verzeichnis fќr zusфtzliche Dateien auswфhlen" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "Verzeichnis fќr Erweiterungen auswфhlen" @@ -954,10 +952,22 @@ msgstr "DOSBox-OPL-Emulator" msgid "No music" msgstr "Keine Musik" +#: sound/mods/paula.cpp:192 +msgid "Amiga Audio Emulator" +msgstr "Amiga-Audio-Emulator" + #: sound/softsynth/adlib.cpp:1590 msgid "AdLib Emulator" msgstr "AdLib-Emulator" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "" + +#: sound/softsynth/sid.cpp:1434 +msgid "C64 Audio Emulator" +msgstr "C64-Audio-Emulator" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "MT-32-Emulator wird gestartet..." diff --git a/po/es_ES.po b/po/es_ES.po index de9374f844..4853c7e44e 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.2.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" +"POT-Creation-Date: 2010-08-11 22:12+0100\n" "PO-Revision-Date: 2010-07-30 22:17+0100\n" "Last-Translator: Tomсs Maidagan\n" "Language-Team: \n" @@ -37,27 +37,18 @@ msgstr "Arriba" msgid "Go to previous directory level" msgstr "Ir al directorio anterior" -#: gui/browser.cpp:70 -#: gui/chooser.cpp:49 -#: gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:280 -#: gui/massadd.cpp:95 -#: gui/options.cpp:1029 -#: gui/saveload.cpp:65 -#: gui/saveload.cpp:157 -#: gui/themebrowser.cpp:56 +#: gui/browser.cpp:70 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 +#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1030 +#: gui/saveload.cpp:65 gui/saveload.cpp:157 gui/themebrowser.cpp:56 #: backends/platform/wii/options.cpp:48 msgid "Cancel" msgstr "Cancelar" -#: gui/browser.cpp:71 -#: gui/chooser.cpp:50 -#: gui/themebrowser.cpp:57 +#: gui/browser.cpp:71 gui/chooser.cpp:50 gui/themebrowser.cpp:57 msgid "Choose" msgstr "Elegir" -#: gui/GuiManager.cpp:103 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/GuiManager.cpp:103 backends/keymapper/remap-dialog.cpp:54 msgid "Close" msgstr "Cerrar" @@ -65,13 +56,11 @@ msgstr "Cerrar" msgid "Mouse click" msgstr "Clic de ratѓn" -#: gui/GuiManager.cpp:109 -#: base/main.cpp:285 +#: gui/GuiManager.cpp:109 base/main.cpp:285 msgid "Display keyboard" msgstr "Mostrar el teclado" -#: gui/GuiManager.cpp:112 -#: base/main.cpp:288 +#: gui/GuiManager.cpp:112 base/main.cpp:288 msgid "Remap keys" msgstr "Asignar teclas" @@ -79,12 +68,8 @@ msgstr "Asignar teclas" msgid "Map" msgstr "Asignar" -#: gui/KeysDialog.cpp:45 -#: gui/launcher.cpp:281 -#: gui/launcher.cpp:893 -#: gui/launcher.cpp:897 -#: gui/massadd.cpp:92 -#: gui/options.cpp:1030 +#: gui/KeysDialog.cpp:45 gui/launcher.cpp:281 gui/launcher.cpp:893 +#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -94,16 +79,12 @@ msgstr "De acuerdo" msgid "Select an action and click 'Map'" msgstr "Selecciona una acciѓn y pulsa \"Asignar\"" -#: gui/KeysDialog.cpp:83 -#: gui/KeysDialog.cpp:105 -#: gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 #, c-format msgid "Associated key : %s" msgstr "Tecla asociada: %s" -#: gui/KeysDialog.cpp:85 -#: gui/KeysDialog.cpp:107 -#: gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 #, c-format msgid "Associated key : none" msgstr "Tecla asociada: ninguna" @@ -128,17 +109,19 @@ msgstr "Juego" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:175 -#: gui/launcher.cpp:176 -msgid "Short game identifier used for referring to savegames and running the game from the command line" -msgstr "Identificador usado para las partidas guardadas y para ejecutar el juego desde la lэnea de comando" +#: gui/launcher.cpp:175 gui/launcher.cpp:176 +msgid "" +"Short game identifier used for referring to savegames and running the game " +"from the command line" +msgstr "" +"Identificador usado para las partidas guardadas y para ejecutar el juego " +"desde la lэnea de comando" #: gui/launcher.cpp:179 msgid "Name:" msgstr "Nombre:" -#: gui/launcher.cpp:179 -#: gui/launcher.cpp:180 +#: gui/launcher.cpp:179 gui/launcher.cpp:180 msgid "Full title of the game" msgstr "Tэtulo completo del juego" @@ -146,17 +129,16 @@ msgstr "Tэtulo completo del juego" msgid "Language:" msgstr "Idioma:" -#: gui/launcher.cpp:183 -#: gui/launcher.cpp:184 -msgid "Language of the game. This will not turn your Spanish game version into English" -msgstr "Idioma del juego. No sirve para pasar al inglщs la versiѓn espaёola de un juego" +#: gui/launcher.cpp:183 gui/launcher.cpp:184 +msgid "" +"Language of the game. This will not turn your Spanish game version into " +"English" +msgstr "" +"Idioma del juego. No sirve para pasar al inglщs la versiѓn espaёola de un " +"juego" -#: gui/launcher.cpp:185 -#: gui/launcher.cpp:196 -#: gui/options.cpp:80 -#: gui/options.cpp:635 -#: gui/options.cpp:645 -#: gui/options.cpp:1000 +#: gui/launcher.cpp:185 gui/launcher.cpp:196 gui/options.cpp:80 +#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "<por defecto>" @@ -165,20 +147,15 @@ msgstr "<por defecto>" msgid "Platform:" msgstr "Plataforma:" -#: gui/launcher.cpp:194 -#: gui/launcher.cpp:195 +#: gui/launcher.cpp:194 gui/launcher.cpp:195 msgid "Platform the game was originally designed for" msgstr "Plataforma para la que se diseёѓ el juego" -#: gui/launcher.cpp:206 -#: gui/options.cpp:898 -#: gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "Graphics" msgstr "Grсficos" -#: gui/launcher.cpp:206 -#: gui/options.cpp:898 -#: gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "GFX" msgstr "GFX" @@ -186,8 +163,7 @@ msgstr "GFX" msgid "Override global graphic settings" msgstr "Ignorar opciones grсficas generales" -#: gui/launcher.cpp:215 -#: gui/options.cpp:921 +#: gui/launcher.cpp:215 gui/options.cpp:922 msgid "Audio" msgstr "Sonido" @@ -195,8 +171,7 @@ msgstr "Sonido" msgid "Override global audio settings" msgstr "Ignorar opciones de sonido generales" -#: gui/launcher.cpp:225 -#: gui/options.cpp:925 +#: gui/launcher.cpp:225 gui/options.cpp:926 msgid "Volume" msgstr "Volumen" @@ -204,8 +179,7 @@ msgstr "Volumen" msgid "Override global volume settings" msgstr "Ignorar opciones de volumen generales" -#: gui/launcher.cpp:234 -#: gui/options.cpp:933 +#: gui/launcher.cpp:234 gui/options.cpp:934 msgid "MIDI" msgstr "MIDI" @@ -213,8 +187,7 @@ msgstr "MIDI" msgid "Override global MIDI settings" msgstr "Ignorar opciones MIDI generales" -#: gui/launcher.cpp:246 -#: gui/options.cpp:939 +#: gui/launcher.cpp:246 gui/options.cpp:940 msgid "MT-32" msgstr "MT-32" @@ -222,8 +195,7 @@ msgstr "MT-32" msgid "Override global MT-32 settings" msgstr "Ignorar opciones MT-32 generales" -#: gui/launcher.cpp:258 -#: gui/options.cpp:945 +#: gui/launcher.cpp:258 gui/options.cpp:946 msgid "Paths" msgstr "Rutas" @@ -231,13 +203,11 @@ msgstr "Rutas" msgid "Game Path:" msgstr "Juego:" -#: gui/launcher.cpp:268 -#: gui/options.cpp:958 +#: gui/launcher.cpp:268 gui/options.cpp:959 msgid "Extra Path:" msgstr "Adicional:" -#: gui/launcher.cpp:268 -#: gui/launcher.cpp:269 +#: gui/launcher.cpp:268 gui/launcher.cpp:269 msgid "Specifies path to additional data used the game" msgstr "Especifica un directorio para datos adicionales del juego" @@ -245,49 +215,31 @@ msgstr "Especifica un directorio para datos adicionales del juego" msgid "Save Path:" msgstr "Partidas:" -#: gui/launcher.cpp:272 -#: gui/launcher.cpp:273 -#: gui/options.cpp:952 -#: gui/options.cpp:953 +#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "Especifica dѓnde guardar tus partidas" -#: gui/launcher.cpp:289 -#: gui/launcher.cpp:369 -#: gui/launcher.cpp:418 -#: gui/options.cpp:230 -#: gui/options.cpp:399 -#: gui/options.cpp:497 -#: gui/options.cpp:555 -#: gui/options.cpp:732 -#: gui/options.cpp:956 -#: gui/options.cpp:959 -#: gui/options.cpp:963 -#: gui/options.cpp:1053 -#: gui/options.cpp:1059 -#: gui/options.cpp:1065 -#: gui/options.cpp:1073 -#: gui/options.cpp:1097 -#: gui/options.cpp:1101 -#: gui/options.cpp:1107 -#: gui/options.cpp:1114 -#: gui/options.cpp:1213 +#: gui/launcher.cpp:289 gui/launcher.cpp:369 gui/launcher.cpp:418 +#: gui/options.cpp:230 gui/options.cpp:399 gui/options.cpp:497 +#: gui/options.cpp:555 gui/options.cpp:733 gui/options.cpp:957 +#: gui/options.cpp:960 gui/options.cpp:964 gui/options.cpp:1054 +#: gui/options.cpp:1060 gui/options.cpp:1066 gui/options.cpp:1074 +#: gui/options.cpp:1098 gui/options.cpp:1102 gui/options.cpp:1108 +#: gui/options.cpp:1115 gui/options.cpp:1214 msgid "None" msgstr "Ninguno" -#: gui/launcher.cpp:294 -#: gui/launcher.cpp:373 +#: gui/launcher.cpp:294 gui/launcher.cpp:373 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Por defecto" -#: gui/launcher.cpp:411 -#: gui/options.cpp:1207 +#: gui/launcher.cpp:411 gui/options.cpp:1208 msgid "Select SoundFont" msgstr "Seleccionar SoundFont" -#: gui/launcher.cpp:430 -#: gui/launcher.cpp:568 +#: gui/launcher.cpp:430 gui/launcher.cpp:568 msgid "Select directory with game data" msgstr "Seleccionar directorio con los archivos del juego" @@ -303,8 +255,7 @@ msgstr "Seleccionar directorio para partidas guardadas" msgid "This game ID is already taken. Please choose another one." msgstr "Esta ID ya estс siendo usada. Por favor, elige otra." -#: gui/launcher.cpp:520 -#: engines/dialogs.cpp:113 +#: gui/launcher.cpp:520 engines/dialogs.cpp:113 msgid "~Q~uit" msgstr "~S~alir" @@ -372,34 +323,33 @@ msgstr "Elimina el juego de la lista. Los archivos no se borran" msgid "Search in game list" msgstr "Buscar en la lista de juegos" -#: gui/launcher.cpp:546 -#: gui/launcher.cpp:1057 +#: gui/launcher.cpp:546 gui/launcher.cpp:1057 msgid "Search:" msgstr "Buscar:" -#: gui/launcher.cpp:549 -#: gui/options.cpp:733 +#: gui/launcher.cpp:549 gui/options.cpp:734 msgid "Clear value" msgstr "Eliminar valor" -#: gui/launcher.cpp:571 -#: engines/dialogs.cpp:117 +#: gui/launcher.cpp:571 engines/dialogs.cpp:117 msgid "Load game:" msgstr "Cargar juego:" -#: gui/launcher.cpp:571 -#: engines/dialogs.cpp:117 +#: gui/launcher.cpp:571 engines/dialogs.cpp:117 #: backends/platform/wince/CEActionsPocket.cpp:263 #: backends/platform/wince/CEActionsSmartphone.cpp:225 msgid "Load" msgstr "Cargar" #: gui/launcher.cpp:680 -msgid "Do you really want to run the mass game detector? This could potentially add a huge number of games." -msgstr "ПSeguro que quieres ejecutar la detecciѓn masiva? Puede que se aёada un gran nњmero de juegos." +msgid "" +"Do you really want to run the mass game detector? This could potentially add " +"a huge number of games." +msgstr "" +"ПSeguro que quieres ejecutar la detecciѓn masiva? Puede que se aёada un gran " +"nњmero de juegos." -#: gui/launcher.cpp:681 -#: gui/launcher.cpp:830 +#: gui/launcher.cpp:681 gui/launcher.cpp:830 #: backends/platform/symbian/src/SymbianOS.cpp:446 #: backends/platform/wince/CEActionsPocket.cpp:313 #: backends/platform/wince/CEActionsSmartphone.cpp:272 @@ -407,8 +357,7 @@ msgstr "ПSeguro que quieres ejecutar la detecciѓn masiva? Puede que se aёada un msgid "Yes" msgstr "Sэ" -#: gui/launcher.cpp:681 -#: gui/launcher.cpp:830 +#: gui/launcher.cpp:681 gui/launcher.cpp:830 #: backends/platform/symbian/src/SymbianOS.cpp:446 #: backends/platform/wince/CEActionsPocket.cpp:313 #: backends/platform/wince/CEActionsSmartphone.cpp:272 @@ -438,7 +387,8 @@ msgstr "Este juego no permite cargar partidas desde el lanzador." #: gui/launcher.cpp:897 msgid "ScummVM could not find any engine capable of running the selected game!" -msgstr "ЁScummVM no ha podido encontrar ningњn motor capaz de ejecutar el juego!" +msgstr "" +"ЁScummVM no ha podido encontrar ningњn motor capaz de ejecutar el juego!" #: gui/launcher.cpp:1009 msgid "Mass Add..." @@ -448,8 +398,7 @@ msgstr "Aёadir varios..." msgid "Add Game..." msgstr "Aёadir juego..." -#: gui/massadd.cpp:79 -#: gui/massadd.cpp:82 +#: gui/massadd.cpp:79 gui/massadd.cpp:82 msgid "... progress ..." msgstr "... progreso..." @@ -520,8 +469,7 @@ msgstr "Modo grсfico:" msgid "Render mode:" msgstr "Modo de renderizado:" -#: gui/options.cpp:643 -#: gui/options.cpp:644 +#: gui/options.cpp:643 gui/options.cpp:644 msgid "Special dithering modes supported by some games" msgstr "Modos especiales de expansiѓn soportados por algunos juegos" @@ -547,230 +495,231 @@ msgstr "Dispositivo de mњsica:" #: gui/options.cpp:663 msgid "Specifies preferred sound device or sound card emulator" -msgstr "Especifica quщ dispositivo de sonido o emulador de tarjeta de sonido prefieres" +msgstr "" +"Especifica quщ dispositivo de sonido o emulador de tarjeta de sonido " +"prefieres" -#: gui/options.cpp:663 -#: gui/options.cpp:664 +#: gui/options.cpp:663 gui/options.cpp:664 msgid "Specifies output sound device or sound card emulator" -msgstr "Especifica el dispositivo de sonido o emulador de tarjeta de sonido de salida" +msgstr "" +"Especifica el dispositivo de sonido o emulador de tarjeta de sonido de salida" -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "Emulador de AdLib:" -#: gui/options.cpp:688 -#: gui/options.cpp:689 +#: gui/options.cpp:689 gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "AdLib se usa para la mњsica en muchos juegos" -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "Frecuencia de salida:" -#: gui/options.cpp:699 -#: gui/options.cpp:700 -msgid "Higher value specifies better sound quality but may be not supported by your soundcard" -msgstr "Los valores mсs altos ofrecen mayor calidad, pero puede que tu tarjeta de sonido no sea compatible" +#: gui/options.cpp:700 gui/options.cpp:701 +msgid "" +"Higher value specifies better sound quality but may be not supported by your " +"soundcard" +msgstr "" +"Los valores mсs altos ofrecen mayor calidad, pero puede que tu tarjeta de " +"sonido no sea compatible" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "Dispositivo GM:" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "Especifica el dispositivo de salida General MIDI por defecto" -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:731 -#: gui/options.cpp:732 +#: gui/options.cpp:732 gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "Algunas tarjetas de sonido, Fluidsynth y Timidity soportan SoundFont" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "Modo AdLib/MIDI" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "Usar tanto MIDI como AdLib en la generaciѓn de sonido" -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "Ganancia MIDI:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "MT-32 Device:" msgstr "Dispositivo MT-32:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" -msgstr "Especifica el dispositivo de sonido para la salida Roland MT-32/LAPC1/CM32l/CM64 por defecto" +msgstr "" +"Especifica el dispositivo de sonido para la salida Roland MT-32/LAPC1/CM32l/" +"CM64 por defecto" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 autщntica (desactivar emulaciѓn GM)" -#: gui/options.cpp:753 -msgid "Check if you want to use your real hardware Roland-compatible sound device connected to your computer" -msgstr "Marcar si se quiere usar un dispositivo de sonido real conectado al ordenador y compatible con Roland" +#: gui/options.cpp:754 +msgid "" +"Check if you want to use your real hardware Roland-compatible sound device " +"connected to your computer" +msgstr "" +"Marcar si se quiere usar un dispositivo de sonido real conectado al " +"ordenador y compatible con Roland" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "Activar modo Roland GS" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "Desactiva la conversiѓn General MIDI en juegos con sonido Roland MT-32" -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "Texto y voces:" -#: gui/options.cpp:785 -#: gui/options.cpp:791 +#: gui/options.cpp:786 gui/options.cpp:792 msgid "Speech" msgstr "Voces" -#: gui/options.cpp:786 -#: gui/options.cpp:792 +#: gui/options.cpp:787 gui/options.cpp:793 msgid "Subtitles" msgstr "Subtэtulos" -#: gui/options.cpp:787 -#: gui/options.cpp:793 +#: gui/options.cpp:788 gui/options.cpp:794 msgid "Both" msgstr "Ambos" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "Voces" -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "Subt." -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "Reproducir voces y subtэtulos" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "Velocidad de los subtэtulos:" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "Volumen de la mњsica:" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "Silenciar" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "Volumen de los efectos" -#: gui/options.cpp:819 -#: gui/options.cpp:820 +#: gui/options.cpp:820 gui/options.cpp:821 msgid "Special sound effects volume" msgstr "Volumen de los efectos de sonido" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "Volumen de las voces" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "Partidas:" -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "Temas:" -#: gui/options.cpp:958 -#: gui/options.cpp:959 +#: gui/options.cpp:959 gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Especifica el directorio adicional usado por los juegos y ScummVM" -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "Otros" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "Render de la interfaz" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "Autoguardado:" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "Teclas" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "Idioma de la interfaz:" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "Idioma de la interfaz de ScummVM" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "Inglщs" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "Tienes que reiniciar ScummVM para aplicar los cambios." -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "Selecciona el directorio para partidas guardadas." -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." -msgstr "No se puede escribir en el directorio elegido. Por favor, selecciona otro." +msgstr "" +"No se puede escribir en el directorio elegido. Por favor, selecciona otro." -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "Selecciona el directorio para temas de interfaz" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "Selecciona el directorio para archivos adicionales" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "Selecciona el directorio para plugins" -#: gui/saveload.cpp:60 -#: gui/saveload.cpp:241 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No date saved" msgstr "No hay fecha guardada" -#: gui/saveload.cpp:61 -#: gui/saveload.cpp:242 +#: gui/saveload.cpp:61 gui/saveload.cpp:242 msgid "No time saved" msgstr "No hay hora guardada" -#: gui/saveload.cpp:62 -#: gui/saveload.cpp:243 +#: gui/saveload.cpp:62 gui/saveload.cpp:243 msgid "No playtime saved" msgstr "No hay tiempo de juego guardado" -#: gui/saveload.cpp:69 -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:69 gui/saveload.cpp:157 msgid "Delete" msgstr "Borrar" @@ -790,8 +739,7 @@ msgstr "Hora:" msgid "Playtime: " msgstr "Tiempo de juego:" -#: gui/saveload.cpp:286 -#: gui/saveload.cpp:353 +#: gui/saveload.cpp:286 gui/saveload.cpp:353 msgid "Untitled savestate" msgstr "Partida sin nombre" @@ -820,15 +768,13 @@ msgstr "El motor no soporta el nivel de debug '%s'" msgid "Menu" msgstr "Menњ" -#: base/main.cpp:276 -#: backends/platform/symbian/src/SymbianActions.cpp:48 +#: base/main.cpp:276 backends/platform/symbian/src/SymbianActions.cpp:48 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:45 msgid "Skip" msgstr "Saltar" -#: base/main.cpp:279 -#: backends/platform/symbian/src/SymbianActions.cpp:53 +#: base/main.cpp:279 backends/platform/symbian/src/SymbianActions.cpp:53 #: backends/platform/wince/CEActionsPocket.cpp:41 msgid "Pause" msgstr "Pausar" @@ -841,8 +787,7 @@ msgstr "Saltar frase" msgid "Error running game:" msgstr "Error al ejecutar el juego:" -#: base/main.cpp:430 -#: base/main.cpp:431 +#: base/main.cpp:430 base/main.cpp:431 msgid "Could not find any engine capable of running the selected game" msgstr "No se ha podido encontrar ningњn motor capaz de ejecutar el juego" @@ -894,8 +839,7 @@ msgstr "Lectura fallida" msgid "Writing data failed" msgstr "Escritura de datos fallida" -#: common/error.cpp:60 -#: common/error.cpp:71 +#: common/error.cpp:60 common/error.cpp:71 msgid "Unknown Error" msgstr "Error desconocido" @@ -939,8 +883,7 @@ msgstr "~V~olver al lanzador" msgid "Save game:" msgstr "Guardar partida" -#: engines/dialogs.cpp:119 -#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: engines/dialogs.cpp:119 backends/platform/symbian/src/SymbianActions.cpp:47 #: backends/platform/wince/CEActionsPocket.cpp:42 #: backends/platform/wince/CEActionsPocket.cpp:263 #: backends/platform/wince/CEActionsSmartphone.cpp:44 @@ -948,14 +891,12 @@ msgstr "Guardar partida" msgid "Save" msgstr "Guardar" -#: engines/dialogs.cpp:301 -#: engines/mohawk/dialogs.cpp:84 +#: engines/dialogs.cpp:301 engines/mohawk/dialogs.cpp:84 #: engines/mohawk/dialogs.cpp:118 msgid "~O~K" msgstr "~S~э" -#: engines/dialogs.cpp:302 -#: engines/mohawk/dialogs.cpp:85 +#: engines/dialogs.cpp:302 engines/mohawk/dialogs.cpp:85 #: engines/mohawk/dialogs.cpp:119 msgid "~C~ancel" msgstr "~C~ancelar" @@ -977,8 +918,7 @@ msgstr "Si~g~uiente" msgid "~C~lose" msgstr "Cerra~r~" -#: engines/mohawk/dialogs.cpp:81 -#: engines/mohawk/dialogs.cpp:115 +#: engines/mohawk/dialogs.cpp:81 engines/mohawk/dialogs.cpp:115 msgid "~Z~ip Mode Activated" msgstr "Modo ~Z~ip activado" @@ -1002,10 +942,24 @@ msgstr "Emulador de DOSBox OPL" msgid "No music" msgstr "Sin mњsica" +#: sound/mods/paula.cpp:192 +#, fuzzy +msgid "Amiga Audio Emulator" +msgstr "Emulador de AdLib" + #: sound/softsynth/adlib.cpp:1590 msgid "AdLib Emulator" msgstr "Emulador de AdLib" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "" + +#: sound/softsynth/sid.cpp:1434 +#, fuzzy +msgid "C64 Audio Emulator" +msgstr "Emulador de AdLib" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "Iniciando emulador de MT-32" @@ -1248,13 +1202,11 @@ msgstr "Aceleraciѓn del pad GC:" msgid "DVD" msgstr "DVD" -#: backends/platform/wii/options.cpp:89 -#: backends/platform/wii/options.cpp:101 +#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101 msgid "Status:" msgstr "Estado:" -#: backends/platform/wii/options.cpp:90 -#: backends/platform/wii/options.cpp:102 +#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 msgid "Unknown" msgstr "Desconocido" @@ -1425,4 +1377,3 @@ msgstr "Pantalla" #: backends/platform/wince/CELauncherDialog.cpp:104 msgid "Do you want to perform an automatic scan ?" msgstr "ПQuieres realizar una bњsqueda automсtica?" - diff --git a/po/fr_FR.po b/po/fr_FR.po index 51af254072..0efe0e53a9 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.2.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" -"PO-Revision-Date: 2010-07-30 22:18+0100\n" +"POT-Creation-Date: 2010-08-11 22:12+0100\n" +"PO-Revision-Date: 2010-08-11 22:14+0100\n" "Last-Translator: Thierry Crozat <criezy@scummvm.org>\n" "Language-Team: French <scummvm-devel@lists.sf.net>\n" "MIME-Version: 1.0\n" @@ -43,7 +43,7 @@ msgstr "Remonte d'un niveau dans la hiщrarchie de rщpertoire" #: gui/KeysDialog.cpp:46 #: gui/launcher.cpp:280 #: gui/massadd.cpp:95 -#: gui/options.cpp:1029 +#: gui/options.cpp:1030 #: gui/saveload.cpp:65 #: gui/saveload.cpp:157 #: gui/themebrowser.cpp:56 @@ -85,7 +85,7 @@ msgstr "Affecter" #: gui/launcher.cpp:893 #: gui/launcher.cpp:897 #: gui/massadd.cpp:92 -#: gui/options.cpp:1030 +#: gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -157,7 +157,7 @@ msgstr "Langue du jeu. Cela ne traduira pas en anglais par magie votre version e #: gui/options.cpp:80 #: gui/options.cpp:635 #: gui/options.cpp:645 -#: gui/options.cpp:1000 +#: gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "<defaut>" @@ -172,14 +172,14 @@ msgid "Platform the game was originally designed for" msgstr "Plateforme pour laquelle votre jeu a щtщ conчu" #: gui/launcher.cpp:206 -#: gui/options.cpp:898 -#: gui/options.cpp:915 +#: gui/options.cpp:899 +#: gui/options.cpp:916 msgid "Graphics" msgstr "Graphique" #: gui/launcher.cpp:206 -#: gui/options.cpp:898 -#: gui/options.cpp:915 +#: gui/options.cpp:899 +#: gui/options.cpp:916 msgid "GFX" msgstr "GFX" @@ -188,7 +188,7 @@ msgid "Override global graphic settings" msgstr "Utiliser des rщglages graphiques spщcifiques р ce jeux" #: gui/launcher.cpp:215 -#: gui/options.cpp:921 +#: gui/options.cpp:922 msgid "Audio" msgstr "Audio" @@ -197,7 +197,7 @@ msgid "Override global audio settings" msgstr "Utiliser des rщglages audio spщcifiques р ce jeux" #: gui/launcher.cpp:225 -#: gui/options.cpp:925 +#: gui/options.cpp:926 msgid "Volume" msgstr "Volume" @@ -206,7 +206,7 @@ msgid "Override global volume settings" msgstr "Utiliser des rщglages de volume sonore spщcifiques р ce jeux" #: gui/launcher.cpp:234 -#: gui/options.cpp:933 +#: gui/options.cpp:934 msgid "MIDI" msgstr "MIDI" @@ -215,7 +215,7 @@ msgid "Override global MIDI settings" msgstr "Utiliser des rщglages MIDI spщcifiques р ce jeux" #: gui/launcher.cpp:246 -#: gui/options.cpp:939 +#: gui/options.cpp:940 msgid "MT-32" msgstr "MT-32" @@ -224,7 +224,7 @@ msgid "Override global MT-32 settings" msgstr "Utiliser des rщglages MT-32 spщcifiques р ce jeux" #: gui/launcher.cpp:258 -#: gui/options.cpp:945 +#: gui/options.cpp:946 msgid "Paths" msgstr "Chemins" @@ -233,7 +233,7 @@ msgid "Game Path:" msgstr "Chemin du Jeu:" #: gui/launcher.cpp:268 -#: gui/options.cpp:958 +#: gui/options.cpp:959 msgid "Extra Path:" msgstr "Extra:" @@ -248,8 +248,8 @@ msgstr "Sauvegardes:" #: gui/launcher.cpp:272 #: gui/launcher.cpp:273 -#: gui/options.cpp:952 #: gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "Dщfinie l'emplacement oљ les fichiers de sauvegarde sont crщщs" @@ -260,19 +260,19 @@ msgstr "Dщfinie l'emplacement oљ les fichiers de sauvegarde sont crщщs" #: gui/options.cpp:399 #: gui/options.cpp:497 #: gui/options.cpp:555 -#: gui/options.cpp:732 -#: gui/options.cpp:956 -#: gui/options.cpp:959 -#: gui/options.cpp:963 -#: gui/options.cpp:1053 -#: gui/options.cpp:1059 -#: gui/options.cpp:1065 -#: gui/options.cpp:1073 -#: gui/options.cpp:1097 -#: gui/options.cpp:1101 -#: gui/options.cpp:1107 -#: gui/options.cpp:1114 -#: gui/options.cpp:1213 +#: gui/options.cpp:733 +#: gui/options.cpp:957 +#: gui/options.cpp:960 +#: gui/options.cpp:964 +#: gui/options.cpp:1054 +#: gui/options.cpp:1060 +#: gui/options.cpp:1066 +#: gui/options.cpp:1074 +#: gui/options.cpp:1098 +#: gui/options.cpp:1102 +#: gui/options.cpp:1108 +#: gui/options.cpp:1115 +#: gui/options.cpp:1214 msgid "None" msgstr "Aucun" @@ -283,7 +283,7 @@ msgid "Default" msgstr "Dщfaut" #: gui/launcher.cpp:411 -#: gui/options.cpp:1207 +#: gui/options.cpp:1208 msgid "Select SoundFont" msgstr "Choisir une banque de sons" @@ -379,7 +379,7 @@ msgid "Search:" msgstr "Filtre:" #: gui/launcher.cpp:549 -#: gui/options.cpp:733 +#: gui/options.cpp:734 msgid "Clear value" msgstr "Effacer la valeur" @@ -555,203 +555,203 @@ msgstr "Spщcifie le pщriphщrique de sortie audio ou l'щmulateur de carte audio p msgid "Specifies output sound device or sound card emulator" msgstr "Spщcifie le pщriphщrique de sortie audio ou l'щmulateur de carte audio" -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "Щmulateur AdLib:" -#: gui/options.cpp:688 #: gui/options.cpp:689 +#: gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "AdLib est utilisщ pour la musique dans de nombreux jeux" -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "Frщquence:" -#: gui/options.cpp:699 #: gui/options.cpp:700 +#: gui/options.cpp:701 msgid "Higher value specifies better sound quality but may be not supported by your soundcard" msgstr "Une valeur plus щlevщe donne une meilleure qualitщ audio mais peut ne pas ъtre supportщ par votre carte son" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "Sortie GM:" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "Spщcifie le pщriphщrique audio par dщfaut pour la sortie General MIDI" -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "Banque de sons:" -#: gui/options.cpp:731 #: gui/options.cpp:732 +#: gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "La banque de sons est utilisщe par certaines cartes audio, Fluidsynth et Timidity" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "Mode mixe AdLib/MIDI" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "Utiliser р la fois MIDI et AdLib" -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "Gain MIDI:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "MT-32 Device:" msgstr "Sortie MT-32:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "Spщcifie le pщriphщrique audio par dщfaut pour la sortie Roland MT-32/LAPC1/CM32l/CM64" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 exacte (dщsactive l'щmulation GM)" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "Check if you want to use your real hardware Roland-compatible sound device connected to your computer" msgstr "Vщrifie si vous voulez utiliser un pщriphщrique audio compatible Roland connectщ р l'ordinateur" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "Activer le mode Roland GS" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "Dщsactiver la conversion des pistes MT-32 en General MIDI" -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "Dialogue:" -#: gui/options.cpp:785 -#: gui/options.cpp:791 +#: gui/options.cpp:786 +#: gui/options.cpp:792 msgid "Speech" msgstr "Audio" -#: gui/options.cpp:786 -#: gui/options.cpp:792 +#: gui/options.cpp:787 +#: gui/options.cpp:793 msgid "Subtitles" msgstr "Sous-titres" -#: gui/options.cpp:787 -#: gui/options.cpp:793 +#: gui/options.cpp:788 +#: gui/options.cpp:794 msgid "Both" msgstr "Les deux" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "Audio" -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "Subs" -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "Affiche les sous-titres et joue les dialogues audio" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "Vitesse des ST:" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "Volume Musique:" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "Silence" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "Volume Bruitage:" -#: gui/options.cpp:819 #: gui/options.cpp:820 +#: gui/options.cpp:821 msgid "Special sound effects volume" msgstr "Volume des effets spщciaux sonores" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "Volume Dialogues:" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "Sauvegardes:" -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "Thшmes:" -#: gui/options.cpp:958 #: gui/options.cpp:959 +#: gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Spщcifie un chemin vers des donnщes supplщmentaires utilisщes par tous les jeux ou ScummVM" -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "Divers" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "Thшme:" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "Interface:" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "Sauvegarde auto:" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "Touches" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "Langue:" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "Langue de l'interface graphique de ScummVM" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "Anglais" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "Vous devez relancer ScummVM pour que le changement soit pris en compte." -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "Sщlectionner le rщpertoire pour les sauvegardes" -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Le rщpertoire sщlectionnщ est vщrouillщ en щcriture. Sщlectionnez un autre rщpertoire." -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "Sщlectionner le rщpertoire des thшmes d'interface" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "Sщlectionner le rщpertoire pour les fichiers suplщmentaires" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "Sщlectionner le rщpertoire des plugins" @@ -1003,10 +1003,22 @@ msgstr "Щmulateur DOSBox OPL" msgid "No music" msgstr "Pas de musique" +#: sound/mods/paula.cpp:192 +msgid "Amiga Audio Emulator" +msgstr "Щmulateur Amiga Audio" + #: sound/softsynth/adlib.cpp:1590 msgid "AdLib Emulator" msgstr "Щmulateur AdLib" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "Щmulateur Apple II GS (PAS IMPLЩMENTЩ)" + +#: sound/softsynth/sid.cpp:1434 +msgid "C64 Audio Emulator" +msgstr "Щmulateur C64 Audio" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "Initialisation de l'Щmulateur MT-32" diff --git a/po/hu_HU.po b/po/hu_HU.po index 8478f2ffaa..83d25cbbc7 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM VERSION\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" +"POT-Creation-Date: 2010-08-11 22:12+0100\n" "PO-Revision-Date: 2009-11-25 07:42-0500\n" "Last-Translator: Alex Bevilacqua <alexbevi@gmail.com>\n" "Language-Team: Hungarian\n" @@ -39,7 +39,7 @@ msgid "Go to previous directory level" msgstr "" #: gui/browser.cpp:70 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1029 +#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1030 #: gui/saveload.cpp:65 gui/saveload.cpp:157 gui/themebrowser.cpp:56 #: backends/platform/wii/options.cpp:48 msgid "Cancel" @@ -70,7 +70,7 @@ msgid "Map" msgstr "" #: gui/KeysDialog.cpp:45 gui/launcher.cpp:281 gui/launcher.cpp:893 -#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1030 +#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -135,7 +135,7 @@ msgid "" msgstr "" #: gui/launcher.cpp:185 gui/launcher.cpp:196 gui/options.cpp:80 -#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1000 +#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "<alapщrtelmezett>" @@ -148,11 +148,11 @@ msgstr "" msgid "Platform the game was originally designed for" msgstr "" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "Graphics" msgstr "Grafikсval" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "GFX" msgstr "" @@ -160,7 +160,7 @@ msgstr "" msgid "Override global graphic settings" msgstr "" -#: gui/launcher.cpp:215 gui/options.cpp:921 +#: gui/launcher.cpp:215 gui/options.cpp:922 msgid "Audio" msgstr "Hang" @@ -168,7 +168,7 @@ msgstr "Hang" msgid "Override global audio settings" msgstr "" -#: gui/launcher.cpp:225 gui/options.cpp:925 +#: gui/launcher.cpp:225 gui/options.cpp:926 msgid "Volume" msgstr "Volumene" @@ -176,7 +176,7 @@ msgstr "Volumene" msgid "Override global volume settings" msgstr "" -#: gui/launcher.cpp:234 gui/options.cpp:933 +#: gui/launcher.cpp:234 gui/options.cpp:934 msgid "MIDI" msgstr "" @@ -184,7 +184,7 @@ msgstr "" msgid "Override global MIDI settings" msgstr "" -#: gui/launcher.cpp:246 gui/options.cpp:939 +#: gui/launcher.cpp:246 gui/options.cpp:940 msgid "MT-32" msgstr "" @@ -192,7 +192,7 @@ msgstr "" msgid "Override global MT-32 settings" msgstr "" -#: gui/launcher.cpp:258 gui/options.cpp:945 +#: gui/launcher.cpp:258 gui/options.cpp:946 msgid "Paths" msgstr "жsvщnyek" @@ -201,7 +201,7 @@ msgstr "жsvщnyek" msgid "Game Path:" msgstr "Extra кtvonal:" -#: gui/launcher.cpp:268 gui/options.cpp:958 +#: gui/launcher.cpp:268 gui/options.cpp:959 msgid "Extra Path:" msgstr "Extra кtvonal:" @@ -214,18 +214,18 @@ msgstr "" msgid "Save Path:" msgstr "Extra кtvonal:" -#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:952 -#: gui/options.cpp:953 +#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "" #: gui/launcher.cpp:289 gui/launcher.cpp:369 gui/launcher.cpp:418 #: gui/options.cpp:230 gui/options.cpp:399 gui/options.cpp:497 -#: gui/options.cpp:555 gui/options.cpp:732 gui/options.cpp:956 -#: gui/options.cpp:959 gui/options.cpp:963 gui/options.cpp:1053 -#: gui/options.cpp:1059 gui/options.cpp:1065 gui/options.cpp:1073 -#: gui/options.cpp:1097 gui/options.cpp:1101 gui/options.cpp:1107 -#: gui/options.cpp:1114 gui/options.cpp:1213 +#: gui/options.cpp:555 gui/options.cpp:733 gui/options.cpp:957 +#: gui/options.cpp:960 gui/options.cpp:964 gui/options.cpp:1054 +#: gui/options.cpp:1060 gui/options.cpp:1066 gui/options.cpp:1074 +#: gui/options.cpp:1098 gui/options.cpp:1102 gui/options.cpp:1108 +#: gui/options.cpp:1115 gui/options.cpp:1214 msgid "None" msgstr "Semmi" @@ -235,7 +235,7 @@ msgstr "Semmi" msgid "Default" msgstr "<alapщrtelmezett>" -#: gui/launcher.cpp:411 gui/options.cpp:1207 +#: gui/launcher.cpp:411 gui/options.cpp:1208 msgid "Select SoundFont" msgstr "" @@ -327,7 +327,7 @@ msgstr "" msgid "Search:" msgstr "" -#: gui/launcher.cpp:549 gui/options.cpp:733 +#: gui/launcher.cpp:549 gui/options.cpp:734 msgid "Clear value" msgstr "" @@ -500,202 +500,202 @@ msgstr "" msgid "Specifies output sound device or sound card emulator" msgstr "" -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "AdLib vezet :" -#: gui/options.cpp:688 gui/options.cpp:689 +#: gui/options.cpp:689 gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "" -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "Kimeneti teljesэtmщny:" -#: gui/options.cpp:699 gui/options.cpp:700 +#: gui/options.cpp:700 gui/options.cpp:701 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" msgstr "" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "" -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "" -#: gui/options.cpp:731 gui/options.cpp:732 +#: gui/options.cpp:732 gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "Vegyes AdLib/MIDI mѓd" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "" -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "MIDI nyeresщg:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 #, fuzzy msgid "MT-32 Device:" msgstr "Zene mennyisщg:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Igaz Roland MT-32 (megbщnэt GM emulсciѓ)" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" msgstr "" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "Kщpessщ Roland GS Mode" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "Szіveg щs beszщd:" -#: gui/options.cpp:785 gui/options.cpp:791 +#: gui/options.cpp:786 gui/options.cpp:792 #, fuzzy msgid "Speech" msgstr "Csak a beszщd" -#: gui/options.cpp:786 gui/options.cpp:792 +#: gui/options.cpp:787 gui/options.cpp:793 #, fuzzy msgid "Subtitles" msgstr "Csak feliratok" -#: gui/options.cpp:787 gui/options.cpp:793 +#: gui/options.cpp:788 gui/options.cpp:794 msgid "Both" msgstr "" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "" -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "" -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "Felirat sebessщg:" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "Zene mennyisщg:" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "Muta жsszes" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "SFX mennyisщge" -#: gui/options.cpp:819 gui/options.cpp:820 +#: gui/options.cpp:820 gui/options.cpp:821 msgid "Special sound effects volume" msgstr "" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "Beszщd mennyisщg:" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "" -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "" -#: gui/options.cpp:958 gui/options.cpp:959 +#: gui/options.cpp:959 gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "Tщma:" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "Lekщpez eszkіz GUI:" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "Automatikus mentщs:" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "Kulcsok" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "" -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "" -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "" @@ -939,11 +939,25 @@ msgstr "" msgid "No music" msgstr "" +#: sound/mods/paula.cpp:192 +#, fuzzy +msgid "Amiga Audio Emulator" +msgstr "AdLib vezet :" + #: sound/softsynth/adlib.cpp:1590 #, fuzzy msgid "AdLib Emulator" msgstr "AdLib vezet :" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "" + +#: sound/softsynth/sid.cpp:1434 +#, fuzzy +msgid "C64 Audio Emulator" +msgstr "AdLib vezet :" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "" diff --git a/po/it_IT.po b/po/it_IT.po index efb92c9db9..8065b878c6 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.2.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" +"POT-Creation-Date: 2010-08-11 22:12+0100\n" "PO-Revision-Date: 2010-06-30 23:56+0100\n" "Last-Translator: Maff <matteo.maff at gmail dot com>\n" "Language-Team: Italian\n" @@ -38,7 +38,7 @@ msgid "Go to previous directory level" msgstr "Vai alla cartella superiore" #: gui/browser.cpp:70 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1029 +#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1030 #: gui/saveload.cpp:65 gui/saveload.cpp:157 gui/themebrowser.cpp:56 #: backends/platform/wii/options.cpp:48 msgid "Cancel" @@ -69,7 +69,7 @@ msgid "Map" msgstr "Mappa" #: gui/KeysDialog.cpp:45 gui/launcher.cpp:281 gui/launcher.cpp:893 -#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1030 +#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -137,7 +137,7 @@ msgstr "" "Lingua del gioco. Un gioco inglese non potrр risultare tradotto in italiano" #: gui/launcher.cpp:185 gui/launcher.cpp:196 gui/options.cpp:80 -#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1000 +#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "<predefinito>" @@ -150,11 +150,11 @@ msgstr "Piattaforma:" msgid "Platform the game was originally designed for" msgstr "La piattaforma per la quale il gioco ш stato concepito" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "Graphics" msgstr "Grafica" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "GFX" msgstr "Grafica" @@ -162,7 +162,7 @@ msgstr "Grafica" msgid "Override global graphic settings" msgstr "Ignora le impostazioni grafiche globali" -#: gui/launcher.cpp:215 gui/options.cpp:921 +#: gui/launcher.cpp:215 gui/options.cpp:922 msgid "Audio" msgstr "Audio" @@ -170,7 +170,7 @@ msgstr "Audio" msgid "Override global audio settings" msgstr "Ignora le impostazioni audio globali" -#: gui/launcher.cpp:225 gui/options.cpp:925 +#: gui/launcher.cpp:225 gui/options.cpp:926 msgid "Volume" msgstr "Volume" @@ -178,7 +178,7 @@ msgstr "Volume" msgid "Override global volume settings" msgstr "Ignora le impostazioni globali di volume" -#: gui/launcher.cpp:234 gui/options.cpp:933 +#: gui/launcher.cpp:234 gui/options.cpp:934 msgid "MIDI" msgstr "MIDI" @@ -186,7 +186,7 @@ msgstr "MIDI" msgid "Override global MIDI settings" msgstr "Ignora le impostazioni MIDI globali" -#: gui/launcher.cpp:246 gui/options.cpp:939 +#: gui/launcher.cpp:246 gui/options.cpp:940 msgid "MT-32" msgstr "" @@ -195,7 +195,7 @@ msgstr "" msgid "Override global MT-32 settings" msgstr "Ignora le impostazioni MIDI globali" -#: gui/launcher.cpp:258 gui/options.cpp:945 +#: gui/launcher.cpp:258 gui/options.cpp:946 msgid "Paths" msgstr "Percorsi" @@ -203,7 +203,7 @@ msgstr "Percorsi" msgid "Game Path:" msgstr "Percorso gioco:" -#: gui/launcher.cpp:268 gui/options.cpp:958 +#: gui/launcher.cpp:268 gui/options.cpp:959 msgid "Extra Path:" msgstr "Percorso extra:" @@ -215,18 +215,18 @@ msgstr "Specifica il percorso di ulteriori dati usati dal gioco" msgid "Save Path:" msgstr "Salvataggi:" -#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:952 -#: gui/options.cpp:953 +#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "Specifica dove archiviare i salvataggi" #: gui/launcher.cpp:289 gui/launcher.cpp:369 gui/launcher.cpp:418 #: gui/options.cpp:230 gui/options.cpp:399 gui/options.cpp:497 -#: gui/options.cpp:555 gui/options.cpp:732 gui/options.cpp:956 -#: gui/options.cpp:959 gui/options.cpp:963 gui/options.cpp:1053 -#: gui/options.cpp:1059 gui/options.cpp:1065 gui/options.cpp:1073 -#: gui/options.cpp:1097 gui/options.cpp:1101 gui/options.cpp:1107 -#: gui/options.cpp:1114 gui/options.cpp:1213 +#: gui/options.cpp:555 gui/options.cpp:733 gui/options.cpp:957 +#: gui/options.cpp:960 gui/options.cpp:964 gui/options.cpp:1054 +#: gui/options.cpp:1060 gui/options.cpp:1066 gui/options.cpp:1074 +#: gui/options.cpp:1098 gui/options.cpp:1102 gui/options.cpp:1108 +#: gui/options.cpp:1115 gui/options.cpp:1214 msgid "None" msgstr "Nessuno" @@ -235,7 +235,7 @@ msgstr "Nessuno" msgid "Default" msgstr "Predefinito" -#: gui/launcher.cpp:411 gui/options.cpp:1207 +#: gui/launcher.cpp:411 gui/options.cpp:1208 msgid "Select SoundFont" msgstr "Seleziona SoundFont" @@ -327,7 +327,7 @@ msgstr "Cerca nella lista dei giochi" msgid "Search:" msgstr "Cerca:" -#: gui/launcher.cpp:549 gui/options.cpp:733 +#: gui/launcher.cpp:549 gui/options.cpp:734 msgid "Clear value" msgstr "Cancella" @@ -507,19 +507,19 @@ msgid "Specifies output sound device or sound card emulator" msgstr "" "Specifica il dispositivo di output audio o l'emulatore della scheda audio" -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "Emulatore AdLib:" -#: gui/options.cpp:688 gui/options.cpp:689 +#: gui/options.cpp:689 gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "AdLib ш utilizzato per la musica in molti giochi" -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "Frequenza:" -#: gui/options.cpp:699 gui/options.cpp:700 +#: gui/options.cpp:700 gui/options.cpp:701 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -527,50 +527,50 @@ msgstr "" "Valori piљ alti restituiscono un suono di maggior qualitр, ma potrebbero non " "essere supportati dalla tua scheda audio" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "Dispositivo GM:" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "Specifica il dispositivo audio predefinito per l'output General MIDI" -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:731 gui/options.cpp:732 +#: gui/options.cpp:732 gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "SoundFont ш supportato da alcune schede audio, Fluidsynth e Timidity" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "Modalitр mista AdLib/MIDI" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "Utilizza generazione di suono sia MIDI che AdLib" -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "Guadagno MIDI:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 #, fuzzy msgid "MT-32 Device:" msgstr "Disposit. MT32:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" "Specifica il dispositivo audio predefinito per l'output Roland MT-32/LAPC1/" "CM32l/CM64" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 effettivo (disattiva emulazione GM)" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -578,137 +578,137 @@ msgstr "" "Seleziona se vuoi usare il dispositivo hardware audio compatibile con Roland " "che ш connesso al tuo computer" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "Attiva la modalitр Roland GS" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Disattiva la mappatura General MIDI per i giochi con colonna sonora Roland " "MT-32" -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "Testo e voci:" -#: gui/options.cpp:785 gui/options.cpp:791 +#: gui/options.cpp:786 gui/options.cpp:792 msgid "Speech" msgstr "Voci" -#: gui/options.cpp:786 gui/options.cpp:792 +#: gui/options.cpp:787 gui/options.cpp:793 msgid "Subtitles" msgstr "Sottotitoli" -#: gui/options.cpp:787 gui/options.cpp:793 +#: gui/options.cpp:788 gui/options.cpp:794 msgid "Both" msgstr "Entrambi" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "Voci" -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "Sub" -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "Mostra i sottotitoli e attiva le voci" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "Velocitр testo:" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "Volume musica:" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "Disattiva audio" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "Volume effetti:" -#: gui/options.cpp:819 gui/options.cpp:820 +#: gui/options.cpp:820 gui/options.cpp:821 msgid "Special sound effects volume" msgstr "Volume degli effetti sonori" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "Volume voci:" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "Salvataggi:" -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "Percorso tema:" -#: gui/options.cpp:958 gui/options.cpp:959 +#: gui/options.cpp:959 gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "Specifica il percorso di ulteriori dati usati dai giochi o da ScummVM" -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "Percorso plugin:" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "Varie" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "Renderer GUI:" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "Autosalva:" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "Tasti" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "Lingua GUI:" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "Lingua dell'interfaccia grafica di ScummVM" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "Inglese" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "Devi riavviare ScummVM affinchщ le modifiche abbiano effetto." -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "Seleziona la cartella per i salvataggi" -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." msgstr "La cartella scelta ш in sola lettura. Si prega di sceglierne un'altra." -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "Seleziona la cartella dei temi dell'interfaccia" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "Seleziona la cartella dei file aggiuntivi" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "Seleziona la cartella dei plugin" @@ -948,10 +948,24 @@ msgstr "Emulatore OPL DOSBox" msgid "No music" msgstr "Nessuna musica" +#: sound/mods/paula.cpp:192 +#, fuzzy +msgid "Amiga Audio Emulator" +msgstr "Emulatore AdLib" + #: sound/softsynth/adlib.cpp:1590 msgid "AdLib Emulator" msgstr "Emulatore AdLib" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "" + +#: sound/softsynth/sid.cpp:1434 +#, fuzzy +msgid "C64 Audio Emulator" +msgstr "Emulatore AdLib" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "Avvio in corso dell'emulatore MT-32" diff --git a/po/ru_RU.po b/po/ru_RU.po index 45bd5ceae2..d4964ec81b 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM VERSION\n" -"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" +"Report-Msgid-Bugs-To: scummvm-devel@li\n" +"POT-Creation-Date: 2010-08-13 12:49+0300\n" "PO-Revision-Date: 2010-06-13 20:55+0300\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Russian\n" @@ -40,7 +40,7 @@ msgid "Go to previous directory level" msgstr "Перейти на директорию уровнем выше" #: gui/browser.cpp:70 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1029 +#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1030 #: gui/saveload.cpp:65 gui/saveload.cpp:157 gui/themebrowser.cpp:56 #: backends/platform/wii/options.cpp:48 msgid "Cancel" @@ -71,7 +71,7 @@ msgid "Map" msgstr "Назначить" #: gui/KeysDialog.cpp:45 gui/launcher.cpp:281 gui/launcher.cpp:893 -#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1030 +#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -140,7 +140,7 @@ msgstr "" "русскую" #: gui/launcher.cpp:185 gui/launcher.cpp:196 gui/options.cpp:80 -#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1000 +#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "<по умолчанию>" @@ -153,11 +153,11 @@ msgstr "Платформа:" msgid "Platform the game was originally designed for" msgstr "Платформа, для которой игра была изначально разработана" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "Graphics" msgstr "Графика" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "GFX" msgstr "Грф" @@ -165,7 +165,7 @@ msgstr "Грф" msgid "Override global graphic settings" msgstr "Перекрыть глобальные установки графики" -#: gui/launcher.cpp:215 gui/options.cpp:921 +#: gui/launcher.cpp:215 gui/options.cpp:922 msgid "Audio" msgstr "Аудио" @@ -173,7 +173,7 @@ msgstr "Аудио" msgid "Override global audio settings" msgstr "Перекрыть глобальные установки аудио" -#: gui/launcher.cpp:225 gui/options.cpp:925 +#: gui/launcher.cpp:225 gui/options.cpp:926 msgid "Volume" msgstr "Громкость" @@ -181,7 +181,7 @@ msgstr "Громкость" msgid "Override global volume settings" msgstr "Перекрыть глобальные установки громкости" -#: gui/launcher.cpp:234 gui/options.cpp:933 +#: gui/launcher.cpp:234 gui/options.cpp:934 msgid "MIDI" msgstr "MIDI" @@ -189,7 +189,7 @@ msgstr "MIDI" msgid "Override global MIDI settings" msgstr "Перекрыть глобальные установки MIDI" -#: gui/launcher.cpp:246 gui/options.cpp:939 +#: gui/launcher.cpp:246 gui/options.cpp:940 msgid "MT-32" msgstr "MT-32" @@ -197,7 +197,7 @@ msgstr "MT-32" msgid "Override global MT-32 settings" msgstr "Перекрыть глобальные установки MT-32" -#: gui/launcher.cpp:258 gui/options.cpp:945 +#: gui/launcher.cpp:258 gui/options.cpp:946 msgid "Paths" msgstr "Пути" @@ -205,7 +205,7 @@ msgstr "Пути" msgid "Game Path:" msgstr "Где игра: " -#: gui/launcher.cpp:268 gui/options.cpp:958 +#: gui/launcher.cpp:268 gui/options.cpp:959 msgid "Extra Path:" msgstr "Доп. путь:" @@ -217,18 +217,18 @@ msgstr "Указывает путь к дополнительным файлам данных для игры" msgid "Save Path:" msgstr "Путь сохр: " -#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:952 -#: gui/options.cpp:953 +#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "Указывает путь к сохранениям игры" #: gui/launcher.cpp:289 gui/launcher.cpp:369 gui/launcher.cpp:418 #: gui/options.cpp:230 gui/options.cpp:399 gui/options.cpp:497 -#: gui/options.cpp:555 gui/options.cpp:732 gui/options.cpp:956 -#: gui/options.cpp:959 gui/options.cpp:963 gui/options.cpp:1053 -#: gui/options.cpp:1059 gui/options.cpp:1065 gui/options.cpp:1073 -#: gui/options.cpp:1097 gui/options.cpp:1101 gui/options.cpp:1107 -#: gui/options.cpp:1114 gui/options.cpp:1213 +#: gui/options.cpp:555 gui/options.cpp:733 gui/options.cpp:957 +#: gui/options.cpp:960 gui/options.cpp:964 gui/options.cpp:1054 +#: gui/options.cpp:1060 gui/options.cpp:1066 gui/options.cpp:1074 +#: gui/options.cpp:1098 gui/options.cpp:1102 gui/options.cpp:1108 +#: gui/options.cpp:1115 gui/options.cpp:1214 msgid "None" msgstr "Не задан" @@ -237,7 +237,7 @@ msgstr "Не задан" msgid "Default" msgstr "По умолчанию" -#: gui/launcher.cpp:411 gui/options.cpp:1207 +#: gui/launcher.cpp:411 gui/options.cpp:1208 msgid "Select SoundFont" msgstr "Выберите SoundFont" @@ -329,7 +329,7 @@ msgstr "Поиск в списке игр" msgid "Search:" msgstr "Поиск:" -#: gui/launcher.cpp:549 gui/options.cpp:733 +#: gui/launcher.cpp:549 gui/options.cpp:734 msgid "Clear value" msgstr "Очистить значение" @@ -502,19 +502,19 @@ msgstr "Указывает выходное звуковое устройство или эмулятор звуковой карты" msgid "Specifies output sound device or sound card emulator" msgstr "Указывает выходное звуковое устройство или эмулятор звуковой карты" -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "Эмулятор AdLib:" -#: gui/options.cpp:688 gui/options.cpp:689 +#: gui/options.cpp:689 gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "Звуковая карта AdLib используется многими играми" -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "Частота звука:" -#: gui/options.cpp:699 gui/options.cpp:700 +#: gui/options.cpp:700 gui/options.cpp:701 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -522,51 +522,51 @@ msgstr "" "БОльшие значения задают лучшее качество звука, однако они могут не " "поддерживаться вашей звуковой картой" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "Устройство GM:" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "Указывает выходное звуковое устройство для MIDI" -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:731 gui/options.cpp:732 +#: gui/options.cpp:732 gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "" "SoundFontы поддердживаются некоторыми звуковыми картами, Fluidsynth и " "Timidity" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "Смешанный режим AdLib/MIDI" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "Использовать и MIDI и AdLib для генерации звука" -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "Усиление MIDI:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "MT-32 Device:" msgstr "Устр. MT-32:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" "Указывает звуковое устройство по умолчания для вывода на Roland MT-32/LAPC1/" "CM32l/CM64" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Настоящий Roland MT-32 (запретить эмуляцию GM)" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -574,138 +574,138 @@ msgstr "" "Отметьте, если у вас подключено Roland-совместимое звуковое устройство и вы " "хотите его использовать" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "Включить режим Roland GS" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Выключает маппинг General MIDI для игр с звуковой дорожкой для Roland MT-32" -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "Текст и озвучка:" -#: gui/options.cpp:785 gui/options.cpp:791 +#: gui/options.cpp:786 gui/options.cpp:792 msgid "Speech" msgstr "Озвучка" -#: gui/options.cpp:786 gui/options.cpp:792 +#: gui/options.cpp:787 gui/options.cpp:793 msgid "Subtitles" msgstr "Субтитры" -#: gui/options.cpp:787 gui/options.cpp:793 +#: gui/options.cpp:788 gui/options.cpp:794 msgid "Both" msgstr "Всё" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "Озв" -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "Суб" -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "Показывать субтитры и воспроизводить речь" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "Скорость титров:" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "Громк. музыки:" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "Выкл. всё" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "Громк. SFX:" -#: gui/options.cpp:819 gui/options.cpp:820 +#: gui/options.cpp:820 gui/options.cpp:821 msgid "Special sound effects volume" msgstr "Громкость специальных звуковых эффектов" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "Громк. озвучки:" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "Сохранения игр:" -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "Где темы:" -#: gui/options.cpp:958 gui/options.cpp:959 +#: gui/options.cpp:959 gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "Указывает путь к дополнительным файлам данных, используемых всеми играми, " "либо ScummVM" -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "Путь к плагинам:" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "Разное" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "Тема:" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "Рисовалка GUI:" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "Автосохранение:" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "Клавиши" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "Язык GUI:" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "Язык графического интерфейса ScummVM" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "English" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "Вы должны перезапустить ScummVM чтобы применить изменения." -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "Выберите директорию для сохранений" -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Не могу писать в выбранную директорию. Пожалуйста, укажите другую." -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "Выберите директорию для тем GUI" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "Выберите директорию с дополнительными файлами" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "Выберите директорию с плагинами" @@ -944,10 +944,22 @@ msgstr "Эмулятор DOSBox OPL" msgid "No music" msgstr "Без музыки" +#: sound/mods/paula.cpp:192 +msgid "Amiga Audio Emulator" +msgstr "Эмулятор звука Amiga" + #: sound/softsynth/adlib.cpp:1590 msgid "AdLib Emulator" msgstr "Эмулятор AdLib" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "Эмулятор Apple II GS (отсутствует)" + +#: sound/softsynth/sid.cpp:1434 +msgid "C64 Audio Emulator" +msgstr "Эмулятор звука C64" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "Настраиваю эмулятор MT-32" diff --git a/po/scummvm.pot b/po/scummvm.pot index 38ce9b1a48..a4cb52dde4 100644 --- a/po/scummvm.pot +++ b/po/scummvm.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.2.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" +"POT-Creation-Date: 2010-08-11 22:12+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -38,7 +38,7 @@ msgid "Go to previous directory level" msgstr "" #: gui/browser.cpp:70 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1029 +#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1030 #: gui/saveload.cpp:65 gui/saveload.cpp:157 gui/themebrowser.cpp:56 #: backends/platform/wii/options.cpp:48 msgid "Cancel" @@ -69,7 +69,7 @@ msgid "Map" msgstr "" #: gui/KeysDialog.cpp:45 gui/launcher.cpp:281 gui/launcher.cpp:893 -#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1030 +#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -134,7 +134,7 @@ msgid "" msgstr "" #: gui/launcher.cpp:185 gui/launcher.cpp:196 gui/options.cpp:80 -#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1000 +#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "" @@ -147,11 +147,11 @@ msgstr "" msgid "Platform the game was originally designed for" msgstr "" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "Graphics" msgstr "" -#: gui/launcher.cpp:206 gui/options.cpp:898 gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "GFX" msgstr "" @@ -159,7 +159,7 @@ msgstr "" msgid "Override global graphic settings" msgstr "" -#: gui/launcher.cpp:215 gui/options.cpp:921 +#: gui/launcher.cpp:215 gui/options.cpp:922 msgid "Audio" msgstr "" @@ -167,7 +167,7 @@ msgstr "" msgid "Override global audio settings" msgstr "" -#: gui/launcher.cpp:225 gui/options.cpp:925 +#: gui/launcher.cpp:225 gui/options.cpp:926 msgid "Volume" msgstr "" @@ -175,7 +175,7 @@ msgstr "" msgid "Override global volume settings" msgstr "" -#: gui/launcher.cpp:234 gui/options.cpp:933 +#: gui/launcher.cpp:234 gui/options.cpp:934 msgid "MIDI" msgstr "" @@ -183,7 +183,7 @@ msgstr "" msgid "Override global MIDI settings" msgstr "" -#: gui/launcher.cpp:246 gui/options.cpp:939 +#: gui/launcher.cpp:246 gui/options.cpp:940 msgid "MT-32" msgstr "" @@ -191,7 +191,7 @@ msgstr "" msgid "Override global MT-32 settings" msgstr "" -#: gui/launcher.cpp:258 gui/options.cpp:945 +#: gui/launcher.cpp:258 gui/options.cpp:946 msgid "Paths" msgstr "" @@ -199,7 +199,7 @@ msgstr "" msgid "Game Path:" msgstr "" -#: gui/launcher.cpp:268 gui/options.cpp:958 +#: gui/launcher.cpp:268 gui/options.cpp:959 msgid "Extra Path:" msgstr "" @@ -211,18 +211,18 @@ msgstr "" msgid "Save Path:" msgstr "" -#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:952 -#: gui/options.cpp:953 +#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "" #: gui/launcher.cpp:289 gui/launcher.cpp:369 gui/launcher.cpp:418 #: gui/options.cpp:230 gui/options.cpp:399 gui/options.cpp:497 -#: gui/options.cpp:555 gui/options.cpp:732 gui/options.cpp:956 -#: gui/options.cpp:959 gui/options.cpp:963 gui/options.cpp:1053 -#: gui/options.cpp:1059 gui/options.cpp:1065 gui/options.cpp:1073 -#: gui/options.cpp:1097 gui/options.cpp:1101 gui/options.cpp:1107 -#: gui/options.cpp:1114 gui/options.cpp:1213 +#: gui/options.cpp:555 gui/options.cpp:733 gui/options.cpp:957 +#: gui/options.cpp:960 gui/options.cpp:964 gui/options.cpp:1054 +#: gui/options.cpp:1060 gui/options.cpp:1066 gui/options.cpp:1074 +#: gui/options.cpp:1098 gui/options.cpp:1102 gui/options.cpp:1108 +#: gui/options.cpp:1115 gui/options.cpp:1214 msgid "None" msgstr "" @@ -231,7 +231,7 @@ msgstr "" msgid "Default" msgstr "" -#: gui/launcher.cpp:411 gui/options.cpp:1207 +#: gui/launcher.cpp:411 gui/options.cpp:1208 msgid "Select SoundFont" msgstr "" @@ -323,7 +323,7 @@ msgstr "" msgid "Search:" msgstr "" -#: gui/launcher.cpp:549 gui/options.cpp:733 +#: gui/launcher.cpp:549 gui/options.cpp:734 msgid "Clear value" msgstr "" @@ -494,199 +494,199 @@ msgstr "" msgid "Specifies output sound device or sound card emulator" msgstr "" -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "" -#: gui/options.cpp:688 gui/options.cpp:689 +#: gui/options.cpp:689 gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "" -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "" -#: gui/options.cpp:699 gui/options.cpp:700 +#: gui/options.cpp:700 gui/options.cpp:701 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" msgstr "" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "" -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "" -#: gui/options.cpp:731 gui/options.cpp:732 +#: gui/options.cpp:732 gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "" -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "MT-32 Device:" msgstr "" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" msgstr "" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "" -#: gui/options.cpp:785 gui/options.cpp:791 +#: gui/options.cpp:786 gui/options.cpp:792 msgid "Speech" msgstr "" -#: gui/options.cpp:786 gui/options.cpp:792 +#: gui/options.cpp:787 gui/options.cpp:793 msgid "Subtitles" msgstr "" -#: gui/options.cpp:787 gui/options.cpp:793 +#: gui/options.cpp:788 gui/options.cpp:794 msgid "Both" msgstr "" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "" -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "" -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "" -#: gui/options.cpp:819 gui/options.cpp:820 +#: gui/options.cpp:820 gui/options.cpp:821 msgid "Special sound effects volume" msgstr "" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "" -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "" -#: gui/options.cpp:958 gui/options.cpp:959 +#: gui/options.cpp:959 gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "" -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "" -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "" @@ -925,10 +925,22 @@ msgstr "" msgid "No music" msgstr "" +#: sound/mods/paula.cpp:192 +msgid "Amiga Audio Emulator" +msgstr "" + #: sound/softsynth/adlib.cpp:1590 msgid "AdLib Emulator" msgstr "" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "" + +#: sound/softsynth/sid.cpp:1434 +msgid "C64 Audio Emulator" +msgstr "" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "" diff --git a/po/uk_UA.po b/po/uk_UA.po index fdbfcb89a4..eb7fe57710 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM VERSION\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2010-07-30 22:14+0100\n" +"POT-Creation-Date: 2010-08-11 22:12+0100\n" "PO-Revision-Date: 2010-07-30 22:19+0100\n" "Last-Translator: Lubomyr Lisen\n" "Language-Team: Ukrainian\n" @@ -15,7 +15,8 @@ msgstr "" "Content-Type: text/plain; charset=iso-8859-5\n" "Content-Transfer-Encoding: 8bit\n" "Language: Ukrainian\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:96 #, c-format @@ -38,27 +39,18 @@ msgstr "Вверх" msgid "Go to previous directory level" msgstr "Перейти на папку рівнем вище" -#: gui/browser.cpp:70 -#: gui/chooser.cpp:49 -#: gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:280 -#: gui/massadd.cpp:95 -#: gui/options.cpp:1029 -#: gui/saveload.cpp:65 -#: gui/saveload.cpp:157 -#: gui/themebrowser.cpp:56 +#: gui/browser.cpp:70 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 +#: gui/launcher.cpp:280 gui/massadd.cpp:95 gui/options.cpp:1030 +#: gui/saveload.cpp:65 gui/saveload.cpp:157 gui/themebrowser.cpp:56 #: backends/platform/wii/options.cpp:48 msgid "Cancel" msgstr "Відміна" -#: gui/browser.cpp:71 -#: gui/chooser.cpp:50 -#: gui/themebrowser.cpp:57 +#: gui/browser.cpp:71 gui/chooser.cpp:50 gui/themebrowser.cpp:57 msgid "Choose" msgstr "Вибрати" -#: gui/GuiManager.cpp:103 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/GuiManager.cpp:103 backends/keymapper/remap-dialog.cpp:54 msgid "Close" msgstr "Закрити" @@ -66,13 +58,11 @@ msgstr "Закрити" msgid "Mouse click" msgstr "Клік мишкою" -#: gui/GuiManager.cpp:109 -#: base/main.cpp:285 +#: gui/GuiManager.cpp:109 base/main.cpp:285 msgid "Display keyboard" msgstr "Показати клавіатуру" -#: gui/GuiManager.cpp:112 -#: base/main.cpp:288 +#: gui/GuiManager.cpp:112 base/main.cpp:288 msgid "Remap keys" msgstr "Перепризначити клавіші" @@ -80,12 +70,8 @@ msgstr "Перепризначити клавіші" msgid "Map" msgstr "Призначити" -#: gui/KeysDialog.cpp:45 -#: gui/launcher.cpp:281 -#: gui/launcher.cpp:893 -#: gui/launcher.cpp:897 -#: gui/massadd.cpp:92 -#: gui/options.cpp:1030 +#: gui/KeysDialog.cpp:45 gui/launcher.cpp:281 gui/launcher.cpp:893 +#: gui/launcher.cpp:897 gui/massadd.cpp:92 gui/options.cpp:1031 #: backends/platform/wii/options.cpp:47 #: backends/platform/wince/CELauncherDialog.cpp:56 msgid "OK" @@ -95,16 +81,12 @@ msgstr "OK" msgid "Select an action and click 'Map'" msgstr "Виберіть дію і клікніть 'Призначити'" -#: gui/KeysDialog.cpp:83 -#: gui/KeysDialog.cpp:105 -#: gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 #, c-format msgid "Associated key : %s" msgstr "Призначена клавіша : %s" -#: gui/KeysDialog.cpp:85 -#: gui/KeysDialog.cpp:107 -#: gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 #, c-format msgid "Associated key : none" msgstr "Призначена клавіша : немає" @@ -129,17 +111,19 @@ msgstr "Гра" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:175 -#: gui/launcher.cpp:176 -msgid "Short game identifier used for referring to savegames and running the game from the command line" -msgstr "Короткий ідентифікатор, який використовується для назв збережених ігор і для запуску з командної стрічки" +#: gui/launcher.cpp:175 gui/launcher.cpp:176 +msgid "" +"Short game identifier used for referring to savegames and running the game " +"from the command line" +msgstr "" +"Короткий ідентифікатор, який використовується для назв збережених ігор і для " +"запуску з командної стрічки" #: gui/launcher.cpp:179 msgid "Name:" msgstr "Назва:" -#: gui/launcher.cpp:179 -#: gui/launcher.cpp:180 +#: gui/launcher.cpp:179 gui/launcher.cpp:180 msgid "Full title of the game" msgstr "Повна назва гри" @@ -147,17 +131,16 @@ msgstr "Повна назва гри" msgid "Language:" msgstr "Мова:" -#: gui/launcher.cpp:183 -#: gui/launcher.cpp:184 -msgid "Language of the game. This will not turn your Spanish game version into English" -msgstr "Мова гри. Зміна цього параметру не перетворить гру на англійській в українську" +#: gui/launcher.cpp:183 gui/launcher.cpp:184 +msgid "" +"Language of the game. This will not turn your Spanish game version into " +"English" +msgstr "" +"Мова гри. Зміна цього параметру не перетворить гру на англійській в " +"українську" -#: gui/launcher.cpp:185 -#: gui/launcher.cpp:196 -#: gui/options.cpp:80 -#: gui/options.cpp:635 -#: gui/options.cpp:645 -#: gui/options.cpp:1000 +#: gui/launcher.cpp:185 gui/launcher.cpp:196 gui/options.cpp:80 +#: gui/options.cpp:635 gui/options.cpp:645 gui/options.cpp:1001 #: sound/null.cpp:42 msgid "<default>" msgstr "<за умовчанням>" @@ -166,20 +149,15 @@ msgstr "<за умовчанням>" msgid "Platform:" msgstr "Платформа:" -#: gui/launcher.cpp:194 -#: gui/launcher.cpp:195 +#: gui/launcher.cpp:194 gui/launcher.cpp:195 msgid "Platform the game was originally designed for" msgstr "Платформа, для якої гра була спочатку розроблена" -#: gui/launcher.cpp:206 -#: gui/options.cpp:898 -#: gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "Graphics" msgstr "Графіка" -#: gui/launcher.cpp:206 -#: gui/options.cpp:898 -#: gui/options.cpp:915 +#: gui/launcher.cpp:206 gui/options.cpp:899 gui/options.cpp:916 msgid "GFX" msgstr "Грф" @@ -187,8 +165,7 @@ msgstr "Грф" msgid "Override global graphic settings" msgstr "Перекрити глобальні установки графіки" -#: gui/launcher.cpp:215 -#: gui/options.cpp:921 +#: gui/launcher.cpp:215 gui/options.cpp:922 msgid "Audio" msgstr "Аудіо" @@ -196,8 +173,7 @@ msgstr "Аудіо" msgid "Override global audio settings" msgstr "Перекрити глобальні установки аудіо" -#: gui/launcher.cpp:225 -#: gui/options.cpp:925 +#: gui/launcher.cpp:225 gui/options.cpp:926 msgid "Volume" msgstr "Гучність" @@ -205,8 +181,7 @@ msgstr "Гучність" msgid "Override global volume settings" msgstr "Перекрити глобальні установки гучності" -#: gui/launcher.cpp:234 -#: gui/options.cpp:933 +#: gui/launcher.cpp:234 gui/options.cpp:934 msgid "MIDI" msgstr "MIDI" @@ -214,8 +189,7 @@ msgstr "MIDI" msgid "Override global MIDI settings" msgstr "Перекрити глобальні установки MIDI" -#: gui/launcher.cpp:246 -#: gui/options.cpp:939 +#: gui/launcher.cpp:246 gui/options.cpp:940 #, fuzzy msgid "MT-32" msgstr "MT-32" @@ -225,8 +199,7 @@ msgstr "MT-32" msgid "Override global MT-32 settings" msgstr "Перекрити глобальні установки MT-32" -#: gui/launcher.cpp:258 -#: gui/options.cpp:945 +#: gui/launcher.cpp:258 gui/options.cpp:946 msgid "Paths" msgstr "Шляхи" @@ -234,13 +207,11 @@ msgstr "Шляхи" msgid "Game Path:" msgstr "Шлях до гри: " -#: gui/launcher.cpp:268 -#: gui/options.cpp:958 +#: gui/launcher.cpp:268 gui/options.cpp:959 msgid "Extra Path:" msgstr "Дод. шлях:" -#: gui/launcher.cpp:268 -#: gui/launcher.cpp:269 +#: gui/launcher.cpp:268 gui/launcher.cpp:269 msgid "Specifies path to additional data used the game" msgstr "Вказує шлях до додаткових файлів даних для гри" @@ -248,49 +219,31 @@ msgstr "Вказує шлях до додаткових файлів даних для гри" msgid "Save Path:" msgstr "Шлях збер.: " -#: gui/launcher.cpp:272 -#: gui/launcher.cpp:273 -#: gui/options.cpp:952 -#: gui/options.cpp:953 +#: gui/launcher.cpp:272 gui/launcher.cpp:273 gui/options.cpp:953 +#: gui/options.cpp:954 msgid "Specifies where your savegames are put" msgstr "Вказує шлях до збережень гри" -#: gui/launcher.cpp:289 -#: gui/launcher.cpp:369 -#: gui/launcher.cpp:418 -#: gui/options.cpp:230 -#: gui/options.cpp:399 -#: gui/options.cpp:497 -#: gui/options.cpp:555 -#: gui/options.cpp:732 -#: gui/options.cpp:956 -#: gui/options.cpp:959 -#: gui/options.cpp:963 -#: gui/options.cpp:1053 -#: gui/options.cpp:1059 -#: gui/options.cpp:1065 -#: gui/options.cpp:1073 -#: gui/options.cpp:1097 -#: gui/options.cpp:1101 -#: gui/options.cpp:1107 -#: gui/options.cpp:1114 -#: gui/options.cpp:1213 +#: gui/launcher.cpp:289 gui/launcher.cpp:369 gui/launcher.cpp:418 +#: gui/options.cpp:230 gui/options.cpp:399 gui/options.cpp:497 +#: gui/options.cpp:555 gui/options.cpp:733 gui/options.cpp:957 +#: gui/options.cpp:960 gui/options.cpp:964 gui/options.cpp:1054 +#: gui/options.cpp:1060 gui/options.cpp:1066 gui/options.cpp:1074 +#: gui/options.cpp:1098 gui/options.cpp:1102 gui/options.cpp:1108 +#: gui/options.cpp:1115 gui/options.cpp:1214 msgid "None" msgstr "Не заданий" -#: gui/launcher.cpp:294 -#: gui/launcher.cpp:373 +#: gui/launcher.cpp:294 gui/launcher.cpp:373 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "За умовчанням" -#: gui/launcher.cpp:411 -#: gui/options.cpp:1207 +#: gui/launcher.cpp:411 gui/options.cpp:1208 msgid "Select SoundFont" msgstr "Виберіть SoundFont" -#: gui/launcher.cpp:430 -#: gui/launcher.cpp:568 +#: gui/launcher.cpp:430 gui/launcher.cpp:568 msgid "Select directory with game data" msgstr "Виберіть папку з файлами гри" @@ -306,8 +259,7 @@ msgstr "Виберіть папку для збережень" msgid "This game ID is already taken. Please choose another one." msgstr "Цей ID гри вже використовується. Будь ласка, виберіть інший." -#: gui/launcher.cpp:520 -#: engines/dialogs.cpp:113 +#: gui/launcher.cpp:520 engines/dialogs.cpp:113 msgid "~Q~uit" msgstr "~В~ихід" @@ -375,34 +327,33 @@ msgstr "Видалити гру зі списку. Не видаляє гру з жорсткого диска" msgid "Search in game list" msgstr "Пошук в списку ігор" -#: gui/launcher.cpp:546 -#: gui/launcher.cpp:1057 +#: gui/launcher.cpp:546 gui/launcher.cpp:1057 msgid "Search:" msgstr "Пошук:" -#: gui/launcher.cpp:549 -#: gui/options.cpp:733 +#: gui/launcher.cpp:549 gui/options.cpp:734 msgid "Clear value" msgstr "Очистити значення" -#: gui/launcher.cpp:571 -#: engines/dialogs.cpp:117 +#: gui/launcher.cpp:571 engines/dialogs.cpp:117 msgid "Load game:" msgstr "Завантажити гру:" -#: gui/launcher.cpp:571 -#: engines/dialogs.cpp:117 +#: gui/launcher.cpp:571 engines/dialogs.cpp:117 #: backends/platform/wince/CEActionsPocket.cpp:263 #: backends/platform/wince/CEActionsSmartphone.cpp:225 msgid "Load" msgstr "Завантажити" #: gui/launcher.cpp:680 -msgid "Do you really want to run the mass game detector? This could potentially add a huge number of games." -msgstr "Ви дійсно хочете запустити детектор усіх ігор? Це потенційно може додати велику кількість ігор." +msgid "" +"Do you really want to run the mass game detector? This could potentially add " +"a huge number of games." +msgstr "" +"Ви дійсно хочете запустити детектор усіх ігор? Це потенційно може додати " +"велику кількість ігор." -#: gui/launcher.cpp:681 -#: gui/launcher.cpp:830 +#: gui/launcher.cpp:681 gui/launcher.cpp:830 #: backends/platform/symbian/src/SymbianOS.cpp:446 #: backends/platform/wince/CEActionsPocket.cpp:313 #: backends/platform/wince/CEActionsSmartphone.cpp:272 @@ -410,8 +361,7 @@ msgstr "Ви дійсно хочете запустити детектор усіх ігор? Це потенційно може додати msgid "Yes" msgstr "Так" -#: gui/launcher.cpp:681 -#: gui/launcher.cpp:830 +#: gui/launcher.cpp:681 gui/launcher.cpp:830 #: backends/platform/symbian/src/SymbianOS.cpp:446 #: backends/platform/wince/CEActionsPocket.cpp:313 #: backends/platform/wince/CEActionsSmartphone.cpp:272 @@ -451,8 +401,7 @@ msgstr "Дод. багато..." msgid "Add Game..." msgstr "Дод. гру..." -#: gui/massadd.cpp:79 -#: gui/massadd.cpp:82 +#: gui/massadd.cpp:79 gui/massadd.cpp:82 msgid "... progress ..." msgstr "... пошук ..." @@ -523,8 +472,7 @@ msgstr "Графічний режим:" msgid "Render mode:" msgstr "Режим растрування:" -#: gui/options.cpp:643 -#: gui/options.cpp:644 +#: gui/options.cpp:643 gui/options.cpp:644 msgid "Special dithering modes supported by some games" msgstr "Спеціальні режими рендерингу, які підтримують деякі ігри" @@ -553,229 +501,230 @@ msgstr "Музичний Пристрій:" msgid "Specifies preferred sound device or sound card emulator" msgstr "Вказує вихідний звуковий пристрій або емулятор звукової карти" -#: gui/options.cpp:663 -#: gui/options.cpp:664 +#: gui/options.cpp:663 gui/options.cpp:664 msgid "Specifies output sound device or sound card emulator" msgstr "Вказує вихідний звуковий пристрій або емулятор звукової карти" -#: gui/options.cpp:688 +#: gui/options.cpp:689 msgid "AdLib emulator:" msgstr "Емулятор AdLib:" -#: gui/options.cpp:688 -#: gui/options.cpp:689 +#: gui/options.cpp:689 gui/options.cpp:690 msgid "AdLib is used for music in many games" msgstr "Звукова карта AdLib використовується багатьма іграми" -#: gui/options.cpp:699 +#: gui/options.cpp:700 msgid "Output rate:" msgstr "Вихідна частота:" -#: gui/options.cpp:699 -#: gui/options.cpp:700 -msgid "Higher value specifies better sound quality but may be not supported by your soundcard" -msgstr "Великі значення задають кращу якість звуку, проте вони можуть не підтримуватися вашою звуковою картою" +#: gui/options.cpp:700 gui/options.cpp:701 +msgid "" +"Higher value specifies better sound quality but may be not supported by your " +"soundcard" +msgstr "" +"Великі значення задають кращу якість звуку, проте вони можуть не " +"підтримуватися вашою звуковою картою" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "GM Device:" msgstr "Пристрій GM:" -#: gui/options.cpp:710 +#: gui/options.cpp:711 msgid "Specifies default sound device for General MIDI output" msgstr "Вказує вихідний звуковий пристрій для MIDI" -#: gui/options.cpp:731 +#: gui/options.cpp:732 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:731 -#: gui/options.cpp:732 +#: gui/options.cpp:732 gui/options.cpp:733 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" -msgstr "SoundFont підтримується деякими звуковими картами, Fluidsynth і Timidity" +msgstr "" +"SoundFont підтримується деякими звуковими картами, Fluidsynth і Timidity" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Mixed AdLib/MIDI mode" msgstr "Змішаний режим AdLib/MIDI" -#: gui/options.cpp:736 +#: gui/options.cpp:737 msgid "Use both MIDI and AdLib sound generation" msgstr "Використовувати і MIDI і AdLib для генерації звуку" -#: gui/options.cpp:739 +#: gui/options.cpp:740 msgid "MIDI gain:" msgstr "Посилення MIDI:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 #, fuzzy msgid "MT-32 Device:" msgstr "Пристрій MT-32:" -#: gui/options.cpp:749 +#: gui/options.cpp:750 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" -msgstr "Вказує звуковий пристрій по умовчанню для виводу на Roland MT-32/LAPC1/CM32l/CM64" +msgstr "" +"Вказує звуковий пристрій по умовчанню для виводу на Roland MT-32/LAPC1/CM32l/" +"CM64" -#: gui/options.cpp:753 +#: gui/options.cpp:754 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Справжній Roland MT-32 (вимкнути емуляцию GM)" -#: gui/options.cpp:753 -msgid "Check if you want to use your real hardware Roland-compatible sound device connected to your computer" -msgstr "Відмітьте, якщо у вас підключений Roland-сумісний звуковий пристрій і ви хочете його використати" +#: gui/options.cpp:754 +msgid "" +"Check if you want to use your real hardware Roland-compatible sound device " +"connected to your computer" +msgstr "" +"Відмітьте, якщо у вас підключений Roland-сумісний звуковий пристрій і ви " +"хочете його використати" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Enable Roland GS Mode" msgstr "Увімкнути режим Roland GS" -#: gui/options.cpp:756 +#: gui/options.cpp:757 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" -msgstr "Вимикає маппінг General MIDI для ігор із звуковою доріжкою для Roland MT-32" +msgstr "" +"Вимикає маппінг General MIDI для ігор із звуковою доріжкою для Roland MT-32" -#: gui/options.cpp:780 +#: gui/options.cpp:781 msgid "Text and Speech:" msgstr "Текст і озвучення:" -#: gui/options.cpp:785 -#: gui/options.cpp:791 +#: gui/options.cpp:786 gui/options.cpp:792 msgid "Speech" msgstr "Озвучення" -#: gui/options.cpp:786 -#: gui/options.cpp:792 +#: gui/options.cpp:787 gui/options.cpp:793 msgid "Subtitles" msgstr "Субтитри" -#: gui/options.cpp:787 -#: gui/options.cpp:793 +#: gui/options.cpp:788 gui/options.cpp:794 msgid "Both" msgstr "Все" -#: gui/options.cpp:791 +#: gui/options.cpp:792 msgid "Spch" msgstr "Озв" -#: gui/options.cpp:792 +#: gui/options.cpp:793 msgid "Subs" msgstr "Суб" -#: gui/options.cpp:793 +#: gui/options.cpp:794 msgid "Show subtitles and play speech" msgstr "Показувати субтитри і відтворювати мову" -#: gui/options.cpp:797 +#: gui/options.cpp:798 msgid "Subtitle speed:" msgstr "Швидкість субтитрів:" -#: gui/options.cpp:809 +#: gui/options.cpp:810 msgid "Music volume:" msgstr "Гучність музики:" -#: gui/options.cpp:816 +#: gui/options.cpp:817 msgid "Mute All" msgstr "Вимкнути усе" -#: gui/options.cpp:819 +#: gui/options.cpp:820 msgid "SFX volume:" msgstr "Гучність ефектів:" -#: gui/options.cpp:819 -#: gui/options.cpp:820 +#: gui/options.cpp:820 gui/options.cpp:821 msgid "Special sound effects volume" msgstr "Гучність спеціальних звукових ефектів" -#: gui/options.cpp:826 +#: gui/options.cpp:827 msgid "Speech volume:" msgstr "Гучність озвучення:" -#: gui/options.cpp:952 +#: gui/options.cpp:953 msgid "Save Path: " msgstr "Шлях для збережень: " -#: gui/options.cpp:955 +#: gui/options.cpp:956 msgid "Theme Path:" msgstr "Шлях до тем:" -#: gui/options.cpp:958 -#: gui/options.cpp:959 +#: gui/options.cpp:959 gui/options.cpp:960 msgid "Specifies path to additional data used by all games or ScummVM" -msgstr "Вказує шлях до додаткових файлів даних, використовуваних усіма іграми, або ScummVM" +msgstr "" +"Вказує шлях до додаткових файлів даних, використовуваних усіма іграми, або " +"ScummVM" -#: gui/options.cpp:962 +#: gui/options.cpp:963 msgid "Plugins Path:" msgstr "Шлях до плагінів:" -#: gui/options.cpp:970 +#: gui/options.cpp:971 msgid "Misc" msgstr "Різне" -#: gui/options.cpp:972 +#: gui/options.cpp:973 msgid "Theme:" msgstr "Тема:" -#: gui/options.cpp:976 +#: gui/options.cpp:977 msgid "GUI Renderer:" msgstr "Растеризатор GUI:" -#: gui/options.cpp:982 +#: gui/options.cpp:983 msgid "Autosave:" msgstr "Автозбереження:" -#: gui/options.cpp:990 +#: gui/options.cpp:991 msgid "Keys" msgstr "Клавіші" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "GUI Language:" msgstr "Мова інтерфейсу:" -#: gui/options.cpp:997 +#: gui/options.cpp:998 msgid "Language of ScummVM GUI" msgstr "Мова графічного інтерфейсу ScummVM" -#: gui/options.cpp:1002 +#: gui/options.cpp:1003 msgid "English" msgstr "English" -#: gui/options.cpp:1146 +#: gui/options.cpp:1147 msgid "You have to restart ScummVM to take the effect." msgstr "Ви повинні перезапустити ScummVM щоб застосувати зміни." -#: gui/options.cpp:1159 +#: gui/options.cpp:1160 msgid "Select directory for savegames" msgstr "Виберіть папку для збережень" -#: gui/options.cpp:1166 +#: gui/options.cpp:1167 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Не можу писати у вибрану папку. Будь ласка, вкажіть іншу." -#: gui/options.cpp:1175 +#: gui/options.cpp:1176 msgid "Select directory for GUI themes" msgstr "Виберіть папку для тем GUI" -#: gui/options.cpp:1185 +#: gui/options.cpp:1186 msgid "Select directory for extra files" msgstr "Виберіть папку з додатковими файлами" -#: gui/options.cpp:1196 +#: gui/options.cpp:1197 msgid "Select directory for plugins" msgstr "Виберіть папку з плагинами" -#: gui/saveload.cpp:60 -#: gui/saveload.cpp:241 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No date saved" msgstr "Дата не записана" -#: gui/saveload.cpp:61 -#: gui/saveload.cpp:242 +#: gui/saveload.cpp:61 gui/saveload.cpp:242 msgid "No time saved" msgstr "Час не записаний" -#: gui/saveload.cpp:62 -#: gui/saveload.cpp:243 +#: gui/saveload.cpp:62 gui/saveload.cpp:243 msgid "No playtime saved" msgstr "Час гри не записано" -#: gui/saveload.cpp:69 -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:69 gui/saveload.cpp:157 msgid "Delete" msgstr "Видалити" @@ -795,8 +744,7 @@ msgstr "Час: " msgid "Playtime: " msgstr "Час гри: " -#: gui/saveload.cpp:286 -#: gui/saveload.cpp:353 +#: gui/saveload.cpp:286 gui/saveload.cpp:353 msgid "Untitled savestate" msgstr "Збереження без імені" @@ -825,15 +773,13 @@ msgstr "Движок не підтримує рівень відладки '%s'" msgid "Menu" msgstr "Меню" -#: base/main.cpp:276 -#: backends/platform/symbian/src/SymbianActions.cpp:48 +#: base/main.cpp:276 backends/platform/symbian/src/SymbianActions.cpp:48 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:45 msgid "Skip" msgstr "Пропустити" -#: base/main.cpp:279 -#: backends/platform/symbian/src/SymbianActions.cpp:53 +#: base/main.cpp:279 backends/platform/symbian/src/SymbianActions.cpp:53 #: backends/platform/wince/CEActionsPocket.cpp:41 msgid "Pause" msgstr "Пауза" @@ -846,8 +792,7 @@ msgstr "Пропустити рядок" msgid "Error running game:" msgstr "Помилка запуску гри:" -#: base/main.cpp:430 -#: base/main.cpp:431 +#: base/main.cpp:430 base/main.cpp:431 msgid "Could not find any engine capable of running the selected game" msgstr "Не можу знайти движок для запуску вибраної гри" @@ -899,8 +844,7 @@ msgstr "Помилка читання" msgid "Writing data failed" msgstr "Помилка запису даних" -#: common/error.cpp:60 -#: common/error.cpp:71 +#: common/error.cpp:60 common/error.cpp:71 msgid "Unknown Error" msgstr "Невідома помилка" @@ -944,8 +888,7 @@ msgstr "~П~овернутись в головне меню" msgid "Save game:" msgstr "Зберегти гру: " -#: engines/dialogs.cpp:119 -#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: engines/dialogs.cpp:119 backends/platform/symbian/src/SymbianActions.cpp:47 #: backends/platform/wince/CEActionsPocket.cpp:42 #: backends/platform/wince/CEActionsPocket.cpp:263 #: backends/platform/wince/CEActionsSmartphone.cpp:44 @@ -953,14 +896,12 @@ msgstr "Зберегти гру: " msgid "Save" msgstr "Записати" -#: engines/dialogs.cpp:301 -#: engines/mohawk/dialogs.cpp:84 +#: engines/dialogs.cpp:301 engines/mohawk/dialogs.cpp:84 #: engines/mohawk/dialogs.cpp:118 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:302 -#: engines/mohawk/dialogs.cpp:85 +#: engines/dialogs.cpp:302 engines/mohawk/dialogs.cpp:85 #: engines/mohawk/dialogs.cpp:119 msgid "~C~ancel" msgstr "Ві~д~міна" @@ -982,8 +923,7 @@ msgstr "~Н~аст" msgid "~C~lose" msgstr "~З~акрити" -#: engines/mohawk/dialogs.cpp:81 -#: engines/mohawk/dialogs.cpp:115 +#: engines/mohawk/dialogs.cpp:81 engines/mohawk/dialogs.cpp:115 msgid "~Z~ip Mode Activated" msgstr "Режим швидкого переходу активований" @@ -1007,10 +947,24 @@ msgstr "Емулятор DOSBox OPL" msgid "No music" msgstr "Без музики" +#: sound/mods/paula.cpp:192 +#, fuzzy +msgid "Amiga Audio Emulator" +msgstr "Емулятор AdLib" + #: sound/softsynth/adlib.cpp:1590 msgid "AdLib Emulator" msgstr "Емулятор AdLib" +#: sound/softsynth/appleiigs.cpp:36 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "" + +#: sound/softsynth/sid.cpp:1434 +#, fuzzy +msgid "C64 Audio Emulator" +msgstr "Емулятор AdLib" + #: sound/softsynth/mt32.cpp:327 msgid "Initialising MT-32 Emulator" msgstr "Настроюю емулятор MT-32" @@ -1253,13 +1207,11 @@ msgstr "Прискорення GC паду:" msgid "DVD" msgstr "DVD" -#: backends/platform/wii/options.cpp:89 -#: backends/platform/wii/options.cpp:101 +#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101 msgid "Status:" msgstr "Стан:" -#: backends/platform/wii/options.cpp:90 -#: backends/platform/wii/options.cpp:102 +#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 msgid "Unknown" msgstr "Невідомо" @@ -1430,4 +1382,3 @@ msgstr "Показати " #: backends/platform/wince/CELauncherDialog.cpp:104 msgid "Do you want to perform an automatic scan ?" msgstr "Ви хочете здійснити автоматичний пошук?" - diff --git a/sound/mididrv.cpp b/sound/mididrv.cpp index c7587992e0..eb8bafee01 100644 --- a/sound/mididrv.cpp +++ b/sound/mididrv.cpp @@ -61,10 +61,14 @@ static const uint32 GUIOMapping[] = { /*MDT_CMS, Common::GUIO_MIDICMS,*/ MT_PCJR, Common::GUIO_MIDIPCJR, MT_ADLIB, Common::GUIO_MIDIADLIB, + MT_C64, Common::GUIO_MIDIC64, + MT_AMIGA, Common::GUIO_MIDIAMIGA, + MT_APPLEIIGS, Common::GUIO_MIDIAPPLEIIGS, MT_TOWNS, Common::GUIO_MIDITOWNS, + MT_PC98, Common::GUIO_MIDIPC98, MT_GM, Common::GUIO_MIDIGM, MT_MT32, Common::GUIO_MIDIMT32, - 0, 0 + 0, 0 }; uint32 MidiDriver::musicType2GUIO(uint32 musicType) { @@ -150,6 +154,21 @@ MidiDriver::DeviceHandle MidiDriver::detectDevice(int flags) { return hdl; break; + case MT_C64: + if (flags & MDT_C64) + return hdl; + break; + + case MT_AMIGA: + if (flags & MDT_AMIGA) + return hdl; + break; + + case MT_APPLEIIGS: + if (flags & MDT_APPLEIIGS) + return hdl; + break; + case MT_TOWNS: if (flags & MDT_TOWNS) return hdl; @@ -224,10 +243,20 @@ MidiDriver::DeviceHandle MidiDriver::detectDevice(int flags) { MusicType tp = MT_AUTO; if (flags & MDT_TOWNS) tp = MT_TOWNS; + else if (flags & MDT_PC98) + tp = MT_PC98; else if (flags & MDT_ADLIB) tp = MT_ADLIB; else if (flags & MDT_PCSPK) tp = MT_PCSPK; + else if (flags & MDT_PCJR) + tp = MT_PCJR; + else if (flags & MDT_C64) + tp = MT_C64; + else if (flags & MDT_AMIGA) + tp = MT_AMIGA; + else if (flags & MDT_APPLEIIGS) + tp = MT_APPLEIIGS; else if (l == 0) // if we haven't tried to find a MIDI device yet we do this now. continue; diff --git a/sound/mididrv.h b/sound/mididrv.h index 1184adee6c..7ba1fe19f7 100644 --- a/sound/mididrv.h +++ b/sound/mididrv.h @@ -50,18 +50,21 @@ namespace Common { class String; } * Music types that music drivers can implement and engines can rely on. */ enum MusicType { - MT_INVALID = -1, // Invalid output - MT_AUTO = 0, // Auto - MT_NULL, // Null - MT_PCSPK, // PC Speaker - MT_PCJR, // PCjr - MT_CMS, // CMS - MT_ADLIB, // AdLib - MT_TOWNS, // FM-TOWNS - MT_PC98, // PC98 - MT_GM, // General MIDI - MT_MT32, // MT-32 - MT_GS // Roland GS + MT_INVALID = -1, // Invalid output + MT_AUTO = 0, // Auto + MT_NULL, // Null + MT_PCSPK, // PC Speaker + MT_PCJR, // PCjr + MT_CMS, // CMS + MT_ADLIB, // AdLib + MT_C64, // C64 + MT_AMIGA, // Amiga + MT_APPLEIIGS, // Apple IIGS + MT_TOWNS, // FM-TOWNS + MT_PC98, // PC98 + MT_GM, // General MIDI + MT_MT32, // MT-32 + MT_GS // Roland GS }; /** @@ -75,16 +78,19 @@ enum MusicType { * @todo Rename MidiDriverFlags to MusicDriverFlags */ enum MidiDriverFlags { - MDT_NONE = 0, - MDT_PCSPK = 1 << 0, // PC Speaker: Maps to MD_PCSPK and MD_PCJR - MDT_CMS = 1 << 1, // Creative Music System / Gameblaster: Maps to MD_CMS - MDT_PCJR = 1 << 2, // Tandy/PC Junior driver - MDT_ADLIB = 1 << 3, // AdLib: Maps to MT_ADLIB - MDT_TOWNS = 1 << 4, // FM-TOWNS: Maps to MT_TOWNS - MDT_PC98 = 1 << 5, // FM-TOWNS: Maps to MT_PC98 - MDT_MIDI = 1 << 6, // Real MIDI - MDT_PREFER_MT32 = 1 << 7, // MT-32 output is preferred - MDT_PREFER_GM = 1 << 8 // GM output is preferred + MDT_NONE = 0, + MDT_PCSPK = 1 << 0, // PC Speaker: Maps to MD_PCSPK and MD_PCJR + MDT_CMS = 1 << 1, // Creative Music System / Gameblaster: Maps to MD_CMS + MDT_PCJR = 1 << 2, // Tandy/PC Junior driver + MDT_ADLIB = 1 << 3, // AdLib: Maps to MT_ADLIB + MDT_C64 = 1 << 4, + MDT_AMIGA = 1 << 5, + MDT_APPLEIIGS = 1 << 6, + MDT_TOWNS = 1 << 7, // FM-TOWNS: Maps to MT_TOWNS + MDT_PC98 = 1 << 8, // FM-TOWNS: Maps to MT_PC98 + MDT_MIDI = 1 << 9, // Real MIDI + MDT_PREFER_MT32 = 1 << 10, // MT-32 output is preferred + MDT_PREFER_GM = 1 << 11 // GM output is preferred }; /** diff --git a/sound/mods/paula.cpp b/sound/mods/paula.cpp index 45626bb2ec..c39b37f83d 100644 --- a/sound/mods/paula.cpp +++ b/sound/mods/paula.cpp @@ -24,6 +24,7 @@ */ #include "sound/mods/paula.h" +#include "sound/null.h" namespace Audio { @@ -178,3 +179,34 @@ int Paula::readBufferIntern(int16 *buffer, const int numSamples) { } } // End of namespace Audio + + +// Plugin interface +// (This can only create a null driver since apple II gs support seeems not to be implemented +// and also is not part of the midi driver architecture. But we need the plugin for the options +// menu in the launcher and for MidiDriver::detectDevice() which is more or less used by all engines.) + +class AmigaMusicPlugin : public NullMusicPlugin { +public: + const char *getName() const { + return _s("Amiga Audio Emulator"); + } + + const char *getId() const { + return "amiga"; + } + + MusicDevices getDevices() const; +}; + +MusicDevices AmigaMusicPlugin::getDevices() const { + MusicDevices devices; + devices.push_back(MusicDevice(this, "", MT_AMIGA)); + return devices; +} + +//#if PLUGIN_ENABLED_DYNAMIC(AMIGA) + //REGISTER_PLUGIN_DYNAMIC(AMIGA, PLUGIN_TYPE_MUSIC, AmigaMusicPlugin); +//#else + REGISTER_PLUGIN_STATIC(AMIGA, PLUGIN_TYPE_MUSIC, AmigaMusicPlugin); +//#endif diff --git a/sound/module.mk b/sound/module.mk index 4e2f77c4df..116884cf57 100644 --- a/sound/module.mk +++ b/sound/module.mk @@ -39,6 +39,7 @@ MODULE_OBJS := \ softsynth/fmtowns_pc98/towns_euphony.o \ softsynth/fmtowns_pc98/towns_pc98_driver.o \ softsynth/fmtowns_pc98/towns_pc98_fmsynth.o \ + softsynth/appleiigs.o \ softsynth/ym2612.o \ softsynth/fluidsynth.o \ softsynth/mt32.o \ diff --git a/sound/softsynth/appleiigs.cpp b/sound/softsynth/appleiigs.cpp new file mode 100644 index 0000000000..9004d1f0ab --- /dev/null +++ b/sound/softsynth/appleiigs.cpp @@ -0,0 +1,57 @@ +/* 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. +* +* $URL$ +* $Id$ +* +*/ + +#include "sound/null.h" + +// Plugin interface +// (This can only create a null driver since apple II gs support seeems not to be implemented +// and also is not part of the midi driver architecture. But we need the plugin for the options +// menu in the launcher and for MidiDriver::detectDevice() which is more or less used by all engines.) + +class AppleIIGSMusicPlugin : public NullMusicPlugin { +public: + const char *getName() const { + return _s("Apple II GS Emulator (NOT IMPLEMENTED)"); + } + + const char *getId() const { + return "appleIIgs"; + } + + MusicDevices getDevices() const; +}; + +MusicDevices AppleIIGSMusicPlugin::getDevices() const { + MusicDevices devices; + devices.push_back(MusicDevice(this, "", MT_APPLEIIGS)); + return devices; +} + +//#if PLUGIN_ENABLED_DYNAMIC(APPLEIIGS) + //REGISTER_PLUGIN_DYNAMIC(APPLEIIGS, PLUGIN_TYPE_MUSIC, AppleIIGSMusicPlugin); +//#else + REGISTER_PLUGIN_STATIC(APPLEIIGS, PLUGIN_TYPE_MUSIC, AppleIIGSMusicPlugin); +//#endif + diff --git a/sound/softsynth/fmtowns_pc98/towns_audio.cpp b/sound/softsynth/fmtowns_pc98/towns_audio.cpp index f09c5d8851..e74991a55f 100644 --- a/sound/softsynth/fmtowns_pc98/towns_audio.cpp +++ b/sound/softsynth/fmtowns_pc98/towns_audio.cpp @@ -103,7 +103,7 @@ TownsAudioInterface::TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfac _fmInstruments(0), _pcmInstruments(0), _pcmChan(0), _waveTables(0), _waveTablesTotalDataSize(0), _baserate(55125.0f / (float)mixer->getOutputRate()), _tickLength(0), _timer(0), _drv(driver), _pcmSfxChanMask(0), _musicVolume(Audio::Mixer::kMaxMixerVolume), _sfxVolume(Audio::Mixer::kMaxMixerVolume), - _cdaVolFlags(0), _ready(false) { + _outputVolumeFlags(0), _outputMuteFlags(0), _ready(false) { #define INTCB(x) &TownsAudioInterface::intf_##x static const TownsAudioIntfCallback intfCb[] = { @@ -191,11 +191,11 @@ TownsAudioInterface::TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfac INTCB(notImpl), INTCB(notImpl), INTCB(notImpl), - INTCB(cdaSetVolume), + INTCB(setOutputVolume), // 68 - INTCB(cdaReset), - INTCB(notImpl), + INTCB(resetOutputVolume), INTCB(notImpl), + INTCB(updateOutputVolume), INTCB(notImpl), // 72 INTCB(notImpl), @@ -217,6 +217,8 @@ TownsAudioInterface::TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfac _intfOpcodes = intfCb; memset(_fmSaveReg, 0, sizeof(_fmSaveReg)); + memset(_outputLevel, 0, sizeof(_outputLevel)); + _timerBase = (uint32)(_baserate * 1000000.0f); _tickLength = 2 * _timerBase; } @@ -285,7 +287,7 @@ void TownsAudioInterface::setSoundEffectVolume(int volume) { setVolumeIntern(_musicVolume, _sfxVolume); } -void TownsAudioInterface::setSoundEffectChanMask(uint32 mask) { +void TownsAudioInterface::setSoundEffectChanMask(int mask) { _pcmSfxChanMask = mask >> 6; mask &= 0x3f; setVolumeChannelMasks(~mask, mask); @@ -297,8 +299,8 @@ void TownsAudioInterface::nextTickEx(int32 *buffer, uint32 bufferSize) { for (uint32 i = 0; i < bufferSize; i++) { _timer += _tickLength; - while (_timer > 0x5B8D80) { - _timer -= 0x5B8D80; + while (_timer > 0x514767) { + _timer -= 0x514767; for (int ii = 0; ii < 8; ii++) { if ((_pcmChanKeyPlaying & _chanFlags[ii]) || (_pcmChanEffectPlaying & _chanFlags[ii])) { @@ -357,10 +359,9 @@ void TownsAudioInterface::timerCallbackB() { } int TownsAudioInterface::intf_reset(va_list &args) { - Common::StackLock lock(_mutex); fmReset(); pcmReset(); - cdaReset(); + callback(68); return 0; } @@ -707,56 +708,59 @@ int TownsAudioInterface::intf_fmReset(va_list &args) { return 0; } -int TownsAudioInterface::intf_cdaReset(va_list &args) { - cdaReset(); - return 0; -} - -int TownsAudioInterface::intf_pcmUpdateEnvelopeGenerator(va_list &args) { - for (int i = 0; i < 8; i++) - pcmUpdateEnvelopeGenerator(i); - return 0; -} - -int TownsAudioInterface::intf_cdaSetVolume(va_list &args) { - int mode = va_arg(args, int); +int TownsAudioInterface::intf_setOutputVolume(va_list &args) { + int chanType = va_arg(args, int); int left = va_arg(args, int); int right = va_arg(args, int); - // calculate mixer balance value - int8 balance = right - left; - if (left & 0xff80 || right & 0xff80) return 3; static const uint8 flags[] = { 0x0C, 0x30, 0x40, 0x80 }; - //int a = (mode & 0x40) ? 4 : 0; - int b = mode & 3; + uint8 chan = (chanType & 0x40) ? 8 : 12; + + chanType &= 3; left = (left & 0x7e) >> 1; right = (right & 0x7e) >> 1; - if (mode & 0x40) - _cdaVolFlags |= flags[b]; + if (chan) + _outputVolumeFlags |= flags[chanType]; else - _cdaVolFlags &= ~flags[b]; + _outputVolumeFlags &= ~flags[chanType]; - if (mode > 1) { - // Unknown purpose / TODO + if (chanType > 1) { + _outputLevel[chan + chanType] = left; + } else { + if (chanType == 0) + chan -= 8; + _outputLevel[chan] = left; + _outputLevel[chan + 1] = right; + } - } else if (mode == 1) { - // FM Towns seems to support volumes of 0 - 63 for each channel. - // We recalculate sane values for out 0 to 255 volume range. + updateOutputVolume(); - int vl = (int)(((float)left * 255.0f) / 63.0f); - int vr = (int)(((float)right * 255.0f) / 63.0f); - g_system->getAudioCDManager()->setVolume((vl + vr) >> 1); - g_system->getAudioCDManager()->setBalance(balance); + return 0; +} - } else { - // Unknown purpose / TODO - } +int TownsAudioInterface::intf_resetOutputVolume(va_list &args) { + memset(_outputLevel, 0, sizeof(_outputLevel)); + _outputMuteFlags = 0; + _outputVolumeFlags = 0; + updateOutputVolume(); + return 0; +} +int TownsAudioInterface::intf_updateOutputVolume(va_list &args) { + int flags = va_arg(args, int); + _outputMuteFlags = flags & 3; + updateOutputVolume(); + return 0; +} + +int TownsAudioInterface::intf_pcmUpdateEnvelopeGenerator(va_list &args) { + for (int i = 0; i < 8; i++) + pcmUpdateEnvelopeGenerator(i); return 0; } @@ -1381,8 +1385,16 @@ void TownsAudioInterface::pcmCalcPhaseStep(TownsAudio_PcmChannel *p, TownsAudio_ p->step = (s * p->stepPitch) >> 14; } -void TownsAudioInterface::cdaReset() { - +void TownsAudioInterface::updateOutputVolume() { + // FM Towns seems to support volumes of 0 - 63 for each channel. + // We recalculate sane values for our 0 to 255 volume range and + // balance values for our -128 to 127 volume range + + // CD-AUDIO + int volume = (int)(((float)MAX(_outputLevel[12], _outputLevel[13]) * 255.0f) / 63.0f); + int balance = (int)((float)((_outputLevel[13] - _outputLevel[12]) * 127.0f) / (float)MAX(_outputLevel[12], _outputLevel[13])); + g_system->getAudioCDManager()->setVolume(volume); + g_system->getAudioCDManager()->setBalance(balance); } const uint8 TownsAudioInterface::_chanFlags[] = { @@ -1456,7 +1468,7 @@ void TownsAudio_PcmChannel::clear() { stepNote = 0x4000; stepPitch = 0x4000; - panLeft = panRight = 0; + panLeft = panRight = 7; envTotalLevel = envAttackRate = envDecayRate = envSustainLevel = envSustainRate = envReleaseRate = 0; envStep = envCurrentLevel = 0; diff --git a/sound/softsynth/fmtowns_pc98/towns_audio.h b/sound/softsynth/fmtowns_pc98/towns_audio.h index 212c00c40f..950c016b4e 100644 --- a/sound/softsynth/fmtowns_pc98/towns_audio.h +++ b/sound/softsynth/fmtowns_pc98/towns_audio.h @@ -50,7 +50,7 @@ public: void setSoundEffectVolume(int volume); // Defines the channels used as sound effect channels for the purpose of ScummVM GUI volume control. // The first 6 bits are the 6 fm channels. The next 8 bits are pcm channels. - void setSoundEffectChanMask(uint32 mask); + void setSoundEffectChanMask(int mask); private: void nextTickEx(int32 *buffer, uint32 bufferSize); @@ -92,8 +92,9 @@ private: int intf_fmSetPitch(va_list &args); int intf_fmSetLevel(va_list &args); int intf_fmReset(va_list &args); - int intf_cdaSetVolume(va_list &args); - int intf_cdaReset(va_list &args); + int intf_setOutputVolume(va_list &args); + int intf_resetOutputVolume(va_list &args); + int intf_updateOutputVolume(va_list &args); int intf_pcmUpdateEnvelopeGenerator(va_list &args); int intf_notImpl(va_list &args); @@ -148,9 +149,10 @@ private: void pcmCalcPhaseStep(TownsAudio_PcmChannel *p, TownsAudio_WaveTable *w); - void cdaReset(); - - uint8 _cdaVolFlags; + void updateOutputVolume(); + uint8 _outputVolumeFlags; + uint8 _outputLevel[16]; + uint8 _outputMuteFlags; const float _baserate; uint32 _timerBase; @@ -159,7 +161,7 @@ private: uint16 _musicVolume; uint16 _sfxVolume; - uint32 _pcmSfxChanMask; + int _pcmSfxChanMask; TownsAudioInterfacePluginDriver *_drv; bool _ready; diff --git a/sound/softsynth/fmtowns_pc98/towns_euphony.cpp b/sound/softsynth/fmtowns_pc98/towns_euphony.cpp index e23d5bcb36..0c0c203cc9 100644 --- a/sound/softsynth/fmtowns_pc98/towns_euphony.cpp +++ b/sound/softsynth/fmtowns_pc98/towns_euphony.cpp @@ -180,6 +180,10 @@ void TownsEuphonyDriver::stopParser() { } } +void TownsEuphonyDriver::continueParsing() { + _suspendParsing = false; +} + void TownsEuphonyDriver::playSoundEffect(int chan, int note, int velo, const uint8 *data) { _intf->callback(37, chan, note, velo, data); } @@ -204,7 +208,7 @@ void TownsEuphonyDriver::chanVolume(int chan, int vol) { _intf->callback(8, chan, vol); } -void TownsEuphonyDriver::cdaSetVolume(int mode, int volLeft, int volRight) { +void TownsEuphonyDriver::setOutputVolume(int mode, int volLeft, int volRight) { _intf->callback(67, mode, volLeft, volRight); } @@ -230,7 +234,7 @@ int TownsEuphonyDriver::chanOrdr(int tableEntry, int val) { return 0; } -int TownsEuphonyDriver::chanLevel(int tableEntry, int val) { +int TownsEuphonyDriver::chanVolumeShift(int tableEntry, int val) { if (tableEntry > 31) return 3; if (val <= 40) @@ -238,7 +242,7 @@ int TownsEuphonyDriver::chanLevel(int tableEntry, int val) { return 0; } -int TownsEuphonyDriver::chanTranspose(int tableEntry, int val) { +int TownsEuphonyDriver::chanNoteShift(int tableEntry, int val) { if (tableEntry > 31) return 3; if (val <= 40) @@ -660,8 +664,8 @@ bool TownsEuphonyDriver::evtSetupNote() { uint8 velo = _musicPos[5]; sendEvent(mode, evt); - sendEvent(mode, prepTranspose(note)); - sendEvent(mode, prepVelo(velo)); + sendEvent(mode, applyNoteShift(note)); + sendEvent(mode, applyVolumeShift(velo)); jumpNextLoop(); if (_musicPos[0] == 0xfe || _musicPos[0] == 0xfd) @@ -700,7 +704,7 @@ bool TownsEuphonyDriver::evtPolyphonicAftertouch() { uint8 mode = _tMode[_musicPos[1]]; sendEvent(mode, evt); - sendEvent(mode, prepTranspose(_musicPos[4])); + sendEvent(mode, applyNoteShift(_musicPos[4])); sendEvent(mode, _musicPos[5]); return false; @@ -768,7 +772,7 @@ bool TownsEuphonyDriver::evtModeOrdrChange() { return false; } -uint8 TownsEuphonyDriver::prepTranspose(uint8 in) { +uint8 TownsEuphonyDriver::applyNoteShift(uint8 in) { int out = _tTranspose[_musicPos[1]]; if (!out) return in; @@ -783,7 +787,7 @@ uint8 TownsEuphonyDriver::prepTranspose(uint8 in) { return out & 0xff; } -uint8 TownsEuphonyDriver::prepVelo(uint8 in) { +uint8 TownsEuphonyDriver::applyVolumeShift(uint8 in) { int out = _tLevel[_musicPos[1]]; out += (in & 0x7f); out = CLIP(out, 1, 127); diff --git a/sound/softsynth/fmtowns_pc98/towns_euphony.h b/sound/softsynth/fmtowns_pc98/towns_euphony.h index 2026a299c1..fa1f8ba496 100644 --- a/sound/softsynth/fmtowns_pc98/towns_euphony.h +++ b/sound/softsynth/fmtowns_pc98/towns_euphony.h @@ -45,6 +45,8 @@ public: int startMusicTrack(const uint8 *data, int trackSize, int startTick); void setMusicLoop(bool loop); void stopParser(); + bool parserIsPlaying() {return _playing; } + void continueParsing(); void playSoundEffect(int chan, int note, int velo, const uint8 *data); void stopSoundEffect(int chan); @@ -54,13 +56,13 @@ public: void chanPitch(int chan, int pitch); void chanVolume(int chan, int vol); - void cdaSetVolume(int mode, int volLeft, int volRight); + void setOutputVolume(int chanType, int volLeft, int volRight); int chanEnable(int tableEntry, int val); int chanMode(int tableEntry, int val); int chanOrdr(int tableEntry, int val); - int chanLevel(int tableEntry, int val); - int chanTranspose(int tableEntry, int val); + int chanVolumeShift(int tableEntry, int val); + int chanNoteShift(int tableEntry, int val); int assignChannel(int chan, int tableEntry); @@ -112,8 +114,8 @@ private: return false; } - uint8 prepTranspose(uint8 in); - uint8 prepVelo(uint8 in); + uint8 applyNoteShift(uint8 in); + uint8 applyVolumeShift(uint8 in); void sendNoteOff(); void sendNoteOn(); diff --git a/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp b/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp index 507c8e159a..241b9bde50 100644 --- a/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp +++ b/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp @@ -28,7 +28,7 @@ class TownsPC98_FmSynthOperator { public: - TownsPC98_FmSynthOperator(const uint32 timerbase, const uint8 *rateTable, + TownsPC98_FmSynthOperator(const uint32 timerbase, const uint32 rtt, const uint8 *rateTable, const uint8 *shiftTable, const uint8 *attackDecayTable, const uint32 *frqTable, const uint32 *sineTable, const int32 *tlevelOut, const int32 *detuneTable); ~TownsPC98_FmSynthOperator() {} @@ -108,6 +108,7 @@ protected: const uint32 _tickLength; uint32 _timer; + const uint32 _rtt; int32 _currentLevel; struct EvpState { @@ -116,10 +117,10 @@ protected: } fs_a, fs_d, fs_s, fs_r; }; -TownsPC98_FmSynthOperator::TownsPC98_FmSynthOperator(const uint32 timerbase, const uint8 *rateTable, - const uint8 *shiftTable, const uint8 *attackDecayTable, const uint32 *frqTable, - const uint32 *sineTable, const int32 *tlevelOut, const int32 *detuneTable) : - _rateTbl(rateTable), _rshiftTbl(shiftTable), _adTbl(attackDecayTable), _fTbl(frqTable), +TownsPC98_FmSynthOperator::TownsPC98_FmSynthOperator(const uint32 timerbase, const uint32 rtt, + const uint8 *rateTable, const uint8 *shiftTable, const uint8 *attackDecayTable, + const uint32 *frqTable, const uint32 *sineTable, const int32 *tlevelOut, const int32 *detuneTable) : + _rtt(rtt), _rateTbl(rateTable), _rshiftTbl(shiftTable), _adTbl(attackDecayTable), _fTbl(frqTable), _sinTbl(sineTable), _tLvlTbl(tlevelOut), _detnTbl(detuneTable), _tickLength(timerbase * 2), _specifiedAttackRate(0), _specifiedDecayRate(0), _specifiedReleaseRate(0), _specifiedSustainRate(0), _phase(0), _state(kEnvReady), _playing(false), _timer(0), _keyScale1(0), @@ -190,8 +191,8 @@ void TownsPC98_FmSynthOperator::generateOutput(int32 phasebuf, int32 *feed, int3 return; _timer += _tickLength; - while (_timer > 0x5B8D80) { - _timer -= 0x5B8D80; + while (_timer > _rtt) { + _timer -= _rtt; ++_tickCount; int32 levelIncrement = 0; @@ -308,7 +309,7 @@ bool TownsPC98_FmSynthOperator::scaleRate(uint8 value) { class TownsPC98_FmSynthSquareSineSource { public: - TownsPC98_FmSynthSquareSineSource(const uint32 timerbase); + TownsPC98_FmSynthSquareSineSource(const uint32 timerbase, const uint32 rtt); ~TownsPC98_FmSynthSquareSineSource(); void init(const int *rsTable, const int *rseTable); @@ -351,6 +352,7 @@ private: const uint32 _tickLength; uint32 _timer; + const uint32 _rtt; struct Channel { int tick; @@ -377,7 +379,7 @@ private: class TownsPC98_FmSynthPercussionSource { public: - TownsPC98_FmSynthPercussionSource(const uint32 timerbase); + TownsPC98_FmSynthPercussionSource(const uint32 timerbase, const uint32 rtt); ~TownsPC98_FmSynthPercussionSource() { delete[] _reg; } @@ -429,6 +431,7 @@ private: const uint32 _tickLength; uint32 _timer; + const uint32 _rtt; uint8 **_reg; @@ -440,8 +443,8 @@ private: bool _ready; }; -TownsPC98_FmSynthSquareSineSource::TownsPC98_FmSynthSquareSineSource(const uint32 timerbase) : _tlTable(0), - _tleTable(0), _updateRequest(-1), _tickLength(timerbase * 27), _ready(0), _reg(0), _rand(1), _outN(1), +TownsPC98_FmSynthSquareSineSource::TownsPC98_FmSynthSquareSineSource(const uint32 timerbase, const uint32 rtt) : _tlTable(0), + _rtt(rtt), _tleTable(0), _updateRequest(-1), _tickLength(timerbase * 27), _ready(0), _reg(0), _rand(1), _outN(1), _nTick(0), _evpUpdateCnt(0), _evpTimer(0x1f), _pReslt(0x1f), _attack(0), _cont(false), _evpUpdate(true), _timer(0), _noiseGenerator(0), _chanEnable(0), _volMaskA(0), _volMaskB(0), _volumeA(Audio::Mixer::kMaxMixerVolume), _volumeB(Audio::Mixer::kMaxMixerVolume) { @@ -558,8 +561,8 @@ void TownsPC98_FmSynthSquareSineSource::nextTick(int32 *buffer, uint32 bufferSiz for (uint32 i = 0; i < bufferSize; i++) { _timer += _tickLength; - while (_timer > 0x5B8D80) { - _timer -= 0x5B8D80; + while (_timer > _rtt) { + _timer -= _rtt; if (++_nTick >= (_noiseGenerator & 0x1f)) { if ((_rand + 1) & 2) @@ -597,7 +600,7 @@ void TownsPC98_FmSynthSquareSineSource::nextTick(int32 *buffer, uint32 bufferSiz int32 finOut = 0; for (int ii = 0; ii < 3; ii++) { -int32 finOutTemp = ((_channels[ii].vol >> 4) & 1) ? _tleTable[_channels[ii].out ? _pReslt : 0] : _tlTable[_channels[ii].out ? (_channels[ii].vol & 0x0f) : 0]; + int32 finOutTemp = ((_channels[ii].vol >> 4) & 1) ? _tleTable[_channels[ii].out ? _pReslt : 0] : _tlTable[_channels[ii].out ? (_channels[ii].vol & 0x0f) : 0]; if ((1 << ii) & _volMaskA) finOutTemp = (finOutTemp * _volumeA) / Audio::Mixer::kMaxMixerVolume; @@ -624,8 +627,8 @@ void TownsPC98_FmSynthSquareSineSource::updateRegs() { _updateRequest = -1; } -TownsPC98_FmSynthPercussionSource::TownsPC98_FmSynthPercussionSource(const uint32 timerbase) : - _tickLength(timerbase * 2), _timer(0), _ready(false), _volMaskA(0), _volMaskB(0), _volumeA(Audio::Mixer::kMaxMixerVolume), _volumeB(Audio::Mixer::kMaxMixerVolume) { +TownsPC98_FmSynthPercussionSource::TownsPC98_FmSynthPercussionSource(const uint32 timerbase, const uint32 rtt) : + _rtt(rtt), _tickLength(timerbase * 2), _timer(0), _ready(false), _volMaskA(0), _volMaskB(0), _volumeA(Audio::Mixer::kMaxMixerVolume), _volumeB(Audio::Mixer::kMaxMixerVolume) { memset(_rhChan, 0, sizeof(RhtChannel) * 6); _reg = new uint8 *[40]; @@ -758,8 +761,8 @@ void TownsPC98_FmSynthPercussionSource::nextTick(int32 *buffer, uint32 bufferSiz for (uint32 i = 0; i < bufferSize; i++) { _timer += _tickLength; - while (_timer > 0x5B8D80) { - _timer -= 0x5B8D80; + while (_timer > _rtt) { + _timer -= _rtt; for (int ii = 0; ii < 6; ii++) { RhtChannel *s = &_rhChan[ii]; @@ -826,7 +829,7 @@ TownsPC98_FmSynth::TownsPC98_FmSynth(Audio::Mixer *mixer, EmuType type) : _chanInternal(0), _ssg(0), _prc(0), _numChan(type == kType26 ? 3 : 6), _numSSG(type == kTypeTowns ? 0 : 3), _hasPercussion(type == kType86 ? true : false), _oprRates(0), _oprRateshift(0), _oprAttackDecay(0), _oprFrq(0), _oprSinTbl(0), _oprLevelOut(0), _oprDetune(0), - _baserate(55125.0f / (float)mixer->getOutputRate()), + _rtt(type == kTypeTowns ? 0x514767 : 0x5B8D80), _baserate(55125.0f / (float)mixer->getOutputRate()), _volMaskA(0), _volMaskB(0), _volumeA(255), _volumeB(255), _regProtectionFlag(false), _ready(false) { @@ -834,7 +837,7 @@ TownsPC98_FmSynth::TownsPC98_FmSynth(Audio::Mixer *mixer, EmuType type) : memset(&_timers[1], 0, sizeof(ChipTimer)); _timers[0].cb = &TownsPC98_FmSynth::timerCallbackA; _timers[1].cb = &TownsPC98_FmSynth::timerCallbackB; - _timerbase = (uint32)(_baserate * 1000000.0f); + _timerbase = (uint32)(_baserate * 1000000.0f); } TownsPC98_FmSynth::~TownsPC98_FmSynth() { @@ -865,16 +868,16 @@ bool TownsPC98_FmSynth::init() { for (int i = 0; i < _numChan; i++) { memset(&_chanInternal[i], 0, sizeof(ChanInternal)); for (int j = 0; j < 4; ++j) - _chanInternal[i].opr[j] = new TownsPC98_FmSynthOperator(_timerbase, _oprRates, _oprRateshift, _oprAttackDecay, _oprFrq, _oprSinTbl, _oprLevelOut, _oprDetune); + _chanInternal[i].opr[j] = new TownsPC98_FmSynthOperator(_timerbase, _rtt, _oprRates, _oprRateshift, _oprAttackDecay, _oprFrq, _oprSinTbl, _oprLevelOut, _oprDetune); } if (_numSSG) { - _ssg = new TownsPC98_FmSynthSquareSineSource(_timerbase); + _ssg = new TownsPC98_FmSynthSquareSineSource(_timerbase, _rtt); _ssg->init(&_ssgTables[0], &_ssgTables[16]); } if (_hasPercussion) { - _prc = new TownsPC98_FmSynthPercussionSource(_timerbase); + _prc = new TownsPC98_FmSynthPercussionSource(_timerbase, _rtt); _prc->init(_percussionData); } diff --git a/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h b/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h index 34ee2ce7b8..3072503610 100644 --- a/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h +++ b/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h @@ -160,6 +160,7 @@ private: const float _baserate; uint32 _timerbase; + uint32 _rtt; Audio::Mixer *_mixer; Audio::SoundHandle _soundHandle; diff --git a/sound/softsynth/sid.cpp b/sound/softsynth/sid.cpp index e925f4a447..c05ae2e8f5 100644 --- a/sound/softsynth/sid.cpp +++ b/sound/softsynth/sid.cpp @@ -31,6 +31,7 @@ #ifndef DISABLE_SID #include "sid.h" +#include "sound/null.h" #include <math.h> namespace Resid { @@ -1422,4 +1423,34 @@ int SID::clock(cycle_count& delta_t, short* buf, int n, int interleave) { } +// Plugin interface +// (This can only create a null driver since C64 audio support is not part of the +// midi driver architecture. But we need the plugin for the options menu in the launcher +// and for MidiDriver::detectDevice() which is more or less used by all engines.) + +class C64MusicPlugin : public NullMusicPlugin { +public: + const char *getName() const { + return _s("C64 Audio Emulator"); + } + + const char *getId() const { + return "C64"; + } + + MusicDevices getDevices() const; +}; + +MusicDevices C64MusicPlugin::getDevices() const { + MusicDevices devices; + devices.push_back(MusicDevice(this, "", MT_C64)); + return devices; +} + +//#if PLUGIN_ENABLED_DYNAMIC(C64) + //REGISTER_PLUGIN_DYNAMIC(C64, PLUGIN_TYPE_MUSIC, C64MusicPlugin); +//#else + REGISTER_PLUGIN_STATIC(C64, PLUGIN_TYPE_MUSIC, C64MusicPlugin); +//#endif + #endif diff --git a/tools/create_kyradat/create_kyradat.cpp b/tools/create_kyradat/create_kyradat.cpp index a9d1ecc721..85038a0820 100644 --- a/tools/create_kyradat/create_kyradat.cpp +++ b/tools/create_kyradat/create_kyradat.cpp @@ -45,7 +45,7 @@ #include <map> enum { - kKyraDatVersion = 71 + kKyraDatVersion = 72 }; const ExtractFilename extractFilenames[] = { diff --git a/tools/create_kyradat/games.cpp b/tools/create_kyradat/games.cpp index 1bd7d31648..008120868f 100644 --- a/tools/create_kyradat/games.cpp +++ b/tools/create_kyradat/games.cpp @@ -99,6 +99,7 @@ const Game lolGames[] = { { kLol, { EN_ANY, -1, -1 }, kPlatformPC, kDemoVersion, { "30bb5af87d38adb47d3e6ce06b1cb042", 0 } }, // DOS floppy (no language specifc strings) + { kLol, { EN_ANY, -1, -1 }, kPlatformPC, kNoSpecial, { "0cc764a204f7ba8cefe1a5f14c479619", 0 } }, { kLol, { DE_DEU, -1, -1 }, kPlatformPC, kNoSpecial, { "6b843869772c1b779e1386be868c15dd", 0 } }, // PC98 (no language specifc strings) diff --git a/tools/create_kyradat/tables.cpp b/tools/create_kyradat/tables.cpp index dc8163901d..e2235b1b78 100644 --- a/tools/create_kyradat/tables.cpp +++ b/tools/create_kyradat/tables.cpp @@ -1281,6 +1281,7 @@ const ExtractEntrySearchData kLolIngamePakFilesProvider[] = { }; const ExtractEntrySearchData kLolCharacterDefsProvider[] = { + { UNK_LANG, kPlatformPC, { 0x00000492, 0x000046B0, { { 0x7A, 0x94, 0x8B, 0xC6, 0xF7, 0xF1, 0x2F, 0xF3, 0xBC, 0x1B, 0x0B, 0x4E, 0x00, 0xC9, 0x44, 0x58 } } } }, // floppy { UNK_LANG, kPlatformPC, { 0x00000492, 0x000047FD, { { 0x8C, 0x0B, 0x8B, 0xCE, 0xE0, 0xB0, 0x8F, 0xA9, 0x06, 0xC3, 0x98, 0xE6, 0x2E, 0x09, 0xB6, 0x93 } } } }, // floppy { UNK_LANG, kPlatformPC, { 0x00000492, 0x00004ACD, { { 0xDF, 0x87, 0xFE, 0x89, 0x59, 0xCC, 0x01, 0xD7, 0xC7, 0xEB, 0x16, 0xA4, 0x09, 0xAF, 0x5D, 0xC0 } } } }, // CD { UNK_LANG, kPlatformPC98, { 0x00000492, 0x00005893, { { 0x7C, 0x7E, 0xFB, 0x80, 0xD9, 0xB6, 0x16, 0x87, 0x80, 0xB7, 0x46, 0x9B, 0x96, 0x1A, 0x6A, 0xBE } } } }, @@ -1619,6 +1620,7 @@ const ExtractEntrySearchData kLolScrollYBottomProvider[] = { }; const ExtractEntrySearchData kLolButtonDefsProvider[] = { + { UNK_LANG, kPlatformPC, { 0x0000082A, 0x0000CAAE, { { 0xC1, 0x83, 0x0D, 0xA0, 0x66, 0x16, 0x3D, 0x31, 0xCE, 0x30, 0x9F, 0x4E, 0x00, 0x65, 0x5A, 0xC8 } } } }, // floppy { UNK_LANG, kPlatformPC, { 0x0000082A, 0x0000C34E, { { 0x7F, 0x9A, 0x0F, 0x28, 0x1A, 0x8F, 0x03, 0x46, 0x48, 0xEB, 0xC9, 0xB9, 0x23, 0x29, 0x5E, 0x50 } } } }, // floppy { UNK_LANG, kPlatformPC, { 0x0000082A, 0x0000C47B, { { 0xDF, 0x1A, 0x18, 0x1F, 0x58, 0x05, 0x1F, 0x56, 0xD8, 0x6D, 0xBB, 0x93, 0xEC, 0x35, 0x9D, 0xA5 } } } }, // CD { UNK_LANG, kPlatformPC98, { 0x0000082A, 0x0000AB58, { { 0xDD, 0x2B, 0xA9, 0x54, 0x60, 0x25, 0x2C, 0x74, 0xF8, 0x5D, 0xC6, 0xD2, 0x2C, 0x1A, 0x24, 0x44 } } } }, @@ -1675,6 +1677,7 @@ const ExtractEntrySearchData kLolButtonList8Provider[] = { }; const ExtractEntrySearchData kLolLegendDataProvider[] = { + { UNK_LANG, kPlatformUnknown, { 0x00000030, 0x00000858, { { 0x63, 0x5E, 0x60, 0xC7, 0x62, 0x2C, 0x5D, 0x8F, 0x74, 0x71, 0x98, 0xB7, 0x09, 0xD2, 0x51, 0xC7 } } } }, { UNK_LANG, kPlatformUnknown, { 0x0000003C, 0x00000A52, { { 0x81, 0xC5, 0xA4, 0xE7, 0x60, 0xDA, 0xD6, 0x5E, 0x19, 0xAB, 0xF3, 0xC7, 0xDD, 0xDB, 0x92, 0x5E } } } }, EXTRACT_END_ENTRY |