diff options
334 files changed, 24781 insertions, 17060 deletions
@@ -7,8 +7,22 @@ For a more comprehensive changelog of the latest experimental code, see: - Added support for Blue's Birthday Adventure - Added support for Ringworld: Revenge Of The Patriarch + New Ports: + - Added PlayStation 3 port. + AGI: - - Implemented sound support for the DOS version of Winnie the Pooh in the Hundred Acre Wood. + - Implemented sound support for the DOS version of Winnie the Pooh in the + Hundred Acre Wood. + + AGOS: + - Implemented support for loading data directly from InstallShield + cabinets in The Feeble Files and Simon the Sorcerer's Puzzle Pack. + + Groovie: + - Added support for the iOS version of The 7th Guest. + + Lure: + - Fixed crash when trying to talk and ask something at the same time. SCUMM: - Implemented PC Speaker support for SCUMM v5 games. @@ -16,6 +30,8 @@ For a more comprehensive changelog of the latest experimental code, see: better, since important notes are not interrupted anymore. - Implemented CMS support for Loom, The Secret of Monkey Island and Indiana Jones and the Last Crusade. + - Improved palette handling for the Amiga version of Indiana Jones and the + Fate of Atlantis. SDL ports: - Added support for OpenGL (GSoC Task). diff --git a/audio/decoders/vag.cpp b/audio/decoders/xa.cpp index 10ef69708c..818cd2df59 100644 --- a/audio/decoders/vag.cpp +++ b/audio/decoders/xa.cpp @@ -20,79 +20,78 @@ * */ -#include "audio/decoders/vag.h" +#include "audio/decoders/xa.h" #include "audio/audiostream.h" #include "common/stream.h" namespace Audio { -class VagStream : public Audio::RewindableAudioStream { +class XAStream : public Audio::RewindableAudioStream { public: - VagStream(Common::SeekableReadStream *stream, int rate); - ~VagStream(); + XAStream(Common::SeekableReadStream *stream, int rate, DisposeAfterUse::Flag disposeAfterUse); + ~XAStream(); bool isStereo() const { return false; } - bool endOfData() const { return _stream->pos() == _stream->size(); } + bool endOfData() const { return _endOfData && _samplesRemaining == 0; } int getRate() const { return _rate; } int readBuffer(int16 *buffer, const int numSamples); bool rewind(); private: Common::SeekableReadStream *_stream; + DisposeAfterUse::Flag _disposeAfterUse; + + void seekToPos(uint pos); byte _predictor; double _samples[28]; byte _samplesRemaining; int _rate; double _s1, _s2; + uint _loopPoint; + bool _endOfData; }; -VagStream::VagStream(Common::SeekableReadStream *stream, int rate) : _stream(stream) { +XAStream::XAStream(Common::SeekableReadStream *stream, int rate, DisposeAfterUse::Flag disposeAfterUse) + : _stream(stream), _disposeAfterUse(disposeAfterUse) { _samplesRemaining = 0; _predictor = 0; _s1 = _s2 = 0.0; _rate = rate; + _loopPoint = 0; + _endOfData = false; } -VagStream::~VagStream() { - delete _stream; +XAStream::~XAStream() { + if (_disposeAfterUse == DisposeAfterUse::YES) + delete _stream; } -static const double s_vagDataTable[5][2] = - { - { 0.0, 0.0 }, - { 60.0 / 64.0, 0.0 }, - { 115.0 / 64.0, -52.0 / 64.0 }, - { 98.0 / 64.0, -55.0 / 64.0 }, - { 122.0 / 64.0, -60.0 / 64.0 } - }; +static const double s_xaDataTable[5][2] = { + { 0.0, 0.0 }, + { 60.0 / 64.0, 0.0 }, + { 115.0 / 64.0, -52.0 / 64.0 }, + { 98.0 / 64.0, -55.0 / 64.0 }, + { 122.0 / 64.0, -60.0 / 64.0 } +}; -int VagStream::readBuffer(int16 *buffer, const int numSamples) { +int XAStream::readBuffer(int16 *buffer, const int numSamples) { int32 samplesDecoded = 0; - if (_samplesRemaining) { - byte i = 0; - - for (i = 28 - _samplesRemaining; i < 28 && samplesDecoded < numSamples; i++) { - _samples[i] = _samples[i] + _s1 * s_vagDataTable[_predictor][0] + _s2 * s_vagDataTable[_predictor][1]; - _s2 = _s1; - _s1 = _samples[i]; - int16 d = (int) (_samples[i] + 0.5); - buffer[samplesDecoded] = d; - samplesDecoded++; - } - -#if 0 - assert(i == 28); // We're screwed if this fails :P -#endif - // This might mean the file is corrupted, or that the stream has - // been closed. - if (i != 28) return 0; - - _samplesRemaining = 0; + for (int i = 28 - _samplesRemaining; i < 28 && samplesDecoded < numSamples; i++) { + _samples[i] = _samples[i] + _s1 * s_xaDataTable[_predictor][0] + _s2 * s_xaDataTable[_predictor][1]; + _s2 = _s1; + _s1 = _samples[i]; + int16 d = (int) (_samples[i] + 0.5); + buffer[samplesDecoded] = d; + samplesDecoded++; + _samplesRemaining--; } + if (endOfData()) + return samplesDecoded; + while (samplesDecoded < numSamples) { byte i = 0; @@ -100,8 +99,19 @@ int VagStream::readBuffer(int16 *buffer, const int numSamples) { byte shift = _predictor & 0xf; _predictor >>= 4; - if (_stream->readByte() == 7) + byte flags = _stream->readByte(); + if (flags == 3) { + // Loop + seekToPos(_loopPoint); + continue; + } else if (flags == 6) { + // Set loop point + _loopPoint = _stream->pos() - 2; + } else if (flags == 7) { + // End of stream + _endOfData = true; return samplesDecoded; + } for (i = 0; i < 28; i += 2) { byte d = _stream->readByte(); @@ -116,7 +126,7 @@ int VagStream::readBuffer(int16 *buffer, const int numSamples) { } for (i = 0; i < 28 && samplesDecoded < numSamples; i++) { - _samples[i] = _samples[i] + _s1 * s_vagDataTable[_predictor][0] + _s2 * s_vagDataTable[_predictor][1]; + _samples[i] = _samples[i] + _s1 * s_xaDataTable[_predictor][0] + _s2 * s_xaDataTable[_predictor][1]; _s2 = _s1; _s1 = _samples[i]; int16 d = (int) (_samples[i] + 0.5); @@ -124,24 +134,31 @@ int VagStream::readBuffer(int16 *buffer, const int numSamples) { samplesDecoded++; } - if (i != 27) + if (i != 28) _samplesRemaining = 28 - i; + + if (_stream->pos() >= _stream->size()) + _endOfData = true; } return samplesDecoded; } -bool VagStream::rewind() { - _stream->seek(0); +bool XAStream::rewind() { + seekToPos(0); + return true; +} + +void XAStream::seekToPos(uint pos) { + _stream->seek(pos); _samplesRemaining = 0; _predictor = 0; _s1 = _s2 = 0.0; - - return true; + _endOfData = false; } -RewindableAudioStream *makeVagStream(Common::SeekableReadStream *stream, int rate) { - return new VagStream(stream, rate); +RewindableAudioStream *makeXAStream(Common::SeekableReadStream *stream, int rate, DisposeAfterUse::Flag disposeAfterUse) { + return new XAStream(stream, rate, disposeAfterUse); } -} +} // End of namespace Audio diff --git a/audio/decoders/vag.h b/audio/decoders/xa.h index b80fbdb98f..cf28d8001a 100644 --- a/audio/decoders/vag.h +++ b/audio/decoders/xa.h @@ -28,8 +28,10 @@ * - tinsel (PSX port of the game) */ -#ifndef SOUND_VAG_H -#define SOUND_VAG_H +#ifndef AUDIO_DECODERS_XA_H +#define AUDIO_DECODERS_XA_H + +#include "common/types.h" namespace Common { class SeekableReadStream; @@ -40,17 +42,19 @@ namespace Audio { class RewindableAudioStream; /** - * Takes an input stream containing Vag sound data and creates + * Takes an input stream containing XA ADPCM sound data and creates * an RewindableAudioStream from that. * - * @param stream the SeekableReadStream from which to read the ADPCM data + * @param stream the SeekableReadStream from which to read the XA ADPCM data * @param rate the sampling rate + * @param disposeAfterUse whether to delete the stream after use. * @return a new RewindableAudioStream, or NULL, if an error occurred */ -RewindableAudioStream *makeVagStream( +RewindableAudioStream *makeXAStream( Common::SeekableReadStream *stream, - int rate = 11025); + int rate, + DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES); -} // End of namespace Sword1 +} // End of namespace Audio #endif diff --git a/audio/module.mk b/audio/module.mk index 46cb9944e1..e3aa0aaa81 100644 --- a/audio/module.mk +++ b/audio/module.mk @@ -23,10 +23,10 @@ MODULE_OBJS := \ decoders/qdm2.o \ decoders/quicktime.o \ decoders/raw.o \ - decoders/vag.o \ decoders/voc.o \ decoders/vorbis.o \ decoders/wave.o \ + decoders/xa.o \ mods/infogrames.o \ mods/maxtrax.o \ mods/module.o \ diff --git a/common/zlib.cpp b/common/zlib.cpp index 86c618830e..70133fea30 100644 --- a/common/zlib.cpp +++ b/common/zlib.cpp @@ -49,6 +49,35 @@ bool uncompress(byte *dst, unsigned long *dstLen, const byte *src, unsigned long return Z_OK == ::uncompress(dst, dstLen, src, srcLen); } +bool inflateZlibHeaderless(byte *dst, uint dstLen, const byte *src, uint srcLen) { + if (!dst || !dstLen || !src || !srcLen) + return false; + + // Initialize zlib + z_stream stream; + stream.next_in = const_cast<byte *>(src); + stream.avail_in = srcLen; + stream.next_out = dst; + stream.avail_out = dstLen; + stream.zalloc = Z_NULL; + stream.zfree = Z_NULL; + stream.opaque = Z_NULL; + + // Negative MAX_WBITS tells zlib there's no zlib header + int err = inflateInit2(&stream, -MAX_WBITS); + if (err != Z_OK) + return false; + + err = inflate(&stream, Z_SYNC_FLUSH); + if (err != Z_OK && err != Z_STREAM_END) { + inflateEnd(&stream); + return false; + } + + inflateEnd(&stream); + return true; +} + /** * A simple wrapper class which can be used to wrap around an arbitrary * other SeekableReadStream and will then provide on-the-fly decompression support. diff --git a/common/zlib.h b/common/zlib.h index 1925034310..7af7df0da8 100644 --- a/common/zlib.h +++ b/common/zlib.h @@ -41,6 +41,15 @@ class WriteStream; */ bool uncompress(byte *dst, unsigned long *dstLen, const byte *src, unsigned long srcLen); +/** + * Wrapper around zlib's inflate functions. This function will call the + * necessary inflate functions to uncompress data compressed with deflate + * but *not* with the standard zlib header. + * + * @return true on success (Z_OK or Z_STREAM_END), false otherwise + */ +bool inflateZlibHeaderless(byte *dst, uint dstLen, const byte *src, uint srcLen); + #endif /** @@ -1073,12 +1073,12 @@ arm-riscos) ;; bada) _host_os=bada - if test "$_debug_build" = yes; then - _host_cpu=i686 - _host_alias=i686-mingw32 - else - _host_cpu=arm - _host_alias=arm-samsung-nucleuseabi + if test "$_debug_build" = yes; then + _host_cpu=i686 + _host_alias=i686-mingw32 + else + _host_cpu=arm + _host_alias=arm-samsung-nucleuseabi fi ;; caanoo) @@ -1794,12 +1794,12 @@ case $_host_os in _seq_midi=no ;; bada) - BADA_SDK_ROOT="`cygpath -m ${BADA_SDK}`" - add_line_to_config_mk "BADA_SDK = $BADA_SDK" - add_line_to_config_mk "BADA_SDK_ROOT = $BADA_SDK_ROOT" + BADA_SDK_ROOT="`cygpath -m ${BADA_SDK}`" + add_line_to_config_mk "BADA_SDK = $BADA_SDK" + add_line_to_config_mk "BADA_SDK_ROOT = $BADA_SDK_ROOT" - # assume dependencies have been installed in cygwin's /usr/local - CYGWIN_USR_LOCAL="`cygpath -m /usr/local`" + # assume dependencies have been installed in cygwin's /usr/local + CYGWIN_USR_LOCAL="`cygpath -m /usr/local`" LDFLAGS="$LDFLAGS -L${CYGWIN_USR_LOCAL}/lib" CXXFLAGS="$CXXFLAGS -I${CYGWIN_USR_LOCAL}/include" ;; @@ -1820,6 +1820,28 @@ case $_host_os in DEFINES="$DEFINES -DMACOSX" LIBS="$LIBS -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI" add_line_to_config_mk 'MACOSX = 1' + + # Now we may have MacPorts or Fink installed + # Which put libraries and headers in non-standard places + # Checking them here + + # MacPorts + # There is no way to get the prefix, so implementing a hack here + macport_version=`port version 2>/dev/null` + if test "$?" -eq 0; then + macport_version="`echo "${macport_version}" | sed -ne 's/Version: \([0-9]\.[0-9]\.[0-9]\)/\1/gp'sed -ne 's/Version: \([0-9]\.[0-9]\.[0-9]\)/\1/gp'`" + echo_n "You seem to be running MacPorts version ${macport_version}..." + + macport_prefix=`which port` + # strip off /bin/port from /opt/local/bin/port + macport_prefix=`dirname ${macport_prefix}` + macport_prefix=`dirname ${macport_prefix}` + + echo "adding ${macport_prefix} to paths" + + LDFLAGS="-L${macport_prefix}/lib $LDFLAGS" + CXXFLAGS="-I${macport_prefix}/include $CXXFLAGS" + fi ;; dreamcast) DEFINES="$DEFINES -D__DC__" @@ -2030,21 +2052,21 @@ if test -n "$_host"; then DEFINES="$DEFINES -DLINUPY" ;; bada) - _unix=yes - _backend="bada" - _port_mk="backends/platform/bada/bada.mk" - if test "$_debug_build" = yes; then - _arm_asm=no - else - _arm_asm=yes - fi - _taskbar=no - _build_scalers=no - _seq_midi=no - _mt32emu=no - _timidity=no + _unix=yes + _backend="bada" + _port_mk="backends/platform/bada/bada.mk" + if test "$_debug_build" = yes; then + _arm_asm=no + else + _arm_asm=yes + fi + _taskbar=no + _build_scalers=no + _seq_midi=no + _mt32emu=no + _timidity=no _vkeybd=yes - ;; + ;; bfin*) ;; caanoo) @@ -2379,33 +2401,33 @@ case $_backend in LDFLAGS="$LDFLAGS -Wl,-z,noexecstack" ;; bada) - # dirent.h not available. NONSTANDARD_PORT==ensure portdefs.h is included - DEFINES="$DEFINES -DBADA -DDISABLE_STDIO_FILESTREAM -DNONSTANDARD_PORT" - DEFINES="$DEFINES -DNO_STDERR_STDOUT" + # dirent.h not available. NONSTANDARD_PORT==ensure portdefs.h is included + DEFINES="$DEFINES -DBADA -DDISABLE_STDIO_FILESTREAM -DNONSTANDARD_PORT" + DEFINES="$DEFINES -DNO_STDERR_STDOUT" DEFINES="$DEFINES -DDISABLE_COMMAND_LINE" - INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/bada ' - INCLUDES="$INCLUDES "'-I$(BADA_SDK)/include' - INCLUDES="$INCLUDES "'-I$(BADA_SDK_ROOT)/Include' - if test "$_debug_build" = yes; then - # debug using with the simulator - CXXFLAGS="$CXXFLAGS -D_DEBUG -DSHP -DBUILD_DLL -fmessage-length=0" - else - # created a shared library for inclusion via the eclipse build - CXXFLAGS="$CXXFLAGS -DSHP" - CXXFLAGS="$CXXFLAGS -fpic" - CXXFLAGS="$CXXFLAGS -fshort-wchar" - CXXFLAGS="$CXXFLAGS -mcpu=cortex-a8" - CXXFLAGS="$CXXFLAGS -mfpu=vfpv3" - CXXFLAGS="$CXXFLAGS -mfloat-abi=hard" - CXXFLAGS="$CXXFLAGS -mlittle-endian" - CXXFLAGS="$CXXFLAGS -mthumb-interwork" - CXXFLAGS="$CXXFLAGS -Wno-psabi" - CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" - CXXFLAGS="$CXXFLAGS -fno-short-enums" - fi - HOSTEXEPRE=lib - HOSTEXEEXT=.a - ;; + INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/bada ' + INCLUDES="$INCLUDES "'-I$(BADA_SDK)/include' + INCLUDES="$INCLUDES "'-I$(BADA_SDK_ROOT)/Include' + if test "$_debug_build" = yes; then + # debug using with the simulator + CXXFLAGS="$CXXFLAGS -D_DEBUG -DSHP -DBUILD_DLL -fmessage-length=0" + else + # created a shared library for inclusion via the eclipse build + CXXFLAGS="$CXXFLAGS -DSHP" + CXXFLAGS="$CXXFLAGS -fpic" + CXXFLAGS="$CXXFLAGS -fshort-wchar" + CXXFLAGS="$CXXFLAGS -mcpu=cortex-a8" + CXXFLAGS="$CXXFLAGS -mfpu=vfpv3" + CXXFLAGS="$CXXFLAGS -mfloat-abi=hard" + CXXFLAGS="$CXXFLAGS -mlittle-endian" + CXXFLAGS="$CXXFLAGS -mthumb-interwork" + CXXFLAGS="$CXXFLAGS -Wno-psabi" + CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" + CXXFLAGS="$CXXFLAGS -fno-short-enums" + fi + HOSTEXEPRE=lib + HOSTEXEEXT=.a + ;; dc) INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/dc' INCLUDES="$INCLUDES "'-isystem $(ronindir)/include' @@ -3263,10 +3285,10 @@ fi case $_host_os in bada) - # components live in non-standard locations so just assume sane SDK - _opengl=yes - _opengles=yes - ;; + # components live in non-standard locations so just assume sane SDK + _opengl=yes + _opengles=yes + ;; esac if test "$_opengles" = "yes" ; then diff --git a/devtools/create_drascula/Makefile b/devtools/create_drascula/Makefile deleted file mode 100644 index 3052436b55..0000000000 --- a/devtools/create_drascula/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -# $Id$ - -all: - g++ -I../.. create_drascula.cpp -o create_drascula diff --git a/devtools/create_drascula/dists/msvc8/create_drascula.sln b/devtools/create_drascula/dists/msvc8/create_drascula.sln deleted file mode 100644 index dc7428bb80..0000000000 --- a/devtools/create_drascula/dists/msvc8/create_drascula.sln +++ /dev/null @@ -1,20 +0,0 @@ -ďťż -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_drascula", "create_drascula.vcproj", "{5F280130-349D-11DD-AE16-0800200C9A66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/devtools/create_drascula/dists/msvc8/create_drascula.vcproj b/devtools/create_drascula/dists/msvc8/create_drascula.vcproj deleted file mode 100644 index 3b26261a76..0000000000 --- a/devtools/create_drascula/dists/msvc8/create_drascula.vcproj +++ /dev/null @@ -1,191 +0,0 @@ -<?xml version="1.0" encoding="windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="8,00" - Name="create_drascula" - ProjectGUID="{5F280130-349D-11DD-AE16-0800200C9A66}" - RootNamespace="create_drascula" - Keyword="Win32Proj" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="0" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_drascula.exe" - LinkIncremental="2" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/create_drascula.pdb" - SubSystem="1" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="3" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_drascula.exe" - LinkIncremental="1" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath="..\..\create_drascula.cpp" - > - </File> - <File - RelativePath="..\..\create_drascula.h" - > - </File> - <File - RelativePath="..\..\staticdata.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/devtools/create_drascula/dists/msvc8_to_msvc9.bat b/devtools/create_drascula/dists/msvc8_to_msvc9.bat deleted file mode 100644 index 54820b34d0..0000000000 --- a/devtools/create_drascula/dists/msvc8_to_msvc9.bat +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -rem This batch file is used to convert MSVC8 (Visual Studio 2005) project files to MSVC9 (Visual Studio 2008) ones -rem You need the Windows version of GNU rpl -rem Get it here: -rem http://gnuwin32.sourceforge.net/packages/rpl.htm -rem Place rpl.exe from the bin folder inside the archive in the folder where -rem this batch file resides - -if not exist rpl.exe goto no_rpl - -echo Creating MSVC9 project files from the MSVC8 ones -copy /y msvc8\*.vcproj msvc9\ -copy /y msvc8\*.sln msvc9\ -rpl -e -q "Version=\"8.00\"" "Version=\"9.00\"" msvc9\*.vcproj -rpl -e -q "Version=\"8,00\"" "Version=\"9,00\"" msvc9\*.vcproj -rpl -e -q "Keyword=\"Win32Proj\"" "Keyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"" msvc9\*.vcproj -rpl -e -q "EntryPointSymbol=\"WinMainCRTStartup\"" "EntryPointSymbol=\"WinMainCRTStartup\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"" msvc9\*.vcproj -rpl -e -q "Format Version 9.00" "Format Version 10.00" msvc9\*.sln -rpl -e -q "Format Version 9,00" "Format Version 10,00" msvc9\*.sln -rpl -e -q "# Visual C++ Express 2005" "# Visual C++ Express 2008" msvc9\*.sln -rpl -e -q "# Visual Studio 2005" "# Visual Studio 2008" msvc9\*.sln -goto the_end - -:no_rpl -echo You need the Windows version of GNU rpl -echo Get it here: -echo http://gnuwin32.sourceforge.net/packages/rpl.htm -echo Place rpl.exe from the bin folder inside the archive in the folder where -echo this batch file resides - -:the_end -pause diff --git a/devtools/create_drascula/dists/msvc9/create_drascula.sln b/devtools/create_drascula/dists/msvc9/create_drascula.sln deleted file mode 100644 index 4a39bdbe42..0000000000 --- a/devtools/create_drascula/dists/msvc9/create_drascula.sln +++ /dev/null @@ -1,20 +0,0 @@ -ďťż -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_drascula", "create_drascula.vcproj", "{5F280130-349D-11DD-AE16-0800200C9A66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/devtools/create_drascula/dists/msvc9/create_drascula.vcproj b/devtools/create_drascula/dists/msvc9/create_drascula.vcproj deleted file mode 100644 index f30d6a114b..0000000000 --- a/devtools/create_drascula/dists/msvc9/create_drascula.vcproj +++ /dev/null @@ -1,192 +0,0 @@ -<?xml version="1.0" encoding="windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9,00" - Name="create_drascula" - ProjectGUID="{5F280130-349D-11DD-AE16-0800200C9A66}" - RootNamespace="create_drascula" - Keyword="Win32Proj" - TargetFrameworkVersion="131072" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="0" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_drascula.exe" - LinkIncremental="2" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/create_drascula.pdb" - SubSystem="1" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="3" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_drascula.exe" - LinkIncremental="1" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath="..\..\create_drascula.cpp" - > - </File> - <File - RelativePath="..\..\create_drascula.h" - > - </File> - <File - RelativePath="..\..\staticdata.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/devtools/create_drascula/dists/msvc9_to_msvc8.bat b/devtools/create_drascula/dists/msvc9_to_msvc8.bat deleted file mode 100644 index c87a524f77..0000000000 --- a/devtools/create_drascula/dists/msvc9_to_msvc8.bat +++ /dev/null @@ -1,33 +0,0 @@ -@echo off -rem This batch file is used to convert MSVC9 (Visual Studio 2008) project files to MSVC8 (Visual Studio 2005) ones -rem You need the Windows version of GNU rpl -rem Get it here: -rem http://gnuwin32.sourceforge.net/packages/rpl.htm -rem Place rpl.exe from the bin folder inside the archive in the folder where -rem this batch file resides - -if not exist rpl.exe goto no_rpl - -echo Creating MSVC8 project files from the MSVC9 ones -copy /y msvc9\*.vcproj msvc8\ -copy /y msvc9\*.sln msvc8\ -rpl -e -q "Version=\"9.00\"" "Version=\"8.00\"" msvc8\*.vcproj -rpl -e -q "Version=\"9,00\"" "Version=\"8,00\"" msvc8\*.vcproj -rpl -e -q "\tTargetFrameworkVersion=\"131072\"\n" "" msvc8\*.vcproj -rpl -e -q "\t\t\t\tRandomizedBaseAddress=\"1\"\n" "" msvc8\*.vcproj -rpl -e -q "\t\t\t\tDataExecutionPrevention=\"0\"\n" "" msvc8\*.vcproj -rpl -e -q "Format Version 10.00" "Format Version 9.00" msvc8\*.sln -rpl -e -q "Format Version 10,00" "Format Version 9,00" msvc8\*.sln -rpl -e -q "# Visual C++ Express 2008" "# Visual C++ Express 2005" msvc8\*.sln -rpl -e -q "# Visual Studio 2008" "# Visual Studio 2005" msvc8\*.sln -goto the_end - -:no_rpl -echo You need the Windows version of GNU rpl -echo Get it here: -echo http://gnuwin32.sourceforge.net/packages/rpl.htm -echo Place rpl.exe from the bin folder inside the archive in the folder where -echo this batch file resides - -:the_end -pause diff --git a/devtools/create_hugo/dists/msvc10/create_hugo.sln b/devtools/create_hugo/dists/msvc10/create_hugo.sln deleted file mode 100644 index a6f87198f6..0000000000 --- a/devtools/create_hugo/dists/msvc10/create_hugo.sln +++ /dev/null @@ -1,20 +0,0 @@ -ďťż -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_hugo", "create_hugo.vcxproj", "{5F280130-349D-11DD-AE16-0800200C9A66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/devtools/create_hugo/dists/msvc10/create_hugo.vcxproj b/devtools/create_hugo/dists/msvc10/create_hugo.vcxproj deleted file mode 100644 index 1bc98740a0..0000000000 --- a/devtools/create_hugo/dists/msvc10/create_hugo.vcxproj +++ /dev/null @@ -1,113 +0,0 @@ -ďťż<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{5F280130-349D-11DD-AE16-0800200C9A66}</ProjectGuid> - <RootNamespace>create_hugo</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> - <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" /> - <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" /> - <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> - <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> - <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>..\..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <OutputFile>$(OutDir)create_hugo.exe</OutputFile> - <IgnoreSpecificDefaultLibraries>libc.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> - <GenerateDebugInformation>true</GenerateDebugInformation> - <ProgramDatabaseFile>$(OutDir)create_hugo.pdb</ProgramDatabaseFile> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions> - <Optimization>Full</Optimization> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <OutputFile>$(OutDir)create_hugo.exe</OutputFile> - <IgnoreSpecificDefaultLibraries>libc.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\create_hugo.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\create_hugo.h" /> - <ClInclude Include="..\..\enums.h" /> - <ClInclude Include="..\..\staticdata.h" /> - <ClInclude Include="..\..\staticdisplay.h" /> - <ClInclude Include="..\..\staticengine.h" /> - <ClInclude Include="..\..\staticfont.h" /> - <ClInclude Include="..\..\staticintro.h" /> - <ClInclude Include="..\..\staticmouse.h" /> - <ClInclude Include="..\..\staticparser.h" /> - <ClInclude Include="..\..\staticutil.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> diff --git a/devtools/create_hugo/dists/msvc9/create_hugo.sln b/devtools/create_hugo/dists/msvc9/create_hugo.sln deleted file mode 100644 index 2d86ae4f19..0000000000 --- a/devtools/create_hugo/dists/msvc9/create_hugo.sln +++ /dev/null @@ -1,20 +0,0 @@ -ďťż -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_hugo", "create_hugo.vcproj", "{5F280130-349D-11DD-AE16-0800200C9A66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/devtools/create_hugo/dists/msvc9/create_hugo.vcproj b/devtools/create_hugo/dists/msvc9/create_hugo.vcproj deleted file mode 100644 index 473d89e43c..0000000000 --- a/devtools/create_hugo/dists/msvc9/create_hugo.vcproj +++ /dev/null @@ -1,219 +0,0 @@ -<?xml version="1.0" encoding="windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9.00" - Name="create_hugo" - ProjectGUID="{5F280130-349D-11DD-AE16-0800200C9A66}" - RootNamespace="create_hugo" - Keyword="Win32Proj" - TargetFrameworkVersion="131072" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="0" - AdditionalIncludeDirectories="..\..\..\.." - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_hugo.exe" - LinkIncremental="2" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/create_hugo.pdb" - SubSystem="1" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="3" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_hugo.exe" - LinkIncremental="1" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath="..\..\create_hugo.cpp" - > - </File> - <File - RelativePath="..\..\create_hugo.h" - > - </File> - <File - RelativePath="..\..\enums.h" - > - </File> - <File - RelativePath="..\..\staticdata.h" - > - </File> - <File - RelativePath="..\..\staticdisplay.h" - > - </File> - <File - RelativePath="..\..\staticengine.h" - > - </File> - <File - RelativePath="..\..\staticfont.h" - > - </File> - <File - RelativePath="..\..\staticintro.h" - > - </File> - <File - RelativePath="..\..\staticmouse.h" - > - </File> - <File - RelativePath="..\..\staticparser.h" - > - </File> - <File - RelativePath="..\..\staticutil.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/devtools/create_kyradat/create_kyradat.h b/devtools/create_kyradat/create_kyradat.h index 983ba3c228..cabf65706f 100644 --- a/devtools/create_kyradat/create_kyradat.h +++ b/devtools/create_kyradat/create_kyradat.h @@ -277,7 +277,7 @@ enum kSpecial { kTalkieVersion, kDemoVersion, kTalkieDemoVersion, - kOldFloppy, + kOldFloppy }; enum kGame { diff --git a/devtools/create_lure/Makefile b/devtools/create_lure/Makefile deleted file mode 100644 index 1ed33b594c..0000000000 --- a/devtools/create_lure/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -# $Id$ - -all: - g++ -I../.. create_lure_dat.cpp process_actions.cpp -o create_lure diff --git a/devtools/create_lure/dists/msvc8/create_lure.sln b/devtools/create_lure/dists/msvc8/create_lure.sln deleted file mode 100644 index 8d74988d8c..0000000000 --- a/devtools/create_lure/dists/msvc8/create_lure.sln +++ /dev/null @@ -1,20 +0,0 @@ -ďťż -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_lure", "create_lure.vcproj", "{63E18A70-17D2-11DE-8C30-0800200C9A66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {63E18A70-17D2-11DE-8C30-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32 - {63E18A70-17D2-11DE-8C30-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32 - {63E18A70-17D2-11DE-8C30-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32 - {63E18A70-17D2-11DE-8C30-0800200C9A66}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/devtools/create_lure/dists/msvc8/create_lure.vcproj b/devtools/create_lure/dists/msvc8/create_lure.vcproj deleted file mode 100644 index 177466a29f..0000000000 --- a/devtools/create_lure/dists/msvc8/create_lure.vcproj +++ /dev/null @@ -1,222 +0,0 @@ -<?xml version="1.0" encoding="windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="8,00" - Name="create_lure" - ProjectGUID="{63E18A70-17D2-11DE-8C30-0800200C9A66}" - RootNamespace="create_lure" - Keyword="Win32Proj" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="0" - AdditionalIncludeDirectories="../../../../" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_lure.exe" - LinkIncremental="2" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/create_lure.pdb" - SubSystem="1" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="3" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_lure.exe" - LinkIncremental="1" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <Filter - Name="common" - > - <File - RelativePath="..\..\..\..\common\hashmap.cpp" - > - </File> - <File - RelativePath="..\..\..\..\common\hashmap.h" - > - </File> - <File - RelativePath="..\..\..\..\common\memorypool.cpp" - > - </File> - <File - RelativePath="..\..\..\..\common\memorypool.h" - > - </File> - <File - RelativePath="..\..\..\..\common\scummsys.h" - > - </File> - <File - RelativePath="..\..\..\..\common\str.cpp" - > - </File> - <File - RelativePath="..\..\..\..\common\str.h" - > - </File> - <File - RelativePath="..\..\..\..\common\util.h" - > - </File> - </Filter> - <File - RelativePath="..\..\create_lure_dat.cpp" - > - </File> - <File - RelativePath="..\..\create_lure_dat.h" - > - </File> - <File - RelativePath="..\..\process_actions.cpp" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/devtools/create_lure/dists/msvc8_to_msvc9.bat b/devtools/create_lure/dists/msvc8_to_msvc9.bat deleted file mode 100644 index 54820b34d0..0000000000 --- a/devtools/create_lure/dists/msvc8_to_msvc9.bat +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -rem This batch file is used to convert MSVC8 (Visual Studio 2005) project files to MSVC9 (Visual Studio 2008) ones -rem You need the Windows version of GNU rpl -rem Get it here: -rem http://gnuwin32.sourceforge.net/packages/rpl.htm -rem Place rpl.exe from the bin folder inside the archive in the folder where -rem this batch file resides - -if not exist rpl.exe goto no_rpl - -echo Creating MSVC9 project files from the MSVC8 ones -copy /y msvc8\*.vcproj msvc9\ -copy /y msvc8\*.sln msvc9\ -rpl -e -q "Version=\"8.00\"" "Version=\"9.00\"" msvc9\*.vcproj -rpl -e -q "Version=\"8,00\"" "Version=\"9,00\"" msvc9\*.vcproj -rpl -e -q "Keyword=\"Win32Proj\"" "Keyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"131072\"" msvc9\*.vcproj -rpl -e -q "EntryPointSymbol=\"WinMainCRTStartup\"" "EntryPointSymbol=\"WinMainCRTStartup\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"" msvc9\*.vcproj -rpl -e -q "Format Version 9.00" "Format Version 10.00" msvc9\*.sln -rpl -e -q "Format Version 9,00" "Format Version 10,00" msvc9\*.sln -rpl -e -q "# Visual C++ Express 2005" "# Visual C++ Express 2008" msvc9\*.sln -rpl -e -q "# Visual Studio 2005" "# Visual Studio 2008" msvc9\*.sln -goto the_end - -:no_rpl -echo You need the Windows version of GNU rpl -echo Get it here: -echo http://gnuwin32.sourceforge.net/packages/rpl.htm -echo Place rpl.exe from the bin folder inside the archive in the folder where -echo this batch file resides - -:the_end -pause diff --git a/devtools/create_lure/dists/msvc9/create_lure.sln b/devtools/create_lure/dists/msvc9/create_lure.sln deleted file mode 100644 index 4f55924eea..0000000000 --- a/devtools/create_lure/dists/msvc9/create_lure.sln +++ /dev/null @@ -1,20 +0,0 @@ -ďťż -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_lure", "create_lure.vcproj", "{63E18A70-17D2-11DE-8C30-0800200C9A66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {63E18A70-17D2-11DE-8C30-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32 - {63E18A70-17D2-11DE-8C30-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32 - {63E18A70-17D2-11DE-8C30-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32 - {63E18A70-17D2-11DE-8C30-0800200C9A66}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/devtools/create_lure/dists/msvc9/create_lure.vcproj b/devtools/create_lure/dists/msvc9/create_lure.vcproj deleted file mode 100644 index a611db31fa..0000000000 --- a/devtools/create_lure/dists/msvc9/create_lure.vcproj +++ /dev/null @@ -1,223 +0,0 @@ -<?xml version="1.0" encoding="windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9,00" - Name="create_lure" - ProjectGUID="{63E18A70-17D2-11DE-8C30-0800200C9A66}" - RootNamespace="create_lure" - Keyword="Win32Proj" - TargetFrameworkVersion="131072" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="0" - AdditionalIncludeDirectories="../../../../" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_lure.exe" - LinkIncremental="2" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/create_lure.pdb" - SubSystem="1" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="3" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_lure.exe" - LinkIncremental="1" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <Filter - Name="common" - > - <File - RelativePath="..\..\..\..\common\hashmap.cpp" - > - </File> - <File - RelativePath="..\..\..\..\common\hashmap.h" - > - </File> - <File - RelativePath="..\..\..\..\common\memorypool.cpp" - > - </File> - <File - RelativePath="..\..\..\..\common\memorypool.h" - > - </File> - <File - RelativePath="..\..\..\..\common\scummsys.h" - > - </File> - <File - RelativePath="..\..\..\..\common\str.cpp" - > - </File> - <File - RelativePath="..\..\..\..\common\str.h" - > - </File> - <File - RelativePath="..\..\..\..\common\util.h" - > - </File> - </Filter> - <File - RelativePath="..\..\create_lure_dat.cpp" - > - </File> - <File - RelativePath="..\..\create_lure_dat.h" - > - </File> - <File - RelativePath="..\..\process_actions.cpp" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/devtools/create_lure/dists/msvc9_to_msvc8.bat b/devtools/create_lure/dists/msvc9_to_msvc8.bat deleted file mode 100644 index c87a524f77..0000000000 --- a/devtools/create_lure/dists/msvc9_to_msvc8.bat +++ /dev/null @@ -1,33 +0,0 @@ -@echo off -rem This batch file is used to convert MSVC9 (Visual Studio 2008) project files to MSVC8 (Visual Studio 2005) ones -rem You need the Windows version of GNU rpl -rem Get it here: -rem http://gnuwin32.sourceforge.net/packages/rpl.htm -rem Place rpl.exe from the bin folder inside the archive in the folder where -rem this batch file resides - -if not exist rpl.exe goto no_rpl - -echo Creating MSVC8 project files from the MSVC9 ones -copy /y msvc9\*.vcproj msvc8\ -copy /y msvc9\*.sln msvc8\ -rpl -e -q "Version=\"9.00\"" "Version=\"8.00\"" msvc8\*.vcproj -rpl -e -q "Version=\"9,00\"" "Version=\"8,00\"" msvc8\*.vcproj -rpl -e -q "\tTargetFrameworkVersion=\"131072\"\n" "" msvc8\*.vcproj -rpl -e -q "\t\t\t\tRandomizedBaseAddress=\"1\"\n" "" msvc8\*.vcproj -rpl -e -q "\t\t\t\tDataExecutionPrevention=\"0\"\n" "" msvc8\*.vcproj -rpl -e -q "Format Version 10.00" "Format Version 9.00" msvc8\*.sln -rpl -e -q "Format Version 10,00" "Format Version 9,00" msvc8\*.sln -rpl -e -q "# Visual C++ Express 2008" "# Visual C++ Express 2005" msvc8\*.sln -rpl -e -q "# Visual Studio 2008" "# Visual Studio 2005" msvc8\*.sln -goto the_end - -:no_rpl -echo You need the Windows version of GNU rpl -echo Get it here: -echo http://gnuwin32.sourceforge.net/packages/rpl.htm -echo Place rpl.exe from the bin folder inside the archive in the folder where -echo this batch file resides - -:the_end -pause diff --git a/devtools/create_mads/Makefile b/devtools/create_mads/Makefile deleted file mode 100644 index c2776f5d17..0000000000 --- a/devtools/create_mads/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -# $Id$ - -all: - g++ -I../.. main.cpp parser.cpp -o create_mads diff --git a/devtools/create_mads/dists/msvc9/create_mads.sln b/devtools/create_mads/dists/msvc9/create_mads.sln deleted file mode 100644 index 5ddd18cffe..0000000000 --- a/devtools/create_mads/dists/msvc9/create_mads.sln +++ /dev/null @@ -1,20 +0,0 @@ -ďťż -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_mads", "create_mads.vcproj", "{0332F6FD-D511-4AF6-ABCC-24A85F1489A4}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0332F6FD-D511-4AF6-ABCC-24A85F1489A4}.Debug|Win32.ActiveCfg = Debug|Win32 - {0332F6FD-D511-4AF6-ABCC-24A85F1489A4}.Debug|Win32.Build.0 = Debug|Win32 - {0332F6FD-D511-4AF6-ABCC-24A85F1489A4}.Release|Win32.ActiveCfg = Release|Win32 - {0332F6FD-D511-4AF6-ABCC-24A85F1489A4}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/devtools/create_mads/dists/msvc9/create_mads.vcproj b/devtools/create_mads/dists/msvc9/create_mads.vcproj deleted file mode 100644 index 1f33faa418..0000000000 --- a/devtools/create_mads/dists/msvc9/create_mads.vcproj +++ /dev/null @@ -1,187 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9.00" - Name="create_mads" - ProjectGUID="{0332F6FD-D511-4AF6-ABCC-24A85F1489A4}" - RootNamespace="create_mads" - Keyword="Win32Proj" - TargetFrameworkVersion="131072" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="0" - AdditionalIncludeDirectories="../../../../" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_mads.exe" - LinkIncremental="2" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/create_mads.pdb" - SubSystem="1" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="3" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_mads.exe" - LinkIncremental="1" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath="..\..\main.cpp" - > - </File> - <File - RelativePath="..\..\parser.cpp" - > - </File> - <File - RelativePath="..\..\parser.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/devtools/create_project/codeblocks.cpp b/devtools/create_project/codeblocks.cpp index e73dc11089..3458ca5a19 100644 --- a/devtools/create_project/codeblocks.cpp +++ b/devtools/create_project/codeblocks.cpp @@ -32,20 +32,20 @@ CodeBlocksProvider::CodeBlocksProvider(StringList &global_warnings, std::map<std } void CodeBlocksProvider::createWorkspace(const BuildSetup &setup) { - std::ofstream workspace((setup.outputDir + '/' + PROJECT_NAME + ".workspace").c_str()); + std::ofstream workspace((setup.outputDir + '/' + setup.projectName + ".workspace").c_str()); if (!workspace) - error("Could not open \"" + setup.outputDir + '/' + PROJECT_NAME + ".workspace\" for writing"); + error("Could not open \"" + setup.outputDir + '/' + setup.projectName + ".workspace\" for writing"); workspace << "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n" "<CodeBlocks_workspace_file>\n"; - workspace << "\t<Workspace title=\"" << PROJECT_DESCRIPTION << "\">\n"; + workspace << "\t<Workspace title=\"" << setup.projectDescription << "\">\n"; - writeReferences(workspace); + writeReferences(setup, workspace); // Note we assume that the UUID map only includes UUIDs for enabled engines! for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { - if (i->first == PROJECT_NAME) + if (i->first == setup.projectName) continue; workspace << "\t\t<Project filename=\"" << i->first << ".cbp\" />\n"; @@ -88,15 +88,15 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s "\t\t<Option compiler=\"gcc\" />\n" "\t\t<Build>\n"; - if (name == PROJECT_NAME) { + if (name == setup.projectName) { std::string libraries; for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i) libraries += processLibraryName(*i) + ".a;"; project << "\t\t\t<Target title=\"default\">\n" - "\t\t\t\t<Option output=\"" << PROJECT_NAME << "\\" << PROJECT_NAME << "\" prefix_auto=\"1\" extension_auto=\"1\" />\n" - "\t\t\t\t<Option object_output=\"" << PROJECT_NAME << "\" />\n" + "\t\t\t\t<Option output=\"" << setup.projectName << "\\" << setup.projectName << "\" prefix_auto=\"1\" extension_auto=\"1\" />\n" + "\t\t\t\t<Option object_output=\"" << setup.projectName << "\" />\n" "\t\t\t\t<Option external_deps=\"" << libraries /* + list of engines engines\name\name.a */ << "\" />\n" "\t\t\t\t<Option type=\"1\" />\n" "\t\t\t\t<Option compiler=\"gcc\" />\n" @@ -125,10 +125,10 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s project << "\t\t\t\t\t<Add library=\"" << processLibraryName(*i) << "\" />\n"; for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { - if (i->first == PROJECT_NAME) + if (i->first == setup.projectName) continue; - project << "\t\t\t\t\t<Add library=\"" << PROJECT_NAME << "\\engines\\" << i->first << "\\lib" << i->first << ".a\" />\n"; + project << "\t\t\t\t\t<Add library=\"" << setup.projectName << "\\engines\\" << i->first << "\\lib" << i->first << ".a\" />\n"; } project << "\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")lib\\mingw\" />\n" @@ -139,7 +139,7 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s // Resource compiler project << "\t\t\t\t<ResourceCompiler>\n" "\t\t\t\t\t<Add directory=\"..\\..\\dists\" />\n" - "\t\t\t\t\t<Add directory=\"..\\..\\..\\" << PROJECT_NAME << "\" />\n" + "\t\t\t\t\t<Add directory=\"..\\..\\..\\" << setup.projectName << "\" />\n" "\t\t\t\t</ResourceCompiler>\n" "\t\t\t</Target>\n" "\t\t</Build>\n"; @@ -148,9 +148,9 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s } else { project << "\t\t\t<Target title=\"default\">\n" - "\t\t\t\t<Option output=\"" << PROJECT_NAME << "\\engines\\" << name << "\\lib" << name << "\" prefix_auto=\"1\" extension_auto=\"1\" />\n" + "\t\t\t\t<Option output=\"" << setup.projectName << "\\engines\\" << name << "\\lib" << name << "\" prefix_auto=\"1\" extension_auto=\"1\" />\n" "\t\t\t\t<Option working_dir=\"\" />\n" - "\t\t\t\t<Option object_output=\"" << PROJECT_NAME << "\" />\n" + "\t\t\t\t<Option object_output=\"" << setup.projectName << "\" />\n" "\t\t\t\t<Option type=\"2\" />\n" "\t\t\t\t<Option compiler=\"gcc\" />\n" "\t\t\t\t<Option createDefFile=\"1\" />\n" @@ -161,7 +161,7 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s project << "\t\t\t\t\t<Add option=\"-g\" />\n" "\t\t\t\t\t<Add directory=\"..\\..\\engines\" />\n" - "\t\t\t\t\t<Add directory=\"..\\..\\..\\" << PROJECT_NAME << "\" />\n"; + "\t\t\t\t\t<Add directory=\"..\\..\\..\\" << setup.projectName << "\" />\n"; // Sword2.5 engine needs theora and vorbis includes if (name == "sword25") @@ -240,8 +240,8 @@ void CodeBlocksProvider::writeFileListToProject(const FileNode &dir, std::ofstre } } -void CodeBlocksProvider::writeReferences(std::ofstream &output) { - output << "\t\t<Project filename=\"" << PROJECT_NAME << ".cbp\" active=\"1\">\n"; +void CodeBlocksProvider::writeReferences(const BuildSetup &setup, std::ofstream &output) { + output << "\t\t<Project filename=\"" << setup.projectName << ".cbp\" active=\"1\">\n"; for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { if (i->first == " << PROJECT_NAME << ") diff --git a/devtools/create_project/codeblocks.h b/devtools/create_project/codeblocks.h index 8d35eb068e..f65604d925 100644 --- a/devtools/create_project/codeblocks.h +++ b/devtools/create_project/codeblocks.h @@ -43,7 +43,7 @@ protected: void writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation, const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix); - void writeReferences(std::ofstream &output); + void writeReferences(const BuildSetup &setup, std::ofstream &output); const char *getProjectExtension(); diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index 0b190b3f0e..084641608a 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -20,6 +20,8 @@ * */ +//#define ENABLE_XCODE + // HACK to allow building with the SDL backend on MinGW // see bug #1800764 "TOOLS: MinGW tools building broken" #ifdef main @@ -177,6 +179,7 @@ int main(int argc, char *argv[]) { projectType = kProjectMSVC; +#ifdef ENABLE_XCODE } else if (!std::strcmp(argv[i], "--xcode")) { if (projectType != kProjectNone) { std::cerr << "ERROR: You cannot pass more than one project type!\n"; @@ -184,6 +187,7 @@ int main(int argc, char *argv[]) { } projectType = kProjectXcode; +#endif } else if (!std::strcmp(argv[i], "--msvc-version")) { if (i + 1 >= argc) { @@ -255,6 +259,8 @@ int main(int argc, char *argv[]) { } else if (!std::strcmp(argv[i], "--installer")) { setup.runBuildEvents = true; setup.createInstaller = true; + } else if (!std::strcmp(argv[i], "--tools")) { + setup.devTools = true; } else { std::cerr << "ERROR: Unknown parameter \"" << argv[i] << "\"\n"; return -1; @@ -323,6 +329,11 @@ int main(int argc, char *argv[]) { return -1; case kProjectCodeBlocks: + if (setup.devTools) { + std::cerr << "ERROR: Building tools is not supported for the CodeBlocks project type!\n"; + return -1; + } + //////////////////////////////////////////////////////////////////////////// // Code::Blocks is using GCC behind the scenes, so we need to pass a list // of options to enable or disable warnings @@ -480,6 +491,11 @@ int main(int argc, char *argv[]) { break; case kProjectXcode: + if (setup.devTools) { + std::cerr << "ERROR: Building tools is not supported for the XCode project type!\n"; + return -1; + } + //////////////////////////////////////////////////////////////////////////// // Xcode is also using GCC behind the scenes. See Code::Blocks comment // for info on all warnings @@ -506,6 +522,15 @@ int main(int argc, char *argv[]) { break; } + // Setup project name and description + setup.projectName = PROJECT_NAME; + setup.projectDescription = PROJECT_DESCRIPTION; + + if (setup.devTools) { + setup.projectName += "-tools"; + setup.projectDescription += "Tools"; + } + provider->createProject(setup); delete provider; @@ -560,6 +585,9 @@ void displayHelp(const char *exe) { " (default: false)\n" " --installer Create NSIS installer after the build (implies --build-events)\n" " (default: false)\n" + " --tools Create project files for the devtools\n" + " (ignores --build-events and --installer, as well as engine settings)\n" + " (default: false)\n" "\n" "Engines settings:\n" " --list-engines list all available engines and their default state\n" @@ -786,6 +814,18 @@ const Feature s_features[] = { { "langdetect", "USE_DETECTLANG", "", true, "System language detection support" } // This feature actually depends on "translation", there // is just no current way of properly detecting this... }; + +const Tool s_tools[] = { + { "create_drascula", true}, + { "create_hugo", true}, + { "create_kyradat", true}, + { "create_lure", true}, + { "create_mads", true}, + { "create_teenagent", true}, + { "create_toon", true}, + { "create_translations", true}, + { "qtable", true} +}; } // End of anonymous namespace FeatureList getAllFeatures() { @@ -832,6 +872,16 @@ bool setFeatureBuildState(const std::string &name, FeatureList &features, bool e } } +ToolList getAllTools() { + const size_t toolCount = sizeof(s_tools) / sizeof(s_tools[0]); + + ToolList tools; + for (size_t i = 0; i < toolCount; ++i) + tools.push_back(s_tools[i]); + + return tools; +} + namespace CreateProjectTool { ////////////////////////////////////////////////////////////////////////// @@ -1057,63 +1107,90 @@ ProjectProvider::ProjectProvider(StringList &global_warnings, std::map<std::stri } void ProjectProvider::createProject(const BuildSetup &setup) { - _uuidMap = createUUIDMap(setup); + if (setup.devTools) { + _uuidMap = createToolsUUIDMap(); - // We also need to add the UUID of the main project file. - const std::string svmUUID = _uuidMap[PROJECT_NAME] = createUUID(); + // We also need to add the UUID of the main project file. + const std::string svmUUID = _uuidMap[setup.projectName] = createUUID(); - // Create Solution/Workspace file - createWorkspace(setup); + createWorkspace(setup); - StringList in, ex; + StringList in, ex; - // Create engine project files - for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { - if (i->first == PROJECT_NAME) - continue; + // Create tools project files + for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { + if (i->first == setup.projectName) + continue; - in.clear(); ex.clear(); - const std::string moduleDir = setup.srcDir + "/engines/" + i->first; + in.clear(); ex.clear(); + const std::string moduleDir = setup.srcDir + "/devtools/" + i->first; - createModuleList(moduleDir, setup.defines, in, ex); - createProjectFile(i->first, i->second, setup, moduleDir, in, ex); - } + createModuleList(moduleDir, setup.defines, in, ex); + createProjectFile(i->first, i->second, setup, moduleDir, in, ex); + } + + // Create other misc. build files + createOtherBuildFiles(setup); - // Last but not least create the main project file. - in.clear(); ex.clear(); - - // File list for the Project file - createModuleList(setup.srcDir + "/backends", setup.defines, in, ex); - createModuleList(setup.srcDir + "/backends/platform/sdl", setup.defines, in, ex); - createModuleList(setup.srcDir + "/base", setup.defines, in, ex); - createModuleList(setup.srcDir + "/common", setup.defines, in, ex); - createModuleList(setup.srcDir + "/engines", setup.defines, in, ex); - createModuleList(setup.srcDir + "/graphics", setup.defines, in, ex); - createModuleList(setup.srcDir + "/gui", setup.defines, in, ex); - createModuleList(setup.srcDir + "/audio", setup.defines, in, ex); - createModuleList(setup.srcDir + "/audio/softsynth/mt32", setup.defines, in, ex); + } else { + _uuidMap = createUUIDMap(setup); + + // We also need to add the UUID of the main project file. + const std::string svmUUID = _uuidMap[setup.projectName] = createUUID(); + + // Create Solution/Workspace file + createWorkspace(setup); + + StringList in, ex; + + // Create engine project files + for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { + if (i->first == setup.projectName) + continue; + + in.clear(); ex.clear(); + const std::string moduleDir = setup.srcDir + "/engines/" + i->first; + + createModuleList(moduleDir, setup.defines, in, ex); + createProjectFile(i->first, i->second, setup, moduleDir, in, ex); + } + + // Last but not least create the main project file. + in.clear(); ex.clear(); + + // File list for the Project file + createModuleList(setup.srcDir + "/backends", setup.defines, in, ex); + createModuleList(setup.srcDir + "/backends/platform/sdl", setup.defines, in, ex); + createModuleList(setup.srcDir + "/base", setup.defines, in, ex); + createModuleList(setup.srcDir + "/common", setup.defines, in, ex); + createModuleList(setup.srcDir + "/engines", setup.defines, in, ex); + createModuleList(setup.srcDir + "/graphics", setup.defines, in, ex); + createModuleList(setup.srcDir + "/gui", setup.defines, in, ex); + createModuleList(setup.srcDir + "/audio", setup.defines, in, ex); + createModuleList(setup.srcDir + "/audio/softsynth/mt32", setup.defines, in, ex); #if HAS_VIDEO_FOLDER - createModuleList(setup.srcDir + "/video", setup.defines, in, ex); + createModuleList(setup.srcDir + "/video", setup.defines, in, ex); #endif - // Resource files - in.push_back(setup.srcDir + "/icons/" + PROJECT_NAME + ".ico"); - in.push_back(setup.srcDir + "/dists/" + PROJECT_NAME + ".rc"); + // Resource files + in.push_back(setup.srcDir + "/icons/" + setup.projectName + ".ico"); + in.push_back(setup.srcDir + "/dists/" + setup.projectName + ".rc"); - // Various text files - in.push_back(setup.srcDir + "/AUTHORS"); - in.push_back(setup.srcDir + "/COPYING"); - in.push_back(setup.srcDir + "/COPYING.LGPL"); - in.push_back(setup.srcDir + "/COPYRIGHT"); - in.push_back(setup.srcDir + "/NEWS"); - in.push_back(setup.srcDir + "/README"); - in.push_back(setup.srcDir + "/TODO"); + // Various text files + in.push_back(setup.srcDir + "/AUTHORS"); + in.push_back(setup.srcDir + "/COPYING"); + in.push_back(setup.srcDir + "/COPYING.LGPL"); + in.push_back(setup.srcDir + "/COPYRIGHT"); + in.push_back(setup.srcDir + "/NEWS"); + in.push_back(setup.srcDir + "/README"); + in.push_back(setup.srcDir + "/TODO"); - // Create the main project file. - createProjectFile(PROJECT_NAME, svmUUID, setup, setup.srcDir, in, ex); + // Create the main project file. + createProjectFile(setup.projectName, svmUUID, setup, setup.srcDir, in, ex); - // Create other misc. build files - createOtherBuildFiles(setup); + // Create other misc. build files + createOtherBuildFiles(setup); + } } ProjectProvider::UUIDMap ProjectProvider::createUUIDMap(const BuildSetup &setup) const { @@ -1129,6 +1206,20 @@ ProjectProvider::UUIDMap ProjectProvider::createUUIDMap(const BuildSetup &setup) return result; } +ProjectProvider::UUIDMap ProjectProvider::createToolsUUIDMap() const { + UUIDMap result; + + ToolList tools = getAllTools(); + for (ToolList::const_iterator i = tools.begin(); i != tools.end(); ++i) { + if (!i->enable) + continue; + + result[i->name] = createUUID(); + } + + return result; +} + std::string ProjectProvider::createUUID() const { #ifdef USE_WIN32_API UUID uuid; diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h index 9b9e4cfd1b..55e04be4ec 100644 --- a/devtools/create_project/create_project.h +++ b/devtools/create_project/create_project.h @@ -137,6 +137,12 @@ struct Feature { }; typedef std::list<Feature> FeatureList; +struct Tool { + const char *name; ///< Name of the tools + bool enable; ///< Whether the tools is enabled or not +}; +typedef std::list<Tool> ToolList; + /** * Creates a list of all features available for MSVC. * @@ -179,6 +185,9 @@ bool setFeatureBuildState(const std::string &name, FeatureList &features, bool e * It also contains the path to the project source root. */ struct BuildSetup { + std::string projectName; ///< Project name + std::string projectDescription; ///< Project description + std::string srcDir; ///< Path to the sources. std::string filePrefix; ///< Prefix for the relative path arguments in the project files. std::string outputDir; ///< Path where to put the MSVC project files. @@ -189,10 +198,12 @@ struct BuildSetup { StringList defines; ///< List of all defines for the build. StringList libraries; ///< List of all external libraries required for the build. + bool devTools; ///< Generate project files for the tools bool runBuildEvents; ///< Run build events as part of the build (generate revision number and copy engine/theme data & needed files to the build folder bool createInstaller; ///< Create NSIS installer after the build BuildSetup() { + devTools = false; runBuildEvents = false; createInstaller = false; } @@ -360,7 +371,7 @@ protected: * * @param output File stream to write to. */ - virtual void writeReferences(std::ofstream &) {}; + virtual void writeReferences(const BuildSetup &, std::ofstream &) {}; /** * Get the file extension for project files @@ -402,6 +413,14 @@ protected: UUIDMap createUUIDMap(const BuildSetup &setup) const; /** + * Creates an UUID for every enabled tool of the + * passed build description. + * + * @return A map, which includes UUIDs for all enabled engines. + */ + UUIDMap createToolsUUIDMap() const; + + /** * Creates an UUID and returns it in string representation. * * @return A new UUID as string. diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp index bdbc0a4074..f8768ecc73 100644 --- a/devtools/create_project/msbuild.cpp +++ b/devtools/create_project/msbuild.cpp @@ -58,9 +58,9 @@ inline void outputConfiguration(std::ostream &project, const std::string &config "\t\t</ProjectConfiguration>\n"; } -inline void outputConfigurationType(std::ostream &project, const std::string &name, const std::string &config) { +inline void outputConfigurationType(const BuildSetup &setup, std::ostream &project, const std::string &name, const std::string &config) { project << "\t<PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='" << config << "'\" Label=\"Configuration\">\n" - "\t\t<ConfigurationType>" << (name == PROJECT_NAME ? "Application" : "StaticLibrary") << "</ConfigurationType>\n" + "\t\t<ConfigurationType>" << ((name == setup.projectName || setup.devTools) ? "Application" : "StaticLibrary") << "</ConfigurationType>\n" "\t</PropertyGroup>\n"; } @@ -103,23 +103,23 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri // Shared configuration project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n"; - outputConfigurationType(project, name, "Release|Win32"); - outputConfigurationType(project, name, "Analysis|Win32"); - outputConfigurationType(project, name, "Debug|Win32"); - outputConfigurationType(project, name, "Release|x64"); - outputConfigurationType(project, name, "Analysis|x64"); - outputConfigurationType(project, name, "Debug|x64"); + outputConfigurationType(setup, project, name, "Release|Win32"); + outputConfigurationType(setup, project, name, "Analysis|Win32"); + outputConfigurationType(setup, project, name, "Debug|Win32"); + outputConfigurationType(setup, project, name, "Release|x64"); + outputConfigurationType(setup, project, name, "Analysis|x64"); + outputConfigurationType(setup, project, name, "Debug|x64"); project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n" "\t<ImportGroup Label=\"ExtensionSettings\">\n" "\t</ImportGroup>\n"; - outputProperties(project, "Release|Win32", PROJECT_DESCRIPTION "_Release.props"); - outputProperties(project, "Analysis|Win32", PROJECT_DESCRIPTION "_Analysis.props"); - outputProperties(project, "Debug|Win32", PROJECT_DESCRIPTION "_Debug.props"); - outputProperties(project, "Release|x64", PROJECT_DESCRIPTION "_Release64.props"); - outputProperties(project, "Analysis|x64", PROJECT_DESCRIPTION "_Analysis64.props"); - outputProperties(project, "Debug|x64", PROJECT_DESCRIPTION "_Debug64.props"); + outputProperties(project, "Release|Win32", setup.projectDescription + "_Release.props"); + outputProperties(project, "Analysis|Win32", setup.projectDescription + "_Analysis.props"); + outputProperties(project, "Debug|Win32", setup.projectDescription + "_Debug.props"); + outputProperties(project, "Release|x64", setup.projectDescription + "_Release64.props"); + outputProperties(project, "Analysis|x64", setup.projectDescription + "_Analysis64.props"); + outputProperties(project, "Debug|x64", setup.projectDescription + "_Debug64.props"); project << "\t<PropertyGroup Label=\"UserMacros\" />\n"; @@ -145,8 +145,8 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri addFilesToProject(moduleDir, project, includeList, excludeList, setup.filePrefix); // Output references for the main project - if (name == PROJECT_NAME) - writeReferences(project); + if (name == setup.projectName) + writeReferences(setup, project); project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n" "\t<ImportGroup Label=\"ExtensionTargets\">\n" @@ -213,11 +213,11 @@ void MSBuildProvider::outputFilter(std::ostream &filters, const FileEntries &fil } } -void MSBuildProvider::writeReferences(std::ofstream &output) { +void MSBuildProvider::writeReferences(const BuildSetup &setup, std::ofstream &output) { output << "\t<ItemGroup>\n"; for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { - if (i->first == PROJECT_NAME) + if (i->first == setup.projectName) continue; output << "\t<ProjectReference Include=\"" << i->first << ".vcxproj\">\n" @@ -235,7 +235,7 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s std::map<std::string, StringList>::iterator warningsIterator = _projectWarnings.find(name); // Nothing to add here, move along! - if (name != PROJECT_NAME && name != "sword25" && name != "tinsel" && name != "grim" && warningsIterator == _projectWarnings.end()) + if (!setup.devTools && name != setup.projectName && name != "sword25" && name != "tinsel" && name != "grim" && warningsIterator == _projectWarnings.end()) return; std::string warnings = ""; @@ -247,7 +247,7 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s "\t\t<ClCompile>\n"; // Compile configuration - if (name == PROJECT_NAME || name == "sword25" || name == "grim") { + if (setup.devTools || name == setup.projectName || name == "sword25" || name == "grim") { project << "\t\t\t<DisableLanguageExtensions>false</DisableLanguageExtensions>\n"; } else { if (name == "tinsel" && !isRelease) @@ -260,18 +260,18 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s project << "\t\t</ClCompile>\n"; // Link configuration for main project - if (name == PROJECT_NAME) { + if (name == setup.projectName || setup.devTools) { std::string libraries; for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i) libraries += *i + ".lib;"; project << "\t\t<Link>\n" - "\t\t\t<OutputFile>$(OutDir)" << PROJECT_NAME << ".exe</OutputFile>\n" + "\t\t\t<OutputFile>$(OutDir)" << (setup.devTools ? name : setup.projectName) << ".exe</OutputFile>\n" "\t\t\t<AdditionalDependencies>" << libraries << "%(AdditionalDependencies)</AdditionalDependencies>\n" "\t\t</Link>\n"; - if (setup.runBuildEvents) { + if (!setup.devTools && setup.runBuildEvents) { project << "\t\t<PreBuildEvent>\n" "\t\t\t<Message>Generate revision</Message>\n" "\t\t\t<Command>" << getPreBuildEvent() << "</Command>\n" @@ -288,7 +288,7 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s project << "\t</ItemDefinitionGroup>\n"; } -void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) { +void MSBuildProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) { std::string warnings; for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i) @@ -306,7 +306,7 @@ void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits, "<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n" "\t<PropertyGroup>\n" "\t\t<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n" - "\t\t<_PropertySheetDisplayName>" << PROJECT_DESCRIPTION << "_Global</_PropertySheetDisplayName>\n" + "\t\t<_PropertySheetDisplayName>" << setup.projectDescription << "_Global</_PropertySheetDisplayName>\n" "\t\t<ExecutablePath>$(" << LIBS_DEFINE << ")\\bin;$(ExecutablePath)</ExecutablePath>\n" "\t\t<LibraryPath>$(" << LIBS_DEFINE << ")\\lib\\" << (bits == 32 ? "x86" : "x64") << ";$(LibraryPath)</LibraryPath>\n" "\t\t<IncludePath>$(" << LIBS_DEFINE << ")\\include;$(IncludePath)</IncludePath>\n" @@ -319,7 +319,7 @@ void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits, "\t\t\t<DisableSpecificWarnings>" << warnings << ";%(DisableSpecificWarnings)</DisableSpecificWarnings>\n" "\t\t\t<AdditionalIncludeDirectories>$(" << LIBS_DEFINE << ")\\include;" << prefix << ";" << prefix << "\\engines;$(TargetDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n" "\t\t\t<PreprocessorDefinitions>" << definesList << "%(PreprocessorDefinitions)</PreprocessorDefinitions>\n" - "\t\t\t<ExceptionHandling></ExceptionHandling>\n"; + "\t\t\t<ExceptionHandling>" << (setup.devTools ? "Sync" : "") << "</ExceptionHandling>\n"; #if NEEDS_RTTI properties << "\t\t\t<RuntimeTypeInfo>true</RuntimeTypeInfo>\n"; @@ -333,9 +333,12 @@ void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits, "\t\t</ClCompile>\n" "\t\t<Link>\n" "\t\t\t<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>\n" - "\t\t\t<SubSystem>Console</SubSystem>\n" - "\t\t\t<EntryPointSymbol>WinMainCRTStartup</EntryPointSymbol>\n" - "\t\t</Link>\n" + "\t\t\t<SubSystem>Console</SubSystem>\n"; + + if (!setup.devTools) + properties << "\t\t\t<EntryPointSymbol>WinMainCRTStartup</EntryPointSymbol>\n"; + + properties << "\t\t</Link>\n" "\t\t<ResourceCompile>\n" "\t\t\t<AdditionalIncludeDirectories>" << prefix << ";%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n" "\t\t</ResourceCompile>\n" @@ -349,18 +352,18 @@ void MSBuildProvider::createBuildProp(const BuildSetup &setup, bool isRelease, b const std::string outputType = (enableAnalysis ? "Analysis" : (isRelease ? "Release" : "Debug")); const std::string outputBitness = (isWin32 ? "32" : "64"); - std::ofstream properties((setup.outputDir + '/' + PROJECT_DESCRIPTION "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension()).c_str()); + std::ofstream properties((setup.outputDir + '/' + setup.projectDescription + "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension()).c_str()); if (!properties) - error("Could not open \"" + setup.outputDir + '/' + PROJECT_DESCRIPTION "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension() + "\" for writing"); + error("Could not open \"" + setup.outputDir + '/' + setup.projectDescription + "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension() + "\" for writing"); properties << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" "<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n" "\t<ImportGroup Label=\"PropertySheets\">\n" - "\t\t<Import Project=\"" << PROJECT_DESCRIPTION << "_Global" << (isWin32 ? "" : "64") << ".props\" />\n" + "\t\t<Import Project=\"" << setup.projectDescription << "_Global" << (isWin32 ? "" : "64") << ".props\" />\n" "\t</ImportGroup>\n" "\t<PropertyGroup>\n" "\t\t<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\n" - "\t\t<_PropertySheetDisplayName>" << PROJECT_DESCRIPTION << "_" << outputType << outputBitness << "</_PropertySheetDisplayName>\n" + "\t\t<_PropertySheetDisplayName>" << setup.projectDescription << "_" << outputType << outputBitness << "</_PropertySheetDisplayName>\n" "\t\t<LinkIncremental>" << (isRelease ? "false" : "true") << "</LinkIncremental>\n" "\t</PropertyGroup>\n" "\t<ItemDefinitionGroup>\n" diff --git a/devtools/create_project/msbuild.h b/devtools/create_project/msbuild.h index 681c893d95..fa6667741a 100644 --- a/devtools/create_project/msbuild.h +++ b/devtools/create_project/msbuild.h @@ -40,9 +40,9 @@ protected: void writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation, const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix); - void writeReferences(std::ofstream &output); + void writeReferences(const BuildSetup &setup, std::ofstream &output); - void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents); + void outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents); void createBuildProp(const BuildSetup &setup, bool isRelease, bool isWin32, bool enableAnalysis); diff --git a/devtools/create_project/msvc.cpp b/devtools/create_project/msvc.cpp index aa347b1081..96eaf643d1 100644 --- a/devtools/create_project/msvc.cpp +++ b/devtools/create_project/msvc.cpp @@ -36,33 +36,36 @@ MSVCProvider::MSVCProvider(StringList &global_warnings, std::map<std::string, St } void MSVCProvider::createWorkspace(const BuildSetup &setup) { - UUIDMap::const_iterator svmUUID = _uuidMap.find(PROJECT_NAME); + UUIDMap::const_iterator svmUUID = _uuidMap.find(setup.projectName); if (svmUUID == _uuidMap.end()) - error("No UUID for \"" PROJECT_NAME "\" project created"); + error("No UUID for \"" + setup.projectName + "\" project created"); const std::string svmProjectUUID = svmUUID->second; assert(!svmProjectUUID.empty()); std::string solutionUUID = createUUID(); - std::ofstream solution((setup.outputDir + '/' + PROJECT_NAME ".sln").c_str()); + std::ofstream solution((setup.outputDir + '/' + setup.projectName + ".sln").c_str()); if (!solution) - error("Could not open \"" + setup.outputDir + '/' + PROJECT_NAME ".sln\" for writing"); + error("Could not open \"" + setup.outputDir + '/' + setup.projectName + ".sln\" for writing"); solution << "Microsoft Visual Studio Solution File, Format Version " << _version + 1 << ".00\n"; solution << "# Visual Studio " << getVisualStudioVersion() << "\n"; - solution << "Project(\"{" << solutionUUID << "}\") = \"" << PROJECT_NAME << "\", \"" << PROJECT_NAME << getProjectExtension() << "\", \"{" << svmProjectUUID << "}\"\n"; + // Write main project + if (!setup.devTools) { + solution << "Project(\"{" << solutionUUID << "}\") = \"" << setup.projectName << "\", \"" << setup.projectName << getProjectExtension() << "\", \"{" << svmProjectUUID << "}\"\n"; - // Project dependencies are moved to vcxproj files in Visual Studio 2010 - if (_version < 10) - writeReferences(solution); + // Project dependencies are moved to vcxproj files in Visual Studio 2010 + if (_version < 10) + writeReferences(setup, solution); - solution << "EndProject\n"; + solution << "EndProject\n"; + } // Note we assume that the UUID map only includes UUIDs for enabled engines! for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { - if (i->first == PROJECT_NAME) + if (i->first == setup.projectName) continue; solution << "Project(\"{" << solutionUUID << "}\") = \"" << i->first << "\", \"" << i->first << getProjectExtension() << "\", \"{" << i->second << "}\"\n" @@ -117,16 +120,16 @@ void MSVCProvider::createOtherBuildFiles(const BuildSetup &setup) { } void MSVCProvider::createGlobalProp(const BuildSetup &setup) { - std::ofstream properties((setup.outputDir + '/' + PROJECT_DESCRIPTION "_Global" + getPropertiesExtension()).c_str()); + std::ofstream properties((setup.outputDir + '/' + setup.projectDescription + "_Global" + getPropertiesExtension()).c_str()); if (!properties) - error("Could not open \"" + setup.outputDir + '/' + PROJECT_DESCRIPTION "_Global" + getPropertiesExtension() + "\" for writing"); + error("Could not open \"" + setup.outputDir + '/' + setup.projectDescription + "_Global" + getPropertiesExtension() + "\" for writing"); - outputGlobalPropFile(properties, 32, setup.defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents); + outputGlobalPropFile(setup, properties, 32, setup.defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents); properties.close(); - properties.open((setup.outputDir + '/' + PROJECT_DESCRIPTION "_Global64" + getPropertiesExtension()).c_str()); + properties.open((setup.outputDir + '/' + setup.projectDescription + "_Global64" + getPropertiesExtension()).c_str()); if (!properties) - error("Could not open \"" + setup.outputDir + '/' + PROJECT_DESCRIPTION "_Global64" + getPropertiesExtension() + "\" for writing"); + error("Could not open \"" + setup.outputDir + '/' + setup.projectDescription + "_Global64" + getPropertiesExtension() + "\" for writing"); // HACK: We must disable the "nasm" feature for x64. To achieve that we must duplicate the feature list and // recreate a define list. @@ -140,7 +143,7 @@ void MSVCProvider::createGlobalProp(const BuildSetup &setup) { x64Defines.push_back("WIN32"); x64Defines.push_back("SDL_BACKEND"); - outputGlobalPropFile(properties, 64, x64Defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents); + outputGlobalPropFile(setup, properties, 64, x64Defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents); } std::string MSVCProvider::getPreBuildEvent() const { diff --git a/devtools/create_project/msvc.h b/devtools/create_project/msvc.h index ead4bf949a..0a994667fa 100644 --- a/devtools/create_project/msvc.h +++ b/devtools/create_project/msvc.h @@ -58,7 +58,7 @@ protected: * @param prefix File prefix, used to add additional include paths. * @param runBuildEvents true if generating a revision number, false otherwise */ - virtual void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) = 0; + virtual void outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) = 0; /** * Generates the project properties for debug and release settings. diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp index b4c2b46ba4..a0fd239db4 100644 --- a/devtools/create_project/visualstudio.cpp +++ b/devtools/create_project/visualstudio.cpp @@ -83,7 +83,7 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std: // Check for project-specific warnings: std::map< std::string, std::list<std::string> >::iterator warningsIterator = _projectWarnings.find(name); - if (name == PROJECT_NAME) { + if (setup.devTools || name == setup.projectName) { std::string libraries; for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i) @@ -115,12 +115,12 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std: toolConfig += (name == "grim" ? "DisableLanguageExtensions=\"false\" " : ""); // Win32 - outputConfiguration(project, toolConfig, "Debug", "Win32", ""); - outputConfiguration(project, toolConfig, "Analysis", "Win32", ""); - outputConfiguration(project, toolConfig, "Release", "Win32", ""); - outputConfiguration(project, toolConfig, "Debug", "x64", "64"); - outputConfiguration(project, toolConfig, "Analysis", "x64", "64"); - outputConfiguration(project, toolConfig, "Release", "x64", "64"); + outputConfiguration(setup, project, toolConfig, "Debug", "Win32", ""); + outputConfiguration(setup, project, toolConfig, "Analysis", "Win32", ""); + outputConfiguration(setup, project, toolConfig, "Release", "Win32", ""); + outputConfiguration(setup, project, toolConfig, "Debug", "x64", "64"); + outputConfiguration(setup, project, toolConfig, "Analysis", "x64", "64"); + outputConfiguration(setup, project, toolConfig, "Release", "x64", "64"); } project << "\t</Configurations>\n" @@ -143,23 +143,23 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std: } void VisualStudioProvider::outputConfiguration(std::ostream &project, const BuildSetup &setup, const std::string &libraries, const std::string &config, const std::string &platform, const std::string &props, const bool isWin32) { - project << "\t\t<Configuration Name=\"" << config << "|" << platform << "\" ConfigurationType=\"1\" InheritedPropertySheets=\".\\" << PROJECT_DESCRIPTION << "_" << config << props << ".vsprops\">\n" + project << "\t\t<Configuration Name=\"" << config << "|" << platform << "\" ConfigurationType=\"1\" InheritedPropertySheets=\".\\" << setup.projectDescription << "_" << config << props << ".vsprops\">\n" "\t\t\t<Tool\tName=\"VCCLCompilerTool\" DisableLanguageExtensions=\"false\" />\n" - "\t\t\t<Tool\tName=\"VCLinkerTool\" OutputFile=\"$(OutDir)/" << PROJECT_NAME << ".exe\"\n" + "\t\t\t<Tool\tName=\"VCLinkerTool\" OutputFile=\"$(OutDir)/" << setup.projectName << ".exe\"\n" "\t\t\t\tAdditionalDependencies=\"" << libraries << "\"\n" "\t\t\t/>\n"; outputBuildEvents(project, setup, isWin32); project << "\t\t</Configuration>\n"; } -void VisualStudioProvider::outputConfiguration(std::ostream &project, const std::string &toolConfig, const std::string &config, const std::string &platform, const std::string &props) { - project << "\t\t<Configuration Name=\"" << config << "|" << platform << "\" ConfigurationType=\"4\" InheritedPropertySheets=\".\\" << PROJECT_DESCRIPTION << "_" << config << props << ".vsprops\">\n" +void VisualStudioProvider::outputConfiguration(const BuildSetup &setup, std::ostream &project, const std::string &toolConfig, const std::string &config, const std::string &platform, const std::string &props) { + project << "\t\t<Configuration Name=\"" << config << "|" << platform << "\" ConfigurationType=\"4\" InheritedPropertySheets=\".\\" << setup.projectDescription << "_" << config << props << ".vsprops\">\n" "\t\t\t<Tool Name=\"VCCLCompilerTool\" "<< toolConfig << "/>\n" "\t\t</Configuration>\n"; } void VisualStudioProvider::outputBuildEvents(std::ostream &project, const BuildSetup &setup, const bool isWin32) { - if (setup.runBuildEvents) { + if (!setup.devTools && setup.runBuildEvents) { project << "\t\t\t<Tool\tName=\"VCPreBuildEventTool\"\n" "\t\t\t\tCommandLine=\"" << getPreBuildEvent() << "\"\n" "\t\t\t/>\n" @@ -169,11 +169,11 @@ void VisualStudioProvider::outputBuildEvents(std::ostream &project, const BuildS } } -void VisualStudioProvider::writeReferences(std::ofstream &output) { +void VisualStudioProvider::writeReferences(const BuildSetup &setup, std::ofstream &output) { output << "\tProjectSection(ProjectDependencies) = postProject\n"; for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { - if (i->first == PROJECT_NAME) + if (i->first == setup.projectName) continue; output << "\t\t{" << i->second << "} = {" << i->second << "}\n"; @@ -182,7 +182,7 @@ void VisualStudioProvider::writeReferences(std::ofstream &output) { output << "\tEndProjectSection\n"; } -void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) { +void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) { std::string warnings; for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i) warnings += *i + ';'; @@ -202,17 +202,17 @@ void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int b "<VisualStudioPropertySheet\n" "\tProjectType=\"Visual C++\"\n" "\tVersion=\"8.00\"\n" - "\tName=\"" << PROJECT_DESCRIPTION << "_Global\"\n" + "\tName=\"" << setup.projectDescription << "_Global\"\n" "\tOutputDirectory=\"$(ConfigurationName)" << bits << "\"\n" "\tIntermediateDirectory=\"$(ConfigurationName)" << bits << "/$(ProjectName)\"\n" "\t>\n" "\t<Tool\n" "\t\tName=\"VCCLCompilerTool\"\n" - "\t\tDisableLanguageExtensions=\"true\"\n" + "\t\tDisableLanguageExtensions=\"" << (setup.devTools ? "false" : "true") << "\"\n" "\t\tDisableSpecificWarnings=\"" << warnings << "\"\n" "\t\tAdditionalIncludeDirectories=\"" << prefix << ";" << prefix << "\\engines;$(" << LIBS_DEFINE << ")\\include;$(TargetDir)\"\n" "\t\tPreprocessorDefinitions=\"" << definesList << "\"\n" - "\t\tExceptionHandling=\"0\"\n"; + "\t\tExceptionHandling=\"" << (setup.devTools ? "1" : "0") << "\"\n"; #if NEEDS_RTTI properties << "\t\tRuntimeTypeInfo=\"true\"\n"; @@ -231,9 +231,12 @@ void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int b "\t<Tool\n" "\t\tName=\"VCLinkerTool\"\n" "\t\tIgnoreDefaultLibraryNames=\"\"\n" - "\t\tSubSystem=\"1\"\n" - "\t\tEntryPointSymbol=\"WinMainCRTStartup\"\n" - "\t\tAdditionalLibraryDirectories=\"$(" << LIBS_DEFINE << ")\\lib\\" << ((bits == 32) ? "x86" : "x64") << "\"\n" + "\t\tSubSystem=\"1\"\n"; + + if (!setup.devTools) + properties << "\t\tEntryPointSymbol=\"WinMainCRTStartup\"\n"; + + properties << "\t\tAdditionalLibraryDirectories=\"$(" << LIBS_DEFINE << ")\\lib\\" << ((bits == 32) ? "x86" : "x64") << "\"\n" "\t/>\n" "\t<Tool\n" "\t\tName=\"VCResourceCompilerTool\"\n" @@ -248,16 +251,16 @@ void VisualStudioProvider::createBuildProp(const BuildSetup &setup, bool isRelea const std::string outputType = (enableAnalysis ? "Analysis" : (isRelease ? "Release" : "Debug")); const std::string outputBitness = (isWin32 ? "32" : "64"); - std::ofstream properties((setup.outputDir + '/' + PROJECT_DESCRIPTION "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension()).c_str()); + std::ofstream properties((setup.outputDir + '/' + setup.projectDescription + "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension()).c_str()); if (!properties) - error("Could not open \"" + setup.outputDir + '/' + PROJECT_DESCRIPTION "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension() + "\" for writing"); + error("Could not open \"" + setup.outputDir + '/' + setup.projectDescription + "_" + outputType + (isWin32 ? "" : "64") + getPropertiesExtension() + "\" for writing"); properties << "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n" "<VisualStudioPropertySheet\n" "\tProjectType=\"Visual C++\"\n" "\tVersion=\"8.00\"\n" - "\tName=\"" << PROJECT_DESCRIPTION << "_" << outputType << outputBitness << "\"\n" - "\tInheritedPropertySheets=\".\\" << PROJECT_DESCRIPTION << "_Global" << (isWin32 ? "" : "64") << ".vsprops\"\n" + "\tName=\"" << setup.projectDescription << "_" << outputType << outputBitness << "\"\n" + "\tInheritedPropertySheets=\".\\" << setup.projectDescription << "_Global" << (isWin32 ? "" : "64") << ".vsprops\"\n" "\t>\n" "\t<Tool\n" "\t\tName=\"VCCLCompilerTool\"\n"; diff --git a/devtools/create_project/visualstudio.h b/devtools/create_project/visualstudio.h index dad923e49c..845550139c 100644 --- a/devtools/create_project/visualstudio.h +++ b/devtools/create_project/visualstudio.h @@ -38,9 +38,9 @@ protected: void writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation, const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix); - void writeReferences(std::ofstream &output); + void writeReferences(const BuildSetup &setup, std::ofstream &output); - void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents); + void outputGlobalPropFile(const BuildSetup &setup, std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents); void createBuildProp(const BuildSetup &setup, bool isRelease, bool isWin32, bool enableAnalysis); @@ -49,7 +49,7 @@ protected: int getVisualStudioVersion(); void outputConfiguration(std::ostream &project, const BuildSetup &setup, const std::string &libraries, const std::string &config, const std::string &platform, const std::string &props, const bool isWin32); - void outputConfiguration(std::ostream &project, const std::string &toolConfig, const std::string &config, const std::string &platform, const std::string &props); + void outputConfiguration(const BuildSetup &setup, std::ostream &project, const std::string &toolConfig, const std::string &config, const std::string &platform, const std::string &props); void outputBuildEvents(std::ostream &project, const BuildSetup &setup, const bool isWin32); }; diff --git a/devtools/create_toon/dists/msvc9/create_toon.sln b/devtools/create_toon/dists/msvc9/create_toon.sln deleted file mode 100644 index e9c3750590..0000000000 --- a/devtools/create_toon/dists/msvc9/create_toon.sln +++ /dev/null @@ -1,20 +0,0 @@ -ďťż -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_toon", "create_toon.vcproj", "{5F280130-349D-11DD-AE16-0800200C9A66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32 - {5F280130-349D-11DD-AE16-0800200C9A66}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/devtools/create_toon/dists/msvc9/create_toon.vcproj b/devtools/create_toon/dists/msvc9/create_toon.vcproj deleted file mode 100644 index f860b8b201..0000000000 --- a/devtools/create_toon/dists/msvc9/create_toon.vcproj +++ /dev/null @@ -1,187 +0,0 @@ -<?xml version="1.0" encoding="windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9.00" - Name="create_toon" - ProjectGUID="{5F280130-349D-11DD-AE16-0800200C9A66}" - RootNamespace="create_toon" - Keyword="Win32Proj" - TargetFrameworkVersion="131072" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="0" - AdditionalIncludeDirectories="..\..\..\.." - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_toon.exe" - LinkIncremental="2" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/create_toon.pdb" - SubSystem="1" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" - ConfigurationType="1" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalOptions="/wd4996" - Optimization="3" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/create_toon.exe" - LinkIncremental="1" - IgnoreDefaultLibraryNames="libc.lib;libcmt.lib" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath="..\..\create_toon.cpp" - > - </File> - <File - RelativePath="..\..\create_toon.h" - > - </File> - <File - RelativePath="..\..\staticdata.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/devtools/skycpt/AsciiCptCompile.sln b/devtools/skycpt/AsciiCptCompile.sln deleted file mode 100644 index 93de755bf3..0000000000 --- a/devtools/skycpt/AsciiCptCompile.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AsciiCptCompile", "AsciiCptCompile.vcproj", "{BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}.Debug.ActiveCfg = Debug|Win32 - {BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}.Debug.Build.0 = Debug|Win32 - {BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}.Release.ActiveCfg = Release|Win32 - {BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/devtools/skycpt/AsciiCptCompile.vcproj b/devtools/skycpt/AsciiCptCompile.vcproj deleted file mode 100644 index e6a5def316..0000000000 --- a/devtools/skycpt/AsciiCptCompile.vcproj +++ /dev/null @@ -1,402 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="7.10" - Name="AsciiCptCompile" - ProjectGUID="{BDAC73AF-42DE-45E7-95A8-C1D906AD19EF}" - Keyword="Win32Proj"> - <Platforms> - <Platform - Name="Win32"/> - </Platforms> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" - ConfigurationType="1" - CharacterSet="2"> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="TRUE" - BasicRuntimeChecks="3" - RuntimeLibrary="5" - UsePrecompiledHeader="3" - WarningLevel="3" - Detect64BitPortabilityProblems="TRUE" - DebugInformationFormat="4"/> - <Tool - Name="VCCustomBuildTool"/> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/AsciiCptCompile.exe" - LinkIncremental="2" - GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/AsciiCptCompile.pdb" - SubSystem="1" - TargetMachine="1"/> - <Tool - Name="VCMIDLTool"/> - <Tool - Name="VCPostBuildEventTool"/> - <Tool - Name="VCPreBuildEventTool"/> - <Tool - Name="VCPreLinkEventTool"/> - <Tool - Name="VCResourceCompilerTool"/> - <Tool - Name="VCWebServiceProxyGeneratorTool"/> - <Tool - Name="VCXMLDataGeneratorTool"/> - <Tool - Name="VCWebDeploymentTool"/> - <Tool - Name="VCManagedWrapperGeneratorTool"/> - <Tool - Name="VCAuxiliaryManagedWrapperGeneratorTool"/> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" - ConfigurationType="1" - CharacterSet="2"> - <Tool - Name="VCCLCompilerTool" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - RuntimeLibrary="4" - UsePrecompiledHeader="3" - WarningLevel="3" - Detect64BitPortabilityProblems="TRUE" - DebugInformationFormat="3"/> - <Tool - Name="VCCustomBuildTool"/> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)/AsciiCptCompile.exe" - LinkIncremental="1" - GenerateDebugInformation="TRUE" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1"/> - <Tool - Name="VCMIDLTool"/> - <Tool - Name="VCPostBuildEventTool"/> - <Tool - Name="VCPreBuildEventTool"/> - <Tool - Name="VCPreLinkEventTool"/> - <Tool - Name="VCResourceCompilerTool"/> - <Tool - Name="VCWebServiceProxyGeneratorTool"/> - <Tool - Name="VCXMLDataGeneratorTool"/> - <Tool - Name="VCWebDeploymentTool"/> - <Tool - Name="VCManagedWrapperGeneratorTool"/> - <Tool - Name="VCAuxiliaryManagedWrapperGeneratorTool"/> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <Filter - Name="Quelldateien" - Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" - UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> - <File - RelativePath=".\AsciiCptCompile.cpp"> - </File> - <File - RelativePath=".\cptcompiler.cpp"> - </File> - <File - RelativePath=".\cpthelp.cpp"> - </File> - <File - RelativePath=".\idFinder.cpp"> - </File> - <File - RelativePath=".\KmpSearch.cpp"> - </File> - <File - RelativePath=".\stdafx.cpp"> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCLCompilerTool" - UsePrecompiledHeader="1"/> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCLCompilerTool" - UsePrecompiledHeader="1"/> - </FileConfiguration> - </File> - <File - RelativePath=".\TextFile.cpp"> - </File> - </Filter> - <Filter - Name="Headerdateien" - Filter="h;hpp;hxx;hm;inl;inc;xsd" - UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> - <File - RelativePath=".\cpthelp.h"> - </File> - <File - RelativePath=".\KmpSearch.h"> - </File> - <File - RelativePath=".\stdafx.h"> - </File> - <File - RelativePath=".\TextFile.h"> - </File> - </Filter> - <Filter - Name="Ressourcendateien" - Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" - UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> - <File - RelativePath=".\asmSrc\0compact.inc"> - </File> - <File - RelativePath=".\asmSrc\101comp.inc"> - </File> - <File - RelativePath=".\asmSrc\102comp.inc"> - </File> - <File - RelativePath=".\asmSrc\10comp.inc"> - </File> - <File - RelativePath=".\asmSrc\11comp.inc"> - </File> - <File - RelativePath=".\asmSrc\12comp.inc"> - </File> - <File - RelativePath=".\asmSrc\13comp.inc"> - </File> - <File - RelativePath=".\asmSrc\14comp.inc"> - </File> - <File - RelativePath=".\asmSrc\15comp.inc"> - </File> - <File - RelativePath=".\asmSrc\16comp.inc"> - </File> - <File - RelativePath=".\asmSrc\17comp.inc"> - </File> - <File - RelativePath=".\asmSrc\18comp.inc"> - </File> - <File - RelativePath=".\asmSrc\19comp.inc"> - </File> - <File - RelativePath=".\asmSrc\1compact.inc"> - </File> - <File - RelativePath=".\asmSrc\20comp.inc"> - </File> - <File - RelativePath=".\asmSrc\21comp.inc"> - </File> - <File - RelativePath=".\asmSrc\22comp.inc"> - </File> - <File - RelativePath=".\asmSrc\23comp.inc"> - </File> - <File - RelativePath=".\asmSrc\24comp.inc"> - </File> - <File - RelativePath=".\asmSrc\25comp.inc"> - </File> - <File - RelativePath=".\asmSrc\26comp.inc"> - </File> - <File - RelativePath=".\asmSrc\27comp.inc"> - </File> - <File - RelativePath=".\288diff.txt"> - </File> - <File - RelativePath=".\asmSrc\28comp.inc"> - </File> - <File - RelativePath=".\asmSrc\29comp.inc"> - </File> - <File - RelativePath=".\asmSrc\2compact.inc"> - </File> - <File - RelativePath=".\asmSrc\30comp.inc"> - </File> - <File - RelativePath=".\asmSrc\31comp.inc"> - </File> - <File - RelativePath=".\asmSrc\32comp.inc"> - </File> - <File - RelativePath=".\asmSrc\33comp.inc"> - </File> - <File - RelativePath=".\asmSrc\34comp.inc"> - </File> - <File - RelativePath=".\asmSrc\36comp.inc"> - </File> - <File - RelativePath=".\asmSrc\37comp.inc"> - </File> - <File - RelativePath=".\asmSrc\38comp.inc"> - </File> - <File - RelativePath=".\asmSrc\39comp.inc"> - </File> - <File - RelativePath=".\asmSrc\3compact.inc"> - </File> - <File - RelativePath=".\asmSrc\40comp.inc"> - </File> - <File - RelativePath=".\asmSrc\41comp.inc"> - </File> - <File - RelativePath=".\asmSrc\42comp.inc"> - </File> - <File - RelativePath=".\asmSrc\44comp.inc"> - </File> - <File - RelativePath=".\asmSrc\45comp.inc"> - </File> - <File - RelativePath=".\asmSrc\46comp.inc"> - </File> - <File - RelativePath=".\asmSrc\47comp.inc"> - </File> - <File - RelativePath=".\asmSrc\48comp.inc"> - </File> - <File - RelativePath=".\asmSrc\4compact.inc"> - </File> - <File - RelativePath=".\asmSrc\5compact.inc"> - </File> - <File - RelativePath=".\asmSrc\65comp.inc"> - </File> - <File - RelativePath=".\asmSrc\66comp.inc"> - </File> - <File - RelativePath=".\asmSrc\67comp.inc"> - </File> - <File - RelativePath=".\asmSrc\68comp.inc"> - </File> - <File - RelativePath=".\asmSrc\69comp.inc"> - </File> - <File - RelativePath=".\asmSrc\70comp.inc"> - </File> - <File - RelativePath=".\asmSrc\71comp.inc"> - </File> - <File - RelativePath=".\asmSrc\72comp.inc"> - </File> - <File - RelativePath=".\asmSrc\73comp.inc"> - </File> - <File - RelativePath=".\asmSrc\74comp.inc"> - </File> - <File - RelativePath=".\asmSrc\75comp.inc"> - </File> - <File - RelativePath=".\asmSrc\76comp.inc"> - </File> - <File - RelativePath=".\asmSrc\77comp.inc"> - </File> - <File - RelativePath=".\asmSrc\78comp.inc"> - </File> - <File - RelativePath=".\asmSrc\79comp.inc"> - </File> - <File - RelativePath=".\asmSrc\80comp.inc"> - </File> - <File - RelativePath=".\asmSrc\81comp.inc"> - </File> - <File - RelativePath=".\asmSrc\82comp.inc"> - </File> - <File - RelativePath=".\asmSrc\85comp.inc"> - </File> - <File - RelativePath=".\asmSrc\90comp.inc"> - </File> - <File - RelativePath=".\asmSrc\91comp.inc"> - </File> - <File - RelativePath=".\asmSrc\92comp.inc"> - </File> - <File - RelativePath=".\asmSrc\93comp.inc"> - </File> - <File - RelativePath=".\asmSrc\94comp.inc"> - </File> - <File - RelativePath=".\asmSrc\95comp.inc"> - </File> - <File - RelativePath=".\asmSrc\96comp.inc"> - </File> - <File - RelativePath=".\asmSrc\9compact.inc"> - </File> - <File - RelativePath=".\COMPACT.TXT"> - </File> - <File - RelativePath=".\savedata.txt"> - </File> - </Filter> - <File - RelativePath=".\ReadMe.txt"> - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/devtools/tasmrecover/dreamweb/object.asm b/devtools/tasmrecover/dreamweb/object.asm index e6f8037579..807a100052 100644 --- a/devtools/tasmrecover/dreamweb/object.asm +++ b/devtools/tasmrecover/dreamweb/object.asm @@ -336,11 +336,16 @@ waitexam: ;call delpointer jz notuseinv mov bx,offset cs:withlist1 notuseinv: call checkcoords + + cmp quitrequested, 0 + jnz stopwaiting + cmp examagain,0 jz norex jmp examineagain norex: cmp getback,0 jz waitexam +stopwaiting: mov pickup,0 cmp watchingtime,0 diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index 8e37b4e851..e8921055e4 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -51,6 +51,7 @@ generator = cpp(context, "DreamGen", blacklist = [ 'printchar', 'printdirect', 'printslow', + 'printmessage', 'usetimedtext', 'dumptimedtext', 'setuptimedtemp', @@ -107,6 +108,7 @@ generator = cpp(context, "DreamGen", blacklist = [ 'doblocks', 'checkifperson', 'checkiffree', + 'checkifex', 'getreelstart', 'findobname', 'copyname', @@ -142,9 +144,59 @@ generator = cpp(context, "DreamGen", blacklist = [ 'placesetobject', 'removesetobject', 'showallfree', + 'showallex', 'adjustlen', 'finishedwalking', 'checkone', + 'getblockofpixel', + 'getflagunderp', + 'walkandexamine', + 'obname', + 'delpointer', + 'showblink', + 'dumpblink', + 'dumppointer', + 'showpointer', + 'animpointer', + 'checkcoords', + 'readmouse', + 'readmouse1', + 'readmouse2', + 'readmouse3', + 'readmouse4', + 'waitframes', + 'drawflags', + 'addtopeoplelist', + 'getexpos', + 'paneltomap', + 'maptopanel', + 'dumpmap', + 'obpicture', + 'delthisone', + 'transferinv', + 'obicons', + 'compare', + 'pixelcheckset', + 'turnpathon', + 'turnpathoff', + 'turnanypathon', + 'turnanypathoff', + 'isitdescribed', + 'checkifset', + 'checkifpathison', + 'delsprite', + 'dumpeverything', + 'isitworn', + 'makeworn', + 'obtoinv', + 'showryanpage', + 'findallryan', + 'fillryan', + 'useroutine', + 'hangon', + 'hangonp', + 'findnextcolon', + 'usetext', ], skip_output = [ # These functions are processed but not output 'dreamweb', diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py index d2b860ddf5..61edb41fb2 100644 --- a/devtools/tasmrecover/tasm/cpp.py +++ b/devtools/tasmrecover/tasm/cpp.py @@ -584,11 +584,17 @@ namespace %s { data_bin = self.data_seg data_impl = "\n\tstatic const uint8 src[] = {\n\t\t" n = 0 + comment = str() for v in data_bin: data_impl += "0x%02x, " %v n += 1 + + comment += chr(v) if (v >= 0x20 and v < 0x7f and v != ord('\\')) else "." if (n & 0xf) == 0: - data_impl += "\n\t\t" + data_impl += "\n\t\t//0x%04x: %s\n\t\t" %(n - 16, comment) + comment = str() + elif (n & 0x3) == 0: + comment += " " data_impl += "};\n\tds.assign(src, src + sizeof(src));\n" self.hd.write( """\n#include "dreamweb/runtime.h" diff --git a/dists/msvc10/create_msvc10.bat b/dists/msvc10/create_msvc10.bat index f915d5d366..5616c2cc8b 100644 --- a/dists/msvc10/create_msvc10.bat +++ b/dists/msvc10/create_msvc10.bat @@ -8,6 +8,8 @@ if "%~1"=="/stable" goto stable if "%~1"=="/STABLE" goto stable if "%~1"=="/all" goto all if "%~1"=="/ALL" goto all +if "%~1"=="/tools" goto tools +if "%~1"=="/TOOLS" goto tools if "%~1"=="/clean" goto clean_check if "%~1"=="/CLEAN" goto clean_check if "%~1"=="/help" goto command_help @@ -23,6 +25,7 @@ echo. echo Valid command parameters are: echo stable Generated stable engines project files echo all Generate all engines project files +echo tools Generate project files for the devtools echo clean Clean generated project files echo help Show help message goto done @@ -60,6 +63,13 @@ echo. create_project ..\.. --msvc --msvc-version 10 goto done +:tools +echo. +echo Creating tools project files +echo. +create_project ..\.. --tools --msvc --msvc-version 10 +goto done + :clean_check echo. set cleananswer=N @@ -77,6 +87,7 @@ del /Q *.vcxproj* > NUL 2>&1 del /Q *.props > NUL 2>&1 del /Q *.sln* > NUL 2>&1 del /Q scummvm* > NUL 2>&1 +del /Q devtools* > NUL 2>&1 goto done :done diff --git a/dists/msvc8/create_msvc8.bat b/dists/msvc8/create_msvc8.bat index beb2eaf0d7..2261c9bcec 100644 --- a/dists/msvc8/create_msvc8.bat +++ b/dists/msvc8/create_msvc8.bat @@ -8,6 +8,8 @@ if "%~1"=="/stable" goto stable if "%~1"=="/STABLE" goto stable if "%~1"=="/all" goto all if "%~1"=="/ALL" goto all +if "%~1"=="/tools" goto tools +if "%~1"=="/TOOLS" goto tools if "%~1"=="/clean" goto clean_check if "%~1"=="/CLEAN" goto clean_check if "%~1"=="/help" goto command_help @@ -23,6 +25,7 @@ echo. echo Valid command parameters are: echo stable Generated stable engines project files echo all Generate all engines project files +echo tools Generate project files for the devtools echo clean Clean generated project files echo help Show help message goto done @@ -60,6 +63,13 @@ echo. create_project ..\.. --msvc --msvc-version 8 goto done +:tools +echo. +echo Creating tools project files +echo. +create_project ..\.. --tools --msvc --msvc-version 8 +goto done + :clean_check echo. set cleananswer=N @@ -77,6 +87,7 @@ del /Q *.vcproj* > NUL 2>&1 del /Q *.vsprops > NUL 2>&1 del /Q *.sln* > NUL 2>&1 del /Q scummvm* > NUL 2>&1 +del /Q devtools* > NUL 2>&1 goto done :done diff --git a/dists/msvc9/create_msvc9.bat b/dists/msvc9/create_msvc9.bat index 880af95312..1622cd9037 100644 --- a/dists/msvc9/create_msvc9.bat +++ b/dists/msvc9/create_msvc9.bat @@ -8,6 +8,8 @@ if "%~1"=="/stable" goto stable if "%~1"=="/STABLE" goto stable if "%~1"=="/all" goto all if "%~1"=="/ALL" goto all +if "%~1"=="/tools" goto tools +if "%~1"=="/TOOLS" goto tools if "%~1"=="/clean" goto clean_check if "%~1"=="/CLEAN" goto clean_check if "%~1"=="/help" goto command_help @@ -23,6 +25,7 @@ echo. echo Valid command parameters are: echo stable Generated stable engines project files echo all Generate all engines project files +echo tools Generate project files for the devtools echo clean Clean generated project files echo help Show help message goto done @@ -60,6 +63,13 @@ echo. create_project ..\.. --msvc --msvc-version 9 goto done +:tools +echo. +echo Creating tools project files +echo. +create_project ..\.. --tools --msvc --msvc-version 9 +goto done + :clean_check echo. set cleananswer=N @@ -77,6 +87,7 @@ del /Q *.vcproj* > NUL 2>&1 del /Q *.vsprops > NUL 2>&1 del /Q *.sln* > NUL 2>&1 del /Q scummvm* > NUL 2>&1 +del /Q devtools* > NUL 2>&1 goto done :done diff --git a/doc/de/Liesmich b/doc/de/Liesmich index 88e10b51bc..02cc262f89 100644 --- a/doc/de/Liesmich +++ b/doc/de/Liesmich @@ -1,11 +1,6 @@ ScummVM - Liesmich-Datei ------------------------------------------------------------------------ -Dieses Dokument ist grĂśĂtenteils eine Ăbersetzung der englischen README-Datei. -Das Original-Dokument ist womĂśglich aktueller. Sollten Sie hier also nicht das -finden, was Sie benĂśtigen und ein wenig Englisch kĂśnnen, sollten Sie sich die -englische README-Datei ansehen. - FĂźr weitere Informationen, Kompatibilitätslisten, Einzelheiten zu Spenden, die neusten verĂśffentlichten Versionen, Fortschrittsberichte und mehr besuchen Sie bitte die ScummVM-Website unter der Adresse: http://www.scummvm.org/ @@ -37,7 +32,7 @@ Inhaltsverzeichnis: * 3.16 Hinweise zu Mickey's Space Adventure * 3.17 Hinweise zu Winnie the Pooh * 3.18 Hinweise zu Troll's Tale - * 3.19 Hinweise zu Draci Historie + * 3.19 Hinweise zu DraÄi Historie * 3.20 Bekannte Probleme 4.0) UnterstĂźtzte Plattformen 5.0) ScummVM verwenden @@ -300,7 +295,7 @@ Andere Spiele: Cruise for a Corpse [cruise] Discworld [dw] Discworld 2: Vermutlich vermisst [dw2] - Draci Historie [draci] + DraÄi Historie [draci] Drascula: The Vampire Strikes Back [drascula] Flight of the Amazon Queen [queen] Future Wars [fw] @@ -831,7 +826,7 @@ notwendig ist, die Inhalte dieser Diskette in einer Abbild-Datei auszugeben und diese âtroll.imgâ zu nennen, um das Spiel unter ScummVM spielen zu kĂśnnen. -3.19) Hinweise zu Draci Historie: +3.19) Hinweise zu DraÄi Historie: ----- --------------------------- Es gibt vier Sprachvarianten des Spiels: Tschechisch, Deutsch, Englisch und Polnisch. Jede von ihnen wird in einem gesonderten Archiv bereitgestellt. Die @@ -1283,10 +1278,9 @@ zwischen SCUMM-Spielen und anderen Spielen. Strg+d - Startet den Debugger. Strg+f - Schneller Modus EIN/AUS Strg+g - SEHR schneller Modus EIN/AUS - Strg+t - Wechselt zwischen - âSpeech onlyâ (nur Sprachausgabe), - âSpeech and Subtitlesâ (Sprachausgabe und - Untertitel) und âSubtitles onlyâ (nur Untertitel). + Strg+t - Wechselt zwischen âNur Sprachausgabeâ, + âSprachausgabe und Untertitelâ und + âNur Untertitelâ. Tilde (~) - Zeigt/verbirgt Debugging-Konsole. [ und ] - Musiklautstärke, leiser/lauter - und + - Texttempo, langsamer/schneller @@ -1320,7 +1314,7 @@ zwischen SCUMM-Spielen und anderen Spielen. Strg+f - Schneller Modus EIN/AUS p - Spielpause - Draci Historie: + DraÄi Historie: F5 - Zeigt globales MenĂź. Linksklick - Laufen, untersuchen Rechtsklick - Verwenden, reden @@ -2306,11 +2300,11 @@ Debug-Nachrichten zu durchsuchen * Rufen Sie âfakeroot dpkg-buildpackage -b -dâ auf. ------------------------------------------------------------------------ -Viel GlĂźck und viel SpaĂ beim Spielen! -Das ScummVM-Team. +Viel GlĂźck und viel SpaĂ beim Spielen wĂźnscht +das ScummVM-Team. http://www.scummvm.org/ ------------------------------------------------------------------------ (Deutscher Text basiert auf README mit SHA1 ID: -d31bf017a9e717759f2410a8d355cf43b3418c4c) +0e8840568bed09c8baa670f079a6fe438fffad56) diff --git a/engines/agi/opcodes.cpp b/engines/agi/opcodes.cpp index c2cecefc52..d1baab93e1 100644 --- a/engines/agi/opcodes.cpp +++ b/engines/agi/opcodes.cpp @@ -288,7 +288,7 @@ AgiInstruction insV2[] = { { "status.line.on", "", &cmdStatusLineOn }, { "status.line.off", "", &cmdStatusLineOff }, { "set.string", "ns", &cmdSetString }, - { "get.string", "ns", &cmdGetString }, + { "get.string", "nsnnn", &cmdGetString }, { "word.to.string", "nn", &cmdWordToString }, { "parse", "n", &cmdParse }, { "get.num", "nv", &cmdGetNum }, @@ -307,7 +307,7 @@ AgiInstruction insV2[] = { { "program.control", "", &cmdProgramControl }, { "player.control", "", &cmdPlayerControl }, { "obj.status.v", "v", &cmdObjStatusF }, - { "quit", "n", &cmdQuit }, + { "quit", "n", &cmdQuit }, // 0 args for AGI version 2.089 { "show.mem", "", &cmdShowMem }, { "pause", "", &cmdPause }, { "echo.line", "", &cmdEchoLine }, @@ -324,16 +324,16 @@ AgiInstruction insV2[] = { { "reposition.to.v", "nvv", &cmdRepositionToF }, { "trace.on", "", &cmdTraceOn }, { "trace.info", "nnn", &cmdTraceInfo }, - { "print.at", "snnn", &cmdPrintAt }, + { "print.at", "snnn", &cmdPrintAt }, // 3 args for AGI versions before 2.440 { "print.at.v", "vnnn", &cmdPrintAtV }, { "discard.view.v", "v", &cmdDiscardView}, { "clear.text.rect", "nnnnn", &cmdClearTextRect }, { "set.upper.left", "nn", &cmdSetUpperLeft }, { "set.menu", "s", &cmdSetMenu }, - { "set.menu.member", "sn", &cmdSetMenuItem }, + { "set.menu.item", "sn", &cmdSetMenuItem }, { "submit.menu", "", &cmdSubmitMenu }, - { "enable.member", "n", &cmdEnableItem }, - { "disable.member", "n", &cmdDisableItem }, + { "enable.item", "n", &cmdEnableItem }, + { "disable.item", "n", &cmdDisableItem }, { "menu.input", "", &cmdMenuInput }, { "show.obj.v", "v", &cmdShowObjV }, { "open.dialogue", "", &cmdOpenDialogue }, @@ -349,12 +349,12 @@ AgiInstruction insV2[] = { { "hold.key", "", &cmdHoldKey }, { "set.pri.base", "n", &cmdSetPriBase }, { "discard.sound", "n", &cmdDiscardSound }, - { "hide.mouse", "", &cmdHideMouse }, + { "hide.mouse", "", &cmdHideMouse }, // 1 arg for AGI version 3.002.086 { "allow.menu", "n", &cmdAllowMenu }, { "show.mouse", "", &cmdShowMouse }, { "fence.mouse", "nnnn", &cmdFenceMouse }, { "mouse.posn", "vv", &cmdMousePosn }, - { "release.key", "", &cmdReleaseKey }, + { "release.key", "", &cmdReleaseKey }, // 2 args for at least the Amiga GR (v2.05 1989-03-09) using AGI 2.316 { "adj.ego.move.to.xy", "", &cmdAdjEgoMoveToXY } }; diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index 97c594684c..465b6e0786 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -41,18 +41,51 @@ namespace AGOS { static const GameSpecificSettings simon1_settings = { + "", // base_filename + "", // restore_filename + "", // tbl_filename "EFFECTS", // effects_filename "SIMON", // speech_filename }; static const GameSpecificSettings simon2_settings = { + "", // base_filename + "", // restore_filename + "", // tbl_filename "", // effects_filename "SIMON2", // speech_filename }; -static const GameSpecificSettings puzzlepack_settings = { +static const GameSpecificSettings dimp_settings = { + "Gdimp", // base_filename + "", // restore_filename + "", // tbl_filename "", // effects_filename - "MUSIC", // speech_filename + "MUSIC", // speech_filename +}; + +static const GameSpecificSettings jumble_settings = { + "Gjumble", // base_filename + "", // restore_filename + "", // tbl_filename + "", // effects_filename + "MUSIC", // speech_filename +}; + +static const GameSpecificSettings puzzle_settings = { + "Gpuzzle", // base_filename + "", // restore_filename + "", // tbl_filename + "", // effects_filename + "MUSIC", // speech_filename +}; + +static const GameSpecificSettings swampy_settings = { + "Gswampy", // base_filename + "", // restore_filename + "", // tbl_filename + "", // effects_filename + "MUSIC", // speech_filename }; #ifdef ENABLE_AGOS2 @@ -678,7 +711,15 @@ static const uint16 initialVideoWindows_PN[20] = { #ifdef ENABLE_AGOS2 void AGOSEngine_PuzzlePack::setupGame() { - gss = &puzzlepack_settings; + if (getGameId() == GID_DIMP) { + gss = &dimp_settings; + } else if (getGameId() == GID_JUMBLE) { + gss = &jumble_settings; + } else if (getGameId() == GID_PUZZLE) { + gss = &puzzle_settings; + } else if (getGameId() == GID_SWAMPY) { + gss = &swampy_settings; + } _numVideoOpcodes = 85; _vgaMemSize = 7500000; _itemMemSize = 20000; @@ -963,6 +1004,10 @@ void AGOSEngine::pause() { } Common::Error AGOSEngine::go() { +#ifdef ENABLE_AGOS2 + loadArchives(); +#endif + loadGamePcFile(); addTimeEvent(0, 1); diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 820bc0260b..ec979abc20 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -25,6 +25,7 @@ #include "engines/engine.h" +#include "common/archive.h" #include "common/array.h" #include "common/error.h" #include "common/keyboard.h" @@ -186,6 +187,22 @@ class Debugger; # define _OPCODE(ver, x) { &ver::x, "" } #endif +class ArchiveMan : public Common::SearchSet { +public: + ArchiveMan(); + + void enableFallback(bool val) { _fallBack = val; } + +#ifdef ENABLE_AGOS2 + void registerArchive(const Common::String &filename, int priority); +#endif + + Common::SeekableReadStream *open(const Common::String &filename); + +private: + bool _fallBack; +}; + class AGOSEngine : public Engine { protected: friend class Debugger; @@ -599,6 +616,8 @@ public: AGOSEngine(OSystem *system, const AGOSGameDescription *gd); virtual ~AGOSEngine(); + ArchiveMan _archives; + byte *_curSfxFile; uint32 _curSfxFileSize; uint16 _sampleEnd, _sampleWait; @@ -608,6 +627,10 @@ protected: virtual uint16 readUint16Wrapper(const void *src); virtual uint32 readUint32Wrapper(const void *src); +#ifdef ENABLE_AGOS2 + void loadArchives(); +#endif + int allocGamePcVars(Common::SeekableReadStream *in); void createPlayer(); void allocateStringTable(int num); @@ -792,14 +815,14 @@ protected: void loadTextIntoMem(uint16 stringId); uint loadTextFile(const char *filename, byte *dst); - Common::File *openTablesFile(const char *filename); - void closeTablesFile(Common::File *in); + Common::SeekableReadStream *openTablesFile(const char *filename); + void closeTablesFile(Common::SeekableReadStream *in); uint loadTextFile_simon1(const char *filename, byte *dst); - Common::File *openTablesFile_simon1(const char *filename); + Common::SeekableReadStream *openTablesFile_simon1(const char *filename); uint loadTextFile_gme(const char *filename, byte *dst); - Common::File *openTablesFile_gme(const char *filename); + Common::SeekableReadStream *openTablesFile_gme(const char *filename); void invokeTimeEvent(TimeEvent *te); bool kickoffTimeEvents(); diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp index d9a585bd05..d9d6b71a2a 100644 --- a/engines/agos/animation.cpp +++ b/engines/agos/animation.cpp @@ -137,7 +137,7 @@ void MoviePlayer::handleNextFrame() { // Movie player for DXA movies /////////////////////////////////////////////////////////////////////////////// -const char * MoviePlayerDXA::_sequenceList[90] = { +const char *const MoviePlayerDXA::_sequenceList[90] = { "agent32", "Airlock", "Badluck", @@ -251,8 +251,11 @@ bool MoviePlayerDXA::load() { } Common::String videoName = Common::String::format("%s.dxa", baseName); - if (!loadFile(videoName)) + Common::SeekableReadStream *videoStream = _vm->_archives.open(videoName); + if (!videoStream) error("Failed to load video file %s", videoName.c_str()); + if (!loadStream(videoStream)) + error("Failed to load video stream from file %s", videoName.c_str()); debug(0, "Playing video %s", videoName.c_str()); @@ -412,8 +415,11 @@ MoviePlayerSMK::MoviePlayerSMK(AGOSEngine_Feeble *vm, const char *name) bool MoviePlayerSMK::load() { Common::String videoName = Common::String::format("%s.smk", baseName); - if (!loadFile(videoName)) + Common::SeekableReadStream *videoStream = _vm->_archives.open(videoName); + if (!videoStream) error("Failed to load video file %s", videoName.c_str()); + if (!loadStream(videoStream)) + error("Failed to load video stream from file %s", videoName.c_str()); debug(0, "Playing video %s", videoName.c_str()); diff --git a/engines/agos/animation.h b/engines/agos/animation.h index e1d7207251..11936aa338 100644 --- a/engines/agos/animation.h +++ b/engines/agos/animation.h @@ -73,7 +73,7 @@ protected: }; class MoviePlayerDXA : public MoviePlayer, Video::DXADecoder { - static const char *_sequenceList[90]; + static const char *const _sequenceList[90]; uint8 _sequenceNum; public: MoviePlayerDXA(AGOSEngine_Feeble *vm, const char *name); diff --git a/engines/agos/detection.cpp b/engines/agos/detection.cpp index 2be888b92a..116e66820a 100644 --- a/engines/agos/detection.cpp +++ b/engines/agos/detection.cpp @@ -83,7 +83,7 @@ static const PlainGameDescriptor agosGames[] = { #include "agos/detection_tables.h" -static const char *directoryGlobs[] = { +static const char *const directoryGlobs[] = { "execute", // Used by Simon1 Acorn CD 0 }; @@ -240,6 +240,22 @@ Common::Platform AGOSEngine::getPlatform() const { } const char *AGOSEngine::getFileName(int type) const { + // Required if the InstallShield cab is been used + if (getGameType() == GType_PP) { + if (type == GAME_BASEFILE) + return gss->base_filename; + } + + // Required if the InstallShield cab is been used + if (getGameType() == GType_FF && getPlatform() == Common::kPlatformWindows) { + if (type == GAME_BASEFILE) + return gss->base_filename; + if (type == GAME_RESTFILE) + return gss->restore_filename; + if (type == GAME_TBLFILE) + return gss->tbl_filename; + } + for (int i = 0; _gameDescription->desc.filesDescriptions[i].fileType; i++) { if (_gameDescription->desc.filesDescriptions[i].fileType == type) return _gameDescription->desc.filesDescriptions[i].fileName; @@ -247,4 +263,17 @@ const char *AGOSEngine::getFileName(int type) const { return NULL; } +#ifdef ENABLE_AGOS2 +void AGOSEngine::loadArchives() { + const ADGameFileDescription *ag; + + if (getFeatures() & GF_PACKED) { + for (ag = _gameDescription->desc.filesDescriptions; ag->fileName; ag++) { + if (!_archives.hasArchive(ag->fileName)) + _archives.registerArchive(ag->fileName, ag->fileType); + } + } +} +#endif + } // End of namespace AGOS diff --git a/engines/agos/detection_tables.h b/engines/agos/detection_tables.h index d9f321d98e..a7a384a496 100644 --- a/engines/agos/detection_tables.h +++ b/engines/agos/detection_tables.h @@ -2519,6 +2519,27 @@ static const AGOSGameDescription gameDescriptions[] = { GF_OLD_BUNDLE | GF_ZLIBCOMP | GF_TALKIE }, + // The Feeble Files - English Windows 2CD (with InstallShield cab) + { + { + "feeble", + "2CD", + + { + { "data1.cab", 0, "600db08891e7a21badc8215e604cd88f", 28845430}, + { NULL, 0, NULL, 0} + }, + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + GUIO_NOSUBTITLES | GUIO_NOMUSIC + }, + + GType_FF, + GID_FEEBLEFILES, + GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED + }, + // The Feeble Files - English Windows 2CD { { @@ -2565,6 +2586,27 @@ static const AGOSGameDescription gameDescriptions[] = { GF_OLD_BUNDLE | GF_TALKIE }, + // The Feeble Files - English Windows 4CD (with InstallShield cab) + { + { + "feeble", + "4CD", + + { + { "data1.cab", 0, "65804cbc9036ac4b1275d97e0de3be2f", 28943062}, + { NULL, 0, NULL, 0} + }, + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + GUIO_NOSUBTITLES | GUIO_NOMUSIC + }, + + GType_FF, + GID_FEEBLEFILES, + GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED + }, + // The Feeble Files - English Windows 4CD { { @@ -2703,6 +2745,27 @@ static const AGOSGameDescription gameDescriptions[] = { GF_OLD_BUNDLE | GF_TALKIE }, + // Simon the Sorcerer's Puzzle Pack - Demon in my Pocket (with InstallShield cab) + { + { + "dimp", + "CD", + + { + { "data1.cab", 0, "36dd86c1d872cea81ac1de7753dd684a", 40394693}, + { NULL, 0, NULL, 0} + }, + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + GUIO_NOSUBTITLES | GUIO_NOMUSIC + }, + + GType_PP, + GID_DIMP, + GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED + }, + // Simon the Sorcerer's Puzzle Pack - Demon in my Pocket { { @@ -2724,6 +2787,27 @@ static const AGOSGameDescription gameDescriptions[] = { GF_OLD_BUNDLE | GF_TALKIE }, + // Simon the Sorcerer's Puzzle Pack - Jumble (with InstallShield cab) + { + { + "jumble", + "CD", + + { + { "data1.cab", 0, "36dd86c1d872cea81ac1de7753dd684a", 40394693}, + { NULL, 0, NULL, 0} + }, + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + GUIO_NOSUBTITLES + }, + + GType_PP, + GID_JUMBLE, + GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED + }, + // Simon the Sorcerer's Puzzle Pack - Jumble { { @@ -2745,6 +2829,27 @@ static const AGOSGameDescription gameDescriptions[] = { GF_OLD_BUNDLE | GF_TALKIE }, + // Simon the Sorcerer's Puzzle Pack - NoPatience (with InstallShield cab) + { + { + "puzzle", + "CD", + + { + { "data1.cab", 0, "36dd86c1d872cea81ac1de7753dd684a", 40394693}, + { NULL, 0, NULL, 0} + }, + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + GUIO_NOSUBTITLES + }, + + GType_PP, + GID_PUZZLE, + GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED + }, + // Simon the Sorcerer's Puzzle Pack - NoPatience { { @@ -2766,6 +2871,27 @@ static const AGOSGameDescription gameDescriptions[] = { GF_OLD_BUNDLE | GF_TALKIE }, + // Simon the Sorcerer's Puzzle Pack - Swampy Adventures - English (with InstallShield cab) + { + { + "swampy", + "CD", + + { + { "data1.cab", 0, "36dd86c1d872cea81ac1de7753dd684a", 40394693}, + { NULL, 0, NULL, 0} + }, + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + GUIO_NOSUBTITLES + }, + + GType_PP, + GID_SWAMPY, + GF_OLD_BUNDLE | GF_TALKIE | GF_PACKED + }, + // Simon the Sorcerer's Puzzle Pack - Swampy Adventures - English { { diff --git a/engines/agos/feeble.cpp b/engines/agos/feeble.cpp index 4c82b7e19d..e9a91e3b76 100644 --- a/engines/agos/feeble.cpp +++ b/engines/agos/feeble.cpp @@ -45,6 +45,9 @@ AGOSEngine_Feeble::~AGOSEngine_Feeble() { } static const GameSpecificSettings feeblefiles_settings = { + "game22", // base_filename + "save.999", // restore_filename + "tbllist", // tbl_filename "", // effects_filename "VOICES", // speech_filename }; diff --git a/engines/agos/installshield_cab.cpp b/engines/agos/installshield_cab.cpp new file mode 100644 index 0000000000..f7b49a64c5 --- /dev/null +++ b/engines/agos/installshield_cab.cpp @@ -0,0 +1,221 @@ +/* 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. + * + */ + +// The following code is based on unshield +// Original copyright: + +// Copyright (c) 2003 David Eriksson <twogood@users.sourceforge.net> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include "agos/installshield_cab.h" + +#include "common/debug.h" +#include "common/file.h" +#include "common/memstream.h" +#include "common/zlib.h" + +namespace AGOS { + +class InstallShieldCabinet : public Common::Archive { + Common::String _installShieldFilename; + +public: + InstallShieldCabinet(const Common::String &filename); + ~InstallShieldCabinet(); + + // Common::Archive API implementation + bool hasFile(const Common::String &name); + int listMembers(Common::ArchiveMemberList &list); + Common::ArchiveMemberPtr getMember(const Common::String &name); + Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const; + +private: + struct FileEntry { + uint32 uncompressedSize; + uint32 compressedSize; + uint32 offset; + uint16 flags; + }; + + typedef Common::HashMap<Common::String, FileEntry, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> FileMap; + FileMap _map; +}; + +InstallShieldCabinet::~InstallShieldCabinet() { + _map.clear(); +} + +InstallShieldCabinet::InstallShieldCabinet(const Common::String &filename) : _installShieldFilename(filename) { + Common::File installShieldFile; + + if (!installShieldFile.open(_installShieldFilename)) { + warning("InstallShieldCabinet::InstallShieldCabinet(): Could not find the archive file %s", _installShieldFilename.c_str()); + return; + } + + // Note that we only support a limited subset of cabinet files + // Only single cabinet files and ones without data shared between + // cabinets. + + // Check for the magic uint32 + if (installShieldFile.readUint32LE() != 0x28635349) { + warning("InstallShieldCabinet::InstallShieldCabinet(): Magic ID doesn't match"); + return; + } + + uint32 version = installShieldFile.readUint32LE(); + + if (version != 0x01000004) { + warning("Unsupported CAB version %08x", version); + return; + } + + /* uint32 volumeInfo = */ installShieldFile.readUint32LE(); + uint32 cabDescriptorOffset = installShieldFile.readUint32LE(); + /* uint32 cabDescriptorSize = */ installShieldFile.readUint32LE(); + + installShieldFile.seek(cabDescriptorOffset); + + installShieldFile.skip(12); + uint32 fileTableOffset = installShieldFile.readUint32LE(); + installShieldFile.skip(4); + uint32 fileTableSize = installShieldFile.readUint32LE(); + uint32 fileTableSize2 = installShieldFile.readUint32LE(); + uint32 directoryCount = installShieldFile.readUint32LE(); + installShieldFile.skip(8); + uint32 fileCount = installShieldFile.readUint32LE(); + + if (fileTableSize != fileTableSize2) + warning("file table sizes do not match"); + + // We're ignoring file groups and components since we + // should not need them. Moving on to the files... + + installShieldFile.seek(cabDescriptorOffset + fileTableOffset); + uint32 fileTableCount = directoryCount + fileCount; + uint32 *fileTableOffsets = new uint32[fileTableCount]; + for (uint32 i = 0; i < fileTableCount; i++) + fileTableOffsets[i] = installShieldFile.readUint32LE(); + + for (uint32 i = directoryCount; i < fileCount + directoryCount; i++) { + installShieldFile.seek(cabDescriptorOffset + fileTableOffset + fileTableOffsets[i]); + uint32 nameOffset = installShieldFile.readUint32LE(); + /* uint32 directoryIndex = */ installShieldFile.readUint32LE(); + + // First read in data needed by us to get at the file data + FileEntry entry; + entry.flags = installShieldFile.readUint16LE(); + entry.uncompressedSize = installShieldFile.readUint32LE(); + entry.compressedSize = installShieldFile.readUint32LE(); + installShieldFile.skip(20); + entry.offset = installShieldFile.readUint32LE(); + + // Then let's get the string + installShieldFile.seek(cabDescriptorOffset + fileTableOffset + nameOffset); + Common::String fileName; + + char c = installShieldFile.readByte(); + while (c) { + fileName += c; + c = installShieldFile.readByte(); + } + _map[fileName] = entry; + } + + delete[] fileTableOffsets; +} + +bool InstallShieldCabinet::hasFile(const Common::String &name) { + warning("hasFile: Filename %s", name.c_str()); + return _map.contains(name); +} + +int InstallShieldCabinet::listMembers(Common::ArchiveMemberList &list) { + for (FileMap::const_iterator it = _map.begin(); it != _map.end(); it++) + list.push_back(getMember(it->_key)); + + return _map.size(); +} + +Common::ArchiveMemberPtr InstallShieldCabinet::getMember(const Common::String &name) { + return Common::ArchiveMemberPtr(new Common::GenericArchiveMember(name, this)); +} + +Common::SeekableReadStream *InstallShieldCabinet::createReadStreamForMember(const Common::String &name) const { + if (!_map.contains(name)) + return 0; + + const FileEntry &entry = _map[name]; + + Common::File archiveFile; + archiveFile.open(_installShieldFilename); + archiveFile.seek(entry.offset); + + if (!(entry.flags & 0x04)) { + // Not compressed + return archiveFile.readStream(entry.uncompressedSize); + } + +#ifdef USE_ZLIB + byte *src = (byte *)malloc(entry.compressedSize); + byte *dst = (byte *)malloc(entry.uncompressedSize); + + archiveFile.read(src, entry.compressedSize); + + bool result = Common::inflateZlibHeaderless(dst, entry.uncompressedSize, src, entry.compressedSize); + free(src); + + if (!result) { + warning("failed to inflate CAB file '%s'", name.c_str()); + free(dst); + return 0; + } + + return new Common::MemoryReadStream(dst, entry.uncompressedSize, DisposeAfterUse::YES); +#else + warning("zlib required to extract compressed CAB file '%s'", name.c_str()); + return 0; +#endif +} + +Common::Archive *makeInstallShieldArchive(const Common::String &name) { + return new InstallShieldCabinet(name); +} + +} // End of namespace AGOS diff --git a/engines/agos/installshield_cab.h b/engines/agos/installshield_cab.h new file mode 100644 index 0000000000..f7e8bed277 --- /dev/null +++ b/engines/agos/installshield_cab.h @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/archive.h" +#include "common/str.h" + +#ifndef AGOS_INSTALLSHIELD_CAB_H +#define AGOS_INSTALLSHIELD_CAB_H + +namespace AGOS { + +/** + * This factory method creates an Archive instance corresponding to the content + * of the InstallShield compressed file with the given name. + * + * May return 0 in case of a failure. + */ +Common::Archive *makeInstallShieldArchive(const Common::String &name); + +} // End of namespace AGOS + +#endif diff --git a/engines/agos/intern.h b/engines/agos/intern.h index 18f56be4a4..773b9c15bd 100644 --- a/engines/agos/intern.h +++ b/engines/agos/intern.h @@ -193,6 +193,9 @@ struct TimeEvent { }; struct GameSpecificSettings { + const char *base_filename; + const char *restore_filename; + const char *tbl_filename; const char *effects_filename; const char *speech_filename; }; @@ -251,7 +254,8 @@ enum GameFeatures { GF_32COLOR = 1 << 5, GF_EGA = 1 << 6, GF_PLANAR = 1 << 7, - GF_DEMO = 1 << 8 + GF_DEMO = 1 << 8, + GF_PACKED = 1 << 9 }; enum GameFileTypes { diff --git a/engines/agos/module.mk b/engines/agos/module.mk index 7069d8005b..7ae5e17bf2 100644 --- a/engines/agos/module.mk +++ b/engines/agos/module.mk @@ -51,6 +51,7 @@ ifdef ENABLE_AGOS2 MODULE_OBJS += \ animation.o \ feeble.o \ + installshield_cab.o \ oracle.o \ script_dp.o \ script_ff.o \ diff --git a/engines/agos/res.cpp b/engines/agos/res.cpp index a71d4d8150..0baae11e89 100644 --- a/engines/agos/res.cpp +++ b/engines/agos/res.cpp @@ -31,11 +31,30 @@ #include "agos/agos.h" #include "agos/intern.h" #include "agos/sound.h" +#include "agos/installshield_cab.h" #include "common/zlib.h" namespace AGOS { +ArchiveMan::ArchiveMan() { + _fallBack = true; +} + +#ifdef ENABLE_AGOS2 +void ArchiveMan::registerArchive(const Common::String &filename, int priority) { + add(filename, makeInstallShieldArchive(filename), priority); +} +#endif + +Common::SeekableReadStream *ArchiveMan::open(const Common::String &filename) { + if (_fallBack && SearchMan.hasFile(filename)) { + return SearchMan.createReadStreamForMember(filename); + } + + return createReadStreamForMember(filename); +} + #ifdef ENABLE_AGOS2 uint16 AGOSEngine_Feeble::to16Wrapper(uint value) { return TO_LE_16(value); @@ -150,21 +169,21 @@ int AGOSEngine::allocGamePcVars(Common::SeekableReadStream *in) { } void AGOSEngine_PN::loadGamePcFile() { - Common::File in; + Common::SeekableReadStream *in; if (getFileName(GAME_BASEFILE) != NULL) { // Read dataBase - in.open(getFileName(GAME_BASEFILE)); - if (in.isOpen() == false) { + in = _archives.open(getFileName(GAME_BASEFILE)); + if (!in) { error("loadGamePcFile: Can't load database file '%s'", getFileName(GAME_BASEFILE)); } - _dataBaseSize = in.size(); + _dataBaseSize = in->size(); _dataBase = (byte *)malloc(_dataBaseSize); if (_dataBase == NULL) error("loadGamePcFile: Out of memory for dataBase"); - in.read(_dataBase, _dataBaseSize); - in.close(); + in->read(_dataBase, _dataBaseSize); + delete in; if (_dataBase[31] != 0) error("Later version of system requested"); @@ -172,17 +191,17 @@ void AGOSEngine_PN::loadGamePcFile() { if (getFileName(GAME_TEXTFILE) != NULL) { // Read textBase - in.open(getFileName(GAME_TEXTFILE)); - if (in.isOpen() == false) { + in = _archives.open(getFileName(GAME_TEXTFILE)); + if (!in) { error("loadGamePcFile: Can't load textbase file '%s'", getFileName(GAME_TEXTFILE)); } - _textBaseSize = in.size(); + _textBaseSize = in->size(); _textBase = (byte *)malloc(_textBaseSize); if (_textBase == NULL) error("loadGamePcFile: Out of memory for textBase"); - in.read(_textBase, _textBaseSize); - in.close(); + in->read(_textBase, _textBaseSize); + delete in; if (_textBase[getlong(30L)] != 128) error("Unknown compression format"); @@ -190,20 +209,20 @@ void AGOSEngine_PN::loadGamePcFile() { } void AGOSEngine::loadGamePcFile() { - Common::File in; + Common::SeekableReadStream *in; int fileSize; if (getFileName(GAME_BASEFILE) != NULL) { /* Read main gamexx file */ - in.open(getFileName(GAME_BASEFILE)); - if (in.isOpen() == false) { + in = _archives.open(getFileName(GAME_BASEFILE)); + if (!in) { error("loadGamePcFile: Can't load gamexx file '%s'", getFileName(GAME_BASEFILE)); } if (getFeatures() & GF_CRUNCHED_GAMEPC) { - uint srcSize = in.size(); + uint srcSize = in->size(); byte *srcBuf = (byte *)malloc(srcSize); - in.read(srcBuf, srcSize); + in->read(srcBuf, srcSize); uint dstSize = READ_BE_UINT32(srcBuf + srcSize - 4); byte *dstBuf = (byte *)malloc(dstSize); @@ -214,25 +233,25 @@ void AGOSEngine::loadGamePcFile() { readGamePcFile(&stream); free(dstBuf); } else { - readGamePcFile(&in); + readGamePcFile(in); } - in.close(); + delete in; } if (getFileName(GAME_TBLFILE) != NULL) { /* Read list of TABLE resources */ - in.open(getFileName(GAME_TBLFILE)); - if (in.isOpen() == false) { + in = _archives.open(getFileName(GAME_TBLFILE)); + if (!in) { error("loadGamePcFile: Can't load table resources file '%s'", getFileName(GAME_TBLFILE)); } - fileSize = in.size(); + fileSize = in->size(); _tblList = (byte *)malloc(fileSize); if (_tblList == NULL) error("loadGamePcFile: Out of memory for strip table list"); - in.read(_tblList, fileSize); - in.close(); + in->read(_tblList, fileSize); + delete in; /* Remember the current state */ _subroutineListOrg = _subroutineList; @@ -242,71 +261,71 @@ void AGOSEngine::loadGamePcFile() { if (getFileName(GAME_STRFILE) != NULL) { /* Read list of TEXT resources */ - in.open(getFileName(GAME_STRFILE)); - if (in.isOpen() == false) + in = _archives.open(getFileName(GAME_STRFILE)); + if (!in) error("loadGamePcFile: Can't load text resources file '%s'", getFileName(GAME_STRFILE)); - fileSize = in.size(); + fileSize = in->size(); _strippedTxtMem = (byte *)malloc(fileSize); if (_strippedTxtMem == NULL) error("loadGamePcFile: Out of memory for strip text list"); - in.read(_strippedTxtMem, fileSize); - in.close(); + in->read(_strippedTxtMem, fileSize); + delete in; } if (getFileName(GAME_STATFILE) != NULL) { /* Read list of ROOM STATE resources */ - in.open(getFileName(GAME_STATFILE)); - if (in.isOpen() == false) { + in = _archives.open(getFileName(GAME_STATFILE)); + if (!in) { error("loadGamePcFile: Can't load state resources file '%s'", getFileName(GAME_STATFILE)); } - _numRoomStates = in.size() / 8; + _numRoomStates = in->size() / 8; _roomStates = (RoomState *)calloc(_numRoomStates, sizeof(RoomState)); if (_roomStates == NULL) error("loadGamePcFile: Out of memory for room state list"); for (uint s = 0; s < _numRoomStates; s++) { - uint16 num = in.readUint16BE() - (_itemArrayInited - 2); + uint16 num = in->readUint16BE() - (_itemArrayInited - 2); - _roomStates[num].state = in.readUint16BE(); - _roomStates[num].classFlags = in.readUint16BE(); - _roomStates[num].roomExitStates = in.readUint16BE(); + _roomStates[num].state = in->readUint16BE(); + _roomStates[num].classFlags = in->readUint16BE(); + _roomStates[num].roomExitStates = in->readUint16BE(); } - in.close(); + delete in; } if (getFileName(GAME_RMSLFILE) != NULL) { /* Read list of ROOM ITEMS resources */ - in.open(getFileName(GAME_RMSLFILE)); - if (in.isOpen() == false) { + in = _archives.open(getFileName(GAME_RMSLFILE)); + if (!in) { error("loadGamePcFile: Can't load room resources file '%s'", getFileName(GAME_RMSLFILE)); } - fileSize = in.size(); + fileSize = in->size(); _roomsList = (byte *)malloc(fileSize); if (_roomsList == NULL) error("loadGamePcFile: Out of memory for room items list"); - in.read(_roomsList, fileSize); - in.close(); + in->read(_roomsList, fileSize); + delete in; } if (getFileName(GAME_XTBLFILE) != NULL) { /* Read list of XTABLE resources */ - in.open(getFileName(GAME_XTBLFILE)); - if (in.isOpen() == false) { + in = _archives.open(getFileName(GAME_XTBLFILE)); + if (!in) { error("loadGamePcFile: Can't load xtable resources file '%s'", getFileName(GAME_XTBLFILE)); } - fileSize = in.size(); + fileSize = in->size(); _xtblList = (byte *)malloc(fileSize); if (_xtblList == NULL) error("loadGamePcFile: Out of memory for strip xtable list"); - in.read(_xtblList, fileSize); - in.close(); + in->read(_xtblList, fileSize); + delete in; /* Remember the current state */ _xsubroutineListOrg = _subroutineList; diff --git a/engines/agos/res_snd.cpp b/engines/agos/res_snd.cpp index 9a04ce2d26..b5612d710d 100644 --- a/engines/agos/res_snd.cpp +++ b/engines/agos/res_snd.cpp @@ -413,7 +413,7 @@ bool AGOSEngine::loadVGASoundFile(uint16 id, uint8 type) { return true; } -static const char *dimpSoundList[32] = { +static const char *const dimpSoundList[32] = { "Beep", "Birth", "Boiling", @@ -450,17 +450,17 @@ static const char *dimpSoundList[32] = { void AGOSEngine::loadSoundFile(const char* filename) { - Common::File in; + Common::SeekableReadStream *in; - in.open(filename); - if (in.isOpen() == false) + in = _archives.open(filename); + if (!in) error("loadSound: Can't load %s", filename); - uint32 dstSize = in.size(); + uint32 dstSize = in->size(); byte *dst = (byte *)malloc(dstSize); - if (in.read(dst, dstSize) != dstSize) + if (in->read(dst, dstSize) != dstSize) error("loadSound: Read failed"); - in.close(); + delete in; _sound->playSfxData(dst, 0, 0, 0); } @@ -469,21 +469,21 @@ void AGOSEngine::loadSound(uint16 sound, int16 pan, int16 vol, uint16 type) { byte *dst; if (getGameId() == GID_DIMP) { - Common::File in; + Common::SeekableReadStream *in; char filename[15]; assert(sound >= 1 && sound <= 32); sprintf(filename, "%s.wav", dimpSoundList[sound - 1]); - in.open(filename); - if (in.isOpen() == false) + in = _archives.open(filename); + if (!in) error("loadSound: Can't load %s", filename); - uint32 dstSize = in.size(); + uint32 dstSize = in->size(); dst = (byte *)malloc(dstSize); - if (in.read(dst, dstSize) != dstSize) + if (in->read(dst, dstSize) != dstSize) error("loadSound: Read failed"); - in.close(); + delete in; } else if (getFeatures() & GF_ZLIBCOMP) { char filename[15]; diff --git a/engines/agos/rooms.cpp b/engines/agos/rooms.cpp index f2629e419e..fb7b313e9c 100644 --- a/engines/agos/rooms.cpp +++ b/engines/agos/rooms.cpp @@ -401,9 +401,9 @@ bool AGOSEngine::loadRoomItems(uint16 room) { filename[i] = 0; p++; - for (;;) { - _roomsListPtr = p; + _roomsListPtr = p; + for (;;) { minNum = READ_BE_UINT16(p); p += 2; if (minNum == 0) break; diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 10830db002..6779eabdbf 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -1019,9 +1019,7 @@ bool AGOSEngine::loadGame(const char *filename, bool restartMode) { if (restartMode) { // Load restart state - Common::File *file = new Common::File(); - file->open(filename); - f = file; + f = _archives.open(filename); } else { f = _saveFileMan->openForLoading(filename); } @@ -1195,9 +1193,7 @@ bool AGOSEngine_Elvira2::loadGame(const char *filename, bool restartMode) { if (restartMode) { // Load restart state - Common::File *file = new Common::File(); - file->open(filename); - f = file; + f = _archives.open(filename); } else { f = _saveFileMan->openForLoading(filename); } diff --git a/engines/agos/string_pn.cpp b/engines/agos/string_pn.cpp index 570fbc6200..ac8c263da3 100644 --- a/engines/agos/string_pn.cpp +++ b/engines/agos/string_pn.cpp @@ -68,7 +68,7 @@ void AGOSEngine_PN::uncomstr(char *c, uint32 x) { *c = 0; } -static const char *objectNames[30] = { +static const char *const objectNames[30] = { "\0", "Take \0", "Inventory\r", diff --git a/engines/agos/subroutine.cpp b/engines/agos/subroutine.cpp index bd9abb16b5..10c1c1aaf9 100644 --- a/engines/agos/subroutine.cpp +++ b/engines/agos/subroutine.cpp @@ -258,22 +258,21 @@ void AGOSEngine::endCutscene() { _runScriptReturn1 = true; } -Common::File *AGOSEngine::openTablesFile(const char *filename) { +Common::SeekableReadStream *AGOSEngine::openTablesFile(const char *filename) { if (getFeatures() & GF_OLD_BUNDLE) return openTablesFile_simon1(filename); else return openTablesFile_gme(filename); } -Common::File *AGOSEngine::openTablesFile_simon1(const char *filename) { - Common::File *fo = new Common::File(); - fo->open(filename); - if (fo->isOpen() == false) +Common::SeekableReadStream *AGOSEngine::openTablesFile_simon1(const char *filename) { + Common::SeekableReadStream *in = _archives.open(filename); + if (!in) error("openTablesFile: Can't open '%s'", filename); - return fo; + return in; } -Common::File *AGOSEngine::openTablesFile_gme(const char *filename) { +Common::SeekableReadStream *AGOSEngine::openTablesFile_gme(const char *filename) { uint res; uint32 offs; @@ -287,7 +286,7 @@ Common::File *AGOSEngine::openTablesFile_gme(const char *filename) { bool AGOSEngine::loadTablesIntoMem(uint16 subrId) { byte *p; uint16 min_num, max_num, file_num; - Common::File *in; + Common::SeekableReadStream *in; char filename[30]; if (_tblList == NULL) @@ -336,7 +335,7 @@ bool AGOSEngine::loadTablesIntoMem(uint16 subrId) { bool AGOSEngine_Waxworks::loadTablesIntoMem(uint16 subrId) { byte *p; uint min_num, max_num; - Common::File *in; + Common::SeekableReadStream *in; p = _tblList; if (p == NULL) @@ -403,7 +402,7 @@ bool AGOSEngine::loadXTablesIntoMem(uint16 subrId) { int i; uint min_num, max_num; char filename[30]; - Common::File *in; + Common::SeekableReadStream *in; p = _xtblList; if (p == NULL) @@ -453,9 +452,8 @@ bool AGOSEngine::loadXTablesIntoMem(uint16 subrId) { return 0; } -void AGOSEngine::closeTablesFile(Common::File *in) { +void AGOSEngine::closeTablesFile(Common::SeekableReadStream *in) { if (getFeatures() & GF_OLD_BUNDLE) { - in->close(); delete in; } } diff --git a/engines/agos/verb_pn.cpp b/engines/agos/verb_pn.cpp index 19e8bb2d48..9dd0079b6d 100644 --- a/engines/agos/verb_pn.cpp +++ b/engines/agos/verb_pn.cpp @@ -258,7 +258,7 @@ void AGOSEngine_PN::hitBox9(HitArea *ha) { iconPage(); } -static const char *messageList[9] = { +static const char *const messageList[9] = { "North\r", "East\r", "South\r", diff --git a/engines/cine/texte.cpp b/engines/cine/texte.cpp index dc18d081c7..33ea569df7 100644 --- a/engines/cine/texte.cpp +++ b/engines/cine/texte.cpp @@ -28,13 +28,13 @@ namespace Cine { -const char **failureMessages; +const char *const *failureMessages; const CommandeType *defaultActionCommand; const CommandeType *systemMenu; const CommandeType *confirmMenu; -const char **otherMessages; +const char *const *otherMessages; const char *defaultCommandPreposition; -const char **commandPrepositionTable; +const char *const *commandPrepositionTable; /** * Loads font data from the given file. @@ -152,7 +152,7 @@ static const CharacterEntry fontParamTable_alt[NUM_FONT_CHARS] = { }; void initLanguage(Common::Language lang) { - static const char *failureMessages_EN[] = { + static const char *const failureMessages_EN[] = { // EXAMINE "I don't see anything unusual.", "There's nothing of interest here.", @@ -195,7 +195,7 @@ void initLanguage(Common::Language lang) { "NOACTION" }; - static const char *commandPrepositionTable_EN[] = { + static const char *const commandPrepositionTable_EN[] = { "", // EXAMINE "", // TAKE "", // INVENTORY @@ -214,7 +214,7 @@ void initLanguage(Common::Language lang) { "Save game" }; - static const char *otherMessages_EN[] = { + static const char *const otherMessages_EN[] = { "This backup doesn't exist ...", "Could not create save file ...", "PAUSE", @@ -229,7 +229,7 @@ void initLanguage(Common::Language lang) { "Absolutely Not!" }; - static const char *failureMessages_FR[] = { + static const char *const failureMessages_FR[] = { // EXAMINER "Je ne vois rien de special.", "Il n'y a rien d'int\x82ressant.", @@ -272,7 +272,7 @@ void initLanguage(Common::Language lang) { "NOACTION" }; - static const char *commandPrepositionTable_FR[] = { + static const char *const commandPrepositionTable_FR[] = { "", // EXAMINER "", // PRENDRE "", // INVENTAIRE @@ -296,7 +296,7 @@ void initLanguage(Common::Language lang) { "Surtout Pas !" }; - static const char *otherMessages_FR[] = { + static const char *const otherMessages_FR[] = { "Cette sauvegarde n'existe pas ...", "Could not create save file ...", // "PAUSE", @@ -306,7 +306,7 @@ void initLanguage(Common::Language lang) { "Veuillez entrer le Nom de la Sauvegarde ." }; - static const char *failureMessages_ES[] = { + static const char *const failureMessages_ES[] = { // EXAMINE "No veo nada especial", "No hay nada interesante", @@ -349,7 +349,7 @@ void initLanguage(Common::Language lang) { "NOACTION" }; - static const char *commandPrepositionTable_ES[] = { + static const char *const commandPrepositionTable_ES[] = { "", // EXAMINAR "", // COGER "", // INVENTARIO @@ -373,7 +373,7 @@ void initLanguage(Common::Language lang) { "Nade de nada !" }; - static const char *otherMessages_ES[] = { + static const char *const otherMessages_ES[] = { "Esta granacion no existe", "Could not create save file ...", // "PAUSE", @@ -383,7 +383,7 @@ void initLanguage(Common::Language lang) { "Teclea el nombre de la partida grabada" }; - static const char *failureMessages_DE[] = { + static const char *const failureMessages_DE[] = { // EXAMINE "Ich sehe nichts Besonderes", "Es gibt hier nichts Interessantes", @@ -426,7 +426,7 @@ void initLanguage(Common::Language lang) { "NOACTION" }; - static const char *commandPrepositionTable_DE[] = { + static const char *const commandPrepositionTable_DE[] = { "", // Prufe "", // Nimm "", // Bestand @@ -450,7 +450,7 @@ void initLanguage(Common::Language lang) { "Absolut Nicht!" }; - static const char *otherMessages_DE[] = { + static const char *const otherMessages_DE[] = { "Diese Sicherungskopie gibt es nicht", "Could not create save file ...", // "PAUSE", @@ -460,7 +460,7 @@ void initLanguage(Common::Language lang) { "Geben Sie den Namen|der Sicherungsdiskette ein" }; - static const char *failureMessages_IT[] = { + static const char *const failureMessages_IT[] = { // EXAMINE "Non vedo nula di speciale", "Non c'\x8a niente di interessante", @@ -503,7 +503,7 @@ void initLanguage(Common::Language lang) { "NOACTION" }; - static const char *commandPrepositionTable_IT[] = { + static const char *const commandPrepositionTable_IT[] = { "", // ESAMINARE "", // PRENDERE "", // INVENTARIO @@ -527,7 +527,7 @@ void initLanguage(Common::Language lang) { "Supratutto non!" }; - static const char *otherMessages_IT[] = { + static const char *const otherMessages_IT[] = { "Questo salvataggio non esiste...", "Could not create save file ...", // "PAUSE", @@ -612,7 +612,7 @@ void loadErrmessDat(const char *fname) { ptr[i] = (char *)ptr + (sizeof(char *) * 6 * 4) + 60 * i; in.read(ptr[i], 60); } - failureMessages = const_cast<const char **>(ptr); + failureMessages = const_cast<const char *const *>(ptr); in.close(); } else { @@ -621,7 +621,7 @@ void loadErrmessDat(const char *fname) { } void freeErrmessDat() { - free(failureMessages); + free(const_cast<const char **>(failureMessages)); failureMessages = 0; } diff --git a/engines/cine/texte.h b/engines/cine/texte.h index f82127db98..dd4b7e06ee 100644 --- a/engines/cine/texte.h +++ b/engines/cine/texte.h @@ -50,13 +50,13 @@ struct TextHandler { CharacterEntry fontParamTable[NUM_FONT_CHARS]; }; -extern const char **failureMessages; +extern const char *const *failureMessages; extern const CommandeType *defaultActionCommand; extern const CommandeType *systemMenu; extern const CommandeType *confirmMenu; -extern const char **otherMessages; +extern const char *const *otherMessages; extern const char *defaultCommandPreposition; -extern const char **commandPrepositionTable; +extern const char *const *commandPrepositionTable; void loadTextData(const char *filename); void loadErrmessDat(const char *fname); diff --git a/engines/composer/composer.cpp b/engines/composer/composer.cpp index d9bb0cdc54..085ce815dd 100644 --- a/engines/composer/composer.cpp +++ b/engines/composer/composer.cpp @@ -81,8 +81,12 @@ Common::Error ComposerEngine::run() { _directoriesToStrip = 1; if (!_bookIni.loadFromFile("book.ini")) { _directoriesToStrip = 0; - if (!_bookIni.loadFromFile("programs/book.ini")) - error("failed to find book.ini"); + if (!_bookIni.loadFromFile("programs/book.ini")) { + // mac version? + if (!_bookIni.loadFromFile("Darby the Dragon.ini")) + if (!_bookIni.loadFromFile("Gregory.ini")) + error("failed to find book.ini"); + } } uint width = 640; @@ -97,9 +101,13 @@ Common::Error ComposerEngine::run() { loadLibrary(0); + _currentTime = 0; + _lastTime = 0; + uint fps = atoi(getStringFromConfig("Common", "FPS").c_str()); uint frameTime = 1000 / fps; uint32 lastDrawTime = 0; + while (!shouldQuit()) { for (uint i = 0; i < _pendingPageChanges.size(); i++) { if (_pendingPageChanges[i]._remove) @@ -112,15 +120,24 @@ Common::Error ComposerEngine::run() { _pendingPageChanges.clear(); uint32 thisTime = _system->getMillis(); + // maintain our own internal timing, since otherwise we get + // confused when starved of CPU (for example when the user + // is dragging the scummvm window around) + if (thisTime > _lastTime + frameTime) + _currentTime += frameTime; + else + _currentTime += thisTime - _lastTime; + _lastTime = thisTime; + for (uint i = 0; i < _queuedScripts.size(); i++) { QueuedScript &script = _queuedScripts[i]; if (!script._count) continue; - if (script._baseTime + script._duration > thisTime) + if (script._baseTime + script._duration > _currentTime) continue; if (script._count != 0xffffffff) script._count--; - script._baseTime = thisTime; + script._baseTime = _currentTime; runScript(script._scriptId, i, 0, 0); } @@ -176,11 +193,6 @@ Common::Error ComposerEngine::run() { onKeyDown(event.kbd.keycode); break; - case Common::EVENT_QUIT: - case Common::EVENT_RTL: - quitGame(); - break; - default: break; } @@ -286,7 +298,7 @@ Common::String ComposerEngine::mangleFilename(Common::String filename) { uint slashesToStrip = _directoriesToStrip; while (slashesToStrip--) { for (uint i = 0; i < filename.size(); i++) { - if (filename[i] != '\\') + if (filename[i] != '\\' && filename[i] != ':') continue; filename = filename.c_str() + i + 1; break; @@ -295,7 +307,7 @@ Common::String ComposerEngine::mangleFilename(Common::String filename) { Common::String outFilename; for (uint i = 0; i < filename.size(); i++) { - if (filename[i] == '\\') + if (filename[i] == '\\' || filename[i] == ':') outFilename += '/'; else outFilename += filename[i]; diff --git a/engines/composer/composer.h b/engines/composer/composer.h index c0d456daaa..03e895b59e 100644 --- a/engines/composer/composer.h +++ b/engines/composer/composer.h @@ -140,6 +140,8 @@ private: Audio::QueuingAudioStream *_audioStream; uint16 _currSoundPriority; + uint32 _currentTime, _lastTime; + bool _needsUpdate; Common::Array<Common::Rect> _dirtyRects; Graphics::Surface _surface; diff --git a/engines/composer/detection.cpp b/engines/composer/detection.cpp index 8c97b6c4db..2ca00f9f53 100644 --- a/engines/composer/detection.cpp +++ b/engines/composer/detection.cpp @@ -74,7 +74,7 @@ static const ComposerGameDescription gameDescriptions[] = { AD_ENTRY1("book.ini", "dbc98c566f4ac61b544443524585dccb"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_USEEXTRAASTITLE, + ADGF_USEEXTRAASTITLE | ADGF_DEMO, Common::GUIO_NONE }, GType_ComposerV1 @@ -84,7 +84,7 @@ static const ComposerGameDescription gameDescriptions[] = { { "liam", 0, - AD_ENTRY1("install.inf", "320d2f1d4f8dd96947676ae25d6688c6"), + AD_ENTRY1s("book.ini", "fc9d9b9e72e7301d011b808606eaa15b", 834), Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, @@ -101,7 +101,7 @@ static const ComposerGameDescription gameDescriptions[] = { AD_ENTRY1("book.ini", "3dede2522bb0886c95667b082987a87f"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_USEEXTRAASTITLE, + ADGF_USEEXTRAASTITLE | ADGF_DEMO, Common::GUIO_NONE }, GType_ComposerV2 @@ -111,7 +111,11 @@ static const ComposerGameDescription gameDescriptions[] = { { "darby", 0, - AD_ENTRY1("install.inf", "e83cc20ee18a2e138da1aadfc640dff2"), + { + {"book.ini", 0, "7e3404c559d058521fff2aebe5c427a8", 2545}, + {"page99.rsc", 0, "49cc6b16caa1c5ec7d94a3c47eed9a02", 1286480}, + AD_LISTEND + }, Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, @@ -120,6 +124,19 @@ static const ComposerGameDescription gameDescriptions[] = { GType_ComposerV2 }, + { + { + "darby", + 0, + AD_ENTRY1("Darby the Dragon.ini", "d81f9214936fa70d42fc578908d4bb3d"), + Common::EN_ANY, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_ComposerV2 + }, + { // Provided by Strangerke, "CD-Rom 100% Malin" Pack { "darby", @@ -137,7 +154,11 @@ static const ComposerGameDescription gameDescriptions[] = { { "gregory", 0, - AD_ENTRY1("install.inf", "b7e9d6f7949d412dad0a183375069844"), + { + {"book.ini", 0, "14a562dcf361773445255af9f3e94790", 2234}, + {"page99.rsc", 0, "01f9381162467e052dfd4c704169ef3e", 388644}, + AD_LISTEND + }, Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, @@ -146,6 +167,19 @@ static const ComposerGameDescription gameDescriptions[] = { GType_ComposerV2 }, + { + { + "gregory", + 0, + AD_ENTRY1("Gregory.ini", "fa82f14731f28c7379c5a106df07a0d6"), + Common::EN_ANY, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_ComposerV2 + }, + { // Provided by Strangerke, "CD-Rom 100% Malin" Pack { "gregory", @@ -159,11 +193,15 @@ static const ComposerGameDescription gameDescriptions[] = { GType_ComposerV2 }, - { + { // Provided by sev { "princess", 0, - AD_ENTRY1s("install.inf", "f1cf45db3c4c54a0d2d89d359af8f334", 244), + { + {"book.ini", 0, "fb32572577b9a41ba299825ef1e3181e", 966}, + {"page99.rsc", 0, "fd5ebd3b5e36c4651c50241619525355", 45418}, + AD_LISTEND + }, Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, @@ -172,11 +210,15 @@ static const ComposerGameDescription gameDescriptions[] = { GType_ComposerV2 }, - { + { // Provided by sev { "sleepingcub", 0, - AD_ENTRY1s("install.inf", "1092e753b8692463f41b8c0b1931398e", 251), + { + {"book.ini", 0, "0d329e592387009c6387a733a3ea2235", 964}, + {"page99.rsc", 0, "219fbd9bd2ff87c7023814405d753145", 46916}, + AD_LISTEND + }, Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, @@ -192,10 +234,21 @@ static const ComposerGameDescription gameDescriptions[] = { using namespace Composer; +// we match from data too, to stop detection from a non-top-level directory +const static char *directoryGlobs[] = { + "data", + "programs", + "princess", + "sleepcub", + 0 +}; + class ComposerMetaEngine : public AdvancedMetaEngine { public: ComposerMetaEngine() : AdvancedMetaEngine(Composer::gameDescriptions, sizeof(Composer::ComposerGameDescription), composerGames) { _singleid = "composer"; + _maxScanDepth = 2; + _directoryGlobs = directoryGlobs; } virtual const char *getName() const { diff --git a/engines/composer/scripting.cpp b/engines/composer/scripting.cpp index d85bd524e0..1989919233 100644 --- a/engines/composer/scripting.cpp +++ b/engines/composer/scripting.cpp @@ -160,7 +160,7 @@ void ComposerEngine::setArg(uint16 arg, uint16 type, uint16 val) { void ComposerEngine::runScript(uint16 id) { if (!hasResource(ID_SCRP, id)) { - warning("ignoring attempt to run script %d, because it doesn't exist", id); + debug(1, "ignoring attempt to run script %d, because it doesn't exist", id); return; } @@ -531,7 +531,7 @@ int16 ComposerEngine::scriptFuncCall(uint16 id, int16 param1, int16 param2, int1 return 0; case kFuncQueueScript: debug(3, "kFuncQueueScript(%d, %d, %d)", param1, param2, param3); - _queuedScripts[param1]._baseTime = _system->getMillis(); + _queuedScripts[param1]._baseTime = _currentTime; _queuedScripts[param1]._duration = 10 * param2; _queuedScripts[param1]._count = 0xffffffff; _queuedScripts[param1]._scriptId = param3; @@ -642,7 +642,7 @@ int16 ComposerEngine::scriptFuncCall(uint16 id, int16 param1, int16 param2, int1 return 1; case kFuncQueueScriptOnce: debug(3, "kFuncQueueScriptOnce(%d, %d, %d)", param1, param2, param3); - _queuedScripts[param1]._baseTime = _system->getMillis(); + _queuedScripts[param1]._baseTime = _currentTime; _queuedScripts[param1]._duration = 10 * param2; _queuedScripts[param1]._count = 1; _queuedScripts[param1]._scriptId = param3; diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp index 893e321b79..c4108cc0c7 100644 --- a/engines/draci/game.cpp +++ b/engines/draci/game.cpp @@ -39,7 +39,7 @@ namespace Draci { -static const char *dialoguePath = "ROZH"; +static const char *const dialoguePath = "ROZH"; static double real_to_double(byte real[6]); diff --git a/engines/draci/saveload.cpp b/engines/draci/saveload.cpp index 78315d1a97..b3bf0cbcd8 100644 --- a/engines/draci/saveload.cpp +++ b/engines/draci/saveload.cpp @@ -33,7 +33,7 @@ namespace Draci { -static const char *draciIdentString = "DRACI"; +static const char *const draciIdentString = "DRACI"; bool readSavegameHeader(Common::InSaveFile *in, DraciSavegameHeader &header) { char saveIdentBuffer[6]; diff --git a/engines/drascula/drascula.h b/engines/drascula/drascula.h index 5ec4684723..6f98c50fdc 100644 --- a/engines/drascula/drascula.h +++ b/engines/drascula/drascula.h @@ -495,6 +495,8 @@ public: void updateVolume(Audio::Mixer::SoundType soundType, int prevVolume); void volumeControls(); bool saveLoadScreen(); + void loadSaveNames(); + void saveSaveNames(); void print_abc(const char *, int, int); void delay(int ms); bool confirmExit(); @@ -775,6 +777,7 @@ private: RoomUpdate *_roomPreUpdates, *_roomUpdates; RoomTalkAction *_roomActions; TalkSequenceCommand *_talkSequences; + char _saveNames[10][23]; char **loadTexts(Common::File &in); void freeTexts(char **ptr); diff --git a/engines/drascula/saveload.cpp b/engines/drascula/saveload.cpp index 664a082eb4..c8622f3c92 100644 --- a/engines/drascula/saveload.cpp +++ b/engines/drascula/saveload.cpp @@ -26,20 +26,26 @@ namespace Drascula { -bool DrasculaEngine::saveLoadScreen() { - char names[10][23]; - Common::String file; - int n, n2, num_sav = 0, y = 27; +/** + * Loads the save names from the EPA index file. + * + * TODO: We should move the save names in their respective save files and get + * rid of this completely. A good example is the sword1 engine, which also used + * to have an index file for its saves, that has been removed. + * sword1 contains code that converts the old index-based saves into the new + * format without the index file, so we could apply this idea to drascula as + * well. + */ +void DrasculaEngine::loadSaveNames() { Common::InSaveFile *sav; - - clearRoom(); - Common::String fileEpa = Common::String::format("%s.epa", _targetName.c_str()); + + // Create and initialize the index file, if it doesn't exist if (!(sav = _saveFileMan->openForLoading(fileEpa))) { Common::OutSaveFile *epa; if (!(epa = _saveFileMan->openForSaving(fileEpa))) error("Can't open %s file", fileEpa.c_str()); - for (n = 0; n < NUM_SAVES; n++) + for (int n = 0; n < NUM_SAVES; n++) epa->writeString("*\n"); epa->finalize(); delete epa; @@ -47,11 +53,47 @@ bool DrasculaEngine::saveLoadScreen() { error("Can't open %s file", fileEpa.c_str()); } } - for (n = 0; n < NUM_SAVES; n++) { - strncpy(names[n], sav->readLine().c_str(), 23); - names[n][22] = '\0'; // make sure the savegame name is 0-terminated + + // Load the index file + for (int n = 0; n < NUM_SAVES; n++) { + strncpy(_saveNames[n], sav->readLine().c_str(), 23); + _saveNames[n][22] = '\0'; // make sure the savegame name is 0-terminated } delete sav; +} + +/** + * Saves the save names into the EPA index file. + * + * TODO: We should move the save names in their respective save files and get + * rid of this completely. A good example is the sword1 engine, which also used + * to have an index file for its saves, that has been removed. + * sword1 contains code that converts the old index-based saves into the new + * format without the index file, so we could apply this idea to drascula as + * well. + */ +void DrasculaEngine::saveSaveNames() { + Common::OutSaveFile *tsav; + Common::String fileEpa = Common::String::format("%s.epa", _targetName.c_str()); + + if (!(tsav = _saveFileMan->openForSaving(fileEpa))) { + error("Can't open %s file", fileEpa.c_str()); + } + for (int n = 0; n < NUM_SAVES; n++) { + tsav->writeString(_saveNames[n]); + tsav->writeString("\n"); + } + tsav->finalize(); + delete tsav; +} + +bool DrasculaEngine::saveLoadScreen() { + Common::String file; + int n, n2, num_sav = 0, y = 27; + + clearRoom(); + + loadSaveNames(); loadPic("savescr.alg", bgSurface, HALF_PAL); @@ -66,7 +108,7 @@ bool DrasculaEngine::saveLoadScreen() { y = 27; copyBackground(); for (n = 0; n < NUM_SAVES; n++) { - print_abc(names[n], 116, y); + print_abc(_saveNames[n], 116, y); y = y + 9; } print_abc(select, 117, 15); @@ -79,33 +121,24 @@ bool DrasculaEngine::saveLoadScreen() { delay(50); for (n = 0; n < NUM_SAVES; n++) { if (mouseX > 115 && mouseY > y + (9 * n) && mouseX < 115 + 175 && mouseY < y + 10 + (9 * n)) { - strcpy(select, names[n]); + strcpy(select, _saveNames[n]); if (strcmp(select, "*")) selectionMade = 1; else { enterName(); - strcpy(names[n], select); + strcpy(_saveNames[n], select); if (selectionMade == 1) { file = Common::String::format("%s%02d", _targetName.c_str(), n + 1); saveGame(file.c_str()); - Common::OutSaveFile *tsav; - if (!(tsav = _saveFileMan->openForSaving(fileEpa))) { - error("Can't open %s file", fileEpa.c_str()); - } - for (n = 0; n < NUM_SAVES; n++) { - tsav->writeString(names[n]); - tsav->writeString("\n"); - } - tsav->finalize(); - delete tsav; + saveSaveNames(); } } print_abc(select, 117, 15); y = 27; for (n2 = 0; n2 < NUM_SAVES; n2++) { - print_abc(names[n2], 116, y); + print_abc(_saveNames[n2], 116, y); y = y + 9; } if (selectionMade == 1) { @@ -117,27 +150,18 @@ bool DrasculaEngine::saveLoadScreen() { if (mouseX > 117 && mouseY > 15 && mouseX < 295 && mouseY < 24 && selectionMade == 1) { enterName(); - strcpy(names[num_sav], select); + strcpy(_saveNames[num_sav], select); print_abc(select, 117, 15); y = 27; for (n2 = 0; n2 < NUM_SAVES; n2++) { - print_abc(names[n2], 116, y); + print_abc(_saveNames[n2], 116, y); y = y + 9; } if (selectionMade == 1) { file = Common::String::format("%s%02d", _targetName.c_str(), n + 1); saveGame(file.c_str()); - Common::OutSaveFile *tsav; - if (!(tsav = _saveFileMan->openForSaving(fileEpa))) { - error("Can't open %s file", fileEpa.c_str()); - } - for (n = 0; n < NUM_SAVES; n++) { - tsav->writeString(names[n]); - tsav->writeString("\n"); - } - tsav->finalize(); - delete tsav; + saveSaveNames(); } } @@ -149,16 +173,7 @@ bool DrasculaEngine::saveLoadScreen() { break; } else if (mouseX > 208 && mouseY > 123 && mouseX < 282 && mouseY < 149 && selectionMade == 1) { saveGame(file.c_str()); - Common::OutSaveFile *tsav; - if (!(tsav = _saveFileMan->openForSaving(fileEpa))) { - error("Can't open %s file", fileEpa.c_str()); - } - for (n = 0; n < NUM_SAVES; n++) { - tsav->writeString(names[n]); - tsav->writeString("\n"); - } - tsav->finalize(); - delete tsav; + saveSaveNames(); } else if (mouseX > 168 && mouseY > 154 && mouseX < 242 && mouseY < 180) break; else if (selectionMade == 0) { diff --git a/engines/dreamweb/backdrop.cpp b/engines/dreamweb/backdrop.cpp index cba1f14c5e..ffcad5b6bf 100644 --- a/engines/dreamweb/backdrop.cpp +++ b/engines/dreamweb/backdrop.cpp @@ -21,8 +21,6 @@ */ #include "dreamweb/dreamweb.h" -#include "engines/util.h" -#include "graphics/surface.h" namespace DreamGen { @@ -150,10 +148,10 @@ void DreamGenContext::showallobs() { data.word(kFramesad) = kFrames; const Frame *frames = (const Frame *)segRef(data.word(kFrsegment)).ptr(0, 0); - ObjData *setEntries = (ObjData *)segRef(data.word(kSetdat)).ptr(0, 128 * sizeof(ObjData)); + SetObject *setEntries = (SetObject *)segRef(data.word(kSetdat)).ptr(0, 128 * sizeof(SetObject)); for (size_t i = 0; i < 128; ++i) { - ObjData *setEntry = setEntries + i; - if (getmapad(setEntry->b58) == 0) + SetObject *setEntry = setEntries + i; + if (getmapad(setEntry->mapad) == 0) continue; uint8 currentFrame = setEntry->b18[0]; data.word(kCurrentframe) = currentFrame; @@ -162,7 +160,7 @@ void DreamGenContext::showallobs() { calcfrframe(); uint16 x, y; finalframe(&x, &y); - setEntry->b17 = setEntry->b18[0]; + setEntry->index = setEntry->b18[0]; if ((setEntry->type == 0) && (setEntry->priority != 5) && (setEntry->priority != 6)) { x += data.word(kMapadx); y += data.word(kMapady); @@ -253,9 +251,9 @@ void DreamGenContext::showallfree() { data.word(kDataad) = kFrframedata; data.word(kFramesad) = kFrframes; data.byte(kCurrentfree) = 0; - const uint8 *mapData = segRef(data.word(kFreedat)).ptr(2, 0); + const DynObject *freeObjects = (const DynObject *)segRef(data.word(kFreedat)).ptr(0, 0); for(size_t i = 0; i < 80; ++i) { - uint8 mapad = getmapad(mapData); + uint8 mapad = getmapad(freeObjects[i].mapad); if (mapad != 0) { data.word(kCurrentframe) = 3 * data.byte(kCurrentfree); uint8 width, height; @@ -277,7 +275,57 @@ void DreamGenContext::showallfree() { } ++data.byte(kCurrentfree); - mapData += 16; + } +} + +void DreamGenContext::drawflags() { + uint8 *mapFlags = segRef(data.word(kBuffers)).ptr(kMapflags, 0); + const uint8 *mapData = segRef(data.word(kMapdata)).ptr(kMap + data.byte(kMapy) * kMapwidth + data.byte(kMapx), 0); + const uint8 *backdropFlags = segRef(data.word(kBackdrop)).ptr(kFlags, 0); + + for (size_t i = 0; i < 10; ++i) { + for (size_t j = 0; j < 11; ++j) { + uint8 tile = mapData[i * kMapwidth + j]; + mapFlags[0] = backdropFlags[2 * tile + 0]; + mapFlags[1] = backdropFlags[2 * tile + 1]; + mapFlags[2] = tile; + mapFlags += 3; + } + } +} + +void DreamGenContext::showallex() { + data.word(kListpos) = kExlist; + memset(segRef(data.word(kBuffers)).ptr(kExlist, 100 * 5), 0xff, 100 * 5); + + data.word(kFrsegment) = data.word(kExtras); + data.word(kDataad) = kExframedata; + data.word(kFramesad) = kExframes; + data.byte(kCurrentex) = 0; + DynObject *objects = (DynObject *)segRef(data.word(kExtras)).ptr(kExdata, sizeof(DynObject)); + for (size_t i = 0; i < 100; ++i, ++data.byte(kCurrentex)) { + DynObject *object = objects + i; + if (object->mapad[0] == 0xff) + continue; + if (object->currentLocation != data.byte(kReallocation)) + continue; + if (getmapad(object->mapad) == 0) + continue; + data.word(kCurrentframe) = 3 * data.byte(kCurrentex); + uint8 width, height; + calcfrframe(&width, &height); + uint16 x, y; + finalframe(&x, &y); + if ((width != 0) || (height != 0)) { + showframe((Frame *)segRef(data.word(kFrsegment)).ptr(0, 0), x + data.word(kMapadx), y + data.word(kMapady), data.word(kCurrentframe) & 0xff, 0); + ObjPos *objPos = (ObjPos *)segRef(data.word(kBuffers)).ptr(data.word(kListpos), sizeof(ObjPos)); + objPos->xMin = data.byte(kSavex); + objPos->yMin = data.byte(kSavey); + objPos->xMax = data.byte(kSavesize + 0) + data.byte(kSavex); + objPos->yMax = data.byte(kSavesize + 1) + data.byte(kSavey); + objPos->index = i; + data.word(kListpos) += sizeof(ObjPos); + } } } diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 0ee8c50cd3..1bcb34c211 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -2032,24 +2032,6 @@ gottrainframe: showgamereel(); } -void DreamGenContext::addtopeoplelist() { - STACK_CHECK; - push(es); - push(bx); - push(bx); - cl = es.byte(bx+7); - ax = es.word(bx+3); - bx = data.word(kListpos); - es = data.word(kBuffers); - es.word(bx) = ax; - ax = pop(); - es.word(bx+2) = ax; - es.byte(bx+4) = cl; - bx = pop(); - es = pop(); - _add(data.word(kListpos), 5); -} - void DreamGenContext::checkspeed() { STACK_CHECK; _cmp(data.byte(kLastweapon), -1); @@ -2068,14 +2050,6 @@ forcenext: _cmp(al, al); } -void DreamGenContext::delsprite() { - STACK_CHECK; - di = bx; - cx = (32); - al = 255; - _stosb(cx, true); -} - void DreamGenContext::checkforexit() { STACK_CHECK; cl = data.byte(kRyanx); @@ -2411,30 +2385,6 @@ foundlineend: goto lookforlinestart; } -void DreamGenContext::getblockofpixel() { - STACK_CHECK; - push(cx); - push(es); - push(di); - ax = data.word(kMapxstart); - _add(cl, al); - ax = data.word(kMapystart); - _add(ch, al); - checkone(); - _and(cl, 1); - if (!flags.z()) - goto failrain; - di = pop(); - es = pop(); - cx = pop(); - return; -failrain: - di = pop(); - es = pop(); - cx = pop(); - al = 0; -} - void DreamGenContext::liftnoise() { STACK_CHECK; _cmp(data.byte(kReallocation), 5); @@ -2578,64 +2528,6 @@ bigroom: _add(data.byte(kMapysize), 8); } -void DreamGenContext::dumpeverything() { - STACK_CHECK; - es = data.word(kBuffers); - bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)); -dumpevery1: - ax = es.word(bx); - cx = es.word(bx+2); - _cmp(ax, 0x0ffff); - if (flags.z()) - goto finishevery1; - _cmp(ax, es.word(bx+(40*5))); - if (!flags.z()) - goto notskip1; - _cmp(cx, es.word(bx+(40*5)+2)); - if (flags.z()) - goto skip1; -notskip1: - push(bx); - push(es); - push(ds); - bl = ah; - bh = 0; - ah = 0; - di = ax; - _add(di, data.word(kMapadx)); - _add(bx, data.word(kMapady)); - multidump(); - ds = pop(); - es = pop(); - bx = pop(); -skip1: - _add(bx, 5); - goto dumpevery1; -finishevery1: - bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40))+(40*5); -dumpevery2: - ax = es.word(bx); - cx = es.word(bx+2); - _cmp(ax, 0x0ffff); - if (flags.z()) - return /* (finishevery2) */; - push(bx); - push(es); - push(ds); - bl = ah; - bh = 0; - ah = 0; - di = ax; - _add(di, data.word(kMapadx)); - _add(bx, data.word(kMapady)); - multidump(); - ds = pop(); - es = pop(); - bx = pop(); - _add(bx, 5); - goto dumpevery2; -} - void DreamGenContext::loadpalfromiff() { STACK_CHECK; dx = 2481; @@ -2675,83 +2567,6 @@ nought: goto palloop; } -void DreamGenContext::paneltomap() { - STACK_CHECK; - di = data.word(kMapxstart); - _add(di, data.word(kMapadx)); - bx = data.word(kMapystart); - _add(bx, data.word(kMapady)); - ds = data.word(kMapstore); - si = 0; - cl = data.byte(kMapxsize); - ch = data.byte(kMapysize); - multiget(); -} - -void DreamGenContext::maptopanel() { - STACK_CHECK; - di = data.word(kMapxstart); - _add(di, data.word(kMapadx)); - bx = data.word(kMapystart); - _add(bx, data.word(kMapady)); - ds = data.word(kMapstore); - si = 0; - cl = data.byte(kMapxsize); - ch = data.byte(kMapysize); - multiput(); -} - -void DreamGenContext::dumpmap() { - STACK_CHECK; - di = data.word(kMapxstart); - _add(di, data.word(kMapadx)); - bx = data.word(kMapystart); - _add(bx, data.word(kMapady)); - cl = data.byte(kMapxsize); - ch = data.byte(kMapysize); - multidump(); -} - -void DreamGenContext::pixelcheckset() { - STACK_CHECK; - push(ax); - _sub(al, es.byte(bx)); - _sub(ah, es.byte(bx+1)); - push(es); - push(bx); - push(cx); - push(ax); - al = es.byte(bx+4); - getsetad(); - al = es.byte(bx+17); - es = data.word(kSetframes); - bx = (0); - ah = 0; - cx = 6; - _mul(cx); - _add(bx, ax); - ax = pop(); - push(ax); - al = ah; - ah = 0; - cl = es.byte(bx); - ch = 0; - _mul(cx); - cx = pop(); - ch = 0; - _add(ax, cx); - _add(ax, es.word(bx+2)); - bx = ax; - _add(bx, (0+2080)); - al = es.byte(bx); - dl = al; - cx = pop(); - bx = pop(); - es = pop(); - ax = pop(); - _cmp(dl, 0); -} - void DreamGenContext::createpanel() { STACK_CHECK; di = 0; @@ -2797,99 +2612,6 @@ void DreamGenContext::createpanel2() { showframe(); } -void DreamGenContext::delthisone() { - STACK_CHECK; - push(ax); - push(ax); - al = ah; - ah = 0; - _add(ax, data.word(kMapady)); - bx = (320); - _mul(bx); - bx = pop(); - bh = 0; - _add(bx, data.word(kMapadx)); - _add(ax, bx); - di = ax; - ax = pop(); - push(ax); - al = ah; - ah = 0; - bx = 22*8; - _mul(bx); - bx = pop(); - bh = 0; - _add(ax, bx); - si = ax; - es = data.word(kWorkspace); - ds = data.word(kMapstore); - dl = cl; - dh = 0; - ax = (320); - _sub(ax, dx); - _neg(dx); - _add(dx, 22*8); -deloneloop: - push(cx); - ch = 0; - _movsb(cx, true); - cx = pop(); - _add(di, ax); - _add(si, dx); - _dec(ch); - if (!flags.z()) - goto deloneloop; -} - -void DreamGenContext::transferinv() { - STACK_CHECK; - di = data.word(kExframepos); - push(di); - al = data.byte(kExpos); - ah = 0; - bx = ax; - _add(ax, ax); - _add(ax, bx); - _inc(ax); - cx = 6; - _mul(cx); - es = data.word(kExtras); - bx = (0); - _add(bx, ax); - _add(di, (0+2080)); - push(bx); - al = data.byte(kItemtotran); - ah = 0; - bx = ax; - _add(ax, ax); - _add(ax, bx); - _inc(ax); - cx = 6; - _mul(cx); - ds = data.word(kFreeframes); - bx = (0); - _add(bx, ax); - si = (0+2080); - al = ds.byte(bx); - ah = 0; - cl = ds.byte(bx+1); - ch = 0; - _add(si, ds.word(bx+2)); - dx = ds.word(bx+4); - bx = pop(); - es.byte(bx+0) = al; - es.byte(bx+1) = cl; - es.word(bx+4) = dx; - _mul(cx); - cx = ax; - push(cx); - _movsb(cx, true); - cx = pop(); - ax = pop(); - es.word(bx+2) = ax; - _add(data.word(kExframepos), cx); -} - void DreamGenContext::transfermap() { STACK_CHECK; di = data.word(kExframepos); @@ -3926,26 +3648,6 @@ realcreditsearly: data.byte(kLasthardkey) = 0; } -void DreamGenContext::waitframes() { - STACK_CHECK; - push(di); - push(bx); - push(es); - push(si); - push(ds); - readmouse(); - showpointer(); - vsync(); - dumppointer(); - delpointer(); - ax = data.word(kMousebutton); - ds = pop(); - si = pop(); - es = pop(); - bx = pop(); - di = pop(); -} - void DreamGenContext::monprint() { STACK_CHECK; data.byte(kKerning) = 1; @@ -4032,51 +3734,6 @@ nottrigger2: data.byte(kKerning) = 0; } -void DreamGenContext::fillryan() { - STACK_CHECK; - es = data.word(kBuffers); - di = (0+(228*13)+32); - findallryan(); - si = (0+(228*13)+32); - al = data.byte(kRyanpage); - ah = 0; - cx = 20; - _mul(cx); - _add(si, ax); - di = (80); - bx = (58); - cx = 2; -ryanloop2: - push(cx); - push(di); - push(bx); - cx = 5; -ryanloop1: - push(cx); - push(di); - push(bx); - ax = es.word(si); - _add(si, 2); - push(si); - push(es); - obtoinv(); - es = pop(); - si = pop(); - bx = pop(); - di = pop(); - cx = pop(); - _add(di, (44)); - if (--cx) - goto ryanloop1; - bx = pop(); - di = pop(); - cx = pop(); - _add(bx, (44)); - if (--cx) - goto ryanloop2; - showryanpage(); -} - void DreamGenContext::fillopen() { STACK_CHECK; deltextline(); @@ -4121,41 +3778,6 @@ nextopenslot: undertextline(); } -void DreamGenContext::findallryan() { - STACK_CHECK; - push(di); - cx = 30; - ax = 0x0ffff; - _stosw(cx, true); - di = pop(); - cl = 4; - ds = data.word(kExtras); - bx = (0+2080+30000); - ch = 0; -findryanloop: - _cmp(ds.byte(bx+2), cl); - if (!flags.z()) - goto notinryaninv; - _cmp(ds.byte(bx+3), 255); - if (!flags.z()) - goto notinryaninv; - al = ds.byte(bx+4); - ah = 0; - push(di); - _add(di, ax); - _add(di, ax); - al = ch; - ah = 4; - _stosw(); - di = pop(); -notinryaninv: - _add(bx, 16); - _inc(ch); - _cmp(ch, (114)); - if (!flags.z()) - goto findryanloop; -} - void DreamGenContext::findallopen() { STACK_CHECK; push(di); @@ -4229,82 +3851,6 @@ findopen2a: goto findopen1a; } -void DreamGenContext::obtoinv() { - STACK_CHECK; - push(bx); - push(es); - push(si); - push(ax); - push(ax); - push(di); - push(bx); - ds = data.word(kIcons1); - _sub(di, 2); - _sub(bx, 1); - al = 10; - ah = 0; - showframe(); - bx = pop(); - di = pop(); - ax = pop(); - _cmp(al, 255); - if (flags.z()) - goto finishfill; - push(bx); - push(di); - push(ax); - ds = data.word(kExtras); - _cmp(ah, 4); - if (flags.z()) - goto isanextra; - ds = data.word(kFreeframes); -isanextra: - cl = al; - _add(al, al); - _add(al, cl); - _inc(al); - ah = 128; - _add(bx, 19); - _add(di, 18); - showframe(); - ax = pop(); - di = pop(); - bx = pop(); - push(bx); - getanyaddir(); - isitworn(); - bx = pop(); - if (!flags.z()) - goto finishfill; - ds = data.word(kIcons1); - _sub(di, 3); - _sub(bx, 2); - al = 7; - ah = 0; - showframe(); -finishfill: - ax = pop(); - si = pop(); - es = pop(); - bx = pop(); -} - -void DreamGenContext::isitworn() { - STACK_CHECK; - al = es.byte(bx+12); - _cmp(al, 'W'-'A'); - if (!flags.z()) - return /* (notworn) */; - al = es.byte(bx+13); - _cmp(al, 'E'-'A'); -} - -void DreamGenContext::makeworn() { - STACK_CHECK; - es.byte(bx+12) = 'W'-'A'; - es.byte(bx+13) = 'E'-'A'; -} - void DreamGenContext::examineob() { STACK_CHECK; data.byte(kPointermode) = 0; @@ -4351,6 +3897,9 @@ waitexam: bx = offset_withlist1; notuseinv: checkcoords(); + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto stopwaiting; _cmp(data.byte(kExamagain), 0); if (flags.z()) goto norex; @@ -4359,6 +3908,7 @@ norex: _cmp(data.byte(kGetback), 0); if (flags.z()) goto waitexam; +stopwaiting: data.byte(kPickup) = 0; _cmp(data.word(kWatchingtime), 0); if (!flags.z()) @@ -4451,30 +4001,6 @@ void DreamGenContext::openinv() { data.byte(kCommandtype) = 255; } -void DreamGenContext::showryanpage() { - STACK_CHECK; - ds = data.word(kIcons1); - di = (80)+167; - bx = (58)-12; - al = 12; - ah = 0; - showframe(); - al = 13; - _add(al, data.byte(kRyanpage)); - push(ax); - al = data.byte(kRyanpage); - ah = 0; - cx = 18; - _mul(cx); - ds = data.word(kIcons1); - di = (80)+167; - _add(di, ax); - bx = (58)-12; - ax = pop(); - ah = 0; - showframe(); -} - void DreamGenContext::openob() { STACK_CHECK; al = data.byte(kOpenedob); @@ -4506,28 +4032,6 @@ void DreamGenContext::openob() { cs.word(bx) = ax; } -void DreamGenContext::obicons() { - STACK_CHECK; - al = data.byte(kCommand); - getanyad(); - _cmp(al, 255); - if (flags.z()) - goto cantopenit; - ds = data.word(kIcons2); - di = 210; - bx = 1; - al = 4; - ah = 0; - showframe(); -cantopenit: - ds = data.word(kIcons2); - di = 260; - bx = 1; - al = 1; - ah = 0; - showframe(); -} - void DreamGenContext::examicon() { STACK_CHECK; ds = data.word(kIcons2); @@ -4538,38 +4042,6 @@ void DreamGenContext::examicon() { showframe(); } -void DreamGenContext::obpicture() { - STACK_CHECK; - al = data.byte(kCommand); - ah = data.byte(kObjecttype); - _cmp(ah, 1); - if (flags.z()) - return /* (setframe) */; - _cmp(ah, 4); - if (flags.z()) - goto exframe; - ds = data.word(kFreeframes); - di = 160; - bx = 68; - cl = al; - _add(al, al); - _add(al, cl); - _inc(al); - ah = 128; - showframe(); - return; -exframe: - ds = data.word(kExtras); - di = 160; - bx = 68; - cl = al; - _add(al, al); - _add(al, cl); - _inc(al); - ah = 128; - showframe(); -} - void DreamGenContext::describeob() { STACK_CHECK; getobtextstart(); @@ -4761,19 +4233,6 @@ foundmatch: bx = pop(); } -void DreamGenContext::findnextcolon() { - STACK_CHECK; -isntcolon: - al = es.byte(si); - _inc(si); - _cmp(al, 0); - if (flags.z()) - return /* (endofcolon) */; - _cmp(al, ':'); - if (!flags.z()) - goto isntcolon; -} - void DreamGenContext::inventory() { STACK_CHECK; _cmp(data.byte(kMandead), 1); @@ -4822,7 +4281,7 @@ doopeninv: data.byte(kOpenedob) = 255; goto waitexam; return; -/*continuing to unbounded code: examineagain from examineob:3-66*/ +/*continuing to unbounded code: examineagain from examineob:3-69*/ examineagain: data.byte(kInmaparea) = 0; data.byte(kExamagain) = 0; @@ -4865,6 +4324,9 @@ waitexam: bx = offset_withlist1; notuseinv: checkcoords(); + _cmp(data.byte(kQuitrequested), 0); + if (!flags.z()) + goto stopwaiting; _cmp(data.byte(kExamagain), 0); if (flags.z()) goto norex; @@ -4873,6 +4335,7 @@ norex: _cmp(data.byte(kGetback), 0); if (flags.z()) goto waitexam; +stopwaiting: data.byte(kPickup) = 0; _cmp(data.word(kWatchingtime), 0); if (!flags.z()) @@ -6064,24 +5527,6 @@ moretext: goto moretext; } -void DreamGenContext::getexpos() { - STACK_CHECK; - es = data.word(kExtras); - al = 0; - di = (0+2080+30000); -tryanotherex: - _cmp(es.byte(di+2), 255); - if (flags.z()) - goto foundnewex; - _add(di, 16); - _inc(al); - _cmp(al, (114)); - if (!flags.z()) - goto tryanotherex; -foundnewex: - data.byte(kExpos) = al; -} - void DreamGenContext::purgealocation() { STACK_CHECK; push(ax); @@ -6341,133 +5786,6 @@ void DreamGenContext::drawfloor() { es = pop(); } -void DreamGenContext::drawflags() { - STACK_CHECK; - es = data.word(kBuffers); - di = (0+(228*13)+32+60+(32*32)); - al = data.byte(kMapy); - ah = 0; - cx = (66); - _mul(cx); - bl = data.byte(kMapx); - bh = 0; - _add(ax, bx); - si = (0); - _add(si, ax); - cx = 10; -_tmp28: - push(cx); - cx = 11; -_tmp28a: - ds = data.word(kMapdata); - _lodsb(); - ds = data.word(kBackdrop); - push(si); - push(ax); - ah = 0; - _add(ax, ax); - si = (0); - _add(si, ax); - _movsw(); - ax = pop(); - _stosb(); - si = pop(); - if (--cx) - goto _tmp28a; - _add(si, (66)-11); - cx = pop(); - if (--cx) - goto _tmp28; -} - -void DreamGenContext::showallex() { - STACK_CHECK; - es = data.word(kBuffers); - bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)); - data.word(kListpos) = bx; - di = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)); - cx = 100*5; - al = 255; - _stosb(cx, true); - es = data.word(kExtras); - data.word(kFrsegment) = es; - ax = (0); - data.word(kDataad) = ax; - ax = (0+2080); - data.word(kFramesad) = ax; - data.byte(kCurrentex) = 0; - si = (0+2080+30000)+2; - cx = 0; -exloop: - push(cx); - push(si); - es = data.word(kExtras); - push(si); - ch = 0; - _cmp(es.byte(si), 255); - if (flags.z()) - goto notinroom; - al = es.byte(si-2); - _cmp(al, data.byte(kReallocation)); - if (!flags.z()) - goto notinroom; - getmapad(); -notinroom: - si = pop(); - _cmp(ch, 0); - if (flags.z()) - goto blankex; - al = data.byte(kCurrentex); - ah = 0; - dx = ax; - _add(ax, ax); - _add(ax, dx); - data.word(kCurrentframe) = ax; - push(es); - push(si); - calcfrframe(); - es = data.word(kMapstore); - ds = data.word(kFrsegment); - finalframe(); - si = pop(); - es = pop(); - _cmp(cx, 0); - if (flags.z()) - goto blankex; - ax = data.word(kCurrentframe); - ah = 0; - _add(di, data.word(kMapadx)); - _add(bx, data.word(kMapady)); - showframe(); - si = data.word(kListpos); - es = data.word(kBuffers); - al = data.byte(kSavex); - ah = data.byte(kSavey); - es.word(si) = ax; - cx = ax; - ax = data.word(kSavesize); - _add(al, cl); - _add(ah, ch); - es.word(si+2) = ax; - ax = pop(); - cx = pop(); - push(cx); - push(ax); - es.byte(si+4) = cl; - _add(si, 5); - data.word(kListpos) = si; -blankex: - _inc(data.byte(kCurrentex)); - si = pop(); - cx = pop(); - _add(si, 16); - _inc(cx); - _cmp(cx, 100); - if (flags.z()) - return /* (finex) */; - goto exloop; -} - void DreamGenContext::autolook() { STACK_CHECK; ax = data.word(kMousex); @@ -8815,91 +8133,6 @@ douse: useroutine(); } -void DreamGenContext::useroutine() { - STACK_CHECK; - _cmp(data.byte(kReallocation), 50); - if (flags.c()) - goto nodream7; - _cmp(data.byte(kPointerpower), 0); - if (!flags.z()) - goto powerok; - return; -powerok: - data.byte(kPointerpower) = 0; -nodream7: - getanyad(); - dx = data; - ds = dx; - si = offset_uselist; -checkuselist: - push(si); - _lodsb(); - _sub(al, 'A'); - _cmp(al, es.byte(bx+12)); - if (!flags.z()) - goto failed; - _lodsb(); - _sub(al, 'A'); - _cmp(al, es.byte(bx+13)); - if (!flags.z()) - goto failed; - _lodsb(); - _sub(al, 'A'); - _cmp(al, es.byte(bx+14)); - if (!flags.z()) - goto failed; - _lodsb(); - _sub(al, 'A'); - _cmp(al, es.byte(bx+15)); - if (!flags.z()) - goto failed; - _lodsw(); - si = pop(); - __dispatch_call(ax); - return; -failed: - si = pop(); - _add(si, 6); - _cmp(ds.byte(si), 140); - if (!flags.z()) - goto checkuselist; - delpointer(); - getobtextstart(); - findnextcolon(); - _cmp(al, 0); - if (flags.z()) - goto cantuse2; - findnextcolon(); - _cmp(al, 0); - if (flags.z()) - goto cantuse2; - al = es.byte(si); - _cmp(al, 0); - if (flags.z()) - goto cantuse2; - usetext(); - cx = 400; - hangonp(); - putbackobstuff(); - return; -cantuse2: - createpanel(); - showpanel(); - showman(); - showexit(); - obicons(); - di = 33; - bx = 100; - al = 63; - dl = 241; - printmessage(); - worktoscreenm(); - cx = 50; - hangonp(); - putbackobstuff(); - data.byte(kCommandtype) = 255; -} - void DreamGenContext::wheelsound() { STACK_CHECK; al = 17; @@ -10902,23 +10135,6 @@ doselob: useroutine(); } -void DreamGenContext::compare() { - STACK_CHECK; - _sub(dl, 'A'); - _sub(dh, 'A'); - _sub(cl, 'A'); - _sub(ch, 'A'); - push(cx); - push(dx); - getanyaddir(); - dx = pop(); - cx = pop(); - _cmp(es.word(bx+12), cx); - if (!flags.z()) - return /* (comparefin) */; - _cmp(es.word(bx+14), dx); -} - void DreamGenContext::findsetobject() { STACK_CHECK; _sub(al, 'A'); @@ -11044,26 +10260,6 @@ notfoundinside: goto insideloop; } -void DreamGenContext::usetext() { - STACK_CHECK; - push(es); - push(si); - createpanel(); - showpanel(); - showman(); - showexit(); - obicons(); - si = pop(); - es = pop(); - di = 36; - bx = 104; - dl = 241; - al = 0; - ah = 0; - printdirect(); - worktoscreenm(); -} - void DreamGenContext::putbackobstuff() { STACK_CHECK; createpanel(); @@ -15109,88 +14305,6 @@ notzeronum: ch = 1; } -void DreamGenContext::walkandexamine() { - STACK_CHECK; - finishedwalking(); - if (!flags.z()) - return /* (noobselect) */; - al = data.byte(kWalkexamtype); - data.byte(kCommandtype) = al; - al = data.byte(kWalkexamnum); - data.byte(kCommand) = al; - data.byte(kWalkandexam) = 0; - _cmp(data.byte(kCommandtype), 5); - if (flags.z()) - return /* (noobselect) */; - examineob(); - return; -wantstowalk: - setwalk(); - data.byte(kReasseschanges) = 1; - return; -diff: - data.byte(kCommand) = al; - data.byte(kCommandtype) = ah; - _cmp(data.byte(kLinepointer), 254); - if (!flags.z()) - goto middleofwalk; - _cmp(data.word(kWatchingtime), 0); - if (!flags.z()) - goto middleofwalk; - al = data.byte(kFacing); - _cmp(al, data.byte(kTurntoface)); - if (!flags.z()) - goto middleofwalk; - _cmp(data.byte(kCommandtype), 3); - if (!flags.z()) - goto notblock; - bl = data.byte(kManspath); - _cmp(bl, data.byte(kPointerspath)); - if (!flags.z()) - goto dontcheck; - cl = data.byte(kRyanx); - _add(cl, 12); - ch = data.byte(kRyany); - _add(ch, 12); - checkone(); - _cmp(cl, 2); - if (flags.c()) - goto isblock; -dontcheck: - getflagunderp(); - _cmp(data.byte(kLastflag), 2); - if (flags.c()) - goto isblock; - _cmp(data.byte(kLastflag), 128); - if (!flags.c()) - goto isblock; - goto toofaraway; -notblock: - bl = data.byte(kManspath); - _cmp(bl, data.byte(kPointerspath)); - if (!flags.z()) - goto toofaraway; - _cmp(data.byte(kCommandtype), 3); - if (flags.z()) - goto isblock; - _cmp(data.byte(kCommandtype), 5); - if (flags.z()) - goto isaperson; - examineobtext(); - return; -middleofwalk: - blocknametext(); - return; -isblock: - blocknametext(); - return; -isaperson: - personnametext(); - return; -toofaraway: - walktotext(); -} - void DreamGenContext::mainscreen() { STACK_CHECK; data.byte(kInmaparea) = 0; @@ -15238,43 +14352,6 @@ alreadyrun: data.byte(kLastweapon) = 8; } -void DreamGenContext::checkcoords() { - STACK_CHECK; - _cmp(data.byte(kNewlocation), 255); - if (flags.z()) - goto loop048; - return; -loop048: - ax = cs.word(bx); - _cmp(ax, 0x0ffff); - if (flags.z()) - return /* (nonefound) */; - push(bx); - _cmp(data.word(kMousex), ax); - if (flags.l()) - goto over045; - ax = cs.word(bx+2); - _cmp(data.word(kMousex), ax); - if (!flags.l()) - goto over045; - ax = cs.word(bx+4); - _cmp(data.word(kMousey), ax); - if (flags.l()) - goto over045; - ax = cs.word(bx+6); - _cmp(data.word(kMousey), ax); - if (!flags.l()) - goto over045; - ax = cs.word(bx+8); - __dispatch_call(ax); - ax = pop(); - return; -over045: - bx = pop(); - _add(bx, 10); - goto loop048; -} - void DreamGenContext::identifyob() { STACK_CHECK; _cmp(data.word(kWatchingtime), 0); @@ -15338,105 +14415,6 @@ nothingund: blank(); } -void DreamGenContext::checkifset() { - STACK_CHECK; - es = data.word(kBuffers); - bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32))+(127*5); - cx = 127; -identifyset: - _cmp(es.byte(bx+4), 255); - if (flags.z()) - goto notasetid; - _cmp(al, es.byte(bx)); - if (flags.c()) - goto notasetid; - _cmp(al, es.byte(bx+2)); - if (!flags.c()) - goto notasetid; - _cmp(ah, es.byte(bx+1)); - if (flags.c()) - goto notasetid; - _cmp(ah, es.byte(bx+3)); - if (!flags.c()) - goto notasetid; - pixelcheckset(); - if (flags.z()) - goto notasetid; - isitdescribed(); - if (flags.z()) - goto notasetid; - al = es.byte(bx+4); - ah = 1; - obname(); - al = 0; - _cmp(al, 1); - return; -notasetid: - _sub(bx, 5); - _dec(cx); - _cmp(cx, -1); - if (!flags.z()) - goto identifyset; -} - -void DreamGenContext::checkifex() { - STACK_CHECK; - es = data.word(kBuffers); - bx = (0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5))+(99*5); - cx = 99; -identifyex: - _cmp(es.byte(bx+4), 255); - if (flags.z()) - goto notanexid; - _cmp(al, es.byte(bx)); - if (flags.c()) - goto notanexid; - _cmp(al, es.byte(bx+2)); - if (!flags.c()) - goto notanexid; - _cmp(ah, es.byte(bx+1)); - if (flags.c()) - goto notanexid; - _cmp(ah, es.byte(bx+3)); - if (!flags.c()) - goto notanexid; - al = es.byte(bx+4); - ah = 4; - obname(); - al = 1; - _cmp(al, 0); - return; -notanexid: - _sub(bx, 5); - _dec(cx); - _cmp(cx, -1); - if (!flags.z()) - goto identifyex; -} - -void DreamGenContext::isitdescribed() { - STACK_CHECK; - push(ax); - push(cx); - push(es); - push(bx); - al = es.byte(bx+4); - ah = 0; - _add(ax, ax); - bx = ax; - es = data.word(kSetdesc); - _add(bx, (0)); - ax = es.word(bx); - _add(ax, (0+(130*2))); - bx = ax; - dl = es.byte(bx); - bx = pop(); - es = pop(); - cx = pop(); - ax = pop(); - _cmp(dl, 0); -} - void DreamGenContext::findpathofpoint() { STACK_CHECK; push(ax); @@ -15524,118 +14502,6 @@ gotfirst: al = es.byte(bx+6); } -void DreamGenContext::turnpathon() { - STACK_CHECK; - push(ax); - push(ax); - cl = 255; - ch = data.byte(kRoomnum); - _add(ch, 100); - findormake(); - ax = pop(); - getroomspaths(); - ax = pop(); - _cmp(al, 255); - if (flags.z()) - return /* (nopathon) */; - ah = 0; - _add(ax, ax); - _add(ax, ax); - _add(ax, ax); - _add(bx, ax); - al = 255; - es.byte(bx+6) = al; -} - -void DreamGenContext::turnpathoff() { - STACK_CHECK; - push(ax); - push(ax); - cl = 0; - ch = data.byte(kRoomnum); - _add(ch, 100); - findormake(); - ax = pop(); - getroomspaths(); - ax = pop(); - _cmp(al, 255); - if (flags.z()) - return /* (nopathoff) */; - ah = 0; - _add(ax, ax); - _add(ax, ax); - _add(ax, ax); - _add(bx, ax); - al = 0; - es.byte(bx+6) = al; -} - -void DreamGenContext::turnanypathon() { - STACK_CHECK; - push(ax); - push(ax); - cl = 255; - ch = ah; - _add(ch, 100); - findormake(); - ax = pop(); - al = ah; - ah = 0; - cx = 144; - _mul(cx); - es = data.word(kReels); - bx = (0); - _add(bx, ax); - ax = pop(); - ah = 0; - _add(ax, ax); - _add(ax, ax); - _add(ax, ax); - _add(bx, ax); - al = 255; - es.byte(bx+6) = al; -} - -void DreamGenContext::turnanypathoff() { - STACK_CHECK; - push(ax); - push(ax); - cl = 0; - ch = ah; - _add(ch, 100); - findormake(); - ax = pop(); - al = ah; - ah = 0; - cx = 144; - _mul(cx); - es = data.word(kReels); - bx = (0); - _add(bx, ax); - ax = pop(); - ah = 0; - _add(ax, ax); - _add(ax, ax); - _add(ax, ax); - _add(bx, ax); - al = 0; - es.byte(bx+6) = al; -} - -void DreamGenContext::checkifpathison() { - STACK_CHECK; - push(ax); - getroomspaths(); - ax = pop(); - ah = 0; - _add(ax, ax); - _add(ax, ax); - _add(ax, ax); - _add(bx, ax); - al = es.byte(bx+6); - _cmp(al, 255); -} - void DreamGenContext::afternewroom() { STACK_CHECK; _cmp(data.byte(kNowinnewroom), 0); @@ -15785,140 +14651,6 @@ void DreamGenContext::afterintroroom() { data.byte(kNowinnewroom) = 0; } -void DreamGenContext::obname() { - STACK_CHECK; - _cmp(data.byte(kReasseschanges), 0); - if (flags.z()) - goto notnewpath; - data.byte(kReasseschanges) = 0; - goto diff; -notnewpath: - _cmp(ah, data.byte(kCommandtype)); - if (flags.z()) - goto notdiffob; - goto diff; -notdiffob: - _cmp(al, data.byte(kCommand)); - if (!flags.z()) - goto diff; - _cmp(data.byte(kWalkandexam), 1); - if (flags.z()) - goto walkandexamine; - _cmp(data.word(kMousebutton), 0); - if (flags.z()) - return /* (noobselect) */; - _cmp(data.byte(kCommandtype), 3); - if (!flags.z()) - goto isntblock; - _cmp(data.byte(kLastflag), 2); - if (flags.c()) - return /* (noobselect) */; -isntblock: - bl = data.byte(kManspath); - _cmp(bl, data.byte(kPointerspath)); - if (!flags.z()) - goto wantstowalk; - _cmp(data.byte(kCommandtype), 3); - if (flags.z()) - goto wantstowalk; - finishedwalking(); - if (!flags.z()) - return /* (noobselect) */; - _cmp(data.byte(kCommandtype), 5); - if (flags.z()) - goto wantstotalk; - _cmp(data.word(kWatchingtime), 0); - if (!flags.z()) - return /* (noobselect) */; - examineob(); - return; -wantstotalk: - _cmp(data.word(kWatchingtime), 0); - if (!flags.z()) - return /* (noobselect) */; - talk(); - return; -walkandexamine: - finishedwalking(); - if (!flags.z()) - return /* (noobselect) */; - al = data.byte(kWalkexamtype); - data.byte(kCommandtype) = al; - al = data.byte(kWalkexamnum); - data.byte(kCommand) = al; - data.byte(kWalkandexam) = 0; - _cmp(data.byte(kCommandtype), 5); - if (flags.z()) - return /* (noobselect) */; - examineob(); - return; -wantstowalk: - setwalk(); - data.byte(kReasseschanges) = 1; - return; -diff: - data.byte(kCommand) = al; - data.byte(kCommandtype) = ah; - _cmp(data.byte(kLinepointer), 254); - if (!flags.z()) - goto middleofwalk; - _cmp(data.word(kWatchingtime), 0); - if (!flags.z()) - goto middleofwalk; - al = data.byte(kFacing); - _cmp(al, data.byte(kTurntoface)); - if (!flags.z()) - goto middleofwalk; - _cmp(data.byte(kCommandtype), 3); - if (!flags.z()) - goto notblock; - bl = data.byte(kManspath); - _cmp(bl, data.byte(kPointerspath)); - if (!flags.z()) - goto dontcheck; - cl = data.byte(kRyanx); - _add(cl, 12); - ch = data.byte(kRyany); - _add(ch, 12); - checkone(); - _cmp(cl, 2); - if (flags.c()) - goto isblock; -dontcheck: - getflagunderp(); - _cmp(data.byte(kLastflag), 2); - if (flags.c()) - goto isblock; - _cmp(data.byte(kLastflag), 128); - if (!flags.c()) - goto isblock; - goto toofaraway; -notblock: - bl = data.byte(kManspath); - _cmp(bl, data.byte(kPointerspath)); - if (!flags.z()) - goto toofaraway; - _cmp(data.byte(kCommandtype), 3); - if (flags.z()) - goto isblock; - _cmp(data.byte(kCommandtype), 5); - if (flags.z()) - goto isaperson; - examineobtext(); - return; -middleofwalk: - blocknametext(); - return; -isblock: - blocknametext(); - return; -isaperson: - personnametext(); - return; -toofaraway: - walktotext(); -} - void DreamGenContext::examineobtext() { STACK_CHECK; bl = data.byte(kCommand); @@ -15927,26 +14659,6 @@ void DreamGenContext::examineobtext() { commandwithob(); } -void DreamGenContext::printmessage() { - STACK_CHECK; - push(dx); - push(bx); - push(di); - ah = 0; - _add(ax, ax); - bx = ax; - es = data.word(kCommandtext); - ax = es.word(bx); - _add(ax, (66*2)); - si = ax; - di = pop(); - bx = pop(); - dx = pop(); - al = 0; - ah = 0; - printdirect(); -} - void DreamGenContext::printmessage2() { STACK_CHECK; push(dx); @@ -15976,18 +14688,6 @@ searchmess: printdirect(); } -void DreamGenContext::getflagunderp() { - STACK_CHECK; - cx = data.word(kMousex); - _sub(cx, data.word(kMapadx)); - ax = data.word(kMousey); - _sub(ax, data.word(kMapady)); - ch = al; - checkone(); - data.byte(kLastflag) = cl; - data.byte(kLastflagex) = ch; -} - void DreamGenContext::setwalk() { STACK_CHECK; _cmp(data.byte(kLinepointer), 254); @@ -16466,63 +15166,6 @@ void DreamGenContext::zoomicon() { showframe(); } -void DreamGenContext::showblink() { - STACK_CHECK; - _cmp(data.byte(kManisoffscreen), 1); - if (flags.z()) - return /* (finblink1) */; - _inc(data.byte(kBlinkcount)); - _cmp(data.byte(kShadeson), 0); - if (!flags.z()) - return /* (finblink1) */; - _cmp(data.byte(kReallocation), 50); - if (!flags.c()) - return /* (eyesshut) */; - al = data.byte(kBlinkcount); - _cmp(al, 3); - if (!flags.z()) - return /* (finblink1) */; - data.byte(kBlinkcount) = 0; - al = data.byte(kBlinkframe); - _inc(al); - data.byte(kBlinkframe) = al; - _cmp(al, 6); - if (flags.c()) - goto nomorethan6; - al = 6; -nomorethan6: - ah = 0; - bx = offset_blinktab; - _add(bx, ax); - al = cs.byte(bx); - ds = data.word(kIcons1); - di = 44; - bx = 32; - ah = 0; - showframe(); -} - -void DreamGenContext::dumpblink() { - STACK_CHECK; - _cmp(data.byte(kShadeson), 0); - if (!flags.z()) - return /* (nodumpeye) */; - _cmp(data.byte(kBlinkcount), 0); - if (!flags.z()) - return /* (nodumpeye) */; - al = data.byte(kBlinkframe); - _cmp(al, 6); - if (!flags.c()) - return /* (nodumpeye) */; - push(ds); - di = 44; - bx = 32; - cl = 16; - ch = 12; - multidump(); - ds = pop(); -} - void DreamGenContext::worktoscreenm() { STACK_CHECK; animpointer(); @@ -16550,53 +15193,6 @@ void DreamGenContext::allpointer() { dumppointer(); } -void DreamGenContext::hangonp() { - STACK_CHECK; - push(cx); - _add(cx, cx); - ax = pop(); - _add(cx, ax); - data.word(kMaintimer) = 0; - al = data.byte(kPointerframe); - ah = data.byte(kPickup); - push(ax); - data.byte(kPointermode) = 3; - data.byte(kPickup) = 0; - push(cx); - data.byte(kCommandtype) = 255; - readmouse(); - animpointer(); - showpointer(); - vsync(); - dumppointer(); - cx = pop(); -hangloop: - push(cx); - delpointer(); - readmouse(); - animpointer(); - showpointer(); - vsync(); - dumppointer(); - cx = pop(); - ax = data.word(kMousebutton); - _cmp(ax, 0); - if (flags.z()) - goto notpressed; - _cmp(ax, data.word(kOldbutton)); - if (!flags.z()) - goto getoutofit; -notpressed: - if (--cx) - goto hangloop; -getoutofit: - delpointer(); - ax = pop(); - data.byte(kPointerframe) = al; - data.byte(kPickup) = ah; - data.byte(kPointermode) = 0; -} - void DreamGenContext::hangonw() { STACK_CHECK; hangloopw: @@ -16658,162 +15254,6 @@ void DreamGenContext::putunderzoom() { multiput(); } -void DreamGenContext::showpointer() { - STACK_CHECK; - showblink(); - di = data.word(kMousex); - data.word(kOldpointerx) = di; - bx = data.word(kMousey); - data.word(kOldpointery) = bx; - _cmp(data.byte(kPickup), 1); - if (flags.z()) - goto itsanobject; - push(bx); - push(di); - ds = data.word(kIcons1); - al = data.byte(kPointerframe); - _add(al, 20); - ah = 0; - _add(ax, ax); - si = ax; - _add(ax, ax); - _add(si, ax); - cx = ds.word(si); - _cmp(cl, 12); - if (!flags.c()) - goto notsmallx; - cl = 12; -notsmallx: - _cmp(ch, 12); - if (!flags.c()) - goto notsmally; - ch = 12; -notsmally: - data.byte(kPointerxs) = cl; - data.byte(kPointerys) = ch; - push(ds); - ds = data.word(kBuffers); - si = (0+(228*13)+32+60); - multiget(); - ds = pop(); - di = pop(); - bx = pop(); - push(di); - push(bx); - al = data.byte(kPointerframe); - _add(al, 20); - ah = 0; - showframe(); - bx = pop(); - di = pop(); - return; -itsanobject: - al = data.byte(kItemframe); - ds = data.word(kExtras); - _cmp(data.byte(kObjecttype), 4); - if (flags.z()) - goto itsfrominv; - ds = data.word(kFreeframes); -itsfrominv: - cl = al; - _add(al, al); - _add(al, cl); - _inc(al); - ah = 0; - push(ax); - _add(ax, ax); - si = ax; - _add(ax, ax); - _add(si, ax); - ax = 2080; - cx = ds.word(si); - _cmp(cl, 12); - if (!flags.c()) - goto notsmallx2; - cl = 12; -notsmallx2: - _cmp(ch, 12); - if (!flags.c()) - goto notsmally2; - ch = 12; -notsmally2: - data.byte(kPointerxs) = cl; - data.byte(kPointerys) = ch; - ax = pop(); - push(di); - push(bx); - push(ax); - push(bx); - push(di); - push(ds); - al = cl; - ah = 0; - _shr(ax, 1); - _sub(data.word(kOldpointerx), ax); - _sub(di, ax); - al = ch; - _shr(ax, 1); - _sub(data.word(kOldpointery), ax); - _sub(bx, ax); - ds = data.word(kBuffers); - si = (0+(228*13)+32+60); - multiget(); - ds = pop(); - di = pop(); - bx = pop(); - ax = pop(); - ah = 128; - showframe(); - bx = pop(); - di = pop(); - ds = data.word(kIcons1); - al = 3; - ah = 128; - showframe(); -} - -void DreamGenContext::delpointer() { - STACK_CHECK; - ax = data.word(kOldpointerx); - _cmp(ax, 0x0ffff); - if (flags.z()) - return /* (nevershown) */; - data.word(kDelherex) = ax; - ax = data.word(kOldpointery); - data.word(kDelherey) = ax; - cl = data.byte(kPointerxs); - data.byte(kDelxs) = cl; - ch = data.byte(kPointerys); - data.byte(kDelys) = ch; - ds = data.word(kBuffers); - si = (0+(228*13)+32+60); - di = data.word(kDelherex); - bx = data.word(kDelherey); - multiput(); -} - -void DreamGenContext::dumppointer() { - STACK_CHECK; - dumpblink(); - cl = data.byte(kDelxs); - ch = data.byte(kDelys); - di = data.word(kDelherex); - bx = data.word(kDelherey); - multidump(); - bx = data.word(kOldpointery); - di = data.word(kOldpointerx); - _cmp(di, data.word(kDelherex)); - if (!flags.z()) - goto difffound; - _cmp(bx, data.word(kDelherey)); - if (flags.z()) - return /* (notboth) */; -difffound: - cl = data.byte(kPointerxs); - ch = data.byte(kPointerys); - multidump(); -} - void DreamGenContext::undertextline() { STACK_CHECK; di = data.word(kTextaddressx); @@ -16830,152 +15270,6 @@ _tmp1: multiget(); } -void DreamGenContext::animpointer() { - STACK_CHECK; - _cmp(data.byte(kPointermode), 2); - if (flags.z()) - goto combathand; - _cmp(data.byte(kPointermode), 3); - if (flags.z()) - goto mousehand; - _cmp(data.word(kWatchingtime), 0); - if (flags.z()) - goto notwatchpoint; - data.byte(kPointerframe) = 11; - return; -notwatchpoint: - data.byte(kPointerframe) = 0; - _cmp(data.byte(kInmaparea), 0); - if (flags.z()) - return /* (gothand) */; - _cmp(data.byte(kPointerfirstpath), 0); - if (flags.z()) - return /* (gothand) */; - getflagunderp(); - _cmp(cl, 2); - if (flags.c()) - return /* (gothand) */; - _cmp(cl, 128); - if (!flags.c()) - return /* (gothand) */; - data.byte(kPointerframe) = 3; - _test(cl, 4); - if (!flags.z()) - return /* (gothand) */; - data.byte(kPointerframe) = 4; - _test(cl, 16); - if (!flags.z()) - return /* (gothand) */; - data.byte(kPointerframe) = 5; - _test(cl, 2); - if (!flags.z()) - return /* (gothand) */; - data.byte(kPointerframe) = 6; - _test(cl, 8); - if (!flags.z()) - return /* (gothand) */; - data.byte(kPointerframe) = 8; - return; -mousehand: - _cmp(data.byte(kPointerspeed), 0); - if (flags.z()) - goto rightspeed3; - _dec(data.byte(kPointerspeed)); - goto finflashmouse; -rightspeed3: - data.byte(kPointerspeed) = 5; - _inc(data.byte(kPointercount)); - _cmp(data.byte(kPointercount), 16); - if (!flags.z()) - goto finflashmouse; - data.byte(kPointercount) = 0; -finflashmouse: - al = data.byte(kPointercount); - ah = 0; - bx = offset_flashmousetab; - _add(bx, ax); - al = cs.byte(bx); - data.byte(kPointerframe) = al; - return; -combathand: - data.byte(kPointerframe) = 0; - _cmp(data.byte(kReallocation), 14); - if (!flags.z()) - return /* (notarrow) */; - _cmp(data.byte(kCommandtype), 211); - if (!flags.z()) - return /* (notarrow) */; - data.byte(kPointerframe) = 5; -} - -void DreamGenContext::readmouse() { - STACK_CHECK; - ax = data.word(kMousebutton); - data.word(kOldbutton) = ax; - ax = data.word(kMousex); - data.word(kOldx) = ax; - ax = data.word(kMousey); - data.word(kOldy) = ax; - mousecall(); - data.word(kMousex) = cx; - data.word(kMousey) = dx; - data.word(kMousebutton) = bx; -} - -void DreamGenContext::readmouse1() { - STACK_CHECK; - ax = data.word(kMousex); - data.word(kOldx) = ax; - ax = data.word(kMousey); - data.word(kOldy) = ax; - mousecall(); - data.word(kMousex) = cx; - data.word(kMousey) = dx; - data.word(kMousebutton1) = bx; -} - -void DreamGenContext::readmouse2() { - STACK_CHECK; - ax = data.word(kMousex); - data.word(kOldx) = ax; - ax = data.word(kMousey); - data.word(kOldy) = ax; - mousecall(); - data.word(kMousex) = cx; - data.word(kMousey) = dx; - data.word(kMousebutton2) = bx; -} - -void DreamGenContext::readmouse3() { - STACK_CHECK; - ax = data.word(kMousex); - data.word(kOldx) = ax; - ax = data.word(kMousey); - data.word(kOldy) = ax; - mousecall(); - data.word(kMousex) = cx; - data.word(kMousey) = dx; - data.word(kMousebutton3) = bx; -} - -void DreamGenContext::readmouse4() { - STACK_CHECK; - ax = data.word(kMousebutton); - data.word(kOldbutton) = ax; - ax = data.word(kMousex); - data.word(kOldx) = ax; - ax = data.word(kMousey); - data.word(kOldy) = ax; - mousecall(); - data.word(kMousex) = cx; - data.word(kMousey) = dx; - ax = data.word(kMousebutton1); - _or(ax, data.word(kMousebutton2)); - _or(ax, data.word(kMousebutton3)); - _or(bx, ax); - data.word(kMousebutton) = bx; -} - void DreamGenContext::readkey() { STACK_CHECK; bx = data.word(kBufferout); @@ -17025,16 +15319,6 @@ void DreamGenContext::randomnum2() { ds = pop(); } -void DreamGenContext::hangon() { - STACK_CHECK; -hangonloop: - push(cx); - vsync(); - cx = pop(); - if (--cx) - goto hangonloop; -} - void DreamGenContext::loadtraveltext() { STACK_CHECK; dx = 2234; @@ -17449,571 +15733,1137 @@ void DreamGenContext::readsetdata() { void DreamGenContext::__start() { static const uint8 src[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0000: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x0010: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0020: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00, + //0x0030: .... .... .... .... 0xff, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0xb6, + //0x0040: ...0 .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0050: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0060: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0070: .... ...h .&.. .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0080: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0090: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x00a0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + //0x00b0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x00c0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x00d0: .... .... .... .... 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x00e0: .. .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x00f0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0100: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0110: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0120: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0130: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0140: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0150: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + //0x0160: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, + //0x0170: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0180: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0190: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + //0x01a0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x01b0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x01c0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x01d0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x01e0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x01f0: .... .... .... .... 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x0200: .... .... .... .... 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x14, 0x00, 0x02, 0x00, 0x01, 0x01, 0x37, + //0x0210: .... ..., .... ...7 0x00, 0x00, 0x00, 0x32, 0x14, 0x00, 0x18, 0x16, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x18, 0x21, + //0x0220: ...2 .... .J.. ...! 0x0a, 0x4b, 0x00, 0x01, 0x00, 0x01, 0x01, 0x2c, 0x00, 0x1b, 0x00, 0x02, 0x00, 0x02, 0x01, 0x2c, + //0x0230: .K.. ..., .... ..., 0x00, 0x60, 0x00, 0x03, 0x00, 0x04, 0x01, 0x2c, 0x00, 0x76, 0x00, 0x02, 0x00, 0x05, 0x01, 0x2c, + //0x0240: .`.. ..., .v.. ..., 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x16, 0x14, 0x35, 0x00, 0x03, 0x00, 0x00, 0x05, 0x16, + //0x0250: .... .... .5.. .... 0x14, 0x28, 0x00, 0x01, 0x00, 0x02, 0x05, 0x16, 0x14, 0x32, 0x00, 0x01, 0x00, 0x03, 0x02, 0x0b, + //0x0260: .(.. .... .2.. .... 0x0a, 0xc0, 0x00, 0x01, 0x00, 0x00, 0x02, 0x0b, 0x0a, 0xb6, 0x00, 0x02, 0x00, 0x01, 0x08, 0x0b, + //0x0270: .... .... .... .... 0x0a, 0x00, 0x00, 0x02, 0x00, 0x01, 0x17, 0x00, 0x32, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0x0b, + //0x0280: .... .... 2... .... 0x14, 0xfa, 0x00, 0x04, 0x00, 0x00, 0x17, 0x00, 0x32, 0x2b, 0x00, 0x02, 0x00, 0x08, 0x17, 0x0b, + //0x0290: .... .... 2+.. .... 0x28, 0x82, 0x00, 0x02, 0x00, 0x01, 0x17, 0x16, 0x28, 0x7a, 0x00, 0x02, 0x00, 0x02, 0x17, 0x16, + //0x02a0: (... .... (z.. .... 0x28, 0x69, 0x00, 0x02, 0x00, 0x03, 0x17, 0x16, 0x28, 0x51, 0x00, 0x02, 0x00, 0x04, 0x17, 0x0b, + //0x02b0: (i.. .... (Q.. .... 0x28, 0x87, 0x00, 0x02, 0x00, 0x05, 0x17, 0x16, 0x28, 0x91, 0x00, 0x02, 0x00, 0x06, 0x04, 0x16, + //0x02c0: (... .... (... .... 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0xc8, 0x00, 0x00, 0x00, 0x14, 0x2d, 0x16, + //0x02d0: .... ..-. .... ..-. 0x1e, 0x27, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0x19, 0x00, 0x02, 0x00, 0x00, 0x08, 0x16, + //0x02e0: .'.. ..-. .... .... 0x28, 0x20, 0x00, 0x02, 0x00, 0x00, 0x07, 0x0b, 0x14, 0x40, 0x00, 0x02, 0x00, 0x00, 0x16, 0x16, + //0x02f0: ( .. .... .@.. .... 0x14, 0x52, 0x00, 0x02, 0x00, 0x00, 0x1b, 0x0b, 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0x00, + //0x0300: .R.. .... .... .... 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x21, 0x28, 0x15, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x0b, + //0x0310: .... ...! (... .... 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x16, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x19, 0x00, + //0x0320: .... .... .... .... 0x32, 0x04, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x1e, 0x79, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, + //0x0330: 2... ..2. .y.. ..2. 0x1e, 0x00, 0x00, 0x14, 0x00, 0x00, 0x34, 0x16, 0x1e, 0xc0, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, + //0x0340: .... ..4. .... ..4. 0x1e, 0xe9, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x68, 0x00, 0x37, 0x00, 0x00, 0x35, 0x21, + //0x0350: .... ..2. (h.7 ..5! 0x00, 0x63, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x00, 0x00, 0x03, 0x00, 0x00, 0x32, 0x16, + //0x0360: .c.. ..2. (... ..2. 0x1e, 0xa2, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, 0x1e, 0x39, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, + //0x0370: .... ..4. .9.. ..4. 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x48, 0x00, 0x03, 0x00, 0x00, 0x37, 0x2c, + //0x0380: .... ..6. .H.. ..7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x16, + //0x0390: .... .... .... .... 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x16, 0x00, 0x2c, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x16, + //0x03a0: .... .... .,.. .... 0x1e, 0xae, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x16, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x0b, + //0x03b0: .... .... .... .... 0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x0b, 0x1e, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x16, + //0x03c0: ...2 .... ...2 .... 0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0e, 0x21, 0x28, 0x00, 0x00, 0x32, 0x14, 0x00, 0xff, 0x7c, + //0x03d0: ...2 ...! (..2 ...| 0xc0, 0x80, 0xc0, 0x1c, 0xc0, 0x20, 0xc0, 0x00, 0xc1, 0x10, 0xc0, 0x18, 0xc0, 0xf4, 0xc0, 0x0c, + //0x03e0: .... . .. .... .... 0xc0, 0x24, 0xc0, 0x28, 0xc0, 0x2c, 0xc0, 0x30, 0xc0, 0x54, 0xc0, 0x78, 0xc0, 0x50, 0xc0, 0x74, + //0x03f0: .$.( .,.0 .T.x .P.t 0xc0, 0x34, 0xc0, 0x38, 0xc0, 0x40, 0xc0, 0x44, 0xc0, 0x48, 0xc0, 0x3c, 0xc0, 0x14, 0xc0, 0x88, + //0x0400: .4.8 .@.D .H.< .... 0xc0, 0x8c, 0xc0, 0x90, 0xc0, 0x70, 0xc0, 0xfc, 0xc0, 0x6c, 0xc0, 0x58, 0xc0, 0x68, 0xc0, 0x04, + //0x0410: .... .p.. .l.X .h.. 0xc1, 0x64, 0xc0, 0x60, 0xc0, 0x5c, 0xc0, 0x94, 0xc0, 0x04, 0xc0, 0xa4, 0xc0, 0x9c, 0xc0, 0xa0, + //0x0420: .d.` .... .... .... 0xc0, 0xa8, 0xc0, 0xac, 0xc0, 0x98, 0xc0, 0xb0, 0xc0, 0xb4, 0xc0, 0xc8, 0xc0, 0xcc, 0xc0, 0xd4, + //0x0430: .... .... .... .... 0xc0, 0xdc, 0xc0, 0xd8, 0xc0, 0x00, 0xc0, 0x08, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, + //0x0440: .... .... .... .... 0xc0, 0x00, 0x3c, 0x21, 0x47, 0x0b, 0x52, 0x16, 0x5d, 0x01, 0x2c, 0x0a, 0x10, 0x04, 0x0b, 0x1e, + //0x0450: ..<! G.R. ].,. .... 0x0e, 0x04, 0x16, 0x1e, 0x0e, 0x03, 0x21, 0x0a, 0x0e, 0x0a, 0x21, 0x1e, 0x0e, 0x0a, 0x16, 0x1e, + //0x0460: .... ..!. ..!. .... 0x18, 0x09, 0x16, 0x0a, 0x0e, 0x02, 0x21, 0x00, 0x0e, 0x02, 0x16, 0x00, 0x0e, 0x06, 0x0b, 0x1e, + //0x0470: .... ..!. .... .... 0x0e, 0x07, 0x0b, 0x14, 0x12, 0x07, 0x00, 0x14, 0x12, 0x07, 0x00, 0x1e, 0x12, 0x37, 0x2c, 0x00, + //0x0480: .... .... .... .7,. 0x0e, 0x05, 0x16, 0x1e, 0x0e, 0x08, 0x00, 0x0a, 0x12, 0x08, 0x0b, 0x0a, 0x12, 0x08, 0x16, 0x0a, + //0x0490: .... .... .... .... 0x12, 0x08, 0x21, 0x0a, 0x12, 0x08, 0x21, 0x14, 0x12, 0x08, 0x21, 0x1e, 0x12, 0x08, 0x21, 0x28, + //0x04a0: ..!. ..!. ..!. ..!( 0x12, 0x08, 0x16, 0x28, 0x12, 0x08, 0x0b, 0x28, 0x12, 0x15, 0x2c, 0x14, 0x12, 0xff, 0x2e, 0x05, + //0x04b0: ...( ...( ..,. .... 0x2f, 0x05, 0x33, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x46, 0x05, 0x2e, 0x05, 0x4d, 0x05, + //0x04c0: /.3. .... ..F. ..M. 0x5d, 0x05, 0x64, 0x05, 0x68, 0x05, 0x6c, 0x05, 0x70, 0x05, 0x7d, 0x05, 0x2e, 0x05, 0x2e, 0x05, + //0x04d0: ].d. h.l. p.}. .... 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x9f, 0x05, 0x2e, 0x05, 0xb5, 0x05, 0xd4, 0x05, 0x2e, 0x05, + //0x04e0: .... .... .... .... 0xe1, 0x05, 0xf7, 0x05, 0x0d, 0x06, 0x26, 0x06, 0x39, 0x06, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, + //0x04f0: .... ..&. 9... .... 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, + //0x0500: .... .... .... .... 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x49, 0x06, 0x50, 0x06, 0x75, 0x06, 0x2e, 0x05, + //0x0510: .... .... I.P. u... 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x82, 0x06, 0x86, 0x06, 0x2e, 0x05, 0x8d, 0x06, 0xff, 0x0f, + //0x0520: .... .... .... .... 0x01, 0x01, 0xff, 0x0c, 0x05, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x23, 0x00, 0x11, 0x32, 0x00, 0x12, + //0x0530: .... .... ..#. .2.. 0x67, 0x00, 0x13, 0x6c, 0x00, 0xff, 0x12, 0x13, 0x00, 0x13, 0x17, 0x00, 0xff, 0x0c, 0x33, 0x00, + //0x0540: g..l .... .... ..3. 0x0d, 0x35, 0x00, 0x0e, 0x0e, 0x00, 0x0f, 0x14, 0x00, 0x00, 0x4e, 0x00, 0xff, 0x0c, 0x77, 0x00, + //0x0550: .5.. .... ..N. ..w. 0x0c, 0x91, 0x00, 0xff, 0x0d, 0x10, 0x00, 0xff, 0x0d, 0x14, 0x00, 0xff, 0x0e, 0x10, 0x00, 0xff, + //0x0560: .... .... .... .... 0x0f, 0x04, 0x00, 0x10, 0x08, 0x00, 0x11, 0x86, 0x00, 0x12, 0x99, 0x00, 0xff, 0x0d, 0x6c, 0x00, + //0x0570: .... .... .... ..l. 0x0f, 0x46, 0x01, 0x0f, 0x4b, 0x01, 0x0f, 0x50, 0x01, 0x0f, 0x56, 0x01, 0x0f, 0x5c, 0x01, 0x0f, + //0x0580: .F.. K..P ..V. .... 0x62, 0x01, 0x12, 0x9f, 0x00, 0x12, 0xb2, 0x00, 0x93, 0xd9, 0x00, 0x54, 0xe4, 0x00, 0xff, 0x0d, + //0x0590: b... .... ...T .... 0x14, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x22, 0x00, 0x0d, 0x34, 0x00, 0x0d, 0x37, 0x00, 0x19, 0x39, + //0x05a0: .... ..". .4.. 7..9 0x00, 0x15, 0x49, 0x00, 0xff, 0x0d, 0xc4, 0x00, 0x0d, 0xea, 0x00, 0x0d, 0x9c, 0x00, 0x0e, 0x81, + //0x05b0: ..I. .... .... .... 0x00, 0x0d, 0x7c, 0x00, 0x0f, 0xa2, 0x00, 0x0f, 0xc8, 0x00, 0x0f, 0xef, 0x00, 0x11, 0x63, 0x00, + //0x05c0: ..|. .... .... ..c. 0x0c, 0x34, 0x00, 0xff, 0x0f, 0x38, 0x00, 0x10, 0x40, 0x00, 0x13, 0x16, 0x00, 0x14, 0x21, 0x00, + //0x05d0: .4.. .8.. @... ..!. 0xff, 0x14, 0x0b, 0x00, 0x14, 0x0f, 0x00, 0x0f, 0x1c, 0x00, 0x0d, 0x50, 0x00, 0x15, 0x52, 0x00, + //0x05e0: .... .... ...P ..R. 0x93, 0x57, 0x00, 0x57, 0x80, 0x00, 0xff, 0x0c, 0x0d, 0x00, 0x0e, 0x27, 0x00, 0x0c, 0x43, 0x00, + //0x05f0: .W.W .... ...' ..C. 0x0c, 0x4b, 0x00, 0x0c, 0x53, 0x00, 0x0c, 0x5b, 0x00, 0x0f, 0x66, 0x00, 0xff, 0x16, 0x24, 0x00, + //0x0600: .K.. S..[ ..f. ..$. 0x0d, 0x7d, 0x00, 0x12, 0x58, 0x00, 0x0f, 0x6b, 0x00, 0x0e, 0x7f, 0x00, 0x0e, 0x9a, 0x00, 0x93, + //0x0610: .}.. X..k .... .... 0xaa, 0x00, 0x57, 0xe8, 0x00, 0xff, 0x15, 0x10, 0x00, 0x15, 0x48, 0x00, 0x15, 0xcd, 0x00, 0x16, + //0x0620: ..W. .... ..H. .... 0x3f, 0x00, 0x97, 0x63, 0x00, 0x58, 0x9e, 0x00, 0xff, 0x0d, 0x15, 0x00, 0x0e, 0x18, 0x00, 0x93, + //0x0630: ?..c .X.. .... .... 0x32, 0x00, 0x57, 0x4b, 0x00, 0x18, 0x80, 0x00, 0xff, 0x53, 0x2e, 0x00, 0x10, 0xa7, 0x00, 0xff, + //0x0640: 2.WK .... .S.. .... 0x10, 0x13, 0x00, 0x0e, 0x24, 0x00, 0x10, 0x32, 0x00, 0x0e, 0x41, 0x00, 0x10, 0x51, 0x00, 0x0e, + //0x0650: .... $..2 ..A. .Q.. 0x60, 0x00, 0x10, 0x72, 0x00, 0x0e, 0x81, 0x00, 0x10, 0x93, 0x00, 0x0e, 0xa2, 0x00, 0x10, 0xb1, + //0x0660: `..r .... .... .... 0x00, 0x0e, 0xbf, 0x00, 0xff, 0x0d, 0x30, 0x00, 0x0e, 0x29, 0x00, 0x0f, 0x4e, 0x00, 0x10, 0x5c, + //0x0670: .... ..0. .).. N... 0x00, 0xff, 0x10, 0x73, 0x00, 0xff, 0x15, 0x67, 0x00, 0x14, 0xc7, 0x00, 0xff, 0x11, 0x35, 0x00, + //0x0680: ...s ...g .... ..5. 0x11, 0x36, 0x00, 0x11, 0x37, 0x00, 0x11, 0x38, 0x00, 0x11, 0x39, 0x00, 0x11, 0x3a, 0x00, 0x11, + //0x0690: .6.. 7..8 ..9. .:.. 0x3b, 0x00, 0x11, 0x3d, 0x00, 0x11, 0x3f, 0x00, 0x11, 0x40, 0x00, 0x11, 0x41, 0x00, 0xff, 0x9c, + //0x06a0: ;..= ..?. .@.. A... 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, + //0x06b0: .... .... .... .... 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, + //0x06c0: .... .... .... .... 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, + //0x06d0: .... .... .... .... 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, + //0x06e0: .... .... .... .... 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, + //0x06f0: .... .... .... .... 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, + //0x0700: .... .... .... .... 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9c, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x0710: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x53, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + //0x0720: WEB. S00. DREA MWEB 0x2e, 0x53, 0x30, 0x32, 0x00, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x2e, 0x44, 0x41, 0x54, + //0x0730: .S02 .INS TALL .DAT 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x30, 0x00, 0x44, 0x52, + //0x0740: .DRE AMWE B.C0 0.DR 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x0750: EAMW EB.C 01.D REAM 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + //0x0760: WEB. C02. DREA MWEB 0x2e, 0x56, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39, + //0x0770: .V00 .DRE AMWE B.V9 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x30, 0x00, 0x44, + //0x0780: 9.DR EAMW EB.G 00.D 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, + //0x0790: REAM WEB. G01. DREA 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + //0x07a0: MWEB .G02 .DRE AMWE 0x42, 0x2e, 0x47, 0x30, 0x38, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, + //0x07b0: B.G0 8.DR EAMW EB.G 0x30, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x37, 0x00, + //0x07c0: 03.D REAM WEB. G07. 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, + //0x07d0: DREA MWEB .G04 .DRE 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + //0x07e0: AMWE B.G0 5.DR EAMW 0x45, 0x42, 0x2e, 0x47, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + //0x07f0: EB.G 06.D REAM WEB. 0x47, 0x31, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x31, + //0x0800: G14. DREA MWEB .T01 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x32, 0x00, 0x44, 0x52, + //0x0810: .DRE AMWE B.T0 2.DR 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x0820: EAMW EB.T 10.D REAM 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + //0x0830: WEB. T11. DREA MWEB 0x2e, 0x54, 0x31, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, + //0x0840: .T12 .DRE AMWE B.T1 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x30, 0x00, 0x44, + //0x0850: 3.DR EAMW EB.T 20.D 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, + //0x0860: REAM WEB. T21. DREA 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + //0x0870: MWEB .T22 .DRE AMWE 0x42, 0x2e, 0x54, 0x32, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, + //0x0880: B.T2 3.DR EAMW EB.T 0x32, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x30, 0x00, + //0x0890: 24.D REAM WEB. T50. 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x31, 0x00, 0x44, 0x52, 0x45, + //0x08a0: DREA MWEB .T51 .DRE 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + //0x08b0: AMWE B.T8 0.DR EAMW 0x45, 0x42, 0x2e, 0x54, 0x38, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + //0x08c0: EB.T 81.D REAM WEB. 0x54, 0x38, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x33, + //0x08d0: T82. DREA MWEB .T83 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x34, 0x00, 0x44, 0x52, + //0x08e0: .DRE AMWE B.T8 4.DR 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x4f, 0x4c, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x08f0: EAMW EB.V OL.D REAM 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + //0x0900: WEB. G09. DREA MWEB 0x2e, 0x47, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, + //0x0910: .G10 .DRE AMWE B.G1 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x32, 0x00, 0x44, + //0x0920: 1.DR EAMW EB.G 12.D 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, + //0x0930: REAM WEB. G13. DREA 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + //0x0940: MWEB .G15 .DRE AMWE 0x42, 0x2e, 0x49, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, + //0x0950: B.I0 0.DR EAMW EB.I 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x32, 0x00, + //0x0960: 01.D REAM WEB. I02. 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x33, 0x00, 0x44, 0x52, 0x45, + //0x0970: DREA MWEB .I03 .DRE 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + //0x0980: AMWE B.I0 4.DR EAMW 0x45, 0x42, 0x2e, 0x49, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + //0x0990: EB.I 05.D REAM WEB. 0x49, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x37, + //0x09a0: I06. DREA MWEB .I07 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x50, 0x41, 0x4c, 0x00, 0x11, 0x01, + //0x09b0: .DRE AMWE B.PA L... 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x44, 0xc3, 0x04, 0x01, 0x2c, 0x01, 0x00, 0x00, 0x2c, 0x00, + //0x09c0: @... ..D. ..,. ..,. 0x80, 0xc5, 0xd2, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x2c, 0x00, 0xdc, 0xc3, 0x90, 0x00, 0xb0, 0x00, + //0x09d0: .... .... ,... .... 0x40, 0x00, 0x60, 0x00, 0x80, 0xc3, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0xc8, 0x00, 0x84, 0xc3, + //0x09e0: @.`. .... 2.2. .... 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, + //0x09f0: ..@. .... .... ..@. 0x9d, 0x00, 0xc6, 0x00, 0x44, 0xc3, 0xff, 0x00, 0x26, 0x01, 0x00, 0x00, 0x18, 0x00, 0xc8, 0xc3, + //0x0a00: .... D... &... .... 0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x48, 0xc3, 0x50, 0x00, 0x00, 0x01, 0x9e, 0x00, + //0x0a10: ..-. (.8. H.P. .... 0xca, 0x00, 0xe0, 0xc3, 0x50, 0x00, 0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0x98, 0xc3, 0x00, 0x00, + //0x0a20: .... P.,. :... .... 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, + //0x0a30: @... .... .... @... 0xc6, 0x00, 0x44, 0xc3, 0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x48, 0xc3, 0x50, 0x00, + //0x0a40: ..D. ..-. (.8. H.P. 0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0xbc, 0xc6, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + //0x0a50: ,.:. .... ..@. .... 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0xf0, 0x00, + //0x0a60: .... ..@. .... |... 0x22, 0x01, 0x02, 0x00, 0x2c, 0x00, 0x94, 0xc4, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + //0x0a70: "... ,... ..@. .... 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0x00, 0x00, + //0x0a80: .... ..@. .... |... 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xee, 0x00, 0x02, 0x01, 0x04, 0x00, + //0x0a90: @... .... .... .... 0x2c, 0x00, 0xc8, 0xc4, 0x68, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x2c, 0x00, 0xcc, 0xc4, 0x18, 0x01, + //0x0aa0: ,... h.|. ..,. .... 0x34, 0x01, 0x04, 0x00, 0x2c, 0x00, 0xb0, 0xc4, 0x68, 0x00, 0xd8, 0x00, 0x8a, 0x00, 0xc0, 0x00, + //0x0ab0: 4... ,... h... .... 0xd0, 0xc4, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0x00, 0x00, 0x40, 0x01, + //0x0ac0: .... @... ..|. ..@. 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x45, 0x58, 0x49, 0x54, 0x20, 0x20, 0x20, 0x20, + //0x0ad0: .... .... EXIT 0x20, 0x20, 0x48, 0x45, 0x4c, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x49, 0x53, 0x54, + //0x0ae0: HE LP LIST 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x45, 0x41, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + //0x0af0: RE AD 0x4c, 0x4f, 0x47, 0x4f, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4b, 0x45, 0x59, 0x53, 0x20, 0x20, + //0x0b00: LOGO N KE YS 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, + //0x0b10: ..PU BLIC 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, + //0x0b20: PU BLIC ... 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41, 0x4e, + //0x0b30: BLAC KDRA GON RYAN 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 0x4e, 0x44, 0x52, 0x49, + //0x0b40: . ..HE NDRI 0x58, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20, + //0x0b50: X LO UIS 0x20, 0x00, 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x20, 0x20, 0x20, + //0x0b60: ... SEPT IMUS 0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0x20, 0x20, + //0x0b70: BECK ETT . .. 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f, + //0x0b80: . "ROO 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, + //0x0b90: T ." 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x4e, 0x45, 0x54, 0x57, 0xe8, 0xc4, 0x45, 0x4c, + //0x0ba0: . NETW ..EL 0x56, 0x41, 0x8c, 0xc6, 0x45, 0x4c, 0x56, 0x42, 0x9c, 0xc6, 0x45, 0x4c, 0x56, 0x43, 0x94, 0xc6, + //0x0bb0: VA.. ELVB ..EL VC.. 0x45, 0x4c, 0x56, 0x45, 0x98, 0xc6, 0x45, 0x4c, 0x56, 0x46, 0xa0, 0xc6, 0x43, 0x47, 0x41, 0x54, + //0x0bc0: ELVE ..EL VF.. CGAT 0x30, 0xc7, 0x52, 0x45, 0x4d, 0x4f, 0xa8, 0xc6, 0x42, 0x55, 0x54, 0x41, 0x3c, 0xc7, 0x43, 0x42, + //0x0bd0: 0.RE MO.. BUTA <.CB 0x4f, 0x58, 0x44, 0xc7, 0x4c, 0x49, 0x54, 0x45, 0x5c, 0xc6, 0x50, 0x4c, 0x41, 0x54, 0x40, 0xc7, + //0x0be0: OXD. LITE ..PL AT@. 0x4c, 0x49, 0x46, 0x54, 0x7c, 0xc6, 0x57, 0x49, 0x52, 0x45, 0x84, 0xc6, 0x48, 0x4e, 0x44, 0x4c, + //0x0bf0: LIFT |.WI RE.. HNDL 0x88, 0xc6, 0x48, 0x41, 0x43, 0x48, 0x80, 0xc6, 0x44, 0x4f, 0x4f, 0x52, 0xb4, 0xc6, 0x43, 0x53, + //0x0c00: ..HA CH.. DOOR ..CS 0x48, 0x52, 0x70, 0xc6, 0x47, 0x55, 0x4e, 0x41, 0x34, 0xc7, 0x43, 0x52, 0x41, 0x41, 0x64, 0xc6, + //0x0c10: HRp. GUNA 4.CR AAd. 0x43, 0x52, 0x42, 0x42, 0x68, 0xc6, 0x43, 0x52, 0x43, 0x43, 0x6c, 0xc6, 0x53, 0x45, 0x41, 0x54, + //0x0c20: CRBB h.CR CCl. SEAT 0xf8, 0xc5, 0x4d, 0x45, 0x4e, 0x55, 0x98, 0xc7, 0x43, 0x4f, 0x4f, 0x4b, 0xac, 0xc6, 0x45, 0x4c, + //0x0c30: ..ME NU.. COOK ..EL 0x43, 0x41, 0x4c, 0xc6, 0x45, 0x44, 0x43, 0x41, 0x50, 0xc6, 0x44, 0x44, 0x43, 0x41, 0x54, 0xc6, + //0x0c40: CAL. EDCA P.DD CAT. 0x41, 0x4c, 0x54, 0x52, 0x04, 0xc6, 0x4c, 0x4f, 0x4b, 0x41, 0x3c, 0xc6, 0x4c, 0x4f, 0x4b, 0x42, + //0x0c50: ALTR ..LO KA<. LOKB 0x40, 0xc6, 0x45, 0x4e, 0x54, 0x41, 0x10, 0xc6, 0x45, 0x4e, 0x54, 0x42, 0x24, 0xc6, 0x45, 0x4e, + //0x0c60: @.EN TA.. ENTB $.EN 0x54, 0x45, 0x28, 0xc6, 0x45, 0x4e, 0x54, 0x43, 0x18, 0xc6, 0x45, 0x4e, 0x54, 0x44, 0x2c, 0xc6, + //0x0c70: TE(. ENTC ..EN TD,. 0x45, 0x4e, 0x54, 0x48, 0x30, 0xc6, 0x57, 0x57, 0x41, 0x54, 0xf0, 0xc5, 0x50, 0x4f, 0x4f, 0x4c, + //0x0c80: ENTH 0.WW AT.. POOL 0x58, 0xc6, 0x57, 0x53, 0x48, 0x44, 0xf4, 0xc5, 0x47, 0x52, 0x41, 0x46, 0x44, 0xc6, 0x54, 0x52, + //0x0c90: X.WS HD.. GRAF D.TR 0x41, 0x50, 0x48, 0xc6, 0x43, 0x44, 0x50, 0x45, 0x28, 0xc7, 0x44, 0x4c, 0x4f, 0x4b, 0x08, 0xc6, + //0x0ca0: APH. CDPE (.DL OK.. 0x48, 0x4f, 0x4c, 0x45, 0x00, 0xc6, 0x44, 0x52, 0x59, 0x52, 0x0c, 0xc6, 0x48, 0x4f, 0x4c, 0x59, + //0x0cb0: HOLE ..DR YR.. HOLY 0xfc, 0xc5, 0x57, 0x41, 0x4c, 0x4c, 0x2c, 0xc7, 0x42, 0x4f, 0x4f, 0x4b, 0x08, 0xc8, 0x41, 0x58, + //0x0cc0: ..WA LL,. BOOK ..AX 0x45, 0x44, 0xb0, 0xc6, 0x53, 0x48, 0x4c, 0x44, 0x38, 0xc7, 0x42, 0x43, 0x4e, 0x59, 0xe8, 0xc5, + //0x0cd0: ED.. SHLD 8.BC NY.. 0x4c, 0x49, 0x44, 0x43, 0xe4, 0xc5, 0x4c, 0x49, 0x44, 0x55, 0xe0, 0xc5, 0x4c, 0x49, 0x44, 0x4f, + //0x0ce0: LIDC ..LI DU.. LIDO 0xec, 0xc5, 0x50, 0x49, 0x50, 0x45, 0xa8, 0xc5, 0x42, 0x41, 0x4c, 0x43, 0x20, 0xc6, 0x57, 0x49, + //0x0cf0: ..PI PE.. BALC .WI 0x4e, 0x44, 0x1c, 0xc6, 0x50, 0x41, 0x50, 0x52, 0xb4, 0xc7, 0x55, 0x57, 0x54, 0x41, 0xa0, 0xc5, + //0x0d00: ND.. PAPR ..UW TA.. 0x55, 0x57, 0x54, 0x42, 0xa0, 0xc5, 0x53, 0x54, 0x41, 0x54, 0xd8, 0xc7, 0x54, 0x4c, 0x49, 0x44, + //0x0d10: UWTB ..ST AT.. TLID 0x9c, 0xc5, 0x53, 0x4c, 0x41, 0x42, 0xd8, 0xc5, 0x43, 0x41, 0x52, 0x54, 0xdc, 0xc5, 0x46, 0x43, + //0x0d20: ..SL AB.. CART ..FC 0x41, 0x52, 0xac, 0xc5, 0x53, 0x4c, 0x42, 0x41, 0xc0, 0xc5, 0x53, 0x4c, 0x42, 0x42, 0xc4, 0xc5, + //0x0d30: AR.. SLBA ..SL BB.. 0x53, 0x4c, 0x42, 0x43, 0xcc, 0xc5, 0x53, 0x4c, 0x42, 0x44, 0xc8, 0xc5, 0x53, 0x4c, 0x42, 0x45, + //0x0d40: SLBC ..SL BD.. SLBE 0xd0, 0xc5, 0x53, 0x4c, 0x42, 0x46, 0xd4, 0xc5, 0x50, 0x4c, 0x49, 0x4e, 0xb0, 0xc5, 0x4c, 0x41, + //0x0d50: ..SL BF.. PLIN ..LA 0x44, 0x44, 0xb8, 0xc5, 0x4c, 0x41, 0x44, 0x42, 0xbc, 0xc5, 0x47, 0x55, 0x4d, 0x41, 0xb4, 0xc5, + //0x0d60: DD.. LADB ..GU MA.. 0x53, 0x51, 0x45, 0x45, 0x88, 0xc5, 0x54, 0x41, 0x50, 0x50, 0x8c, 0xc5, 0x47, 0x55, 0x49, 0x54, + //0x0d70: SQEE ..TA PP.. GUIT 0x90, 0xc5, 0x43, 0x4f, 0x4e, 0x54, 0x94, 0xc5, 0x42, 0x45, 0x4c, 0x4c, 0x98, 0xc5, 0x8c, 0x8c, + //0x0d80: ..CO NT.. BELL .... 0x8c, 0x8c, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x9d, 0x00, 0xb2, 0x00, 0x51, 0x00, + //0x0d90: ..00 00.0 0... ..Q. 0x5e, 0x00, 0x58, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x5c, 0xc7, 0xc9, 0x00, + //0x0da0: ^.X. .... Q.^. .... 0xde, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x60, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x5f, 0x00, 0x70, 0x00, + //0x0db0: ..Q. ^.`. .... _.p. 0x64, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x5f, 0x00, 0x70, 0x00, 0x68, 0xc7, 0xc9, 0x00, 0xde, 0x00, + //0x0dc0: d... .._. p.h. .... 0x5f, 0x00, 0x70, 0x00, 0x6c, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x71, 0x00, 0x82, 0x00, 0x70, 0xc7, + //0x0dd0: _.p. l... ..q. ..p. 0xb3, 0x00, 0xc8, 0x00, 0x71, 0x00, 0x82, 0x00, 0x74, 0xc7, 0xc9, 0x00, 0xde, 0x00, 0x71, 0x00, + //0x0de0: .... q... t... ..q. 0x82, 0x00, 0x78, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x83, 0x00, 0x91, 0x00, 0x7c, 0xc7, 0xb3, 0x00, + //0x0df0: ..x. .... .... |... 0xde, 0x00, 0x83, 0x00, 0x91, 0x00, 0x80, 0xc7, 0xdc, 0x00, 0xea, 0x00, 0x98, 0x00, 0xa6, 0x00, + //0x0e00: .... .... .... .... 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xae, 0x00, + //0x0e10: P... @... .... .... 0xbc, 0x00, 0x84, 0x00, 0x94, 0x00, 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + //0x0e20: .... ..P. ..@. .... 0xa0, 0xca, 0xff, 0xff, 0x18, 0x01, 0x40, 0x01, 0xa0, 0x00, 0xc8, 0x00, 0x50, 0xc7, 0x8f, 0x00, + //0x0e30: .... ..@. .... P... 0x2c, 0x01, 0x06, 0x00, 0xc2, 0x00, 0xb8, 0xc7, 0x00, 0x00, 0x8f, 0x00, 0x06, 0x00, 0xc2, 0x00, + //0x0e40: ,... .... .... .... 0xc0, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x68, 0x00, + //0x0e50: .... @... .... ..h. 0x80, 0x00, 0x3a, 0x00, 0x48, 0x00, 0xdc, 0xc7, 0x40, 0x00, 0x74, 0x00, 0x4c, 0x00, 0x6a, 0x00, + //0x0e60: ..:. H... @.t. L.j. 0xe0, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x4c, 0x00, 0x6a, 0x00, 0xe4, 0xc7, 0x40, 0x00, 0x74, 0x00, + //0x0e70: ..t. ..L. j... @.t. 0x6a, 0x00, 0x88, 0x00, 0xe8, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x6a, 0x00, 0x88, 0x00, 0xec, 0xc7, + //0x0e80: j... ..t. ..j. .... 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xba, 0x00, 0xca, 0x00, + //0x0e90: ..@. .... .... .... 0x9d, 0x00, 0xad, 0x00, 0x1c, 0xc8, 0xf3, 0x00, 0x03, 0x01, 0x83, 0x00, 0x93, 0x00, 0x18, 0xc8, + //0x0ea0: .... .... .... .... 0x0c, 0x01, 0x1c, 0x01, 0xa8, 0x00, 0xb8, 0x00, 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, + //0x0eb0: .... .... P... @... 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00, 0x80, 0x00, 0x34, 0xc8, + //0x0ec0: .... ..w. ..R. ..4. 0x46, 0x00, 0x89, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x80, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x44, 0x00, + //0x0ed0: F... >.o. .... ..D. 0x98, 0x00, 0x4c, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, + //0x0ee0: ..L. ..@. .... .... 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x40, 0x00, + //0x0ef0: .... p... H... ..@. 0x98, 0x00, 0x58, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00, 0x74, 0xc8, 0x00, 0x00, + //0x0f00: ..X. >... 8... t... 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00, + //0x0f10: @... .... ..w. ..R. 0x80, 0x00, 0x44, 0xc8, 0x46, 0x00, 0x8b, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x50, 0xc8, 0xec, 0x00, + //0x0f20: ..D. F... >.o. P... 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + //0x0f30: ..p. ..H. ..@. .... 0xa0, 0xca, 0xff, 0xff, 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0xbc, 0x00, + //0x0f40: .... .... p... H... 0xfa, 0x00, 0x40, 0x00, 0x98, 0x00, 0x54, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00, + //0x0f50: ..@. ..T. >... 8... 0x74, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x0d, 0x0a, + //0x0f60: t... @... .... .... 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, + //0x0f70: ..Dr eamw eb h as a 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, + //0x0f80: n Er ror: ..Un able 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x45, 0x78, 0x70, + //0x0f90: to allo cate Exp 0x61, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2e, 0x0d, 0x0a, 0x0d, + //0x0fa0: ande d Me mory .... 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, + //0x0fb0: .$.. ..Dr eamw eb h 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f, + //0x0fc0: as a n Er ror: ..So 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x63, 0x61, 0x72, 0x64, + //0x0fd0: und Blas ter card 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, 0x74, 0x20, 0x61, 0x64, + //0x0fe0: not fou nd a t ad 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x20, 0x48, 0x65, 0x78, 0x2e, 0x0d, 0x0a, + //0x0ff0: dres s 22 0 He x... 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, + //0x1000: ..$. ...D ream web 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x4f, + //0x1010: has an E rror :..O 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x42, 0x61, 0x73, 0x65, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + //0x1020: ut o f Ba se M emor 0x79, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, + //0x1030: y... ..$. ...D ream 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, + //0x1040: web has an E rror 0x3a, 0x0d, 0x0a, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x44, 0x65, 0x61, 0x6c, 0x6c, 0x6f, + //0x1050: :..M emor y De allo 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x2e, 0x0d, + //0x1060: cati on p robl em.. 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, + //0x1070: ...$ .... Drea mweb 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, + //0x1080: has an Erro r:.. 0x41, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x35, 0x39, 0x30, 0x4b, 0x20, 0x6f, 0x66, + //0x1090: At l east 590 K of 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, + //0x10a0: bas e me mory is 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, + //0x10b0: requ ired .... .$.. 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, + //0x10c0: ..Dr eamw eb h as a 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, + //0x10d0: n Er ror: ..So und 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, + //0x10e0: Blas ter not foun 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x75, 0x70, 0x74, 0x20, 0x30, 0x0d, + //0x10f0: d on int erup t 0. 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, + //0x1100: ...$ .... Drea mweb 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, + //0x1110: has an Erro r:.. 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + //0x1120: Unab le t o se lect 0x20, 0x45, 0x4d, 0x4d, 0x20, 0x70, 0x61, 0x67, 0x65, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, + //0x1130: EMM pag e... ..$. 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, + //0x1140: ...D ream web has 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x20, + //0x1150: an E rror :..F ile 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x63, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, + //0x1160: not foun d.c. ...$ 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x73, 0x20, 0x66, + //0x1170: Drea mweb loo ks f 0x6f, 0x72, 0x20, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, + //0x1180: or S ound Bla ster 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x0d, + //0x1190: inf orma tion in. 0x0a, 0x74, 0x68, 0x65, 0x20, 0x42, 0x4c, 0x41, 0x53, 0x54, 0x45, 0x52, 0x20, 0x65, 0x6e, 0x76, + //0x11a0: .the BLA STER env 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + //0x11b0: iron ment var iabl 0x65, 0x20, 0x28, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x41, 0x55, 0x54, 0x4f, 0x45, + //0x11c0: e (i n yo ur A UTOE 0x58, 0x45, 0x43, 0x2e, 0x42, 0x41, 0x54, 0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x49, 0x66, 0x20, 0x74, + //0x11d0: XEC. BAT) .... If t 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, + //0x11e0: his is n ot f ound 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, + //0x11f0: the n IR Q 7, DMA 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, + //0x1200: cha nnel 1 a nd b 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, + //0x1210: ase. .add ress 220 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x2e, 0x0d, 0x0a, + //0x1220: h ar e as sume d... 0x0d, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, + //0x1230: ..To alt er a ny o 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x73, + //0x1240: r al l of the se s 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, + //0x1250: etti ngs you can 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x0d, 0x0a, 0x6f, 0x6e, + //0x1260: spec ify them ..on 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, + //0x1270: the com mand lin 0x65, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x0d, + //0x1280: e. F or e xamp le:. 0x0a, 0x0d, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x20, 0x20, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1290: ...T ype D REAM 0x57, 0x45, 0x42, 0x20, 0x49, 0x37, 0x20, 0x41, 0x32, 0x32, 0x30, 0x20, 0x44, 0x31, 0x20, 0x20, + //0x12a0: WEB I7 A 220 D1 0x20, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, + //0x12b0: to run Dre amwe 0x62, 0x20, 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x0d, + //0x12c0: b on IRQ 7, DMA. 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + //0x12d0: . 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + //0x12e0: 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x61, + //0x12f0: chan nel 1 an d ba 0x73, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x68, 0x0d, + //0x1300: se a ddre ss 2 20h. 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + //0x1310: . DRE AMWE 0x42, 0x20, 0x49, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + //0x1320: B I5 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, + //0x1330: to r un D ream web 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x35, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, + //0x1340: on I RQ 5 and .. 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + //0x1350: 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, + //0x1360: def 0x61, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, + //0x1370: ault add ress of 0x32, 0x32, 0x30, 0x68, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x20, 0x31, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, + //0x1380: 220h , DM A 1. ...$ 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x72, 0x65, 0x61, + //0x1390: .... Try the Drea 0x6d, 0x77, 0x65, 0x62, 0x20, 0x43, 0x44, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, + //0x13a0: mweb CD in y our 0x73, 0x74, 0x65, 0x72, 0x65, 0x6f, 0x2e, 0x2e, 0x2e, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, + //0x13b0: ster eo.. .... .... 0x24, 0x81, 0x00, 0xb8, 0x00, 0x52, 0x00, 0x80, 0x00, 0xc0, 0xc8, 0x50, 0x00, 0x93, 0x00, 0x3e, + //0x13c0: $... .R.. ...P ...> 0x00, 0x6f, 0x00, 0x80, 0xc8, 0xb7, 0x00, 0xfa, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0xc4, 0xc8, 0x00, + //0x13d0: .o.. .... .>.o .... 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x53, 0x50, 0x45, 0x45, 0x43, + //0x13e0: .@.. .... ...S PEEC 0x48, 0x52, 0x32, 0x34, 0x43, 0x30, 0x30, 0x30, 0x35, 0x2e, 0x52, 0x41, 0x57, 0x00, 0x87, 0x83, + //0x13f0: HR24 C000 5.RA W... 0x81, 0x82, 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x70, 0xc4, 0x00, 0x00, 0x32, 0x00, + //0x1400: ..,. F. . ..p. ..2. 0x00, 0x00, 0xb4, 0x00, 0x7c, 0xc3, 0xe2, 0x00, 0xf4, 0x00, 0x0a, 0x00, 0x1a, 0x00, 0x28, 0xc8, + //0x1410: .... |... .... ..(. 0xe2, 0x00, 0xf4, 0x00, 0x1a, 0x00, 0x28, 0x00, 0x2c, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 0x00, + //0x1420: .... ..(. ,... ..d. 0x7c, 0x00, 0xcc, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd4, 0xc9, 0xff, 0xff, + //0x1430: |... ..@. .... .... 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x70, 0xc4, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, + //0x1440: ,.F. ... p... 2... 0xb4, 0x00, 0x7c, 0xc3, 0x12, 0x01, 0x24, 0x01, 0x0a, 0x00, 0x1a, 0x00, 0x28, 0xc8, 0x12, 0x01, + //0x1450: ..|. ..$. .... (... 0x24, 0x01, 0x1a, 0x00, 0x28, 0x00, 0x2c, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 0x00, 0x7c, 0x00, + //0x1460: $... (.,. .... d.|. 0xcc, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd4, 0xc9, 0xff, 0xff, 0x00, 0x21, + //0x1470: .... @... .... ...! 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x00, 0x0f, 0xff, 0x00, 0x0b, 0x00, + //0x1480: .... .... .... .... 0x0f, 0xff, 0x00, 0x0b, 0x0a, 0x0f, 0xff, 0x00, 0x00, 0x0a, 0x0f, 0xff, 0x01, 0x2c, 0x0a, 0x06, + //0x1490: .... .... .... .,.. 0xff, 0x01, 0x2c, 0x00, 0x0d, 0xff, 0x02, 0x21, 0x00, 0x06, 0xff, 0x02, 0x16, 0x00, 0x05, 0xff, + //0x14a0: ..,. ...! .... .... 0x02, 0x16, 0x0a, 0x10, 0xff, 0x02, 0x0b, 0x0a, 0x10, 0xff, 0x03, 0x2c, 0x00, 0x0f, 0xff, 0x03, + //0x14b0: .... .... ..., .... 0x21, 0x0a, 0x06, 0xff, 0x03, 0x21, 0x00, 0x05, 0xff, 0x04, 0x0b, 0x1e, 0x06, 0xff, 0x04, 0x16, + //0x14c0: !... .!.. .... .... 0x1e, 0x05, 0xff, 0x04, 0x16, 0x14, 0x0d, 0xff, 0x0a, 0x21, 0x1e, 0x06, 0xff, 0x0a, 0x16, 0x1e, + //0x14d0: .... .... .!.. .... 0x06, 0xff, 0x09, 0x16, 0x0a, 0x06, 0xff, 0x09, 0x16, 0x14, 0x10, 0xff, 0x09, 0x16, 0x1e, 0x10, + //0x14e0: .... .... .... .... 0xff, 0x09, 0x16, 0x28, 0x10, 0xff, 0x09, 0x16, 0x32, 0x10, 0xff, 0x06, 0x0b, 0x1e, 0x06, 0xff, + //0x14f0: ...( .... 2... .... 0x06, 0x00, 0x0a, 0x0f, 0xff, 0x06, 0x00, 0x14, 0x0f, 0xff, 0x06, 0x0b, 0x14, 0x0f, 0xff, 0x06, + //0x1500: .... .... .... .... 0x16, 0x14, 0x0f, 0xff, 0x07, 0x0b, 0x14, 0x06, 0xff, 0x07, 0x00, 0x14, 0x06, 0xff, 0x07, 0x00, + //0x1510: .... .... .... .... 0x1e, 0x06, 0xff, 0x37, 0x2c, 0x00, 0x05, 0xff, 0x37, 0x2c, 0x0a, 0x05, 0xff, 0x05, 0x16, 0x1e, + //0x1520: ...7 ,... 7,.. .... 0x06, 0xff, 0x05, 0x16, 0x14, 0x0f, 0xff, 0x05, 0x16, 0x0a, 0x0f, 0xff, 0x18, 0x16, 0x00, 0x0f, + //0x1530: .... .... .... .... 0xff, 0x18, 0x21, 0x00, 0x0f, 0xff, 0x18, 0x2c, 0x00, 0x0f, 0xff, 0x18, 0x21, 0x0a, 0x0f, 0xff, + //0x1540: ..!. ..., .... !... 0x08, 0x00, 0x0a, 0x06, 0xff, 0x08, 0x0b, 0x0a, 0x06, 0xff, 0x08, 0x16, 0x0a, 0x06, 0xff, 0x08, + //0x1550: .... .... .... .... 0x21, 0x0a, 0x06, 0xff, 0x08, 0x21, 0x14, 0x06, 0xff, 0x08, 0x21, 0x1e, 0x06, 0xff, 0x08, 0x21, + //0x1560: !... .!.. ..!. ...! 0x28, 0x06, 0xff, 0x08, 0x16, 0x28, 0x06, 0xff, 0x08, 0x0b, 0x28, 0x06, 0xff, 0x0b, 0x0b, 0x14, + //0x1570: (... .(.. ..(. .... 0x0c, 0xff, 0x0b, 0x0b, 0x1e, 0x0c, 0xff, 0x0b, 0x16, 0x14, 0x0c, 0xff, 0x0b, 0x16, 0x1e, 0x0c, + //0x1580: .... .... .... .... 0xff, 0x0c, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x21, 0x14, 0x0c, 0xff, + //0x1590: .... .... .... !... 0x0e, 0x2c, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x00, 0x0c, 0xff, 0x0e, 0x21, 0x0a, 0x0c, 0xff, 0x0e, + //0x15a0: .,.. ..!. ...! .... 0x21, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x1e, 0x0c, 0xff, 0x0e, 0x21, 0x28, 0x0c, 0xff, 0x0e, 0x16, + //0x15b0: !... .!.. ..!( .... 0x00, 0x10, 0xff, 0x13, 0x00, 0x00, 0x0c, 0xff, 0x14, 0x00, 0x14, 0x10, 0xff, 0x14, 0x00, 0x1e, + //0x15c0: .... .... .... .... 0x10, 0xff, 0x14, 0x0b, 0x1e, 0x10, 0xff, 0x14, 0x00, 0x28, 0x10, 0xff, 0x14, 0x0b, 0x28, 0x10, + //0x15d0: .... .... .(.. ..(. 0xff, 0x15, 0x0b, 0x0a, 0x0f, 0xff, 0x15, 0x0b, 0x14, 0x0f, 0xff, 0x15, 0x00, 0x14, 0x0f, 0xff, + //0x15e0: .... .... .... .... 0x15, 0x16, 0x14, 0x0f, 0xff, 0x15, 0x21, 0x14, 0x0f, 0xff, 0x15, 0x2c, 0x14, 0x0f, 0xff, 0x15, + //0x15f0: .... ..!. ..., .... 0x2c, 0x0a, 0x0f, 0xff, 0x16, 0x16, 0x0a, 0x10, 0xff, 0x16, 0x16, 0x14, 0x10, 0xff, 0x17, 0x16, + //0x1600: ,... .... .... .... 0x1e, 0x0d, 0xff, 0x17, 0x16, 0x28, 0x0d, 0xff, 0x17, 0x21, 0x28, 0x0d, 0xff, 0x17, 0x0b, 0x28, + //0x1610: .... .(.. .!(. ...( 0x0d, 0xff, 0x17, 0x00, 0x28, 0x0d, 0xff, 0x17, 0x00, 0x32, 0x0d, 0xff, 0x19, 0x0b, 0x28, 0x10, + //0x1620: .... (... .2.. ..(. 0xff, 0x19, 0x0b, 0x32, 0x10, 0xff, 0x19, 0x00, 0x32, 0x10, 0xff, 0x1b, 0x0b, 0x14, 0x10, 0xff, + //0x1630: ...2 .... 2... .... 0x1b, 0x0b, 0x1e, 0x10, 0xff, 0x1d, 0x0b, 0x0a, 0x10, 0xff, 0x2d, 0x16, 0x1e, 0x0c, 0xff, 0x2d, + //0x1640: .... .... ..-. ...- 0x16, 0x28, 0x0c, 0xff, 0x2d, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x28, 0x0c, 0xff, 0x2e, 0x0b, + //0x1650: .(.. -.2. ...( .... 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x21, 0x32, 0x0c, 0xff, 0x2f, 0x00, 0x00, + //0x1660: 2... .2.. .!2. ./.. 0x0c, 0xff, 0x1a, 0x16, 0x14, 0x10, 0xff, 0x1a, 0x21, 0x0a, 0x10, 0xff, 0x1a, 0x21, 0x14, 0x10, + //0x1670: .... .... !... .!.. 0xff, 0x1a, 0x21, 0x1e, 0x10, 0xff, 0x1a, 0x2c, 0x1e, 0x10, 0xff, 0x1a, 0x16, 0x1e, 0x10, 0xff, + //0x1680: ..!. ..., .... .... 0x1a, 0x0b, 0x1e, 0x10, 0xff, 0x1a, 0x0b, 0x14, 0x10, 0xff, 0x1a, 0x00, 0x14, 0x10, 0xff, 0x1a, + //0x1690: .... .... .... .... 0x0b, 0x28, 0x10, 0xff, 0x1a, 0x00, 0x28, 0x10, 0xff, 0x1a, 0x16, 0x28, 0x10, 0xff, 0x1a, 0x0b, + //0x16a0: .(.. ..(. ...( .... 0x32, 0x10, 0xff, 0x1c, 0x00, 0x1e, 0x0f, 0xff, 0x1c, 0x00, 0x14, 0x0f, 0xff, 0x1c, 0x00, 0x28, + //0x16b0: 2... .... .... ...( 0x0f, 0xff, 0x1c, 0x0b, 0x1e, 0x0f, 0xff, 0x1c, 0x0b, 0x14, 0x0f, 0xff, 0x1c, 0x16, 0x1e, 0x0f, + //0x16c0: .... .... .... .... 0xff, 0x1c, 0x16, 0x14, 0x0f, 0xff, 0xff, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x20, 0x4e, 0x41, + //0x16d0: .... ...O BJEC T NA 0x4d, 0x45, 0x20, 0x4f, 0x4e, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + //0x16e0: ME O NE 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + //0x16f0: . 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x1700: .... .... .... .... 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1710: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + //0x1720: .... .... ..12 3456 0x37, 0x38, 0x39, 0x30, 0x2d, 0x00, 0x08, 0x00, 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, + //0x1730: 7890 -... QWER TYUI 0x4f, 0x50, 0x00, 0x00, 0x0d, 0x00, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x00, + //0x1740: OP.. ..AS DFGH JKL. 0x00, 0x00, 0x00, 0x00, 0x5a, 0x58, 0x43, 0x56, 0x42, 0x4e, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1750: .... ZXCV BNM. .... 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1760: . .. .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1770: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1780: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1790: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x3a, 0x00, 0x00, 0x00, + //0x17a0: .... .... ...D :... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x17b0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x17c0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x43, 0x4f, + //0x17d0: WEB DATA FIL E CO 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x31, 0x39, 0x39, 0x32, 0x20, 0x43, 0x52, 0x45, + //0x17e0: PYRI GHT 1992 CRE 0x41, 0x54, 0x49, 0x56, 0x45, 0x20, 0x52, 0x45, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x00, 0x00, 0x00, + //0x17f0: ATIV E RE ALIT Y... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1800: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1810: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1820: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x30, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1830: WEB. R00. ..!. .... 0x01, 0x06, 0x02, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1840: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1850: WEB. R01. ..,. .... 0x07, 0x02, 0xff, 0xff, 0xff, 0xff, 0x06, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1860: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x32, 0x00, 0x02, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1870: WEB. R02. ..!. .... 0x01, 0x00, 0xff, 0xff, 0x01, 0xff, 0x03, 0xff, 0xff, 0xff, 0x02, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1880: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x33, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1890: WEB. R03. ..!. .... 0x02, 0x02, 0x00, 0x02, 0x04, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x18a0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x34, 0x00, 0x17, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x18b0: WEB. R04. .... .... 0x01, 0x04, 0x00, 0x05, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x18c0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x18d0: WEB. R05. .... .... 0x01, 0x02, 0x00, 0x04, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x18e0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x36, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x18f0: WEB. R06. .... .... 0x01, 0x00, 0x00, 0x01, 0x02, 0xff, 0x00, 0xff, 0xff, 0xff, 0x06, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1900: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x37, 0x00, 0xff, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1910: WEB. R07. .... .... 0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x07, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1920: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x38, 0x00, 0x08, 0xff, 0x00, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1930: WEB. R08. .... .... 0x01, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0b, 0x28, 0x00, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1940: .... .... (..D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x39, 0x00, 0x09, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1950: WEB. R09. .... .... 0x04, 0x06, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x09, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1960: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x30, 0x00, 0x0a, 0xff, 0x21, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1970: WEB. R10. ..!. .... 0x02, 0x00, 0xff, 0xff, 0x02, 0x02, 0x04, 0x16, 0x1e, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1980: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x31, 0x00, 0x0b, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1990: WEB. R11. .... .... 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x19a0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x19b0: WEB. R12. .... .... 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x19c0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x33, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x19d0: WEB. R13. .... .... 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x19e0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x34, 0x00, 0x0e, 0xff, 0x2c, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x19f0: WEB. R14. ..,. .... 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1a00: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1a10: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1a20: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1a30: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1a40: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1a50: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1a60: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1a70: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1a80: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1a90: WEB. R19. .... .... 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1aa0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x30, 0x00, 0x16, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1ab0: WEB. R20. .... .... 0x01, 0x04, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x14, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1ac0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1ad0: WEB. R21. .... .... 0x01, 0x04, 0x02, 0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1ae0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1af0: WEB. R22. .... .... 0x00, 0x04, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1b00: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x33, 0x00, 0x17, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1b10: WEB. R23. .... .... 0x01, 0x04, 0x02, 0x0f, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1b20: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x34, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1b30: WEB. R24. ..,. .... 0x01, 0x06, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1b40: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x35, 0x00, 0x16, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00, + //0x1b50: WEB. R25. ...( .... 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1b60: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x36, 0x00, 0x09, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1b70: WEB. R26. .... .... 0x04, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1b80: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x37, 0x00, 0x16, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1b90: WEB. R27. .... .... 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1ba0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1bb0: WEB. R28. .... .... 0x00, 0x00, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1bc0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x39, 0x00, 0x16, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1bd0: WEB. R29. .... .... 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1d, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1be0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1bf0: WEB. R05. .... .... 0x01, 0x04, 0x01, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1c00: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x34, 0x00, 0x17, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1c10: WEB. R04. .... .... 0x01, 0x04, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1c20: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x30, 0x00, 0x0a, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1c30: WEB. R10. .... .... 0x03, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1c40: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1c50: WEB. R12. .... .... 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1c60: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x33, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1c70: WEB. R03. ..,. .... 0x01, 0x06, 0x02, 0xff, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1c80: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x34, 0x00, 0x05, 0xff, 0x16, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1c90: WEB. R24. .... .... 0x03, 0x06, 0x00, 0xff, 0xff, 0xff, 0xff, 0x21, 0x00, 0x03, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1ca0: .... ...! ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1cb0: WEB. R22. .... .... 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1cc0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1cd0: WEB. R22. .... .... 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1ce0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x31, 0x00, 0x0b, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1cf0: WEB. R11. .... .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1d00: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + //0x1d10: WEB. R28. .... .... 0x00, 0x06, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1d20: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1d30: WEB. R21. .... .... 0x01, 0x04, 0x02, 0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1d40: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x36, 0x00, 0x09, 0xff, 0x00, 0x28, 0xff, 0xff, 0xff, 0x00, + //0x1d50: WEB. R26. ...( .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1d60: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1d70: WEB. R19. .... .... 0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1d80: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x38, 0x00, 0x08, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00, + //0x1d90: WEB. R08. ...( .... 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1da0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00, + //0x1db0: WEB. R01. ..,. .... 0x03, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1dc0: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1dd0: WEB. R45. #... .... 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1de0: .... .... ..-D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x28, 0xff, 0xff, 0xff, 0x00, + //0x1df0: WEB. R46. #..( .... 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1e00: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x37, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1e10: WEB. R47. #... .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1e20: .... .... ../D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1e30: WEB. R45. #... .... 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1e40: .... .... ..-D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x32, 0xff, 0xff, 0xff, 0x00, + //0x1e50: WEB. R46. #..2 .... 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1e60: .... .... ...D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x30, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1e70: WEB. R50. #... .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1e80: .... .... ..2D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x31, 0x00, 0x23, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1e90: WEB. R51. #... .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1ea0: .... .... ..3D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x32, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + //0x1eb0: WEB. R52. #... .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1ec0: .... .... ..4D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x33, 0x00, 0x23, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1ed0: WEB. R53. #.!. .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x35, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1ee0: .... .... ..5D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x34, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1ef0: WEB. R54. #... .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x1f00: .... .... ..6D REAM 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x35, 0x00, 0x0e, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + //0x1f10: WEB. R55. ..,. .... 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1f20: .... .... ..7. .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1f30: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, + //0x1f40: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, + //0x1f50: .... .... .... .... 0x01, 0x0a, 0x09, 0x08, 0x06, 0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1f60: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1f70: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1f80: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1f90: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1fa0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1fb0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1fc0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x1fd0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + //0x1fe0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x1ff0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2000: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2010: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2020: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2030: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2040: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2050: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2060: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2070: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2080: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2090: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x20a0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x20b0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x20c0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x20d0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x20e0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x20f0: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2100: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2110: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2120: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2130: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2140: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2150: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2160: .... .... .... .... 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + //0x2170: .... .... .... .... 0xff, 0xff, 0xff, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x2180: .... .... .... .... 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x2190: .... .... .... .... 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x21a0: .... .... .... .... 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x21b0: .... .... .... .... 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x21c0: .... .... .... .... 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x21d0: .... .... .... .... 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + //0x21e0: .... .... .... .... 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + //0x21f0: .... .... ..DR EAMW 0x45, 0x42, 0x2e, 0x44, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + //0x2200: EB.D 00.D REAM WEB. 0x44, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x32, + //0x2210: D01. DREA MWEB .D02 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x33, 0x00, 0x44, 0x52, + //0x2220: .DRE AMWE B.D0 3.DR 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + //0x2230: EAMW EB.D 04.D REAM 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + //0x2240: WEB. D05. DREA MWEB 0x2e, 0x44, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x45, + //0x2250: .D06 .DRE AMWE B.DE 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2260: M... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2270: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2280: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2290: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x22a0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x22b0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x22c0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x22d0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x22e0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x22f0: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2300: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2310: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2320: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2330: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2340: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //0x2350: .... .... .... .... 0x00, 0x00, 0x00, 0x00, 0x00, }; ds.assign(src, src + sizeof(src)); dreamweb(); @@ -18085,9 +16935,7 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_copper: copper(); break; case addr_sparky: sparky(); break; case addr_train: train(); break; - case addr_addtopeoplelist: addtopeoplelist(); break; case addr_checkspeed: checkspeed(); break; - case addr_delsprite: delsprite(); break; case addr_mainman: mainman(); break; case addr_checkforexit: checkforexit(); break; case addr_adjustdown: adjustdown(); break; @@ -18097,7 +16945,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_reminders: reminders(); break; case addr_initrain: initrain(); break; case addr_splitintolines: splitintolines(); break; - case addr_getblockofpixel: getblockofpixel(); break; case addr_backobject: backobject(); break; case addr_liftnoise: liftnoise(); break; case addr_random: random(); break; @@ -18107,20 +16954,13 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_soundonreels: soundonreels(); break; case addr_reconstruct: reconstruct(); break; case addr_deleverything: deleverything(); break; - case addr_dumpeverything: dumpeverything(); break; case addr_showpcx: showpcx(); break; case addr_loadpalfromiff: loadpalfromiff(); break; case addr_setmode: setmode(); break; - case addr_paneltomap: paneltomap(); break; - case addr_maptopanel: maptopanel(); break; - case addr_dumpmap: dumpmap(); break; - case addr_pixelcheckset: pixelcheckset(); break; case addr_createpanel: createpanel(); break; case addr_createpanel2: createpanel2(); break; case addr_vsync: vsync(); break; case addr_doshake: doshake(); break; - case addr_delthisone: delthisone(); break; - case addr_transferinv: transferinv(); break; case addr_transfermap: transfermap(); break; case addr_fadedos: fadedos(); break; case addr_dofade: dofade(); break; @@ -18167,31 +17007,21 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_mode640x480: mode640x480(); break; case addr_set16colpalette: set16colpalette(); break; case addr_realcredits: realcredits(); break; - case addr_waitframes: waitframes(); break; case addr_monprint: monprint(); break; - case addr_fillryan: fillryan(); break; case addr_fillopen: fillopen(); break; - case addr_findallryan: findallryan(); break; case addr_findallopen: findallopen(); break; - case addr_obtoinv: obtoinv(); break; - case addr_isitworn: isitworn(); break; - case addr_makeworn: makeworn(); break; case addr_examineob: examineob(); break; case addr_makemainscreen: makemainscreen(); break; case addr_getbackfromob: getbackfromob(); break; case addr_incryanpage: incryanpage(); break; case addr_openinv: openinv(); break; - case addr_showryanpage: showryanpage(); break; case addr_openob: openob(); break; - case addr_obicons: obicons(); break; case addr_examicon: examicon(); break; - case addr_obpicture: obpicture(); break; case addr_describeob: describeob(); break; case addr_additionaltext: additionaltext(); break; case addr_obsthatdothings: obsthatdothings(); break; case addr_getobtextstart: getobtextstart(); break; case addr_searchforsame: searchforsame(); break; - case addr_findnextcolon: findnextcolon(); break; case addr_inventory: inventory(); break; case addr_setpickup: setpickup(); break; case addr_examinventory: examinventory(); break; @@ -18226,7 +17056,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_pickupconts: pickupconts(); break; case addr_transfercontoex: transfercontoex(); break; case addr_transfertext: transfertext(); break; - case addr_getexpos: getexpos(); break; case addr_purgealocation: purgealocation(); break; case addr_emergencypurge: emergencypurge(); break; case addr_purgeanitem: purgeanitem(); break; @@ -18235,8 +17064,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_deleteextext: deleteextext(); break; case addr_blockget: blockget(); break; case addr_drawfloor: drawfloor(); break; - case addr_drawflags: drawflags(); break; - case addr_showallex: showallex(); break; case addr_autolook: autolook(); break; case addr_look: look(); break; case addr_dolook: dolook(); break; @@ -18306,7 +17133,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_printcurs: printcurs(); break; case addr_delcurs: delcurs(); break; case addr_useobject: useobject(); break; - case addr_useroutine: useroutine(); break; case addr_wheelsound: wheelsound(); break; case addr_runtap: runtap(); break; case addr_playguitar: playguitar(); break; @@ -18385,12 +17211,10 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_useelvdoor: useelvdoor(); break; case addr_withwhat: withwhat(); break; case addr_selectob: selectob(); break; - case addr_compare: compare(); break; case addr_findsetobject: findsetobject(); break; case addr_findexobject: findexobject(); break; case addr_isryanholding: isryanholding(); break; case addr_checkinside: checkinside(); break; - case addr_usetext: usetext(); break; case addr_putbackobstuff: putbackobstuff(); break; case addr_showpuztext: showpuztext(); break; case addr_findpuztext: findpuztext(); break; @@ -18562,27 +17386,15 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_convnum: convnum(); break; case addr_mainscreen: mainscreen(); break; case addr_madmanrun: madmanrun(); break; - case addr_checkcoords: checkcoords(); break; case addr_identifyob: identifyob(); break; - case addr_checkifset: checkifset(); break; - case addr_checkifex: checkifex(); break; - case addr_isitdescribed: isitdescribed(); break; case addr_findpathofpoint: findpathofpoint(); break; case addr_findfirstpath: findfirstpath(); break; - case addr_turnpathon: turnpathon(); break; - case addr_turnpathoff: turnpathoff(); break; - case addr_turnanypathon: turnanypathon(); break; - case addr_turnanypathoff: turnanypathoff(); break; - case addr_checkifpathison: checkifpathison(); break; case addr_afternewroom: afternewroom(); break; case addr_atmospheres: atmospheres(); break; case addr_walkintoroom: walkintoroom(); break; case addr_afterintroroom: afterintroroom(); break; - case addr_obname: obname(); break; case addr_examineobtext: examineobtext(); break; - case addr_printmessage: printmessage(); break; case addr_printmessage2: printmessage2(); break; - case addr_getflagunderp: getflagunderp(); break; case addr_setwalk: setwalk(); break; case addr_bresenhams: bresenhams(); break; case addr_workoutframes: workoutframes(); break; @@ -18597,33 +17409,20 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_showwatch: showwatch(); break; case addr_gettime: gettime(); break; case addr_zoomicon: zoomicon(); break; - case addr_showblink: showblink(); break; - case addr_dumpblink: dumpblink(); break; case addr_worktoscreenm: worktoscreenm(); break; case addr_blank: blank(); break; case addr_allpointer: allpointer(); break; - case addr_hangonp: hangonp(); break; case addr_hangonw: hangonw(); break; case addr_hangoncurs: hangoncurs(); break; case addr_getunderzoom: getunderzoom(); break; case addr_dumpzoom: dumpzoom(); break; case addr_putunderzoom: putunderzoom(); break; - case addr_showpointer: showpointer(); break; - case addr_delpointer: delpointer(); break; - case addr_dumppointer: dumppointer(); break; case addr_undertextline: undertextline(); break; - case addr_animpointer: animpointer(); break; case addr_setmouse: setmouse(); break; - case addr_readmouse: readmouse(); break; case addr_mousecall: mousecall(); break; - case addr_readmouse1: readmouse1(); break; - case addr_readmouse2: readmouse2(); break; - case addr_readmouse3: readmouse3(); break; - case addr_readmouse4: readmouse4(); break; case addr_readkey: readkey(); break; case addr_randomnum1: randomnum1(); break; case addr_randomnum2: randomnum2(); break; - case addr_hangon: hangon(); break; case addr_loadtraveltext: loadtraveltext(); break; case addr_loadintotemp: loadintotemp(); break; case addr_loadintotemp2: loadintotemp2(); break; @@ -18659,7 +17458,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_setkeyboardint: setkeyboardint(); break; case addr_resetkeyboard: resetkeyboard(); break; case addr_keyboardread: keyboardread(); break; - case addr_walkandexamine: walkandexamine(); break; case addr_doload: doload(); break; case addr_generalerror: generalerror(); break; default: ::error("invalid call to %04x dispatched", (uint16)ax); diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index 7ed079c00e..026b412b55 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -74,33 +74,20 @@ public: static const uint16 addr_loadintotemp2 = 0xcb1c; static const uint16 addr_loadintotemp = 0xcb18; static const uint16 addr_loadtraveltext = 0xcb14; - static const uint16 addr_hangon = 0xcb10; static const uint16 addr_randomnum2 = 0xcb08; static const uint16 addr_randomnum1 = 0xcb04; static const uint16 addr_readkey = 0xcafc; - static const uint16 addr_readmouse4 = 0xcaf8; - static const uint16 addr_readmouse3 = 0xcaf4; - static const uint16 addr_readmouse2 = 0xcaf0; - static const uint16 addr_readmouse1 = 0xcaec; static const uint16 addr_mousecall = 0xcae8; - static const uint16 addr_readmouse = 0xcae4; static const uint16 addr_setmouse = 0xcae0; - static const uint16 addr_animpointer = 0xcadc; static const uint16 addr_undertextline = 0xcad0; - static const uint16 addr_dumppointer = 0xcacc; - static const uint16 addr_delpointer = 0xcac8; - static const uint16 addr_showpointer = 0xcac4; static const uint16 addr_putunderzoom = 0xcabc; static const uint16 addr_dumpzoom = 0xcab8; static const uint16 addr_getunderzoom = 0xcab4; static const uint16 addr_hangoncurs = 0xcab0; static const uint16 addr_hangonw = 0xcaac; - static const uint16 addr_hangonp = 0xcaa8; static const uint16 addr_allpointer = 0xcaa4; static const uint16 addr_blank = 0xcaa0; static const uint16 addr_worktoscreenm = 0xca9c; - static const uint16 addr_dumpblink = 0xca98; - static const uint16 addr_showblink = 0xca94; static const uint16 addr_zoomicon = 0xca90; static const uint16 addr_gettime = 0xca8c; static const uint16 addr_showwatch = 0xca88; @@ -115,30 +102,17 @@ public: static const uint16 addr_workoutframes = 0xca54; static const uint16 addr_bresenhams = 0xca50; static const uint16 addr_setwalk = 0xca44; - static const uint16 addr_getflagunderp = 0xca40; static const uint16 addr_printmessage2 = 0xca30; - static const uint16 addr_printmessage = 0xca2c; static const uint16 addr_examineobtext = 0xca20; - static const uint16 addr_obname = 0xca18; static const uint16 addr_afterintroroom = 0xca14; static const uint16 addr_walkintoroom = 0xca10; static const uint16 addr_atmospheres = 0xca0c; static const uint16 addr_afternewroom = 0xca08; - static const uint16 addr_checkifpathison = 0xca04; - static const uint16 addr_turnanypathoff = 0xca00; - static const uint16 addr_turnanypathon = 0xc9fc; - static const uint16 addr_turnpathoff = 0xc9f8; - static const uint16 addr_turnpathon = 0xc9f4; static const uint16 addr_findfirstpath = 0xc9f0; static const uint16 addr_findpathofpoint = 0xc9ec; - static const uint16 addr_isitdescribed = 0xc9e8; - static const uint16 addr_checkifex = 0xc9e0; - static const uint16 addr_checkifset = 0xc9dc; static const uint16 addr_identifyob = 0xc9d4; - static const uint16 addr_checkcoords = 0xc9d0; static const uint16 addr_madmanrun = 0xc9cc; static const uint16 addr_mainscreen = 0xc9c8; - static const uint16 addr_walkandexamine = 0xcbb8; static const uint16 addr_convnum = 0xc9c4; static const uint16 addr_showword = 0xc9c0; static const uint16 addr_twodigitnum = 0xc9bc; @@ -195,7 +169,7 @@ public: static const uint16 addr_createname = 0xc8cc; static const uint16 addr_loadspeech = 0xc8c8; static const uint16 addr_loadold = 0xc8c4; - static const uint16 addr_doload = 0xcbbc; + static const uint16 addr_doload = 0xcbb8; static const uint16 addr_newgame = 0xc8c0; static const uint16 addr_showdecisions = 0xc8bc; static const uint16 addr_decide = 0xc8b8; @@ -211,7 +185,7 @@ public: static const uint16 addr_oldtonames = 0xc88c; static const uint16 addr_namestoold = 0xc888; static const uint16 addr_error = 0xc884; - static const uint16 addr_generalerror = 0xcbc0; + static const uint16 addr_generalerror = 0xcbbc; static const uint16 addr_dosreturn = 0xc880; static const uint16 addr_shownames = 0xc87c; static const uint16 addr_showslots = 0xc878; @@ -309,12 +283,10 @@ public: static const uint16 addr_findpuztext = 0xc6e0; static const uint16 addr_showpuztext = 0xc6dc; static const uint16 addr_putbackobstuff = 0xc6d8; - static const uint16 addr_usetext = 0xc6d4; static const uint16 addr_checkinside = 0xc6d0; static const uint16 addr_isryanholding = 0xc6cc; static const uint16 addr_findexobject = 0xc6c8; static const uint16 addr_findsetobject = 0xc6c4; - static const uint16 addr_compare = 0xc6c0; static const uint16 addr_selectob = 0xc6bc; static const uint16 addr_withwhat = 0xc6b8; static const uint16 addr_useelvdoor = 0xc6b4; @@ -393,7 +365,6 @@ public: static const uint16 addr_playguitar = 0xc590; static const uint16 addr_runtap = 0xc58c; static const uint16 addr_wheelsound = 0xc588; - static const uint16 addr_useroutine = 0xc584; static const uint16 addr_useobject = 0xc580; static const uint16 addr_delcurs = 0xc57c; static const uint16 addr_printcurs = 0xc578; @@ -463,8 +434,6 @@ public: static const uint16 addr_dolook = 0xc474; static const uint16 addr_look = 0xc470; static const uint16 addr_autolook = 0xc46c; - static const uint16 addr_showallex = 0xc450; - static const uint16 addr_drawflags = 0xc43c; static const uint16 addr_drawfloor = 0xc428; static const uint16 addr_blockget = 0xc424; static const uint16 addr_deleteextext = 0xc420; @@ -473,7 +442,6 @@ public: static const uint16 addr_purgeanitem = 0xc414; static const uint16 addr_emergencypurge = 0xc410; static const uint16 addr_purgealocation = 0xc40c; - static const uint16 addr_getexpos = 0xc408; static const uint16 addr_transfertext = 0xc404; static const uint16 addr_transfercontoex = 0xc400; static const uint16 addr_pickupconts = 0xc3fc; @@ -508,31 +476,21 @@ public: static const uint16 addr_examinventory = 0xc384; static const uint16 addr_setpickup = 0xc380; static const uint16 addr_inventory = 0xc37c; - static const uint16 addr_findnextcolon = 0xc378; static const uint16 addr_searchforsame = 0xc374; static const uint16 addr_getobtextstart = 0xc370; static const uint16 addr_obsthatdothings = 0xc36c; static const uint16 addr_additionaltext = 0xc368; static const uint16 addr_describeob = 0xc364; - static const uint16 addr_obpicture = 0xc360; static const uint16 addr_examicon = 0xc35c; - static const uint16 addr_obicons = 0xc358; static const uint16 addr_openob = 0xc354; - static const uint16 addr_showryanpage = 0xc350; static const uint16 addr_openinv = 0xc34c; static const uint16 addr_incryanpage = 0xc348; static const uint16 addr_getbackfromob = 0xc344; static const uint16 addr_makemainscreen = 0xc340; static const uint16 addr_examineob = 0xc33c; - static const uint16 addr_makeworn = 0xc338; - static const uint16 addr_isitworn = 0xc334; - static const uint16 addr_obtoinv = 0xc330; static const uint16 addr_findallopen = 0xc32c; - static const uint16 addr_findallryan = 0xc328; static const uint16 addr_fillopen = 0xc324; - static const uint16 addr_fillryan = 0xc320; static const uint16 addr_monprint = 0xc314; - static const uint16 addr_waitframes = 0xc308; static const uint16 addr_realcredits = 0xc2f8; static const uint16 addr_set16colpalette = 0xc2f4; static const uint16 addr_mode640x480 = 0xc2f0; @@ -579,20 +537,13 @@ public: static const uint16 addr_dofade = 0xc24c; static const uint16 addr_fadedos = 0xc248; static const uint16 addr_transfermap = 0xc244; - static const uint16 addr_transferinv = 0xc240; - static const uint16 addr_delthisone = 0xc214; static const uint16 addr_doshake = 0xc20c; static const uint16 addr_vsync = 0xc208; static const uint16 addr_createpanel2 = 0xc200; static const uint16 addr_createpanel = 0xc1fc; - static const uint16 addr_pixelcheckset = 0xc1f8; - static const uint16 addr_dumpmap = 0xc1f4; - static const uint16 addr_maptopanel = 0xc1f0; - static const uint16 addr_paneltomap = 0xc1ec; static const uint16 addr_setmode = 0xc1dc; static const uint16 addr_loadpalfromiff = 0xc1d8; static const uint16 addr_showpcx = 0xc1cc; - static const uint16 addr_dumpeverything = 0xc1c4; static const uint16 addr_deleverything = 0xc1c0; static const uint16 addr_reconstruct = 0xc1ac; static const uint16 addr_soundonreels = 0xc1a8; @@ -602,7 +553,6 @@ public: static const uint16 addr_random = 0xc17c; static const uint16 addr_liftnoise = 0xc178; static const uint16 addr_backobject = 0xc170; - static const uint16 addr_getblockofpixel = 0xc168; static const uint16 addr_splitintolines = 0xc164; static const uint16 addr_initrain = 0xc160; static const uint16 addr_reminders = 0xc15c; @@ -612,9 +562,7 @@ public: static const uint16 addr_adjustdown = 0xc14c; static const uint16 addr_checkforexit = 0xc148; static const uint16 addr_mainman = 0xc138; - static const uint16 addr_delsprite = 0xc11c; static const uint16 addr_checkspeed = 0xc110; - static const uint16 addr_addtopeoplelist = 0xc108; static const uint16 addr_train = 0xc104; static const uint16 addr_sparky = 0xc100; static const uint16 addr_copper = 0xc0fc; @@ -683,23 +631,21 @@ public: static const uint16 offset_savelist = 0x0f44; static const uint16 offset_mainlist = 0x1402; static const uint16 offset_gameerror8 = 0x113f; - static const uint16 offset_blinktab = 0x1700; + static const uint16 offset_gameerror5 = 0x1074; static const uint16 offset_error2patch = 0x0ff6; static const uint16 offset_openchangesize = 0x0a1c; static const uint16 offset_keys = 0x0b14; static const uint16 offset_mainlist2 = 0x1440; - static const uint16 offset_uselist = 0x0ba8; static const uint16 offset_gameerror2 = 0x0fb2; static const uint16 offset_loadlist = 0x0ef0; static const uint16 offset_gameerror6 = 0x10be; - static const uint16 offset_flashmousetab = 0x1707; static const uint16 offset_speechfile = 0x13f1; static const uint16 offset_atmospherelist = 0x147e; static const uint16 offset_gameerror4 = 0x1037; static const uint16 offset_gameerror1 = 0x0f6e; static const uint16 offset_examlist = 0x09be; static const uint16 offset_gameinfo = 0x1170; - static const uint16 offset_decidelist = 0x13c1; + static const uint16 offset_opslist = 0x0ec6; static const uint16 offset_invlist1 = 0x09fc; static const uint16 offset_money2poke = 0x0d97; static const uint16 offset_talklist = 0x0a64; @@ -715,14 +661,13 @@ public: static const uint16 offset_error6patch = 0x10fe; static const uint16 offset_keybuffer = 0x1718; static const uint16 offset_speechfilename = 0x13eb; - static const uint16 offset_folderlist = 0x0e34; static const uint16 offset_rootdir = 0x0b8c; static const uint16 offset_gameerror3 = 0x1003; static const uint16 offset_rainlocations = 0x0459; static const uint16 offset_diarylist = 0x0e9c; - static const uint16 offset_opslist = 0x0ec6; + static const uint16 offset_decidelist = 0x13c1; static const uint16 offset_symbollist = 0x0e5e; - static const uint16 offset_gameerror5 = 0x1074; + static const uint16 offset_folderlist = 0x0e34; static const uint16 offset_facelist = 0x0451; static const uint16 offset_operand1 = 0x0b7e; static const uint16 offset_keypadlist = 0x0d9a; @@ -1308,7 +1253,6 @@ public: void uselighter(); void showmenu(); void usepoolreader(); - void showgroup(); void startdmablock(); void useopenbox(); void clearbuffers(); @@ -1316,18 +1260,19 @@ public: void neterror(); void storeit(); //void lockeddoorway(); - void isitworn(); + //void isitworn(); //void putundertimed(); - void dumpmap(); + //void dumpmap(); //void multidump(); void channel0only(); void worktoscreenm(); + //void obicons(); void removeemm(); //void frameoutbh(); void getobtextstart(); void loadfolder(); void decide(); - void dumppointer(); + //void dumppointer(); void reelsonscreen(); void getridofreels(); void readkey(); @@ -1340,7 +1285,7 @@ public: void bresenhams(); void getbackfromops(); //void frameoutv(); - void opensarters(); + void showbyte(); void screenupdate(); //void addlength(); void wornerror(); @@ -1349,16 +1294,16 @@ public: //void commandonly(); void titles(); void deallocatemem(); - void checkforemm(); + void mainscreen(); void watchreel(); void showfolder(); - void turnanypathoff(); + //void turnanypathoff(); void openfilefromc(); void gettime(); //void clearwork(); void loadtraveltext(); //void worktoscreen(); - void getexpos(); + //void getexpos(); void fadedos(); //void fillspace(); void selectlocation(); @@ -1375,13 +1320,13 @@ public: void usecashcard(); void usewall(); void opentomb(); - //void findobname(); //void makename(); void buttonfour(); - void animpointer(); + void restoreall(); //void lockmon(); //void dochange(); void getanyaddir(); + //void dumpblink(); void showsaveops(); void intromonks1(); void resetlocation(); @@ -1389,7 +1334,7 @@ public: void showdiscops(); void advisor(); void additionaltext(); - //void kernchars(); + //void compare(); void othersmoker(); void dofade(); //void setuptimedtemp(); @@ -1421,7 +1366,7 @@ public: void loadintotemp(); void loadintroroom(); void saveseg(); - void showblink(); + //void showblink(); void mousecall(); void train(); void watchcount(); @@ -1433,10 +1378,10 @@ public: void showdiary(); void purgealocation(); //void updatepeople(); - void addtopeoplelist(); + //void addtopeoplelist(); void hangoncurs(); - void sparkydrip(); - void compare(); + //void getblockofpixel(); + //void kernchars(); void printcurs(); //void convertkey(); void outofopen(); @@ -1445,7 +1390,7 @@ public: void dircom(); //void liftsprite(); void dumpkeypad(); - void dumpzoom(); + void showsymbol(); void endgameseq(); //void cancelch0(); void setbotleft(); @@ -1453,8 +1398,9 @@ public: //void cancelch1(); void loadold(); void loadtempcharset(); - void showbyte(); void useslab(); + void dumpzoom(); + //void aboutturn(); void usealtar(); void createpanel2(); void turnonpower(); @@ -1477,21 +1423,20 @@ public: void selectslot2(); void runtap(); //void domix(); - void priesttext(); - void paneltomap(); - void obname(); + //void paneltomap(); + //void obname(); void getridoftemp3(); void getridoftemp2(); void usebalcony(); void runendseq(); void dumpdiarykeys(); void disablesoundint(); - void checkifset(); - void showallex(); + void priesttext(); + //void showallex(); void openpoolboss(); void buttontwo(); //void usetimedtext(); - void delsprite(); + //void delsprite(); //void getroomspaths(); //void dumptextline(); void fadescreendownhalf(); @@ -1499,7 +1444,7 @@ public: void candles1(); void lookininterface(); void manasleep(); - void isitdescribed(); + //void isitdescribed(); void hotelbell(); void loadspeech(); void interupttest(); @@ -1516,7 +1461,7 @@ public: void getfreead(); void showarrows(); void walkintoroom(); - void getridoftemptext(); + void usehatch(); void printoutermon(); void setuppit(); void showpcx(); @@ -1524,7 +1469,7 @@ public: void checkspeed(); //void printchar(); void showkeypad(); - void obtoinv(); + //void obtoinv(); //void getroomdata(); void removeobfrominv(); void usecoveredbox(); @@ -1541,7 +1486,7 @@ public: void usetempcharset(); void discops(); //void printdirect(); - void delthisone(); + //void delthisone(); //void makebackob(); void middlepanel(); void dumpwatch(); @@ -1558,14 +1503,14 @@ public: void wearwatch(); void runintroseq(); //void doblocks(); - void restoreall(); - void allpalette(); + void opensarters(); + //void delpointer(); void attendant(); void nextsymbol(); void monks2text(); void clearpalette(); void cantdrop(); - void maptopanel(); + //void maptopanel(); //void calcmapad(); void getridofall(); void copper(); @@ -1578,7 +1523,7 @@ public: void drinker(); void nextcolon(); void placefreeobject(); - void delpointer(); + void allpalette(); //void loopchannel0(); void initrain(); void showleftpage(); @@ -1588,7 +1533,7 @@ public: void vsync(); //void finishedwalking(); void findinvpos(); - void usetext(); + void dumpmenu(); void hangonpq(); void liftnoise(); void workoutframes(); @@ -1604,18 +1549,18 @@ public: void showouterpad(); void getkeyandlogo(); void selectob(); - void checkcoords(); - void dumpmenu(); + //void checkcoords(); + //void usetext(); void chewy(); void accesslighton(); - void dosreturn(); + void useplinth(); //void adjustlen(); //void quickquit(); - void showpointer(); + //void showpointer(); void usecooker(); void loadmenu(); - //void aboutturn(); - void checkifpathison(); + void checkforemm(); + //void checkifpathison(); //void finalframe(); void receptionist(); void selectslot(); @@ -1632,9 +1577,9 @@ public: void errormessage3(); //void deletetaken(); void putundermenu(); - void checkifex(); + void intromonks2(); void intromagic2(); - void mainscreen(); + void intromagic3(); void edeninbath(); void intromagic1(); void showdiarypage(); @@ -1647,13 +1592,13 @@ public: void playchannel0(); void usemon(); void steady(); - void pixelcheckset(); + //void pixelcheckset(); void reexfrominv(); void examinventory(); void talk(); void usedryer(); - void dumpeverything(); - void usehatch(); + //void dumpeverything(); + //void readmouse2(); //void zoom(); void outofinv(); void viewfolder(); @@ -1662,10 +1607,10 @@ public: //void readabyte(); //void showframe(); void random(); - void obicons(); + void mainman(); void mansatstill(); void channel1only(); - void playguitar(); + void checkbasemem(); void lastfolder(); void transfermap(); //void showreelframe(); @@ -1678,36 +1623,38 @@ public: void purgeanitem(); void madman(); void createpanel(); - void turnpathon(); + //void turnpathon(); void enablesoundint(); void madmanstelly(); void constant(); void loadroomssample(); - void getblockofpixel(); + void sparkydrip(); void paltostartpal(); void bossman(); void getridofpit(); void convnum(); + //void checkifset(); void nothelderror(); //void readheader(); void getsetad(); void textformonk(); void reconstruct(); void soldier1(); + //void animpointer(); void getundercentre(); void checkforexit(); void loadseg(); void makeheader(); void setkeyboardint(); void priest(); - void readmouse(); + //void readmouse(); void powerlighton(); void savefilewrite(); void printmessage2(); //void showallfree(); void loadnews(); void rollem(); - void makeworn(); + //void makeworn(); void examineobtext(); void startup(); void savegame(); @@ -1717,11 +1664,11 @@ public: void describeob(); void deleteexframe(); void folderexit(); - void useplinth(); + void dosreturn(); void wheelsound(); void actualsave(); void autolook(); - void checkbasemem(); + void playguitar(); void transfertext(); void searchforsame(); void showmainops(); @@ -1761,7 +1708,7 @@ public: void initialinv(); void quitsymbol(); //void modifychar(); - void hangon(); + //void initman(); void settopright(); void findsetobject(); void singlekey(); @@ -1791,15 +1738,16 @@ public: void dropobject(); void isitright(); void reexfromopen(); - void fillryan(); + //void fillryan(); void drawitall(); void usestereo(); void showcurrentfile(); + //void turnpathoff(); //void copyname(); void look(); void setmouse(); //void checkone(); - void transferinv(); + //void transferinv(); void candles2(); void pickupob(); void error(); @@ -1812,7 +1760,7 @@ public: void usetrainer(); //void allocatework(); void addtopresslist(); - void walkandexamine(); + //void walkandexamine(); void dmaend(); //void quickquit2(); void twodigitnum(); @@ -1843,7 +1791,7 @@ public: void louischair(); void saveems(); void locationpic(); - void getflagunderp(); + //void getflagunderp(); void dolook(); void opentvdoor(); void triggermessage(); @@ -1859,17 +1807,17 @@ public: void gates(); void newgame(); void showwatch(); - void turnanypathon(); + //void turnanypathon(); void restorereels(); void setwalk(); - void useroutine(); + //void useroutine(); void zoomicon(); //void findlen(); void findpathofpoint(); void issetobonmap(); void getdestinfo(); void drunk(); - void dumpblink(); + void getridoftemptext(); void setuptimeduse(); void grafittidoor(); void input(); @@ -1879,12 +1827,11 @@ public: void read(); void fadescreenups(); //void checkdest(); - //void initman(); + //void hangon(); void loadpalfromiff(); //void facerightway(); void startup1(); void hotelcontrol(); - void showsymbol(); void mugger(); void atmospheres(); void out22c(); @@ -1893,7 +1840,7 @@ public: void settopleft(); void searchforstring(); //void clearsprites(); - void obpicture(); + //void obpicture(); void selectopenob(); //void widedoor(); void security(); @@ -1902,12 +1849,12 @@ public: void soundonreels(); void usegun(); void autoappear(); - void findnextcolon(); - void readmouse4(); + //void findnextcolon(); + //void readmouse4(); void openryan(); - void readmouse1(); - void readmouse3(); - void readmouse2(); + void callhotellift(); + void showman(); + void usefullcart(); void newplace(); //void movemap(); void loadsample(); @@ -1932,7 +1879,7 @@ public: void searchforfiles(); void monkspeaking(); void fadecalculation(); - void waitframes(); + //void waitframes(); void clearrest(); //void getreelframeax(); void barwoman(); @@ -1943,13 +1890,13 @@ public: void keeper(); void afternewroom(); void getexad(); - void aide(); void openforsave(); void closefile(); void delcurs(); void randomaccess(); void splitintolines(); - void intromagic3(); + //void checkifex(); + //void findobname(); void initialmoncols(); void checkforshake(); void usebuttona(); @@ -1972,28 +1919,27 @@ public: void usecontrol(); void buttonseven(); void redrawmainscrn(); - void turnpathoff(); - void findallryan(); + void showgroup(); + //void findallryan(); //void channel0tran(); void buttonpress(); //void parseblaster(); - void callhotellift(); + //void readmouse1(); void makemainscreen(); - void intromonks2(); void usewinch(); void setbotright(); - void showman(); + //void readmouse3(); void showfirstuse(); void setupemm(); - void usefullcart(); + void aide(); //void getmapad(); void getlocation(); void geteitherad(); //void placesetobject(); - void drawflags(); + //void drawflags(); void zoomonoff(); void updatesymboltop(); - void showryanpage(); + //void showryanpage(); void printlogo(); void allpointer(); void showseconduse(); @@ -2008,7 +1954,7 @@ public: void parser(); void hangonw(); void intro(); - void hangonp(); + //void hangonp(); void fadescreendowns(); void openhoteldoor2(); void getridoftempsp(); @@ -2036,7 +1982,7 @@ public: void loadsecondsample(); void transfercontoex(); //void multiput(); - void printmessage(); + //void printmessage(); void businessman(); void switchryanoff(); //void commandwithob(); @@ -2049,7 +1995,6 @@ public: void accesslightoff(); void usehole(); void useobject(); - void mainman(); void volumeadjust(); //void checkiffree(); }; diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp index 19d1d84a51..0e43f18db6 100644 --- a/engines/dreamweb/dreamweb.cpp +++ b/engines/dreamweb/dreamweb.cpp @@ -303,7 +303,7 @@ void DreamWebEngine::keyPressed(uint16 ascii) { keybuf[in] = ascii; } -void DreamWebEngine::mouseCall() { +void DreamWebEngine::mouseCall(uint16 *x, uint16 *y, uint16 *state) { processEvents(); Common::EventManager *eventMan = _system->getEventManager(); Common::Point pos = eventMan->getMousePos(); @@ -315,13 +315,12 @@ void DreamWebEngine::mouseCall() { pos.y = 15; if (pos.y > 184) pos.y = 184; - _context.cx = pos.x; - _context.dx = pos.y; + *x = pos.x; + *y = pos.y; - unsigned state = eventMan->getButtonState(); - _context.bx = state == _oldMouseState? 0: state; - _oldMouseState = state; - _context.flags._c = false; + unsigned newState = eventMan->getButtonState(); + *state = (newState == _oldMouseState? 0 : newState); + _oldMouseState = newState; } void DreamWebEngine::fadeDos() { diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h index a7de64a350..97f6007f9d 100644 --- a/engines/dreamweb/dreamweb.h +++ b/engines/dreamweb/dreamweb.h @@ -82,7 +82,7 @@ public: uint32 skipBytes(uint32 bytes); void closeFile(); - void mouseCall(); //fill mouse pos and button state + void mouseCall(uint16 *x, uint16 *y, uint16 *state); //fill mouse pos and button state void processEvents(); void setPalette(); void fadeDos(); diff --git a/engines/dreamweb/module.mk b/engines/dreamweb/module.mk index bdacbe79f3..8cacbdc91e 100644 --- a/engines/dreamweb/module.mk +++ b/engines/dreamweb/module.mk @@ -11,6 +11,7 @@ MODULE_OBJS := \ saveload.o \ sprite.o \ stubs.o \ + use.o \ vgagrafx.o # This module can be built as a plugin diff --git a/engines/dreamweb/pathfind.cpp b/engines/dreamweb/pathfind.cpp index 2579105c6f..d6ef7f48be 100644 --- a/engines/dreamweb/pathfind.cpp +++ b/engines/dreamweb/pathfind.cpp @@ -21,50 +21,69 @@ */ #include "dreamweb/dreamweb.h" -#include "engines/util.h" -#include "graphics/surface.h" -#include "common/config-manager.h" namespace DreamGen { -void DreamGenContext::turnpathonCPP(uint8 param) { - al = param; - push(es); - push(bx); - turnpathon(); - bx = pop(); - es = pop(); +void DreamGenContext::turnpathon() { + turnpathon(al); } -void DreamGenContext::turnpathoffCPP(uint8 param) { - al = param; - push(es); - push(bx); - turnpathoff(); - bx = pop(); - es = pop(); +void DreamGenContext::turnpathon(uint8 param) { + findormake(param, 0xff, data.byte(kRoomnum) + 100); + PathNode *roomsPaths = getroomspaths()->nodes; + if (param == 0xff) + return; + roomsPaths[param].on = 0xff; +} + +void DreamGenContext::turnpathoff() { + turnpathoff(al); } -void DreamGenContext::getroomspaths() { - es = data.word(kReels); - bx = data.byte(kRoomnum) * 144; +void DreamGenContext::turnpathoff(uint8 param) { + findormake(param, 0x00, data.byte(kRoomnum) + 100); + PathNode *roomsPaths = getroomspaths()->nodes; + if (param == 0xff) + return; + roomsPaths[param].on = 0x00; +} + +void DreamGenContext::turnanypathon(uint8 param, uint8 room) { + findormake(param, 0xff, room + 100); + PathNode *paths = (PathNode *)segRef(data.word(kReels)).ptr(kPathdata + 144 * room, 0); + paths[param].on = 0xff; +} + + +void DreamGenContext::turnanypathon() { + turnanypathon(al, ah); } -uint8 *DreamGenContext::getroomspathsCPP() { +void DreamGenContext::turnanypathoff(uint8 param, uint8 room) { + findormake(param, 0x00, room + 100); + PathNode *paths = (PathNode *)segRef(data.word(kReels)).ptr(kPathdata + 144 * room, 0); + paths[param].on = 0x00; +} + +void DreamGenContext::turnanypathoff() { + turnanypathoff(al, ah); +} + +RoomPaths *DreamGenContext::getroomspaths() { void *result = segRef(data.word(kReels)).ptr(data.byte(kRoomnum) * 144, 144); - return (uint8 *)result; + return (RoomPaths *)result; } void DreamGenContext::autosetwalk() { al = data.byte(kManspath); if (data.byte(kFinaldest) == al) return; - const uint8 *roomsPaths = getroomspathsCPP(); + const RoomPaths *roomsPaths = getroomspaths(); checkdest(roomsPaths); - data.word(kLinestartx) = roomsPaths[data.byte(kManspath) * 8 + 0] - 12; - data.word(kLinestarty) = roomsPaths[data.byte(kManspath) * 8 + 1] - 12; - data.word(kLineendx) = roomsPaths[data.byte(kDestination) * 8 + 0] - 12; - data.word(kLineendy) = roomsPaths[data.byte(kDestination) * 8 + 1] - 12; + data.word(kLinestartx) = roomsPaths->nodes[data.byte(kManspath)].x - 12; + data.word(kLinestarty) = roomsPaths->nodes[data.byte(kManspath)].y - 12; + data.word(kLineendx) = roomsPaths->nodes[data.byte(kDestination)].x - 12; + data.word(kLineendy) = roomsPaths->nodes[data.byte(kDestination)].y - 12; bresenhams(); if (data.byte(kLinedirection) != 0) { data.byte(kLinepointer) = data.byte(kLinelength) - 1; @@ -74,32 +93,41 @@ void DreamGenContext::autosetwalk() { data.byte(kLinepointer) = 0; } -void DreamGenContext::checkdest(const uint8 *roomsPaths) { - const uint8 *p = roomsPaths + 12 * 8; +void DreamGenContext::checkdest(const RoomPaths *roomsPaths) { + const PathSegment *segments = roomsPaths->segments; ah = data.byte(kManspath) << 4; al = data.byte(kDestination); uint8 destination = data.byte(kDestination); for (size_t i = 0; i < 24; ++i) { - dh = p[0] & 0xf0; - dl = p[0] & 0x0f; + dh = segments[i].b0 & 0xf0; + dl = segments[i].b0 & 0x0f; if (ax == dx) { - data.byte(kDestination) = p[1] & 0x0f; + data.byte(kDestination) = segments[i].b1 & 0x0f; return; } - dl = (p[0] & 0xf0) >> 4; - dh = (p[0] & 0x0f) << 4; + dl = (segments[i].b0 & 0xf0) >> 4; + dh = (segments[i].b0 & 0x0f) << 4; if (ax == dx) { - destination = p[1] & 0x0f; + destination = segments[i].b1 & 0x0f; } - p += 2; } data.byte(kDestination) = destination; } void DreamGenContext::findxyfrompath() { - const uint8 *roomsPaths = getroomspathsCPP(); - data.byte(kRyanx) = roomsPaths[data.byte(kManspath) * 8 + 0] - 12; - data.byte(kRyany) = roomsPaths[data.byte(kManspath) * 8 + 1] - 12; + const PathNode *roomsPaths = getroomspaths()->nodes; + data.byte(kRyanx) = roomsPaths[data.byte(kManspath)].x - 12; + data.byte(kRyany) = roomsPaths[data.byte(kManspath)].y - 12; +} + +void DreamGenContext::checkifpathison() { + flags._z = checkifpathison(al); +} + +bool DreamGenContext::checkifpathison(uint8 index) { + RoomPaths *roomsPaths = getroomspaths(); + uint8 pathOn = roomsPaths->nodes[index].on; + return pathOn == 0xff; } } /*namespace dreamgen */ diff --git a/engines/dreamweb/print.cpp b/engines/dreamweb/print.cpp index 26084c35d1..edaf8ee1eb 100644 --- a/engines/dreamweb/print.cpp +++ b/engines/dreamweb/print.cpp @@ -21,8 +21,6 @@ */ #include "dreamweb/dreamweb.h" -#include "engines/util.h" -#include "graphics/surface.h" namespace DreamGen { @@ -112,10 +110,12 @@ uint8 DreamGenContext::printslow(const uint8 *string, uint16 x, uint16 y, uint8 printboth(charSet, &offset2, y, c1, c2); data.word(kCharshift) = 0; for (int i=0; i<2; ++i) { - waitframes(); - if (ax == 0) + uint16 mouseState = waitframes(); + if (data.byte(kQuitrequested)) + return 0; + if (mouseState == 0) continue; - if (ax != data.word(kOldbutton)) { + if (mouseState != data.word(kOldbutton)) { return 1; } } @@ -138,6 +138,10 @@ void DreamGenContext::printdirect() { bx = y; } +void DreamGenContext::printdirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered) { + printdirect(&string, x, &y, maxWidth, centered); +} + void DreamGenContext::printdirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered) { data.word(kLastxpos) = x; const Frame *charSet = (const Frame *)segRef(data.word(kCurrentset)).ptr(0, 0); @@ -216,8 +220,13 @@ uint8 DreamGenContext::kernchars(uint8 firstChar, uint8 secondChar, uint8 width) return width; } -void DreamGenContext::kernchars() { - cl = kernchars(al, ah, cl); +uint16 DreamGenContext::waitframes() { + readmouse(); + showpointer(); + vsync(); + dumppointer(); + delpointer(); + return data.word(kMousebutton); } } /*namespace dreamgen */ diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp index e9a40d7f8c..864bba1d8c 100644 --- a/engines/dreamweb/sprite.cpp +++ b/engines/dreamweb/sprite.cpp @@ -21,8 +21,6 @@ */ #include "dreamweb/dreamweb.h" -#include "engines/util.h" -#include "graphics/surface.h" namespace DreamGen { @@ -90,17 +88,6 @@ Sprite *DreamGenContext::makesprite(uint8 x, uint8 y, uint16 updateCallback, uin return sprite; } -void DreamGenContext::makesprite() { // NB: returns new sprite in es:bx - Sprite *sprite = makesprite(si & 0xff, si >> 8, cx, dx, di); - - // Recover es:bx from sprite - es = data.word(kBuffers); - bx = kSpritetable; - Sprite *sprites = (Sprite *)es.ptr(bx, sizeof(Sprite) * 16); - bx += sizeof(Sprite) * (sprite - sprites); - // -} - void DreamGenContext::spriteupdate() { Sprite *sprites = spritetable(); sprites[0].hidden = data.byte(kRyanon); @@ -267,7 +254,7 @@ void DreamGenContext::backobject() { } void DreamGenContext::backobject(Sprite *sprite) { - ObjData *objData = (ObjData *)segRef(data.word(kSetdat)).ptr(sprite->objData(), 0); + SetObject *objData = (SetObject *)segRef(data.word(kSetdat)).ptr(sprite->objData(), 0); if (sprite->delay != 0) { --sprite->delay; @@ -291,23 +278,23 @@ void DreamGenContext::backobject(Sprite *sprite) { steady(sprite, objData); } -void DreamGenContext::constant(Sprite *sprite, ObjData *objData) { +void DreamGenContext::constant(Sprite *sprite, SetObject *objData) { ++sprite->frame; if (objData->b18[sprite->frame] == 255) { sprite->frame = 0; } uint8 b18 = objData->b18[sprite->frame]; - objData->b17 = b18; + objData->index = b18; sprite->b15 = b18; } -void DreamGenContext::random(Sprite *sprite, ObjData *objData) { +void DreamGenContext::random(Sprite *sprite, SetObject *objData) { randomnum1(); uint16 r = ax; sprite->b15 = objData->b18[r&7]; } -void DreamGenContext::doorway(Sprite *sprite, ObjData *objData) { +void DreamGenContext::doorway(Sprite *sprite, SetObject *objData) { data.byte(kDoorcheck1) = -24; data.byte(kDoorcheck2) = 10; data.byte(kDoorcheck3) = -30; @@ -315,7 +302,7 @@ void DreamGenContext::doorway(Sprite *sprite, ObjData *objData) { dodoor(sprite, objData); } -void DreamGenContext::widedoor(Sprite *sprite, ObjData *objData) { +void DreamGenContext::widedoor(Sprite *sprite, SetObject *objData) { data.byte(kDoorcheck1) = -24; data.byte(kDoorcheck2) = 24; data.byte(kDoorcheck3) = -30; @@ -325,11 +312,11 @@ void DreamGenContext::widedoor(Sprite *sprite, ObjData *objData) { void DreamGenContext::dodoor() { Sprite *sprite = (Sprite *)es.ptr(bx, sizeof(Sprite)); - ObjData *objData = (ObjData *)ds.ptr(di, 0); + SetObject *objData = (SetObject *)ds.ptr(di, 0); dodoor(sprite, objData); } -void DreamGenContext::dodoor(Sprite *sprite, ObjData *objData) { +void DreamGenContext::dodoor(Sprite *sprite, SetObject *objData) { uint8 ryanx = data.byte(kRyanx); uint8 ryany = data.byte(kRyany); if (ryanx < sprite->x) { @@ -361,7 +348,7 @@ void DreamGenContext::dodoor(Sprite *sprite, ObjData *objData) { if (objData->b18[sprite->frame] == 255) { --sprite->frame; } - sprite->b15 = objData->b17 = objData->b18[sprite->frame]; + sprite->b15 = objData->index = objData->b18[sprite->frame]; data.byte(kThroughdoor) = 1; return; shutdoor: @@ -375,18 +362,18 @@ shutdoor: if (sprite->frame != 0) { --sprite->frame; } - sprite->b15 = objData->b17 = objData->b18[sprite->frame]; + sprite->b15 = objData->index = objData->b18[sprite->frame]; if (sprite->frame == 5) //nearly data.byte(kThroughdoor) = 0; } -void DreamGenContext::steady(Sprite *sprite, ObjData *objData) { +void DreamGenContext::steady(Sprite *sprite, SetObject *objData) { uint8 b18 = objData->b18[0]; - objData->b17 = b18; + objData->index = b18; sprite->b15 = b18; } -void DreamGenContext::lockeddoorway(Sprite *sprite, ObjData *objData) { +void DreamGenContext::lockeddoorway(Sprite *sprite, SetObject *objData) { if (data.byte(kRyanx) < sprite->x) { if (sprite->x - data.byte(kRyanx) > 24) goto shutdoor2; @@ -414,7 +401,7 @@ void DreamGenContext::lockeddoorway(Sprite *sprite, ObjData *objData) { } if (sprite->frame == 6) { - turnpathonCPP(data.byte(kDoorpath)); + turnpathon(data.byte(kDoorpath)); } if ((data.byte(kThroughdoor) == 1) && (sprite->frame == 0)) { @@ -426,7 +413,7 @@ void DreamGenContext::lockeddoorway(Sprite *sprite, ObjData *objData) { --sprite->frame; } - sprite->b15 = objData->b17 = objData->b18[sprite->frame]; + sprite->b15 = objData->index = objData->b18[sprite->frame]; if (sprite->frame == 5) data.byte(kThroughdoor) = 1; return; @@ -442,18 +429,18 @@ shutdoor2: } data.byte(kThroughdoor) = 0; - sprite->b15 = objData->b17 = objData->b18[sprite->frame]; + sprite->b15 = objData->index = objData->b18[sprite->frame]; if (sprite->frame == 0) { - turnpathoffCPP(data.byte(kDoorpath)); + turnpathoff(data.byte(kDoorpath)); data.byte(kLockstatus) = 1; } } -void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) { +void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) { uint8 liftFlag = data.byte(kLiftflag); if (liftFlag == 0) { //liftclosed - turnpathoffCPP(data.byte(kLiftpath)); + turnpathoff(data.byte(kLiftpath)); if (data.byte(kCounttoopen) != 0) { _dec(data.byte(kCounttoopen)); @@ -461,10 +448,10 @@ void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) { data.byte(kLiftflag) = 3; } sprite->frame = 0; - sprite->b15 = objData->b17 = objData->b18[sprite->frame]; + sprite->b15 = objData->index = objData->b18[sprite->frame]; } else if (liftFlag == 1) { //liftopen - turnpathonCPP(data.byte(kLiftpath)); + turnpathon(data.byte(kLiftpath)); if (data.byte(kCounttoclose) != 0) { _dec(data.byte(kCounttoclose)); @@ -472,7 +459,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) { data.byte(kLiftflag) = 2; } sprite->frame = 12; - sprite->b15 = objData->b17 = objData->b18[sprite->frame]; + sprite->b15 = objData->index = objData->b18[sprite->frame]; } else if (liftFlag == 3) { //openlift if (sprite->frame == 12) { @@ -484,7 +471,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) { al = 2; liftnoise(); } - sprite->b15 = objData->b17 = objData->b18[sprite->frame]; + sprite->b15 = objData->index = objData->b18[sprite->frame]; } else { //closeLift assert(liftFlag == 2); if (sprite->frame == 0) { @@ -496,13 +483,13 @@ void DreamGenContext::liftsprite(Sprite *sprite, ObjData *objData) { al = 3; liftnoise(); } - sprite->b15 = objData->b17 = objData->b18[sprite->frame]; + sprite->b15 = objData->index = objData->b18[sprite->frame]; } } void DreamGenContext::facerightway() { - uint8 *paths = getroomspathsCPP(); - uint8 dir = paths[8 * data.byte(kManspath) + 7]; + PathNode *paths = getroomspaths()->nodes; + uint8 dir = paths[data.byte(kManspath)].dir; data.byte(kTurntoface) = dir; data.byte(kLeavedirection) = dir; } @@ -549,16 +536,16 @@ void DreamGenContext::showreelframe(Reel *reel) { } void DreamGenContext::showgamereel() { - uint16 reelpointer = es.word(bx+3); + showgamereel((ReelRoutine *)es.ptr(bx, sizeof(ReelRoutine))); +} + +void DreamGenContext::showgamereel(ReelRoutine *routine) { + uint16 reelpointer = routine->reelPointer(); if (reelpointer >= 512) return; data.word(kReelpointer) = reelpointer; - push(es); - push(bx); plotreel(); - bx = pop(); - es = pop(); - es.word(bx+3) = data.word(kReelpointer); + routine->setReelPointer(data.word(kReelpointer)); } const Frame *DreamGenContext::getreelframeax(uint16 frame) { @@ -889,5 +876,32 @@ void DreamGenContext::checkone(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uin *type = tileData[2]; } +void DreamGenContext::getblockofpixel() { + al = getblockofpixel(cl, ch); +} + +uint8 DreamGenContext::getblockofpixel(uint8 x, uint8 y) { + uint8 flag, flagEx, type, flagX, flagY; + checkone(x + data.word(kMapxstart), y + data.word(kMapystart), &flag, &flagEx, &type, &flagX, &flagY); + if (flag & 1) + return 0; + else + return type; +} + +void DreamGenContext::addtopeoplelist() { + addtopeoplelist((ReelRoutine *)es.ptr(bx, sizeof(ReelRoutine))); +} + +void DreamGenContext::addtopeoplelist(ReelRoutine *routine) { + uint16 routinePointer = (const uint8 *)routine - cs.ptr(0, 0); + + People *people = (People *)segRef(data.word(kBuffers)).ptr(data.word(kListpos), sizeof(People)); + people->setReelPointer(routine->reelPointer()); + people->setRoutinePointer(routinePointer); + people->b4 = routine->b7; + data.word(kListpos) += sizeof(People); +} + } /*namespace dreamgen */ diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h index 7e77bdf0e9..0d7bbb6cbf 100644 --- a/engines/dreamweb/structs.h +++ b/engines/dreamweb/structs.h @@ -54,7 +54,23 @@ struct Sprite { uint8 hidden; }; -struct ObjData { +struct RectWithCallback { + uint16 _xMin, _xMax; + uint16 _yMin, _yMax; + uint16 _callback; + + uint16 xMin() const { return READ_LE_UINT16(&_xMin); } + uint16 xMax() const { return READ_LE_UINT16(&_xMax); } + uint16 yMin() const { return READ_LE_UINT16(&_yMin); } + uint16 yMax() const { return READ_LE_UINT16(&_yMax); } + uint16 callback() const { return READ_LE_UINT16(&_callback); } + + bool contains(uint16 x, uint16 y) const { + return (x >= xMin()) && (x < xMax()) && (y >= yMin()) && (y < yMax()); + } +}; + +struct SetObject { uint8 b0; uint8 b1; uint8 b2; @@ -69,7 +85,7 @@ struct ObjData { uint8 b11; uint8 name[4]; uint8 b16; - uint8 b17; + uint8 index; uint8 b18[13]; // NB: Don't know the size yet uint8 b31; uint8 b32; @@ -98,27 +114,20 @@ struct ObjData { uint8 b55; uint8 b56; uint8 b57; - uint8 b58[5]; + uint8 mapad[5]; uint8 b63; }; -struct FreeObject { - uint8 b0; - uint8 b1; - uint8 b2; - uint8 b3; - uint8 b4; - uint8 b5; - uint8 b6; +struct DynObject { + uint8 currentLocation; + uint8 index; + uint8 mapad[5]; uint8 b7; uint8 b8; uint8 b9; uint8 b10; - uint8 b11; - uint8 b12; - uint8 b13; - uint8 b14; - uint8 b15; + uint8 initialLocation; + uint8 id[4]; }; struct ObjPos { @@ -155,6 +164,8 @@ struct ReelRoutine { uint8 mapY; uint8 b3; uint8 b4; + uint16 reelPointer() const { return READ_LE_UINT16(&b3); } + void setReelPointer(uint16 v) { WRITE_LE_UINT16(&b3, v); } uint8 b5; uint8 b6; uint8 b7; @@ -163,12 +174,12 @@ struct ReelRoutine { struct People { uint8 b0; uint8 b1; - uint16 w0() const { return READ_LE_UINT16(&b0); } - void setW0(uint16 v) { WRITE_LE_UINT16(&b0, v); } + uint16 reelPointer() const { return READ_LE_UINT16(&b0); } + void setReelPointer(uint16 v) { WRITE_LE_UINT16(&b0, v); } uint8 b2; uint8 b3; - uint16 w2() const { return READ_LE_UINT16(&b2); } - void setW2(uint16 v) { WRITE_LE_UINT16(&b2, v); } + uint16 routinePointer() const { return READ_LE_UINT16(&b2); } + void setRoutinePointer(uint16 v) { WRITE_LE_UINT16(&b2, v); } uint8 b4; }; @@ -217,4 +228,24 @@ struct Change { uint8 type; }; +struct PathNode { + uint8 x; + uint8 y; + uint8 b2; + uint8 b3; + uint8 b4; + uint8 b5; + uint8 on; + uint8 dir; +}; + +struct PathSegment { + uint8 b0; + uint8 b1; +}; + +struct RoomPaths { + PathNode nodes[12]; + PathSegment segments[24]; +}; diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index f0938ea30b..600df65b40 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -22,7 +22,6 @@ #include "dreamweb/dreamweb.h" #include "engines/util.h" -#include "graphics/surface.h" #include "common/config-manager.h" namespace DreamGen { @@ -145,8 +144,7 @@ void DreamGenContext::dreamweb() { // "endofgame" clearbeforeload(); fadescreendowns(); - cx = 200; - hangon(); + hangon(200); endgame(); quickquit2(); return; @@ -186,8 +184,7 @@ void DreamGenContext::dreamweb() { clearbeforeload(); showgun(); fadescreendown(); - cx = 100; - hangon(); + hangon(100); } } @@ -285,7 +282,63 @@ void DreamGenContext::dontloadseg() { } void DreamGenContext::mousecall() { - engine->mouseCall(); + uint16 x, y, state; + engine->mouseCall(&x, &y, &state); + cx = x; + dx = y; + bx = state; +} + +void DreamGenContext::readmouse() { + data.word(kOldbutton) = data.word(kMousebutton); + data.word(kOldx) = data.word(kMousex); + data.word(kOldy) = data.word(kMousey); + uint16 x, y, state; + engine->mouseCall(&x, &y, &state); + data.word(kMousex) = x; + data.word(kMousey) = y; + data.word(kMousebutton) = state; +} + +void DreamGenContext::readmouse1() { + data.word(kOldx) = data.word(kMousex); + data.word(kOldy) = data.word(kMousey); + uint16 x, y, state; + engine->mouseCall(&x, &y, &state); + data.word(kMousex) = x; + data.word(kMousey) = y; + data.word(kMousebutton1) = state; +} + +void DreamGenContext::readmouse2() { + data.word(kOldx) = data.word(kMousex); + data.word(kOldy) = data.word(kMousey); + uint16 x, y, state; + engine->mouseCall(&x, &y, &state); + data.word(kMousex) = x; + data.word(kMousey) = y; + data.word(kMousebutton2) = state; +} + +void DreamGenContext::readmouse3() { + data.word(kOldx) = data.word(kMousex); + data.word(kOldy) = data.word(kMousey); + uint16 x, y, state; + engine->mouseCall(&x, &y, &state); + data.word(kMousex) = x; + data.word(kMousey) = y; + data.word(kMousebutton3) = state; +} + +void DreamGenContext::readmouse4() { + data.word(kOldbutton) = data.word(kMousebutton); + data.word(kOldx) = data.word(kMousex); + data.word(kOldy) = data.word(kMousey); + uint16 x, y, state; + engine->mouseCall(&x, &y, &state); + data.word(kMousex) = x; + data.word(kMousey) = y; + data.word(kMousebutton) = state | data.word(kMousebutton1) | data.word(kMousebutton2) | data.word(kMousebutton3); } void DreamGenContext::setmouse() { @@ -667,7 +720,7 @@ void DreamGenContext::cancelch1() { engine->stopSound(1); } -void DreamGenContext::makebackob(ObjData *objData) { +void DreamGenContext::makebackob(SetObject *objData) { if (data.byte(kNewobs) == 0) return; uint8 priority = objData->priority; @@ -675,8 +728,8 @@ void DreamGenContext::makebackob(ObjData *objData) { Sprite *sprite = makesprite(data.word(kObjectx), data.word(kObjecty), addr_backobject, data.word(kSetframes), 0); uint16 objDataOffset = (uint8 *)objData - segRef(data.word(kSetdat)).ptr(0, 0); - assert(objDataOffset % sizeof(ObjData) == 0); - assert(objDataOffset < 128 * sizeof(ObjData)); + assert(objDataOffset % sizeof(SetObject) == 0); + assert(objDataOffset < 128 * sizeof(SetObject)); sprite->setObjData(objDataOffset); if (priority == 255) priority = 0; @@ -691,10 +744,6 @@ void DreamGenContext::getroomdata() { bx = kRoomdata + sizeof(Room) * al; } -void DreamGenContext::getroomdata(uint8 roomIndex) { - getroomdata(roomIndex); -} - void DreamGenContext::startloading() { const Room *room = (Room *)cs.ptr(bx, sizeof(Room)); startloading(room); @@ -883,7 +932,11 @@ void DreamGenContext::plotreel() { showreelframe(reel); ++reel; } + push(es); + push(bx); soundonreels(); + bx = pop(); + es = pop(); } void DreamGenContext::crosshair() { @@ -929,7 +982,7 @@ bool DreamGenContext::checkifperson(uint8 x, uint8 y) { for (size_t i = 0; i < 12; ++i, ++people) { if (people->b4 == 255) continue; - data.word(kReelpointer) = people->w0(); + data.word(kReelpointer) = people->reelPointer(); Reel *reel = getreelstart(); if (reel->frame() == 0xffff) ++reel; @@ -946,10 +999,8 @@ bool DreamGenContext::checkifperson(uint8 x, uint8 y) { continue; if (y >= ymax) continue; - data.word(kPersondata) = people->w2(); - al = people->b4; - ah = 5; - obname(); + data.word(kPersondata) = people->routinePointer(); + obname(people->b4, 5); return true; } return false; @@ -973,9 +1024,31 @@ bool DreamGenContext::checkiffree(uint8 x, uint8 y) { continue; if (y >= objPos->yMax) continue; - al = objPos->index; - ah = 2; - obname(); + obname(objPos->index, 2); + return true; + } + return false; +} + +void DreamGenContext::checkifex() { + flags._z = not checkifex(al, ah); +} + +bool DreamGenContext::checkifex(uint8 x, uint8 y) { + const ObjPos *exList = (const ObjPos *)segRef(data.word(kBuffers)).ptr(kExlist, 100 * sizeof(ObjPos)); + for (size_t i = 0; i < 100; ++i) { + const ObjPos *objPos = exList + 99 - i; + if (objPos->index == 0xff) + continue; + if (x < objPos->xMin) + continue; + if (x >= objPos->xMax) + continue; + if (y < objPos->yMin) + continue; + if (y >= objPos->yMax) + continue; + obname(objPos->index, 4); return true; } return false; @@ -1029,19 +1102,14 @@ void DreamGenContext::commandwithob(uint8 command, uint8 type, uint8 index) { uint16 commandText = kTextstart + segRef(data.word(kCommandtext)).word(command * 2); uint8 textLen = data.byte(kTextlen); { - uint16 y = data.word(kTextaddressy); const uint8 *string = segRef(data.word(kCommandtext)).ptr(commandText, 0); - printdirect(&string, data.word(kTextaddressx), &y, textLen, (bool)(textLen & 1)); + printdirect(string, data.word(kTextaddressx), data.word(kTextaddressy), textLen, (bool)(textLen & 1)); } copyname(type, index, commandLine); uint16 x = data.word(kLastxpos); if (command != 0) x += 5; - { - uint16 y = data.word(kTextaddressy); - const uint8 *string = commandLine; - printdirect(&string, x, &y, textLen, (bool)(textLen & 1)); - } + printdirect(commandLine, x, data.word(kTextaddressy), textLen, (bool)(textLen & 1)); data.byte(kNewtextline) = 1; } @@ -1097,12 +1165,51 @@ void DreamGenContext::setallchanges() { } } -FreeObject *DreamGenContext::getfreead(uint8 index) { - return (FreeObject *)segRef(data.word(kFreedat)).ptr(0, 0) + index; +DynObject *DreamGenContext::getfreead(uint8 index) { + return (DynObject *)segRef(data.word(kFreedat)).ptr(0, 0) + index; +} + +DynObject *DreamGenContext::getexad(uint8 index) { + return (DynObject *)segRef(data.word(kExtras)).ptr(kExdata, 0) + index; } -ObjData *DreamGenContext::getsetad(uint8 index) { - return (ObjData *)segRef(data.word(kSetdat)).ptr(0, 0) + index; +DynObject *DreamGenContext::geteitheradCPP() { + if (data.byte(kObjecttype) == 4) + return getexad(data.byte(kItemframe)); + else + return getfreead(data.byte(kItemframe)); +} + +void *DreamGenContext::getanyad(uint8 *value1, uint8 *value2) { + if (data.byte(kObjecttype) == 4) { + DynObject *exObject = getexad(data.byte(kCommand)); + *value1 = exObject->b7; + *value2 = exObject->b8; + return exObject; + } else if (data.byte(kObjecttype) == 2) { + DynObject *freeObject = getfreead(data.byte(kCommand)); + *value1 = freeObject->b7; + *value2 = freeObject->b8; + return freeObject; + } else { + SetObject *setObject = getsetad(data.byte(kCommand)); + *value1 = setObject->b4; + *value2 = setObject->priority; + return setObject; + } +} + +void *DreamGenContext::getanyaddir(uint8 index, uint8 flag) { + if (flag == 4) + return getexad(index); + else if (flag == 2) + return getfreead(index); + else + return getsetad(index); +} + +SetObject *DreamGenContext::getsetad(uint8 index) { + return (SetObject *)segRef(data.word(kSetdat)).ptr(0, 0) + index; } void DreamGenContext::dochange() { @@ -1111,11 +1218,11 @@ void DreamGenContext::dochange() { void DreamGenContext::dochange(uint8 index, uint8 value, uint8 type) { if (type == 0) { //object - getsetad(index)->b58[0] = value; + getsetad(index)->mapad[0] = value; } else if (type == 1) { //freeobject - FreeObject *freeObject = getfreead(index); - if (freeObject->b2 == 0xff) - freeObject->b2 = value; + DynObject *freeObject = getfreead(index); + if (freeObject->mapad[0] == 0xff) + freeObject->mapad[0] = value; } else { //path bx = kPathdata + (type - 100) * 144 + index * 8; es = data.word(kReels); @@ -1124,26 +1231,38 @@ void DreamGenContext::dochange(uint8 index, uint8 value, uint8 type) { } void DreamGenContext::deletetaken() { - ds = data.word(kExtras); - si = kExdata; - FreeObject *freeObjects = (FreeObject *)segRef(data.word(kFreedat)).ptr(0, 0); + const DynObject *extraObjects = (const DynObject *)segRef(data.word(kExtras)).ptr(kExdata, 0); + DynObject *freeObjects = (DynObject *)segRef(data.word(kFreedat)).ptr(0, 0); for(size_t i = 0; i < kNumexobjects; ++i) { - uint8 location = ds.byte(si+11); + uint8 location = extraObjects[i].initialLocation; if (location == data.byte(kReallocation)) { - uint8 index = ds.byte(si+1); - freeObjects[index].b2 = 254; + uint8 index = extraObjects[i].index; + freeObjects[index].mapad[0] = 0xfe; } - si += 16; } } +void DreamGenContext::getexpos() { + es = data.word(kExtras); + const DynObject *objects = (const DynObject *)segRef(data.word(kExtras)).ptr(kExdata, sizeof(DynObject)); + for (size_t i = 0; i < kNumexobjects; ++i) { + if (objects[i].mapad[0] == 0xff) { + data.byte(kExpos) = i; + di = kExdata + i * sizeof(DynObject); + return; + } + } + data.byte(kExpos) = kNumexobjects; + di = kExdata + kNumexobjects * sizeof(DynObject); +} + void DreamGenContext::placesetobject() { placesetobject(al); } void DreamGenContext::placesetobject(uint8 index) { findormake(index, 0, 0); - getsetad(index)->b58[0] = 0; + getsetad(index)->mapad[0] = 0; } void DreamGenContext::removesetobject() { @@ -1152,7 +1271,7 @@ void DreamGenContext::removesetobject() { void DreamGenContext::removesetobject(uint8 index) { findormake(index, 0xff, 0); - getsetad(index)->b58[0] = 0xff; + getsetad(index)->mapad[0] = 0xff; } void DreamGenContext::finishedwalking() { @@ -1163,6 +1282,459 @@ bool DreamGenContext::finishedwalkingCPP() { return (data.byte(kLinepointer) == 254) && (data.byte(kFacing) == data.byte(kTurntoface)); } +void DreamGenContext::getflagunderp() { + uint8 flag, flagEx; + getflagunderp(&flag, &flagEx); + cl = flag; + ch = flagEx; +} + +void DreamGenContext::getflagunderp(uint8 *flag, uint8 *flagEx) { + uint8 type, flagX, flagY; + checkone(data.word(kMousex) - data.word(kMapadx), data.word(kMousey) - data.word(kMapady), flag, flagEx, &type, &flagX, &flagY); + cl = data.byte(kLastflag) = *flag; + ch = data.byte(kLastflagex) = *flagEx; +} + +void DreamGenContext::walkandexamine() { + if (! finishedwalkingCPP()) + return; + data.byte(kCommandtype) = data.byte(kWalkexamtype); + data.byte(kCommand) = data.byte(kWalkexamnum); + data.byte(kWalkandexam) = 0; + if (data.byte(kCommandtype) != 5) + examineob(); +} + +void DreamGenContext::obname() { + obname(al, ah); +} + +void DreamGenContext::obname(uint8 command, uint8 commandType) { + if (data.byte(kReasseschanges) == 0) { + if ((commandType == data.byte(kCommandtype)) && (command == data.byte(kCommand))) { + if (data.byte(kWalkandexam) == 1) { + walkandexamine(); + return; + } else if (data.word(kMousebutton) == 0) + return; + else if ((data.byte(kCommandtype) == 3) && (data.byte(kLastflag) < 2)) + return; + else if ((data.byte(kManspath) != data.byte(kPointerspath)) || (data.byte(kCommandtype) == 3)) { + setwalk(); + data.byte(kReasseschanges) = 1; + return; + } else if (! finishedwalkingCPP()) + return; + else if (data.byte(kCommandtype) == 5) { + if (data.word(kWatchingtime) == 0) + talk(); + return; + } else { + if (data.word(kWatchingtime) == 0) + examineob(); + return; + } + } + } else + data.byte(kReasseschanges) = 0; + + data.byte(kCommand) = command; + data.byte(kCommandtype) = commandType; + if ((data.byte(kLinepointer) != 254) || (data.word(kWatchingtime) != 0) || (data.byte(kFacing) != data.byte(kTurntoface))) { + blocknametext(); + return; + } else if (data.byte(kCommandtype) != 3) { + if (data.byte(kManspath) != data.byte(kPointerspath)) { + walktotext(); + return; + } else if (data.byte(kCommandtype) == 3) { + blocknametext(); + return; + } else if (data.byte(kCommandtype) == 5) { + personnametext(); + return; + } else { + examineobtext(); + return; + } + } + if (data.byte(kManspath) == data.byte(kPointerspath)) { + uint8 flag, flagEx, type, flagX, flagY; + checkone(data.byte(kRyanx) + 12, data.byte(kRyany) + 12, &flag, &flagEx, &type, &flagX, &flagY); + if (flag < 2) { + blocknametext(); + return; + } + } + + getflagunderp(); + if (data.byte(kLastflag) < 2) { + blocknametext(); + return; + } else if (data.byte(kLastflag) >= 128) { + blocknametext(); + return; + } else { + walktotext(); + return; + } +} + +void DreamGenContext::delpointer() { + if (data.word(kOldpointerx) == 0xffff) + return; + data.word(kDelherex) = data.word(kOldpointerx); + data.word(kDelherey) = data.word(kOldpointery); + data.byte(kDelxs) = data.byte(kPointerxs); + data.byte(kDelys) = data.byte(kPointerys); + multiput(segRef(data.word(kBuffers)).ptr(kPointerback, 0), data.word(kDelherex), data.word(kDelherey), data.byte(kPointerxs), data.byte(kPointerys)); +} + +void DreamGenContext::showblink() { + if (data.byte(kManisoffscreen) == 1) + return; + ++data.byte(kBlinkcount); + if (data.byte(kShadeson) != 0) + return; + if (data.byte(kReallocation) >= 50) // eyesshut + return; + if (data.byte(kBlinkcount) != 3) + return; + data.byte(kBlinkcount) = 0; + uint8 blinkFrame = data.byte(kBlinkframe); + ++blinkFrame; // Implicit %256 + data.byte(kBlinkframe) = blinkFrame; + if (blinkFrame > 6) + blinkFrame = 6; + static const uint8 blinkTab[] = { 16,18,18,17,16,16,16 }; + uint8 width, height; + showframe((Frame *)segRef(data.word(kIcons1)).ptr(0, 0), 44, 32, blinkTab[blinkFrame], 0, &width, &height); +} + +void DreamGenContext::dumpblink() { + if (data.byte(kShadeson) != 0) + return; + if (data.byte(kBlinkcount) != 0) + return; + if (data.byte(kBlinkframe) >= 6) + return; + multidump(44, 32, 16, 12); +} + +void DreamGenContext::dumppointer() { + dumpblink(); + multidump(data.word(kDelherex), data.word(kDelherey), data.byte(kDelxs), data.byte(kDelys)); + if ((data.word(kOldpointerx) != data.word(kDelherex)) || (data.word(kOldpointery) != data.word(kDelherey))) + multidump(data.word(kOldpointerx), data.word(kOldpointery), data.byte(kPointerxs), data.byte(kPointerys)); +} + +void DreamGenContext::checkcoords() { + checkcoords((const RectWithCallback *)cs.ptr(bx, 0)); +} + +void DreamGenContext::checkcoords(const RectWithCallback *rectWithCallbacks) { + if (data.byte(kNewlocation) != 0xff) + return; + + const RectWithCallback *rectWithCallback = rectWithCallbacks; + while (rectWithCallback->xMin() != 0xffff) { + if (rectWithCallback->contains(data.word(kMousex), data.word(kMousey))) { + uint16 callback = rectWithCallback->callback(); + + // common + if(callback == addr_blank) + blank(); + else if(callback == addr_getbackfromob) + getbackfromob(); + else if(callback == addr_incryanpage) + incryanpage(); + else if(callback == addr_getback1) + getback1(); + else if(callback == addr_quitkey) + quitkey(); + else if(callback == addr_dosreturn) + dosreturn(); + else if(callback == addr_getbacktoops) + getbacktoops(); + else if(callback == addr_selectslot) + selectslot(); + // examlist + else if(callback == addr_useobject) + useobject(); + else if(callback == addr_selectopenob) + selectopenob(); + else if(callback == addr_setpickup) + setpickup(); + else if(callback == addr_examinventory) + examinventory(); + // invlist1 + else if(callback == addr_dropobject) + dropobject(); + else if(callback == addr_useopened) + useopened(); + else if(callback == addr_setpickup) + setpickup(); + else if(callback == addr_intoinv) + intoinv(); + // withlist1 + else if(callback == addr_selectob) + selectob(); + // talklist + else if(callback == addr_moretalk) + moretalk(); + // quitlist + // destlist + else if(callback == addr_nextdest) + nextdest(); + else if(callback == addr_lastdest) + lastdest(); + else if(callback == addr_lookatplace) + lookatplace(); + else if(callback == addr_destselect) + destselect(); + // keypadlist + else if(callback == addr_buttonone) + buttonone(); + else if(callback == addr_buttontwo) + buttontwo(); + else if(callback == addr_buttonthree) + buttonthree(); + else if(callback == addr_buttonfour) + buttonfour(); + else if(callback == addr_buttonfive) + buttonfive(); + else if(callback == addr_buttonsix) + buttonsix(); + else if(callback == addr_buttonseven) + buttonseven(); + else if(callback == addr_buttoneight) + buttoneight(); + else if(callback == addr_buttonnine) + buttonnine(); + else if(callback == addr_buttonnought) + buttonnought(); + else if(callback == addr_buttonenter) + buttonenter(); + // menulist + // folderlist + else if(callback == addr_nextfolder) + nextfolder(); + else if(callback == addr_lastfolder) + lastfolder(); + // symbollist + else if(callback == addr_quitsymbol) + quitsymbol(); + else if(callback == addr_settopleft) + settopleft(); + else if(callback == addr_settopright) + settopright(); + else if(callback == addr_setbotleft) + setbotleft(); + else if(callback == addr_setbotright) + setbotright(); + // diarylist + else if(callback == addr_diarykeyn) + diarykeyn(); + else if(callback == addr_diarykeyp) + diarykeyp(); + else if(callback == addr_quitkey) + quitkey(); + // opslist + else if(callback == addr_getbackfromops) + getbackfromops(); + else if(callback == addr_discops) + discops(); + // discopslist + else if(callback == addr_loadgame) + loadgame(); + else if(callback == addr_savegame) + savegame(); + // mainlist, mainlist2 + else if(callback == addr_look) + look(); + else if(callback == addr_inventory) + inventory(); + else if(callback == addr_zoomonoff) + zoomonoff(); + else if(callback == addr_saveload) + saveload(); + else if(callback == addr_madmanrun) + madmanrun(); + else if(callback == addr_identifyob) + identifyob(); + // decidelist + else if(callback == addr_newgame) + newgame(); + else if(callback == addr_loadold) + loadold(); + // loadlist + else if(callback == addr_actualload) + actualload(); + // savelist + else if(callback == addr_actualsave) + actualsave(); + else { + debug("__dispatch_call remaining in checkcoords! %d", (int)callback); + __dispatch_call(callback); + } + return; + } + ++rectWithCallback; + } +} + +void DreamGenContext::showpointer() { + showblink(); + const Frame *icons1 = ((const Frame *)segRef(data.word(kIcons1)).ptr(0, 0)); + uint16 x = data.word(kMousex); + data.word(kOldpointerx) = data.word(kMousex); + uint16 y = data.word(kMousey); + data.word(kOldpointery) = data.word(kMousey); + if (data.byte(kPickup) == 1) { + const Frame *frames; + if (data.byte(kObjecttype) != 4) + frames = (const Frame *)segRef(data.word(kFreeframes)).ptr(0, 0); + else + frames = (const Frame *)segRef(data.word(kExtras)).ptr(0, 0); + const Frame *frame = frames + (3 * data.byte(kItemframe) + 1); + uint8 width = frame->width; + uint8 height = frame->height; + if (width < 12) + width = 12; + if (height < 12) + height = 12; + data.byte(kPointerxs) = width; + data.byte(kPointerys) = height; + uint16 xMin = (x >= width / 2) ? x - width / 2 : 0; + uint16 yMin = (y >= height / 2) ? y - height / 2 : 0; + data.word(kOldpointerx) = xMin; + data.word(kOldpointery) = yMin; + multiget(segRef(data.word(kBuffers)).ptr(kPointerback, 0), xMin, yMin, width, height); + showframe(frames, x, y, 3 * data.byte(kItemframe) + 1, 128); + showframe(icons1, x, y, 3, 128); + } else { + const Frame *frame = icons1 + (data.byte(kPointerframe) + 20); + uint8 width = frame->width; + uint8 height = frame->height; + if (width < 12) + width = 12; + if (height < 12) + height = 12; + data.byte(kPointerxs) = width; + data.byte(kPointerys) = height; + multiget(segRef(data.word(kBuffers)).ptr(kPointerback, 0), x, y, width, height); + showframe(icons1, x, y, data.byte(kPointerframe) + 20, 0); + } +} + +void DreamGenContext::animpointer() { + + if (data.byte(kPointermode) == 2) { + data.byte(kPointerframe) = 0; + if ((data.byte(kReallocation) == 14) && (data.byte(kCommandtype) == 211)) + data.byte(kPointerframe) = 5; + return; + } else if (data.byte(kPointermode) == 3) { + if (data.byte(kPointerspeed) != 0) { + --data.byte(kPointerspeed); + } else { + data.byte(kPointerspeed) = 5; + ++data.byte(kPointercount); + if (data.byte(kPointercount) == 16) + data.byte(kPointercount) = 0; + } + static const uint8 flashMouseTab[] = { 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2 }; + data.byte(kPointerframe) = flashMouseTab[data.byte(kPointercount)]; + return; + } + if (data.word(kWatchingtime) != 0) { + data.byte(kPointerframe) = 11; + return; + } + data.byte(kPointerframe) = 0; + if (data.byte(kInmaparea) == 0) + return; + if (data.byte(kPointerfirstpath) == 0) + return; + uint8 flag, flagEx; + getflagunderp(&flag, &flagEx); + if (flag < 2) + return; + if (flag >= 128) + return; + if (flag & 4) { + data.byte(kPointerframe) = 3; + return; + } + if (flag & 16) { + data.byte(kPointerframe) = 4; + return; + } + if (flag & 2) { + data.byte(kPointerframe) = 5; + return; + } + if (flag & 8) { + data.byte(kPointerframe) = 6; + return; + } + data.byte(kPointerframe) = 8; +} + +void DreamGenContext::printmessage() { + printmessage(di, bx, al, dl, (bool)(dl & 1)); +} + +void DreamGenContext::printmessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered) { + uint16 offset = kTextstart + segRef(data.word(kCommandtext)).word(index * 2); + const uint8 *string = segRef(data.word(kCommandtext)).ptr(offset, 0); + printdirect(&string, x, &y, maxWidth, centered); +} + +void DreamGenContext::obpicture() { + if (data.byte(kObjecttype) == 1) + return; + Frame *frames; + if (data.byte(kObjecttype) == 4) + frames = (Frame *)segRef(data.word(kExtras)).ptr(0, 0); + else + frames = (Frame *)segRef(data.word(kFreeframes)).ptr(0, 0); + uint8 frame = 3 * data.byte(kCommand) + 1; + showframe(frames, 160, 68, frame, 0x80); +} + +void DreamGenContext::obicons() { + uint8 value1, value2; + getanyad(&value1, &value2); + if (value1 == 0xff) { + showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0); + } else { + showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0); + } +} + +void DreamGenContext::compare() { + char id[4] = { cl, ch, dl, dh }; + flags._z = compare(al, ah, id); +} + +bool DreamGenContext::compare(uint8 index, uint8 flag, const char id[4]) { + void *ptr = getanyaddir(index, flag); + const char *objId = (const char *)(((const uint8 *)ptr) + 12); // whether it is a DynObject or a SetObject + for (size_t i = 0; i < 4; ++i) { + if(id[i] != objId[i] + 'A') + return false; + } + return true; +} + +bool DreamGenContext::isitdescribed(const ObjPos *pos) { + uint16 offset = segRef(data.word(kSetdesc)).word(kSettextdat + pos->index * 2); + uint8 result = segRef(data.word(kSetdesc)).byte(kSettext + offset); + return result != 0; +} + bool DreamGenContext::isCD() { // The original sources has two codepaths depending if the game is 'if cd' or not // This is a hack to guess which version to use with the assumption that if we have a cd version @@ -1170,5 +1742,186 @@ bool DreamGenContext::isCD() { // Maybe detect the version during game id? return (data.byte(kSpeechloaded) == 1); } + +void DreamGenContext::checkifset() { + flags._z = !checkifset(al, ah); +} + +bool DreamGenContext::checkifset(uint8 x, uint8 y) { + const ObjPos *setList = (const ObjPos *)segRef(data.word(kBuffers)).ptr(kSetlist, sizeof(ObjPos) * 128); + for (size_t i = 0; i < 128; ++i) { + const ObjPos *pos = setList + 127 - i; + if (pos->index == 0xff) + continue; + if (x < pos->xMin) + continue; + if (x >= pos->xMax) + continue; + if (y < pos->yMin) + continue; + if (y >= pos->yMax) + continue; + if (! pixelcheckset(pos, x, y)) + continue; + if (! isitdescribed(pos)) + continue; + obname(pos->index, 1); + return true; + } + return false; +} + +void DreamGenContext::isitworn() { + flags._z = isitworn((const DynObject *)es.ptr(bx, sizeof(DynObject))); +} + +bool DreamGenContext::isitworn(const DynObject *object) { + return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A'); +} + +void DreamGenContext::makeworn() { + makeworn((DynObject *)es.ptr(bx, sizeof(DynObject))); +} + +void DreamGenContext::makeworn(DynObject *object) { + object->id[0] = 'W'-'A'; + object->id[1] = 'E'-'A'; +} + +void DreamGenContext::obtoinv() { + obtoinv(al, ah, di, bx); +} + +void DreamGenContext::obtoinv(uint8 index, uint8 flag, uint16 x, uint16 y) { + Frame *icons1 = (Frame *)segRef(data.word(kIcons1)).ptr(0, 0); + showframe(icons1, x - 2, y - 1, 10, 0); + if (index == 0xff) + return; + + Frame *extras = (Frame *)segRef(data.word(kExtras)).ptr(0, 0); + Frame *frees = (Frame *)segRef(data.word(kFreeframes)).ptr(0, 0); + Frame *frames = (flag == 4) ? extras : frees; + showframe(frames, x + 18, y + 19, 3 * index + 1, 128); + const DynObject *object = (const DynObject *)getanyaddir(index, flag); + bool worn = isitworn(object); + if (worn) + showframe(icons1, x - 3, y - 2, 7, 0); +} + +void DreamGenContext::showryanpage() { + Frame *icons1 = (Frame *)segRef(data.word(kIcons1)).ptr(0, 0); + showframe(icons1, kInventx + 167, kInventy - 12, 12, 0); + showframe(icons1, kInventx + 167 + 18 * data.byte(kRyanpage), kInventy - 12, 13 + data.byte(kRyanpage), 0); +} + +void DreamGenContext::findallryan() { + findallryan(es.ptr(di, 60)); +} + +void DreamGenContext::findallryan(uint8 *inv) { + memset(inv, 0xff, 60); + for (size_t i = 0; i < kNumexobjects; ++i) { + DynObject *extra = getexad(i); + if (extra->mapad[0] != 4) + continue; + if (extra->mapad[1] != 0xff) + continue; + uint8 slot = extra->mapad[2]; + assert(slot < 30); + inv[2 * slot + 0] = i; + inv[2 * slot + 1] = 4; + } +} + +void DreamGenContext::fillryan() { + uint8 *inv = segRef(data.word(kBuffers)).ptr(kRyaninvlist, 60); + findallryan(inv); + inv += data.byte(kRyanpage) * 2 * 10; + for (size_t i = 0; i < 2; ++i) { + for (size_t j = 0; j < 5; ++j) { + uint8 objIndex = *inv++; + uint8 objType = *inv++; + obtoinv(objIndex, objType, kInventx + j * kItempicsize, kInventy + i * kItempicsize); + } + } + showryanpage(); +} + +void DreamGenContext::hangon() { + hangon(cx); +} + +void DreamGenContext::hangon(uint16 frameCount) { + while (frameCount) { + vsync(); + --frameCount; + if (data.byte(kQuitrequested)) + break; + } +} + +void DreamGenContext::hangonp() { + hangonp(cx); +} + +void DreamGenContext::hangonp(uint16 count) { + data.word(kMaintimer) = 0; + uint8 pointerFrame = data.byte(kPointerframe); + uint8 pickup = data.byte(kPickup); + data.byte(kPointermode) = 3; + data.byte(kPickup) = 0; + data.byte(kCommandtype) = 255; + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + for (size_t i = 0; i < count * 3; ++i) { + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + if (data.byte(kQuitrequested)) + break; + if (data.word(kMousebutton) == 0) + continue; + if (data.word(kMousebutton) != data.word(kOldbutton)) + break; + } + + delpointer(); + data.byte(kPointerframe) = pointerFrame; + data.byte(kPickup) = pickup; + data.byte(kPointermode) = 0; +} + +void DreamGenContext::findnextcolon() { + uint8 *initialString = es.ptr(si, 0); + uint8 *string = initialString; + al = findnextcolon(&string); + si += (string - initialString); +} + +uint8 DreamGenContext::findnextcolon(uint8 **string) { + uint8 c; + do { + c = **string; + ++(*string); + } while ((c != 0) && (c != ':')); + return c; +} + +uint8 *DreamGenContext::getobtextstartCPP() { + push(es); + push(si); + getobtextstart(); + uint8 *result = es.ptr(si, 0); + si = pop(); + es = pop(); + return result; +} + } /*namespace dreamgen */ diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index 9d5550be5b..ab272744e0 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -25,7 +25,7 @@ void clearwork(); void multidump(); void multidump(uint16 x, uint16 y, uint8 width, uint8 height); - void frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y); + void frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, int16 x, int16 y); void frameoutnm(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y); void frameoutbh(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y); void frameoutfx(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y); @@ -47,6 +47,9 @@ void printchar(const Frame* charSet, uint16 *x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height); void printdirect(); void printdirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered); + void printdirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered); + void printmessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered); + void printmessage(); void usetimedtext(); void dumptimedtext(); void setuptimedtemp(); @@ -58,10 +61,8 @@ void dumptextline(); void getnumber(); uint8 getnumber(const Frame *charSet, const uint8 *string, uint16 maxWidth, bool centered, uint16 *offset); - void kernchars(); uint8 kernchars(uint8 firstChar, uint8 secondChar, uint8 width); void getroomdata(); - void getroomdata(uint8 roomIndex); void readheader(); void fillspace(); void startloading(); @@ -76,7 +77,6 @@ void multiput(); void eraseoldobs(); void clearsprites(); - void makesprite(); Sprite *makesprite(uint8 x, uint8 y, uint16 updateCallback, uint16 frameData, uint16 somethingInDi); void spriteupdate(); void initman(); @@ -84,29 +84,35 @@ void facerightway(); void walking(Sprite *sprite); void autosetwalk(); - void checkdest(const uint8 *roomsPaths); + void checkdest(const RoomPaths *roomsPaths); void aboutturn(Sprite *sprite); void backobject(Sprite *sprite); - void constant(Sprite *sprite, ObjData *objData); - void steady(Sprite *sprite, ObjData *objData); - void random(Sprite *sprite, ObjData *objData); + void constant(Sprite *sprite, SetObject *objData); + void steady(Sprite *sprite, SetObject *objData); + void random(Sprite *sprite, SetObject *objData); void dodoor(); - void dodoor(Sprite *sprite, ObjData *objData); - void doorway(Sprite *sprite, ObjData *objData); - void widedoor(Sprite *sprite, ObjData *objData); - void lockeddoorway(Sprite *sprite, ObjData *objData); - void liftsprite(Sprite *sprite, ObjData *objData); + void dodoor(Sprite *sprite, SetObject *objData); + void doorway(Sprite *sprite, SetObject *objData); + void widedoor(Sprite *sprite, SetObject *objData); + void lockeddoorway(Sprite *sprite, SetObject *objData); + void liftsprite(Sprite *sprite, SetObject *objData); void findsource(); Frame *findsourceCPP(); void showgamereel(); + void showgamereel(ReelRoutine *routine); void showreelframe(); void showreelframe(Reel *reel); const Frame *getreelframeax(uint16 frame); - void turnpathonCPP(uint8 param); - void turnpathoffCPP(uint8 param); - void getroomspaths(); - uint8 *getroomspathsCPP(); - void makebackob(ObjData *objData); + void turnpathon(uint8 param); + void turnpathoff(uint8 param); + void turnpathon(); + void turnpathoff(); + void turnanypathon(uint8 param, uint8 room); + void turnanypathoff(uint8 param, uint8 room); + void turnanypathon(); + void turnanypathoff(); + RoomPaths *getroomspaths(); + void makebackob(SetObject *objData); void modifychar(); void lockmon(); void cancelch0(); @@ -125,6 +131,8 @@ bool checkifperson(uint8 x, uint8 y); void checkiffree(); bool checkiffree(uint8 x, uint8 y); + void checkifex(); + bool checkifex(uint8 x, uint8 y); const uint8 *findobname(uint8 type, uint8 index); void copyname(); void copyname(uint8 type, uint8 index, uint8 *dst); @@ -155,8 +163,12 @@ void findxyfrompath(); void findormake(); void findormake(uint8 index, uint8 value, uint8 type); - FreeObject *getfreead(uint8 index); - ObjData *getsetad(uint8 index); + DynObject *getfreead(uint8 index); + DynObject *getexad(uint8 index); + DynObject *geteitheradCPP(); + SetObject *getsetad(uint8 index); + void *getanyad(uint8 *value1, uint8 *value2); + void *getanyaddir(uint8 index, uint8 flag); void setallchanges(); void dochange(); void dochange(uint8 index, uint8 value, uint8 type); @@ -167,8 +179,68 @@ void removesetobject(); void removesetobject(uint8 index); void showallfree(); + void showallex(); bool finishedwalkingCPP(); void finishedwalking(); void checkone(); void checkone(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uint8 *type, uint8 *flagX, uint8 *flagY); + void getflagunderp(); + void getflagunderp(uint8 *flag, uint8 *flagEx); + void walkandexamine(); + void obname(); + void obname(uint8 command, uint8 commandType); + void delpointer(); + void showblink(); + void dumpblink(); + void dumppointer(); + void showpointer(); + void animpointer(); + void checkcoords(); + void checkcoords(const RectWithCallback *rectWithCallbacks); + void readmouse(); + void readmouse1(); + void readmouse2(); + void readmouse3(); + void readmouse4(); + uint16 waitframes(); + void drawflags(); + void addtopeoplelist(); + void addtopeoplelist(ReelRoutine *routine); + void getexpos(); + void paneltomap(); + void maptopanel(); + void dumpmap(); + void obpicture(); + void transferinv(); + void obicons(); + void compare(); + bool compare(uint8 index, uint8 flag, const char id[4]); + bool pixelcheckset(const ObjPos *pos, uint8 x, uint8 y); + bool isitdescribed(const ObjPos *objPos); + void checkifset(); + bool checkifset(uint8 x, uint8 y); + void checkifpathison(); + bool checkifpathison(uint8 index); + void isitworn(); + bool isitworn(const DynObject *object); + void makeworn(); + void makeworn(DynObject *object); + void obtoinv(); + void obtoinv(uint8 index, uint8 flag, uint16 x, uint16 y); + void showryanpage(); + void findallryan(); + void findallryan(uint8 *inv); + void fillryan(); + void useroutine(); + void hangon(); + void hangon(uint16 frameCount); + void hangonp(); + void hangonp(uint16 count); + uint8 findnextcolon(uint8 **string); + void findnextcolon(); + uint8 *getobtextstartCPP(); + void usetext(const uint8 *string); + void usetext(); + void getblockofpixel(); + uint8 getblockofpixel(uint8 x, uint8 y); diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp new file mode 100644 index 0000000000..d6648b556e --- /dev/null +++ b/engines/dreamweb/use.cpp @@ -0,0 +1,178 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "dreamweb/dreamweb.h" + +namespace DreamGen { + + +typedef void (DreamGenContext::*UseCallback)(void); + +struct UseListEntry { + uint8 id[5]; // 0-terminal because it is easier syntatically to initialize the array + UseCallback callback; +}; + +void DreamGenContext::useroutine() { + + static const UseListEntry kUseList[] = { + { "NETW", &DreamGenContext::usemon }, + { "ELVA", &DreamGenContext::useelevator1 }, + { "ELVB", &DreamGenContext::useelevator2 }, + { "ELVC", &DreamGenContext::useelevator3 }, + { "ELVE", &DreamGenContext::useelevator4 }, + { "ELVF", &DreamGenContext::useelevator5 }, + { "CGAT", &DreamGenContext::usechurchgate }, + { "REMO", &DreamGenContext::usestereo }, + { "BUTA", &DreamGenContext::usebuttona }, + { "CBOX", &DreamGenContext::usewinch }, + { "LITE", &DreamGenContext::uselighter }, + { "PLAT", &DreamGenContext::useplate }, + { "LIFT", &DreamGenContext::usecontrol }, + { "WIRE", &DreamGenContext::usewire }, + { "HNDL", &DreamGenContext::usehandle }, + { "HACH", &DreamGenContext::usehatch }, + { "DOOR", &DreamGenContext::useelvdoor }, + { "CSHR", &DreamGenContext::usecashcard }, + { "GUNA", &DreamGenContext::usegun }, + { "CRAA", &DreamGenContext::usecardreader1 }, + { "CRBB", &DreamGenContext::usecardreader2 }, + { "CRCC", &DreamGenContext::usecardreader3 }, + { "SEAT", &DreamGenContext::sitdowninbar }, + { "MENU", &DreamGenContext::usemenu }, + { "COOK", &DreamGenContext::usecooker }, + { "ELCA", &DreamGenContext::callhotellift }, + { "EDCA", &DreamGenContext::calledenslift }, + { "DDCA", &DreamGenContext::calledensdlift }, + { "ALTR", &DreamGenContext::usealtar }, + { "LOKA", &DreamGenContext::openhoteldoor }, + { "LOKB", &DreamGenContext::openhoteldoor2 }, + { "ENTA", &DreamGenContext::openlouis }, + { "ENTB", &DreamGenContext::openryan }, + { "ENTE", &DreamGenContext::openpoolboss }, + { "ENTC", &DreamGenContext::openyourneighbour }, + { "ENTD", &DreamGenContext::openeden }, + { "ENTH", &DreamGenContext::opensarters }, + { "WWAT", &DreamGenContext::wearwatch }, + { "POOL", &DreamGenContext::usepoolreader }, + { "WSHD", &DreamGenContext::wearshades }, + { "GRAF", &DreamGenContext::grafittidoor }, + { "TRAP", &DreamGenContext::trapdoor }, + { "CDPE", &DreamGenContext::edenscdplayer }, + { "DLOK", &DreamGenContext::opentvdoor }, + { "HOLE", &DreamGenContext::usehole }, + { "DRYR", &DreamGenContext::usedryer }, + { "HOLY", &DreamGenContext::usechurchhole }, + { "WALL", &DreamGenContext::usewall }, + { "BOOK", &DreamGenContext::usediary }, + { "AXED", &DreamGenContext::useaxe }, + { "SHLD", &DreamGenContext::useshield }, + { "BCNY", &DreamGenContext::userailing }, + { "LIDC", &DreamGenContext::usecoveredbox }, + { "LIDU", &DreamGenContext::useclearbox }, + { "LIDO", &DreamGenContext::useopenbox }, + { "PIPE", &DreamGenContext::usepipe }, + { "BALC", &DreamGenContext::usebalcony }, + { "WIND", &DreamGenContext::usewindow }, + { "PAPR", &DreamGenContext::viewfolder }, + { "UWTA", &DreamGenContext::usetrainer }, + { "UWTB", &DreamGenContext::usetrainer }, + { "STAT", &DreamGenContext::entersymbol }, + { "TLID", &DreamGenContext::opentomb }, + { "SLAB", &DreamGenContext::useslab }, + { "CART", &DreamGenContext::usecart }, + { "FCAR", &DreamGenContext::usefullcart }, + { "SLBA", &DreamGenContext::slabdoora }, + { "SLBB", &DreamGenContext::slabdoorb }, + { "SLBC", &DreamGenContext::slabdoorc }, + { "SLBD", &DreamGenContext::slabdoord }, + { "SLBE", &DreamGenContext::slabdoore }, + { "SLBF", &DreamGenContext::slabdoorf }, + { "PLIN", &DreamGenContext::useplinth }, + { "LADD", &DreamGenContext::useladder }, + { "LADB", &DreamGenContext::useladderb }, + { "GUMA", &DreamGenContext::chewy }, + { "SQEE", &DreamGenContext::wheelsound }, + { "TAPP", &DreamGenContext::runtap }, + { "GUIT", &DreamGenContext::playguitar }, + { "CONT", &DreamGenContext::hotelcontrol }, + { "BELL", &DreamGenContext::hotelbell }, + }; + + if (data.byte(kReallocation) >= 50) { + if (data.byte(kPointerpower) == 0) + return; + data.byte(kPointerpower) = 0; + } + + getanyad(); + const uint8 *id = es.ptr(bx + 12, 4); + + for (size_t i = 0; i < sizeof(kUseList)/sizeof(UseListEntry); ++i) { + const UseListEntry &entry = kUseList[i]; + if (('A' + id[0] == entry.id[0]) && ('A' + id[1] == entry.id[1]) && ('A' + id[2] == entry.id[2]) && ('A' + id[3] == entry.id[3])) { + (this->*entry.callback)(); + return; + } + } + + delpointer(); + uint8 *obText = getobtextstartCPP(); + if (findnextcolon(&obText) != 0) { + if (findnextcolon(&obText) != 0) { + if (*obText != 0) { + usetext(obText); + hangonp(400); + putbackobstuff(); + return; + } + } + } + + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + printmessage(33, 100, 63, 241, true); + worktoscreenm(); + hangonp(50); + putbackobstuff(); + data.byte(kCommandtype) = 255; +} + +void DreamGenContext::usetext() { + usetext(es.ptr(si, 0)); +} + +void DreamGenContext::usetext(const uint8 *string) { + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + printdirect(string, 36, 104, 241, true); + worktoscreenm(); +} + +} /*namespace dreamgen */ + diff --git a/engines/dreamweb/vgagrafx.cpp b/engines/dreamweb/vgagrafx.cpp index 3c92640768..53db811313 100644 --- a/engines/dreamweb/vgagrafx.cpp +++ b/engines/dreamweb/vgagrafx.cpp @@ -43,6 +43,8 @@ void DreamGenContext::multiget() { } void DreamGenContext::multiget(uint8 *dst, uint16 x, uint16 y, uint8 w, uint8 h) { + assert(x < 320); + assert(y < 200); const uint8 *src = workspace() + x + y * kScreenwidth; if (y + h > 200) h = 200 - y; @@ -64,6 +66,8 @@ void DreamGenContext::multiput() { } void DreamGenContext::multiput(const uint8 *src, uint16 x, uint16 y, uint8 w, uint8 h) { + assert(x < 320); + assert(y < 200); uint8 *dst = workspace() + x + y * kScreenwidth; if (y + h > 200) h = 200 - y; @@ -150,11 +154,10 @@ void DreamGenContext::frameoutfx(uint8 *dst, const uint8 *src, uint16 pitch, uin void DreamGenContext::doshake() { uint8 &counter = data.byte(kShakecounter); - _cmp(counter, 48); - if (flags.z()) + if (counter == 48) return; - _add(counter, 1); + ++counter; static const int shakeTable[] = { 0, -2, 3, -2, 0, 2, 4, -1, 1, -3, 3, 2, 0, -2, 3, -2, @@ -282,11 +285,23 @@ void DreamGenContext::showpcx() { pcxFile.close(); } -void DreamGenContext::frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y) { +void DreamGenContext::frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, int16 x, int16 y) { // NB : These resilience checks were not in the original engine, but did they result in undefined behaviour // or was something broken during porting to C++? assert(pitch == 320); + if(x < 0) { + assert(width >= -x); + width -= -x; + src += -x; + x = 0; + } + if(y < 0) { + assert(height >= -y); + height -= -y; + src += (-y) * width; + y = 0; + } if(x >= 320) return; if(y >= 200) @@ -411,5 +426,43 @@ void DreamGenContext::zoom() { data.byte(kDidzoom) = 1; } +void DreamGenContext::paneltomap() { + multiget(segRef(data.word(kMapstore)).ptr(0, 0), data.word(kMapxstart) + data.word(kMapadx), data.word(kMapystart) + data.word(kMapady), data.byte(kMapxsize), data.byte(kMapysize)); +} + +void DreamGenContext::maptopanel() { + multiput(segRef(data.word(kMapstore)).ptr(0, 0), data.word(kMapxstart) + data.word(kMapadx), data.word(kMapystart) + data.word(kMapady), data.byte(kMapxsize), data.byte(kMapysize)); +} + +void DreamGenContext::dumpmap() { + multidump(data.word(kMapxstart) + data.word(kMapadx), data.word(kMapystart) + data.word(kMapady), data.byte(kMapxsize), data.byte(kMapysize)); +} + +void DreamGenContext::transferinv() { + const Frame *freeFrames = (const Frame *)segRef(data.word(kFreeframes)).ptr(kFrframedata, 0); + const Frame *freeFrame = freeFrames + (3 * data.byte(kItemtotran) + 1); + Frame *exFrames = (Frame *)segRef(data.word(kExtras)).ptr(kExframedata, 0); + Frame *exFrame = exFrames + (3 * data.byte(kExpos) + 1); + exFrame->width = freeFrame->width; + exFrame->height = freeFrame->height; + exFrame->x = freeFrame->x; + exFrame->y = freeFrame->y; + uint16 byteCount = freeFrame->width * freeFrame->height; + const uint8 *src = segRef(data.word(kFreeframes)).ptr(kFrframes + freeFrame->ptr(), byteCount); + uint8 *dst = segRef(data.word(kExtras)).ptr(kExframes + data.word(kExframepos), byteCount); + memcpy(dst, src, byteCount); + exFrame->setPtr(data.word(kExframepos)); + data.word(kExframepos) += byteCount; +} + +bool DreamGenContext::pixelcheckset(const ObjPos *pos, uint8 x, uint8 y) { + x -= pos->xMin; + y -= pos->yMin; + SetObject *setObject = getsetad(pos->index); + Frame *frame = (Frame *)segRef(data.word(kSetframes)).ptr(kFramedata, 0) + setObject->index; + const uint8 *ptr = segRef(data.word(kSetframes)).ptr(kFrames, 0) + frame->ptr() + y * frame->width + x; + return *ptr != 0; +} + } /*namespace dreamgen */ diff --git a/engines/gob/anifile.cpp b/engines/gob/anifile.cpp new file mode 100644 index 0000000000..1a905f1083 --- /dev/null +++ b/engines/gob/anifile.cpp @@ -0,0 +1,326 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/stream.h" +#include "common/substream.h" + +#include "gob/gob.h" +#include "gob/util.h" +#include "gob/dataio.h" +#include "gob/surface.h" +#include "gob/video.h" +#include "gob/anifile.h" + +namespace Gob { + +ANIFile::Layer::Layer() : surface(0), coordinates(0) { +} + +ANIFile::Layer::~Layer() { + delete coordinates; + delete surface; +} + + +ANIFile::ANIFile(GobEngine *vm, const Common::String &fileName, + uint16 width, uint8 bpp) : _vm(vm), + _width(width), _bpp(bpp), _hasPadding(false) { + + Common::SeekableReadStream *ani = _vm->_dataIO->getFile(fileName); + if (ani) { + Common::SeekableSubReadStreamEndian sub(ani, 0, ani->size(), false, DisposeAfterUse::YES); + + load(sub, fileName); + return; + } + + // File doesn't exist, try to open the big-endian'd alternate file + Common::String alternateFileName = fileName; + alternateFileName.setChar('_', 0); + + ani = _vm->_dataIO->getFile(alternateFileName); + if (ani) { + Common::SeekableSubReadStreamEndian sub(ani, 0, ani->size(), true, DisposeAfterUse::YES); + + // The big endian version pads a few fields to even size + _hasPadding = true; + + load(sub, fileName); + return; + } + + warning("ANIFile::ANIFile(): No such file \"%s\"", fileName.c_str()); +} + +ANIFile::~ANIFile() { +} + +void ANIFile::load(Common::SeekableSubReadStreamEndian &ani, const Common::String &fileName) { + ani.skip(2); // Unused + + uint16 animationCount = ani.readUint16(); + uint16 layerCount = ani.readUint16(); + + if (layerCount < 1) + warning("ANIFile::load(): Less than one layer (%d) in file \"%s\"", + layerCount, fileName.c_str()); + + // Load the layers + if (layerCount > 0) { + ani.skip(13); // The first layer is ignored? + if (_hasPadding) + ani.skip(1); + + _layers.resize(layerCount - 1); + for (LayerArray::iterator l = _layers.begin(); l != _layers.end(); ++l) + loadLayer(*l, ani); + } + + _maxWidth = 0; + _maxHeight = 0; + + // Load the animations + _animations.resize(animationCount); + _frames.resize(animationCount); + + for (uint16 animation = 0; animation < animationCount; animation++) { + loadAnimation(_animations[animation], _frames[animation], ani); + + _maxWidth = MAX<uint16>(_maxWidth , _animations[animation].width); + _maxHeight = MAX<uint16>(_maxHeight, _animations[animation].height); + } +} + +void ANIFile::loadAnimation(Animation &animation, FrameArray &frames, + Common::SeekableSubReadStreamEndian &ani) { + + // Animation properties + + animation.name = Util::readString(ani, 13); + if (_hasPadding) + ani.skip(1); + + ani.skip(13); // The name a second time?!? + if (_hasPadding) + ani.skip(1); + + ani.skip(2); // Unknown + + animation.x = (int16) ani.readUint16(); + animation.y = (int16) ani.readUint16(); + animation.deltaX = (int16) ani.readUint16(); + animation.deltaY = (int16) ani.readUint16(); + + animation.transp = ani.readByte() != 0; + + if (_hasPadding) + ani.skip(1); + + uint16 frameCount = ani.readUint16(); + + // Load the frames + + frames.resize(MAX<uint16>(1, frameCount)); + loadFrames(frames, ani); + + animation.frameCount = frames.size(); + + animation.width = 0; + animation.height = 0; + + // Calculate the areas of each frame + + animation.frameAreas.resize(animation.frameCount); + for (uint16 i = 0; i < animation.frameCount; i++) { + const ChunkList &frame = frames[i]; + FrameArea &area = animation.frameAreas[i]; + + area.left = area.top = 0x7FFF; + area.right = area.bottom = -0x7FFF; + + for (ChunkList::const_iterator c = frame.begin(); c != frame.end(); c++) { + const Layer *layer; + const RXYFile::Coordinates *coords; + + if (!getPart(c->layer, c->part, layer, coords)) + continue; + + const uint16 width = coords->right - coords->left + 1; + const uint16 height = coords->bottom - coords->top + 1; + + const uint16 l = c->x; + const uint16 t = c->y; + const uint16 r = l + width - 1; + const uint16 b = t + height - 1; + + area.left = MIN<int16>(area.left , l); + area.top = MIN<int16>(area.top , t); + area.right = MAX<int16>(area.right , r); + area.bottom = MAX<int16>(area.bottom, b); + } + + if ((area.left <= area.right) && (area.top <= area.bottom)) { + animation.width = MAX<uint16>(animation.width , area.right - area.left + 1); + animation.height = MAX<uint16>(animation.height, area.bottom - area.top + 1); + } + } +} + +void ANIFile::loadFrames(FrameArray &frames, Common::SeekableSubReadStreamEndian &ani) { + uint32 curFrame = 0; + + bool end = false; + while (!end) { + frames[curFrame].push_back(AnimationChunk()); + AnimationChunk &chunk = frames[curFrame].back(); + + uint8 layerFlags = ani.readByte(); + + // Chunk properties + chunk.layer = (layerFlags & 0x0F) - 1; + chunk.part = ani.readByte(); + chunk.x = (int8) ani.readByte(); + chunk.y = (int8) ani.readByte(); + + // X multiplier/offset + int16 xOff = ((layerFlags & 0xC0) >> 6) << 7; + if (chunk.x >= 0) + chunk.x += xOff; + else + chunk.x -= xOff; + + // Y multiplier/offset + int16 yOff = ((layerFlags & 0x30) >> 4) << 7; + if (chunk.y >= 0) + chunk.y += yOff; + else + chunk.y -= yOff; + + uint8 multiPart = ani.readByte(); + if (multiPart == 0xFF) // No more frames in this animation + end = true; + else if (multiPart != 0x01) // No more chunks in this frame + curFrame++; + + // Shouldn't happen, but just to be safe + if (curFrame >= frames.size()) + frames.resize(curFrame + 1); + + if (_hasPadding) + ani.skip(1); + + if (ani.eos() || ani.err()) + error("ANIFile::loadFrames(): Read error"); + } +} + +void ANIFile::loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &ani) { + Common::String file = Util::readString(ani, 13); + if (_hasPadding) + ani.skip(1); + + if (file.empty()) + return; + + Common::String fileRXY = Util::setExtension(file, ".RXY"); + Common::String fileCMP = Util::setExtension(file, ".CMP"); + if (!_vm->_dataIO->hasFile(fileRXY) || !_vm->_dataIO->hasFile(fileCMP)) + return; + + loadLayer(layer, fileRXY, fileCMP); +} + +void ANIFile::loadLayer(Layer &layer, const Common::String &fileRXY, + const Common::String &fileCMP) { + + Common::SeekableReadStream *dataRXY = _vm->_dataIO->getFile(fileRXY); + if (!dataRXY) + return; + + layer.coordinates = new RXYFile(*dataRXY); + layer.surface = new Surface(_width, layer.coordinates->getHeight(), _bpp); + + _vm->_video->drawPackedSprite(fileCMP.c_str(), *layer.surface); +} + +uint16 ANIFile::getAnimationCount() const { + return _animations.size(); +} + +void ANIFile::getMaxSize(uint16 &width, uint16 &height) const { + width = _maxWidth; + height = _maxHeight; +} + +const ANIFile::Animation &ANIFile::getAnimationInfo(uint16 animation) const { + assert(animation < _animations.size()); + + return _animations[animation]; +} + +bool ANIFile::getPart(uint16 layer, uint16 part, + const Layer *&l, const RXYFile::Coordinates *&c) const { + + if (layer >= _layers.size()) + return false; + + l = &_layers[layer]; + if (!l->surface || !l->coordinates) + return false; + + if (part >= l->coordinates->size()) + return false; + + c = &(*l->coordinates)[part]; + if (c->left == 0xFFFF) + return false; + + return true; +} + +void ANIFile::draw(Surface &dest, uint16 animation, uint16 frame, int16 x, int16 y) const { + if (animation >= _animations.size()) + return; + + const Animation &anim = _animations[animation]; + if (frame >= anim.frameCount) + return; + + const ChunkList &chunks = _frames[animation][frame]; + + for (ChunkList::const_iterator c = chunks.begin(); c != chunks.end(); ++c) + drawLayer(dest, c->layer, c->part, x + c->x, y + c->y, anim.transp ? 0 : -1); +} + +void ANIFile::drawLayer(Surface &dest, uint16 layer, uint16 part, + int16 x, int16 y, int32 transp) const { + + const Layer *l; + const RXYFile::Coordinates *c; + + if (!getPart(layer, part, l, c)) + return; + + dest.blit(*l->surface, c->left, c->top, c->right, c->bottom, x, y, transp); +} + +} // End of namespace Gob diff --git a/engines/gob/anifile.h b/engines/gob/anifile.h new file mode 100644 index 0000000000..1e10da6ff4 --- /dev/null +++ b/engines/gob/anifile.h @@ -0,0 +1,161 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GOB_ANIFILE_H +#define GOB_ANIFILE_H + +#include "common/system.h" +#include "common/str.h" +#include "common/array.h" +#include "common/list.h" + +#include "gob/rxyfile.h" + +namespace Common { + class SeekableSubReadStreamEndian; +} + +namespace Gob { + +class GobEngine; +class Surface; + +/** An ANI file, describing an animation. + * + * Used in hardcoded "actiony" parts of gob games. + * The principle is similar to an Anim in Scenery (see scenery.cpp), but + * instead of referencing indices in the sprites array, ANIs reference sprites + * directly by filename. + */ +class ANIFile { +public: + /** The relative area a frame sprite occupies. */ + struct FrameArea { + int16 left; + int16 top; + int16 right; + int16 bottom; + }; + + /** An animation within an ANI file. */ + struct Animation { + Common::String name; ///< The name of the animation. + + uint16 frameCount; ///< The number of frames in this animation. + + int16 x; ///< The default x position for this animation. + int16 y; ///< The default y position for this animation. + bool transp; ///< Should the animation frames be drawn with transparency? + + int16 deltaX; ///< # of pixels to advance in X direction after each cycle. + int16 deltaY; ///< # of pixels to advance in Y direction after each cycle. + + /** The relative area each frame sprite occupies. */ + Common::Array<FrameArea> frameAreas; + + uint16 width; ///< The maximum width of this animation's frames. + uint16 height; ///< The maximum height of this animation's frames. + }; + + + ANIFile(GobEngine *vm, const Common::String &fileName, + uint16 width = 320, uint8 bpp = 1); + ~ANIFile(); + + /** Return the number of animations in this ANI file. */ + uint16 getAnimationCount() const; + + /** Return the maximum size of all animation frames. */ + void getMaxSize(uint16 &width, uint16 &height) const; + + /** Get this animation's properties. */ + const Animation &getAnimationInfo(uint16 animation) const; + + /** Draw an animation frame. */ + void draw(Surface &dest, uint16 animation, uint16 frame, int16 x, int16 y) const; + +private: + /** A sprite layer. */ + struct Layer { + Surface *surface; ///< The surface containing the layer sprite. + RXYFile *coordinates; ///< The coordinates describing the layer sprite parts. + + Layer(); + ~Layer(); + }; + + typedef Common::Array<Layer> LayerArray; + typedef Common::Array<Animation> AnimationArray; + + /** A "chunk" of an animation frame. */ + struct AnimationChunk { + int16 x; ///< The relative x offset of this chunk. + int16 y; ///< The relative y offset of this chunk. + + uint16 layer; ///< The layer the chunk's sprite is on. + uint16 part; ///< The layer part the chunk's sprite is. + }; + + typedef Common::List<AnimationChunk> ChunkList; + typedef Common::Array<ChunkList> FrameArray; + typedef Common::Array<FrameArray> AnimationFrameArray; + + + GobEngine *_vm; + + uint16 _width; ///< The width of a sprite layer. + uint8 _bpp; ///< Number of bytes per pixel in a sprite layer. + + byte _hasPadding; + + LayerArray _layers; ///< The animation sprite layers. + AnimationArray _animations; ///< The animations. + AnimationFrameArray _frames; ///< The animation frames. + + uint16 _maxWidth; + uint16 _maxHeight; + + + // Loading helpers + + void load(Common::SeekableSubReadStreamEndian &ani, const Common::String &fileName); + + void loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &ani); + void loadLayer(Layer &layer, const Common::String &fileRXY, + const Common::String &fileCMP); + + void loadAnimation(Animation &animation, FrameArray &frames, + Common::SeekableSubReadStreamEndian &ani); + void loadFrames(FrameArray &frames, Common::SeekableSubReadStreamEndian &ani); + + // Drawing helpers + + bool getPart(uint16 layer, uint16 part, + const Layer *&l, const RXYFile::Coordinates *&c) const; + + void drawLayer(Surface &dest, uint16 layer, uint16 part, + int16 x, int16 y, int32 transp) const; +}; + +} // End of namespace Gob + +#endif // GOB_ANIFILE_H diff --git a/engines/gob/aniobject.cpp b/engines/gob/aniobject.cpp new file mode 100644 index 0000000000..c6a9234eb9 --- /dev/null +++ b/engines/gob/aniobject.cpp @@ -0,0 +1,185 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "gob/surface.h" +#include "gob/anifile.h" +#include "gob/aniobject.h" + +namespace Gob { + +ANIObject::ANIObject(const ANIFile &ani) : _ani(&ani), _visible(false), + _x(0), _y(0), _background(0), _drawn(false) { + + setAnimation(0); + setPosition(); +} + +ANIObject::~ANIObject() { + delete _background; +} + +void ANIObject::setVisible(bool visible) { + _visible = visible; +} + +bool ANIObject::isVisible() const { + return _visible; +} + +void ANIObject::setAnimation(uint16 animation) { + _animation = animation; + _frame = 0; +} + +void ANIObject::setPosition() { + if (_animation >= _ani->getAnimationCount()) + return; + + const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation); + + _x = animation.x; + _y = animation.y; +} + +void ANIObject::setPosition(int16 x, int16 y) { + _x = x; + _y = y; +} + +void ANIObject::getPosition(int16 &x, int16 &y) const { + x = _x; + y = _y; +} + +void ANIObject::getFramePosition(int16 &x, int16 &y) const { + if (_animation >= _ani->getAnimationCount()) + return; + + const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation); + if (_frame >= animation.frameCount) + return; + + x = _x + animation.frameAreas[_frame].left; + y = _y + animation.frameAreas[_frame].top; +} + +void ANIObject::getFrameSize(int16 &width, int16 &height) const { + if (_animation >= _ani->getAnimationCount()) + return; + + const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation); + if (_frame >= animation.frameCount) + return; + + width = animation.frameAreas[_frame].right - animation.frameAreas[_frame].left + 1; + height = animation.frameAreas[_frame].bottom - animation.frameAreas[_frame].top + 1; +} + +void ANIObject::draw(Surface &dest, int16 &left, int16 &top, + int16 &right, int16 &bottom) { + + if (!_visible) + return; + + if (!_background) { + uint16 width, height; + + _ani->getMaxSize(width, height); + + _background = new Surface(width, height, dest.getBPP()); + } + + const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation); + if (_frame >= animation.frameCount) + return; + + const ANIFile::FrameArea &area = animation.frameAreas[_frame]; + + _backgroundLeft = CLIP<int16>(area.left + _x, 0, dest.getWidth () - 1); + _backgroundTop = CLIP<int16>(area.top + _y, 0, dest.getHeight() - 1); + _backgroundRight = CLIP<int16>(area.right + _x, 0, dest.getWidth () - 1); + _backgroundBottom = CLIP<int16>(area.bottom + _y, 0, dest.getHeight() - 1); + + _background->blit(dest, _backgroundLeft , _backgroundTop, + _backgroundRight, _backgroundBottom, 0, 0); + + _ani->draw(dest, _animation, _frame, _x, _y); + + _drawn = true; + + left = _backgroundLeft; + top = _backgroundTop; + right = _backgroundRight; + bottom = _backgroundBottom; +} + +void ANIObject::clear(Surface &dest, int16 &left, int16 &top, + int16 &right, int16 &bottom) { + + if (!_drawn) + return; + + const int16 bgRight = _backgroundRight - _backgroundLeft; + const int16 bgBottom = _backgroundBottom - _backgroundTop; + + dest.blit(*_background, 0, 0, bgRight, bgBottom, _backgroundLeft, _backgroundTop); + + _drawn = false; + + left = _backgroundLeft; + top = _backgroundTop; + right = _backgroundRight; + bottom = _backgroundBottom; +} + +void ANIObject::advance() { + if (_animation >= _ani->getAnimationCount()) + return; + + const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation); + + _frame = (_frame + 1) % animation.frameCount; + + if (_frame == 0) { + _x += animation.deltaX; + _y += animation.deltaY; + } +} + +uint16 ANIObject::getAnimation() const { + return _animation; +} + +uint16 ANIObject::getFrame() const { + return _frame; +} + +bool ANIObject::lastFrame() const { + if (_animation >= _ani->getAnimationCount()) + return true; + + const ANIFile::Animation &animation = _ani->getAnimationInfo(_animation); + + return (_frame + 1) >= animation.frameCount; +} + +} // End of namespace Gob diff --git a/engines/gob/aniobject.h b/engines/gob/aniobject.h new file mode 100644 index 0000000000..357c2a9bcc --- /dev/null +++ b/engines/gob/aniobject.h @@ -0,0 +1,99 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GOB_ANIOBJECT_H +#define GOB_ANIOBJECT_H + +#include "common/system.h" + +namespace Gob { + +class ANIFile; +class Surface; + +/** An ANI object, controlling an animation within an ANI file. */ +class ANIObject { +public: + ANIObject(const ANIFile &ani); + virtual ~ANIObject(); + + /** Make the object visible/invisible. */ + void setVisible(bool visible); + + /** Is the object currently visible? */ + bool isVisible() const; + + /** Set the current position to the animation's default. */ + void setPosition(); + /** Set the current position. */ + void setPosition(int16 x, int16 y); + + /** Return the current position. */ + void getPosition(int16 &x, int16 &y) const; + + /** Return the current frame position. */ + void getFramePosition(int16 &x, int16 &y) const; + /** Return the current frame size. */ + void getFrameSize(int16 &width, int16 &height) const; + + /** Set the animation number. */ + void setAnimation(uint16 animation); + + /** Return the current animation number. */ + uint16 getAnimation() const; + /** Return the current frame number. */ + uint16 getFrame() const; + + /** Is this the last frame within this animation cycle? */ + bool lastFrame() const; + + /** Draw the current frame onto the surface and return the affected rectangle. */ + void draw(Surface &dest, int16 &left, int16 &top, int16 &right, int16 &bottom); + /** Draw the current frame from the surface and return the affected rectangle. */ + void clear(Surface &dest, int16 &left , int16 &top, int16 &right, int16 &bottom); + + /** Advance the animation to the next frame. */ + virtual void advance(); + +private: + const ANIFile *_ani; ///< The managed ANI file. + + uint16 _animation; ///< The current animation number + uint16 _frame; ///< The current frame. + + bool _visible; ///< Is the object currently visible? + + int16 _x; ///< The current X position. + int16 _y; ///< The current Y position. + + Surface *_background; ///< The saved background. + bool _drawn; ///< Was the animation drawn? + + int16 _backgroundLeft; ///< The left position of the saved background. + int16 _backgroundTop; ///< The top of the saved background. + int16 _backgroundRight; ///< The right position of the saved background. + int16 _backgroundBottom; ///< The bottom position of the saved background. +}; + +} // End of namespace Gob + +#endif // GOB_ANIOBJECT_H diff --git a/engines/gob/console.cpp b/engines/gob/console.cpp index b8aed37727..e7296fb81b 100644 --- a/engines/gob/console.cpp +++ b/engines/gob/console.cpp @@ -29,6 +29,7 @@ namespace Gob { GobConsole::GobConsole(GobEngine *vm) : GUI::Debugger(), _vm(vm) { DCmd_Register("varSize", WRAP_METHOD(GobConsole, cmd_varSize)); + DCmd_Register("dumpVars", WRAP_METHOD(GobConsole, cmd_dumpVars)); DCmd_Register("var8", WRAP_METHOD(GobConsole, cmd_var8)); DCmd_Register("var16", WRAP_METHOD(GobConsole, cmd_var16)); DCmd_Register("var32", WRAP_METHOD(GobConsole, cmd_var32)); @@ -44,6 +45,23 @@ bool GobConsole::cmd_varSize(int argc, const char **argv) { return true; } +bool GobConsole::cmd_dumpVars(int argc, const char **argv) { + if (!_vm->_inter->_variables) + return true; + + Common::DumpFile file; + + if (!file.open("variables.dmp")) + return true; + + file.write(_vm->_inter->_variables->getAddressOff8(0), _vm->_inter->_variables->getSize()); + + file.flush(); + file.close(); + + return true; +} + bool GobConsole::cmd_var8(int argc, const char **argv) { if (argc == 1) { DebugPrintf("Usage: var8 <var offset> (<value>)\n"); diff --git a/engines/gob/console.h b/engines/gob/console.h index b9f9b81d0e..b9c3f5ed70 100644 --- a/engines/gob/console.h +++ b/engines/gob/console.h @@ -38,6 +38,7 @@ private: GobEngine *_vm; bool cmd_varSize(int argc, const char **argv); + bool cmd_dumpVars(int argc, const char **argv); bool cmd_var8(int argc, const char **argv); bool cmd_var16(int argc, const char **argv); bool cmd_var32(int argc, const char **argv); diff --git a/engines/gob/dataio.cpp b/engines/gob/dataio.cpp index a576cf9487..1633a1edb7 100644 --- a/engines/gob/dataio.cpp +++ b/engines/gob/dataio.cpp @@ -32,11 +32,11 @@ namespace Gob { -DataIO::File::File() : size(0), offset(0), packed(false), archive(0) { +DataIO::File::File() : size(0), offset(0), compression(0), archive(0) { } -DataIO::File::File(const Common::String &n, uint32 s, uint32 o, bool p, Archive &a) : - name(n), size(s), offset(o), packed(p), archive(&a) { +DataIO::File::File(const Common::String &n, uint32 s, uint32 o, uint8 c, Archive &a) : + name(n), size(s), offset(o), compression(c), archive(&a) { } @@ -71,26 +71,92 @@ void DataIO::getArchiveInfo(Common::Array<ArchiveInfo> &info) const { } } -byte *DataIO::unpack(const byte *src, uint32 srcSize, int32 &size) { - size = READ_LE_UINT32(src); +uint32 DataIO::getSizeChunks(Common::SeekableReadStream &src) { + uint32 size = 0; - byte *data = new byte[size]; + uint32 chunkSize = 2, realSize; + while (chunkSize != 0xFFFF) { + src.skip(chunkSize - 2); + + chunkSize = src.readUint16LE(); + realSize = src.readUint16LE(); + + assert(chunkSize >= 4); + + size += realSize; + } + + assert(!src.eos()); + + src.seek(0); + + return size; +} + +byte *DataIO::unpack(Common::SeekableReadStream &src, int32 &size, uint8 compression, bool useMalloc) { + assert((compression == 1) || (compression == 2)); + + if (compression == 1) + size = src.readUint32LE(); + else if (compression == 2) + size = getSizeChunks(src); + + assert(size > 0); + + byte *data = 0; + if (useMalloc) + data = (byte *) malloc(size); + else + data = new byte[size]; + + if (compression == 1) + unpackChunk(src, data, size); + else if (compression == 2) + unpackChunks(src, data, size); - Common::MemoryReadStream srcStream(src + 4, srcSize - 4); - unpack(srcStream, data, size); return data; } -Common::SeekableReadStream *DataIO::unpack(Common::SeekableReadStream &src) { - uint32 size = src.readUint32LE(); +byte *DataIO::unpack(const byte *src, uint32 srcSize, int32 &size, uint8 compression) { + Common::MemoryReadStream srcStream(src, srcSize); - byte *data = (byte *) malloc(size); + return unpack(srcStream, size, compression, false); +} + +Common::SeekableReadStream *DataIO::unpack(Common::SeekableReadStream &src, uint8 compression) { + int32 size; + + byte *data = unpack(src, size, compression, true); + if (!data) + return 0; - unpack(src, data, size); return new Common::MemoryReadStream(data, size, DisposeAfterUse::YES); } -void DataIO::unpack(Common::SeekableReadStream &src, byte *dest, uint32 size) { +void DataIO::unpackChunks(Common::SeekableReadStream &src, byte *dest, uint32 size) { + uint32 chunkSize = 0, realSize; + while (chunkSize != 0xFFFF) { + uint32 pos = src.pos(); + + chunkSize = src.readUint16LE(); + realSize = src.readUint16LE(); + + assert(chunkSize >= 4); + assert(size >= realSize); + + src.skip(2); + + unpackChunk(src, dest, realSize); + + if (chunkSize != 0xFFFF) + src.seek(pos + chunkSize + 2); + + size -= realSize; + dest += realSize; + } +} + +void DataIO::unpackChunk(Common::SeekableReadStream &src, byte *dest, uint32 size) { byte *tmpBuf = new byte[4114]; assert(tmpBuf); @@ -194,9 +260,9 @@ DataIO::Archive *DataIO::openArchive(const Common::String &name) { archive->file.read(fileName, 13); fileName[13] = '\0'; - file.size = archive->file.readUint32LE(); - file.offset = archive->file.readUint32LE(); - file.packed = archive->file.readByte() != 0; + file.size = archive->file.readUint32LE(); + file.offset = archive->file.readUint32LE(); + file.compression = archive->file.readByte() != 0; // Replacing cyrillic characters Util::replaceChar(fileName, (char) 0x85, 'E'); @@ -209,8 +275,8 @@ DataIO::Archive *DataIO::openArchive(const Common::String &name) { // Geisha use 0ot files, which are compressed TOT files without the packed byte set. if (file.name.hasSuffix(".0OT")) { - file.name.setChar(file.name.size() - 3, 'T'); - file.packed = true; + file.name.setChar('T', file.name.size() - 3); + file.compression = 2; } file.archive = archive; @@ -254,7 +320,7 @@ int32 DataIO::fileSize(const Common::String &name) { // Try to find the file in the archives File *file = findFile(name); if (file) { - if (!file->packed) + if (file->compression == 0) return file->size; // Sanity checks @@ -264,6 +330,10 @@ int32 DataIO::fileSize(const Common::String &name) { // Read the full, unpacked size file->archive->file.seek(file->offset); + + if (file->compression == 2) + file->archive->file.skip(4); + return file->archive->file.readUint32LE(); } @@ -346,10 +416,10 @@ Common::SeekableReadStream *DataIO::getFile(File &file) { Common::SeekableReadStream *rawData = new Common::SafeSubReadStream(&file.archive->file, file.offset, file.offset + file.size); - if (!file.packed) + if (file.compression == 0) return rawData; - Common::SeekableReadStream *unpackedData = unpack(*rawData); + Common::SeekableReadStream *unpackedData = unpack(*rawData, file.compression); delete rawData; @@ -374,10 +444,10 @@ byte *DataIO::getFile(File &file, int32 &size) { return 0; } - if (!file.packed) + if (file.compression == 0) return rawData; - byte *unpackedData = unpack(rawData, file.size, size); + byte *unpackedData = unpack(rawData, file.size, size, file.compression); delete[] rawData; diff --git a/engines/gob/dataio.h b/engines/gob/dataio.h index d95f001097..adf0786389 100644 --- a/engines/gob/dataio.h +++ b/engines/gob/dataio.h @@ -58,8 +58,8 @@ public: Common::SeekableReadStream *getFile(const Common::String &name); byte *getFile(const Common::String &name, int32 &size); - static byte *unpack(const byte *src, uint32 srcSize, int32 &size); - static Common::SeekableReadStream *unpack(Common::SeekableReadStream &src); + static byte *unpack(const byte *src, uint32 srcSize, int32 &size, uint8 compression = 1); + static Common::SeekableReadStream *unpack(Common::SeekableReadStream &src, uint8 compression = 1); private: static const int kMaxArchives = 8; @@ -70,12 +70,12 @@ private: Common::String name; uint32 size; uint32 offset; - bool packed; + uint8 compression; Archive *archive; File(); - File(const Common::String &n, uint32 s, uint32 o, bool p, Archive &a); + File(const Common::String &n, uint32 s, uint32 o, uint8 c, Archive &a); }; typedef Common::HashMap<Common::String, File, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> FileMap; @@ -99,7 +99,12 @@ private: Common::SeekableReadStream *getFile(File &file); byte *getFile(File &file, int32 &size); - static void unpack(Common::SeekableReadStream &src, byte *dest, uint32 size); + static byte *unpack(Common::SeekableReadStream &src, int32 &size, uint8 compression, bool useMalloc); + + static uint32 getSizeChunks(Common::SeekableReadStream &src); + + static void unpackChunks(Common::SeekableReadStream &src, byte *dest, uint32 size); + static void unpackChunk (Common::SeekableReadStream &src, byte *dest, uint32 size); }; } // End of namespace Gob diff --git a/engines/gob/decfile.cpp b/engines/gob/decfile.cpp new file mode 100644 index 0000000000..f5910f0654 --- /dev/null +++ b/engines/gob/decfile.cpp @@ -0,0 +1,214 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/str.h" +#include "common/stream.h" +#include "common/substream.h" + +#include "gob/gob.h" +#include "gob/util.h" +#include "gob/dataio.h" +#include "gob/surface.h" +#include "gob/video.h" +#include "gob/rxyfile.h" +#include "gob/decfile.h" + +namespace Gob { + +DECFile::Layer::Layer() : surface(0), coordinates(0) { +} + +DECFile::Layer::~Layer() { + delete coordinates; + delete surface; +} + + +DECFile::DECFile(GobEngine *vm, const Common::String &fileName, + uint16 width, uint16 height, uint8 bpp) : _vm(vm), + _width(width), _height(height), _bpp(bpp), _hasPadding(false) { + + _backdrop = new Surface(_width, _height, _bpp); + + Common::SeekableReadStream *dec = _vm->_dataIO->getFile(fileName); + if (dec) { + Common::SeekableSubReadStreamEndian sub(dec, 0, dec->size(), false, DisposeAfterUse::YES); + + load(sub, fileName); + return; + } + + // File doesn't exist, try to open the big-endian'd alternate file + Common::String alternateFileName = fileName; + alternateFileName.setChar('_', 0); + + dec = _vm->_dataIO->getFile(alternateFileName); + if (dec) { + Common::SeekableSubReadStreamEndian sub(dec, 0, dec->size(), true, DisposeAfterUse::YES); + + // The big endian version pads a few fields to even size + _hasPadding = true; + + load(sub, fileName); + return; + } + + warning("DECFile::DECFile(): No such file \"%s\"", fileName.c_str()); +} + +DECFile::~DECFile() { + delete _backdrop; +} + +void DECFile::load(Common::SeekableSubReadStreamEndian &dec, const Common::String &fileName) { + dec.skip(2); // Unused + + int16 backdropCount = dec.readUint16(); + int16 layerCount = dec.readUint16(); + + // Sanity checks + if (backdropCount > 1) + warning("DECFile::load(): More than one backdrop (%d) in file \"%s\"", + backdropCount, fileName.c_str()); + if (layerCount < 1) + warning("DECFile::load(): Less than one layer (%d) in file \"%s\"", + layerCount, fileName.c_str()); + + // Load the backdrop + if (backdropCount > 0) { + loadBackdrop(dec); + + // We only support one backdrop, skip the rest + dec.skip((backdropCount - 1) * (13 + (_hasPadding ? 1 : 0))); + } + + // Load the layers + _layers.resize(MAX(0, layerCount - 1)); + for (LayerArray::iterator l = _layers.begin(); l != _layers.end(); ++l) + loadLayer(*l, dec); + + // Load the backdrop parts + if (backdropCount > 0) + loadParts(dec); +} + +void DECFile::loadBackdrop(Common::SeekableSubReadStreamEndian &dec) { + // Interestingly, DEC files reference "FOO.LBM" instead of "FOO.CMP" + Common::String file = Util::setExtension(Util::readString(dec, 13), ".CMP"); + if (_hasPadding) + dec.skip(1); + + if (file.empty() || !_vm->_dataIO->hasFile(file)) + return; + + _vm->_video->drawPackedSprite(file.c_str(), *_backdrop); +} + +void DECFile::loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &dec) { + Common::String file = Util::readString(dec, 13); + if (_hasPadding) + dec.skip(1); + + if (file.empty()) + return; + + Common::String fileRXY = Util::setExtension(file, ".RXY"); + Common::String fileCMP = Util::setExtension(file, ".CMP"); + if (!_vm->_dataIO->hasFile(fileRXY) || !_vm->_dataIO->hasFile(fileCMP)) + return; + + loadLayer(layer, fileRXY, fileCMP); +} + +void DECFile::loadLayer(Layer &layer, const Common::String &fileRXY, + const Common::String &fileCMP) { + + Common::SeekableReadStream *dataRXY = _vm->_dataIO->getFile(fileRXY); + if (!dataRXY) + return; + + layer.coordinates = new RXYFile(*dataRXY); + layer.surface = new Surface(_width, layer.coordinates->getHeight(), _bpp); + + _vm->_video->drawPackedSprite(fileCMP.c_str(), *layer.surface); +} + +void DECFile::loadParts(Common::SeekableSubReadStreamEndian &dec) { + dec.skip(13); // Name + if (_hasPadding) + dec.skip(1); + + dec.skip(13); // File? + if (_hasPadding) + dec.skip(1); + + uint16 partCount = dec.readUint16(); + + _parts.resize(partCount); + for (PartArray::iterator p = _parts.begin(); p != _parts.end(); ++p) + loadPart(*p, dec); +} + +void DECFile::loadPart(Part &part, Common::SeekableSubReadStreamEndian &dec) { + part.layer = dec.readByte() - 1; + part.part = dec.readByte(); + + dec.skip(1); // Unknown + + part.x = dec.readUint16(); + part.y = dec.readUint16(); + + part.transp = dec.readByte() != 0; +} + +void DECFile::draw(Surface &dest) const { + drawBackdrop(dest); + + for (PartArray::const_iterator p = _parts.begin(); p != _parts.end(); ++p) + drawLayer(dest, p->layer, p->part, p->x, p->y, p->transp ? 0 : -1); +} + +void DECFile::drawBackdrop(Surface &dest) const { + dest.blit(*_backdrop); +} + +void DECFile::drawLayer(Surface &dest, uint16 layer, uint16 part, + uint16 x, uint16 y, int32 transp) const { + + if (layer >= _layers.size()) + return; + + const Layer &l = _layers[layer]; + if (!l.surface || !l.coordinates) + return; + + if (part >= l.coordinates->size()) + return; + + const RXYFile::Coordinates &c = (*l.coordinates)[part]; + if (c.left == 0xFFFF) + return; + + dest.blit(*l.surface, c.left, c.top, c.right, c.bottom, x, y, transp); +} + +} // End of namespace Gob diff --git a/engines/gob/decfile.h b/engines/gob/decfile.h new file mode 100644 index 0000000000..31d90180d3 --- /dev/null +++ b/engines/gob/decfile.h @@ -0,0 +1,111 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GOB_DECFILE_H +#define GOB_DECFILE_H + +#include "common/system.h" + +namespace Common { + class String; + class SeekableSubReadStreamEndian; +} + +namespace Gob { + +class GobEngine; +class Surface; +class RXYFile; + +/** A DEC file, describing a "decal" (background). + * + * Used in hardcoded "actiony" parts of gob games. + * The principle is similar to a Static in Scenery (see scenery.cpp), but + * instead of referencing indices in the sprites array, DECs reference sprites + * directly by filename. + */ +class DECFile { +public: + DECFile(GobEngine *vm, const Common::String &fileName, + uint16 width, uint16 height, uint8 bpp = 1); + ~DECFile(); + + /** Draw the background, including all default layer parts. */ + void draw(Surface &dest) const; + + /** Explicitly draw the backdrop. */ + void drawBackdrop(Surface &dest) const; + + /** Explicitly draw a layer part. */ + void drawLayer(Surface &dest, uint16 layer, uint16 part, + uint16 x, uint16 y, int32 transp = -1) const; + +private: + struct Layer { + Surface *surface; ///< The surface containing the layer sprite. + RXYFile *coordinates; ///< The coordinates describing the layer sprite parts. + + Layer(); + ~Layer(); + }; + + struct Part { + uint8 layer; + uint8 part; + + uint16 x; + uint16 y; + bool transp; + }; + + typedef Common::Array<Layer> LayerArray; + typedef Common::Array<Part> PartArray; + + GobEngine *_vm; + + uint16 _width; + uint16 _height; + uint8 _bpp; + + byte _hasPadding; + + Surface *_backdrop; + + LayerArray _layers; + PartArray _parts; + + + void load(Common::SeekableSubReadStreamEndian &dec, const Common::String &fileName); + + void loadBackdrop(Common::SeekableSubReadStreamEndian &dec); + + void loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &dec); + void loadLayer(Layer &layer, const Common::String &fileRXY, + const Common::String &fileCMP); + + void loadParts(Common::SeekableSubReadStreamEndian &dec); + void loadPart(Part &part, Common::SeekableSubReadStreamEndian &dec); +}; + +} // End of namespace Gob + +#endif // GOB_DECFILE_H diff --git a/engines/gob/detection_tables.h b/engines/gob/detection_tables.h index 1c9811fe9e..9c13b4f7b8 100644 --- a/engines/gob/detection_tables.h +++ b/engines/gob/detection_tables.h @@ -2496,7 +2496,7 @@ static const GOBGameDescription gameDescriptions[] = { GUIO_NOSUBTITLES | GUIO_NOSPEECH }, kGameTypeGeisha, - kFeaturesNone, + kFeaturesEGA | kFeaturesAdLib, "disk1.stk", "intro.tot", 0 }, { @@ -2510,7 +2510,21 @@ static const GOBGameDescription gameDescriptions[] = { GUIO_NOSUBTITLES | GUIO_NOSPEECH }, kGameTypeGeisha, - kFeaturesNone, + kFeaturesEGA | kFeaturesAdLib, + "disk1.stk", "intro.tot", 0 + }, + { + { + "geisha", + "", + AD_ENTRY1s("disk1.stk", "e5892f00917c62423e93f5fd9920cf47", 208120), + UNK_LANG, + kPlatformAmiga, + ADGF_NO_FLAGS, + GUIO_NOSUBTITLES | GUIO_NOSPEECH + }, + kGameTypeGeisha, + kFeaturesEGA, "disk1.stk", "intro.tot", 0 }, { @@ -5154,7 +5168,7 @@ static const GOBGameDescription fallbackDescs[] = { GUIO_NOSUBTITLES | GUIO_NOSPEECH }, kGameTypeGeisha, - kFeaturesNone, + kFeaturesEGA, "disk1.stk", "intro.tot", 0 }, { //22 diff --git a/engines/gob/draw_v1.cpp b/engines/gob/draw_v1.cpp index 3873a99d5f..064c74958a 100644 --- a/engines/gob/draw_v1.cpp +++ b/engines/gob/draw_v1.cpp @@ -44,8 +44,8 @@ void Draw_v1::initScreen() { _backSurface = _vm->_video->initSurfDesc(320, 200); _frontSurface = _vm->_global->_primarySurfDesc; - _cursorSprites = _vm->_video->initSurfDesc(32, 16, 2); - _scummvmCursor = _vm->_video->initSurfDesc(16, 16, SCUMMVM_CURSOR); + _cursorSprites = _vm->_video->initSurfDesc(_cursorWidth * 2, _cursorHeight, 2); + _scummvmCursor = _vm->_video->initSurfDesc(_cursorWidth , _cursorHeight, SCUMMVM_CURSOR); } void Draw_v1::closeScreen() { diff --git a/engines/gob/game.cpp b/engines/gob/game.cpp index 926027e15d..502a440005 100644 --- a/engines/gob/game.cpp +++ b/engines/gob/game.cpp @@ -492,9 +492,6 @@ void Game::prepareStart() { _vm->_draw->_noInvalidated = true; _vm->_draw->_applyPal = false; _vm->_draw->_paletteCleared = false; - _vm->_draw->_cursorWidth = 16; - _vm->_draw->_cursorHeight = 16; - _vm->_draw->_transparentCursor = 1; for (int i = 0; i < 40; i++) { _vm->_draw->_cursorAnimLow[i] = -1; @@ -586,7 +583,11 @@ void Game::playTot(int16 function) { WRITE_VAR(13, _vm->_global->_useMouse); WRITE_VAR(14, _vm->_global->_soundFlags); WRITE_VAR(15, _vm->_global->_fakeVideoMode); - WRITE_VAR(16, _vm->_global->_language); + + if (_vm->getGameType() == kGameTypeGeisha) + WRITE_VAR(57, _vm->_global->_language); + else + WRITE_VAR(16, _vm->_global->_language); // WORKAROUND: Inca2 seems to depend on that variable to be cleared if (_vm->getGameType() == kGameTypeInca2) diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp index ea7e329480..51a117b7ec 100644 --- a/engines/gob/gob.cpp +++ b/engines/gob/gob.cpp @@ -402,7 +402,6 @@ bool GobEngine::initGameParts() { _game = new Game(this); switch (_gameType) { - case kGameTypeGeisha: case kGameTypeGob1: _init = new Init_v1(this); _video = new Video_v1(this); @@ -414,6 +413,18 @@ bool GobEngine::initGameParts() { _scenery = new Scenery_v1(this); break; + case kGameTypeGeisha: + _init = new Init_Geisha(this); + _video = new Video_v1(this); + _inter = new Inter_Geisha(this); + _mult = new Mult_v1(this); + _draw = new Draw_v1(this); + _map = new Map_v1(this); + _goblin = new Goblin_v1(this); + _scenery = new Scenery_v1(this); + _saveLoad = new SaveLoad_Geisha(this, _targetName.c_str()); + break; + case kGameTypeFascination: _init = new Init_Fascination(this); _video = new Video_v2(this); diff --git a/engines/gob/hotspots.cpp b/engines/gob/hotspots.cpp index f3647af76e..5e0af847de 100644 --- a/engines/gob/hotspots.cpp +++ b/engines/gob/hotspots.cpp @@ -202,6 +202,8 @@ Hotspots::Hotspots(GobEngine *vm) : _vm(vm) { _currentKey = 0; _currentIndex = 0; _currentId = 0; + _currentX = 0; + _currentY = 0; } Hotspots::~Hotspots() { @@ -385,6 +387,8 @@ void Hotspots::push(uint8 all, bool force) { backup.key = _currentKey; backup.id = _currentId; backup.index = _currentIndex; + backup.x = _currentX; + backup.y = _currentY; backup.hotspots = new Hotspot[size]; @@ -415,6 +419,8 @@ void Hotspots::push(uint8 all, bool force) { _currentKey = 0; _currentId = 0; _currentIndex = 0; + _currentX = 0; + _currentY = 0; _stack.push(backup); } @@ -445,6 +451,8 @@ void Hotspots::pop() { _currentKey = backup.key; _currentId = backup.id; _currentIndex = backup.index; + _currentX = backup.x; + _currentY = backup.y; delete[] backup.hotspots; } @@ -498,6 +506,9 @@ void Hotspots::enter(uint16 index) { (spot.getState() == (kStateFilled | kStateType2))) WRITE_VAR(17, -(spot.id & 0x0FFF)); + _currentX = _vm->_global->_inter_mouseX; + _currentY = _vm->_global->_inter_mouseY; + if (spot.funcEnter != 0) call(spot.funcEnter); } @@ -649,9 +660,22 @@ bool Hotspots::checkHotspotChanged() { // Get the current hotspot key = checkMouse(kTypeMove, id, index); - if (key == _currentKey) - // Nothing changed => nothing to do + uint16 mouseX = _vm->_global->_inter_mouseX; + uint16 mouseY = _vm->_global->_inter_mouseY; + + if (key == _currentKey) { + // Still the same hotspot, just update the mouse position + + _currentX = mouseX; + _currentY = mouseY; return false; + } + + // In Geisha, no move hotspot changes should occur when + // we didn't actually move the mouse + if (_vm->getGameType() == kGameTypeGeisha) + if ((mouseX == _currentX) && (mouseY == _currentY)) + return false; // Leave the old area if (isValid(_currentKey, _currentId,_currentIndex)) @@ -660,6 +684,8 @@ bool Hotspots::checkHotspotChanged() { _currentKey = key; _currentId = id; _currentIndex = index; + _currentX = mouseX; + _currentY = mouseY; // Enter the new one if (isValid(key, id, index)) @@ -775,7 +801,8 @@ uint16 Hotspots::check(uint8 handleMouse, int16 delay, uint16 &id, uint16 &index _vm->_draw->blitCursor(); - if ((key != _currentKey) && (_vm->getGameType() != kGameTypeFascination)) + if ((key != _currentKey) && (_vm->getGameType() != kGameTypeFascination) && + (_vm->getGameType() != kGameTypeGeisha)) // If the hotspot changed, leave the old one // Code not present in Fascination executables leave(_currentIndex); @@ -1348,12 +1375,12 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs, inputs[inputCount].str = 0; if ((type >= kTypeInput2NoLeave) && (type <= kTypeInput3Leave)) { - uint16 length = _vm->_game->_script->readUint16(); + inputs[inputCount].length = _vm->_game->_script->readUint16(); inputs[inputCount].str = (const char *)(_vm->_game->_script->getData() + _vm->_game->_script->pos()); - _vm->_game->_script->skip(length); + _vm->_game->_script->skip(inputs[inputCount].length); } if (left == 0xFFFF) { diff --git a/engines/gob/hotspots.h b/engines/gob/hotspots.h index 8d26ad224e..b348f9cd70 100644 --- a/engines/gob/hotspots.h +++ b/engines/gob/hotspots.h @@ -158,6 +158,8 @@ private: uint32 key; uint32 id; uint32 index; + uint16 x; + uint16 y; }; struct InputDesc { @@ -178,6 +180,8 @@ private: uint16 _currentKey; uint16 _currentIndex; uint16 _currentId; + uint16 _currentX; + uint16 _currentY; /** Add a hotspot, returning the new index. */ uint16 add(const Hotspot &hotspot); diff --git a/engines/gob/init.cpp b/engines/gob/init.cpp index 90c2a1602a..a61261f355 100644 --- a/engines/gob/init.cpp +++ b/engines/gob/init.cpp @@ -40,7 +40,7 @@ namespace Gob { -const char *Init::_fontNames[] = { "jeulet1.let", "jeulet2.let", "jeucar1.let", "jeumath.let" }; +const char *const Init::_fontNames[] = { "jeulet1.let", "jeulet2.let", "jeucar1.let", "jeumath.let" }; Init::Init(GobEngine *vm) : _vm(vm) { _palDesc = 0; diff --git a/engines/gob/init.h b/engines/gob/init.h index 1cb2904099..ac460fd654 100644 --- a/engines/gob/init.h +++ b/engines/gob/init.h @@ -41,7 +41,7 @@ public: protected: Video::PalDesc *_palDesc; - static const char *_fontNames[4]; + static const char *const _fontNames[4]; GobEngine *_vm; void cleanup(); @@ -56,6 +56,14 @@ public: void initVideo(); }; +class Init_Geisha : public Init_v1 { +public: + Init_Geisha(GobEngine *vm); + ~Init_Geisha(); + + void initVideo(); +}; + class Init_v2 : public Init_v1 { public: Init_v2(GobEngine *vm); diff --git a/engines/gob/init_geisha.cpp b/engines/gob/init_geisha.cpp new file mode 100644 index 0000000000..01081a5af6 --- /dev/null +++ b/engines/gob/init_geisha.cpp @@ -0,0 +1,47 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/endian.h" + +#include "gob/gob.h" +#include "gob/init.h" +#include "gob/global.h" +#include "gob/draw.h" +#include "gob/video.h" + +namespace Gob { + +Init_Geisha::Init_Geisha(GobEngine *vm) : Init_v1(vm) { +} + +Init_Geisha::~Init_Geisha() { +} + +void Init_Geisha::initVideo() { + Init_v1::initVideo(); + + _vm->_draw->_cursorWidth = 16; + _vm->_draw->_cursorHeight = 23; + _vm->_draw->_transparentCursor = 1; +} + +} // End of namespace Gob diff --git a/engines/gob/init_v1.cpp b/engines/gob/init_v1.cpp index 6772a13eb0..25d521aca6 100644 --- a/engines/gob/init_v1.cpp +++ b/engines/gob/init_v1.cpp @@ -52,6 +52,10 @@ void Init_v1::initVideo() { _vm->_global->_pPaletteDesc->unused2 = _vm->_global->_unusedPalette2; _vm->_video->initSurfDesc(320, 200, PRIMARY_SURFACE); + + _vm->_draw->_cursorWidth = 16; + _vm->_draw->_cursorHeight = 16; + _vm->_draw->_transparentCursor = 1; } } // End of namespace Gob diff --git a/engines/gob/init_v2.cpp b/engines/gob/init_v2.cpp index f10d586a34..1289d561ea 100644 --- a/engines/gob/init_v2.cpp +++ b/engines/gob/init_v2.cpp @@ -62,6 +62,10 @@ void Init_v2::initVideo() { _vm->_global->_pPaletteDesc->unused2 = _vm->_global->_unusedPalette2; _vm->_video->initSurfDesc(_vm->_video->_surfWidth, _vm->_video->_surfHeight, PRIMARY_SURFACE); + + _vm->_draw->_cursorWidth = 16; + _vm->_draw->_cursorHeight = 16; + _vm->_draw->_transparentCursor = 1; } } // End of namespace Gob diff --git a/engines/gob/inter.h b/engines/gob/inter.h index b1689e8d9e..6fd4dc2187 100644 --- a/engines/gob/inter.h +++ b/engines/gob/inter.h @@ -33,6 +33,11 @@ namespace Gob { +namespace Geisha { + class Diving; + class Penetration; +} + // This is to help devices with small memory (PDA, smartphones, ...) // to save a bit of memory used by opcode names in the Gob engine. #ifndef REDUCE_MEMORY_USAGE @@ -334,6 +339,40 @@ protected: void manipulateMap(int16 xPos, int16 yPos, int16 item); }; +class Inter_Geisha : public Inter_v1 { +public: + Inter_Geisha(GobEngine *vm); + virtual ~Inter_Geisha(); + +protected: + virtual void setupOpcodesDraw(); + virtual void setupOpcodesFunc(); + virtual void setupOpcodesGob(); + + void oGeisha_loadCursor(OpFuncParams ¶ms); + void oGeisha_loadTot(OpFuncParams ¶ms); + void oGeisha_goblinFunc(OpFuncParams ¶ms); + void oGeisha_loadSound(OpFuncParams ¶ms); + void oGeisha_checkData(OpFuncParams ¶ms); + void oGeisha_readData(OpFuncParams ¶ms); + void oGeisha_writeData(OpFuncParams ¶ms); + + void oGeisha_gamePenetration(OpGobParams ¶ms); + void oGeisha_gameDiving(OpGobParams ¶ms); + void oGeisha_loadTitleMusic(OpGobParams ¶ms); + void oGeisha_playMusic(OpGobParams ¶ms); + void oGeisha_stopMusic(OpGobParams ¶ms); + + void oGeisha_caress1(OpGobParams ¶ms); + void oGeisha_caress2(OpGobParams ¶ms); + + int16 loadSound(int16 slot); + +private: + Geisha::Diving *_diving; + Geisha::Penetration *_penetration; +}; + class Inter_v2 : public Inter_v1 { public: Inter_v2(GobEngine *vm); diff --git a/engines/gob/inter_bargon.cpp b/engines/gob/inter_bargon.cpp index c2e6a2e912..134203fa9d 100644 --- a/engines/gob/inter_bargon.cpp +++ b/engines/gob/inter_bargon.cpp @@ -120,7 +120,7 @@ void Inter_Bargon::oBargon_intro2(OpGobParams ¶ms) { SurfacePtr surface; SoundDesc samples[4]; int16 comp[5] = { 0, 1, 2, 3, -1 }; - static const char *sndFiles[] = {"1INTROII.snd", "2INTROII.snd", "1INTRO3.snd", "2INTRO3.snd"}; + static const char *const sndFiles[] = {"1INTROII.snd", "2INTROII.snd", "1INTRO3.snd", "2INTRO3.snd"}; surface = _vm->_video->initSurfDesc(320, 200); _vm->_video->drawPackedSprite("2ille.ims", *surface); @@ -169,8 +169,8 @@ void Inter_Bargon::oBargon_intro3(OpGobParams ¶ms) { SoundDesc samples[2]; int16 comp[3] = { 0, 1, -1 }; byte *palettes[4]; - static const char *sndFiles[] = {"1INTROIV.snd", "2INTROIV.snd"}; - static const char *palFiles[] = {"2ou2.clt", "2ou3.clt", "2ou4.clt", "2ou5.clt"}; + static const char *const sndFiles[] = {"1INTROIV.snd", "2INTROIV.snd"}; + static const char *const palFiles[] = {"2ou2.clt", "2ou3.clt", "2ou4.clt", "2ou5.clt"}; int32 size; diff --git a/engines/gob/inter_geisha.cpp b/engines/gob/inter_geisha.cpp new file mode 100644 index 0000000000..c5b91a484b --- /dev/null +++ b/engines/gob/inter_geisha.cpp @@ -0,0 +1,312 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/endian.h" +#include "common/str.h" +#include "common/translation.h" + +#include "gui/message.h" + +#include "gob/gob.h" +#include "gob/inter.h" +#include "gob/dataio.h" +#include "gob/script.h" +#include "gob/resources.h" +#include "gob/game.h" +#include "gob/draw.h" +#include "gob/video.h" +#include "gob/save/saveload.h" +#include "gob/sound/sound.h" +#include "gob/sound/sounddesc.h" + +#include "gob/minigames/geisha/diving.h" +#include "gob/minigames/geisha/penetration.h" + +namespace Gob { + +#define OPCODEVER Inter_Geisha +#define OPCODEDRAW(i, x) _opcodesDraw[i]._OPCODEDRAW(OPCODEVER, x) +#define OPCODEFUNC(i, x) _opcodesFunc[i]._OPCODEFUNC(OPCODEVER, x) +#define OPCODEGOB(i, x) _opcodesGob[i]._OPCODEGOB(OPCODEVER, x) + +Inter_Geisha::Inter_Geisha(GobEngine *vm) : Inter_v1(vm), + _diving(0), _penetration(0) { + + _diving = new Geisha::Diving(vm); + _penetration = new Geisha::Penetration(vm); +} + +Inter_Geisha::~Inter_Geisha() { + delete _penetration; + delete _diving; +} + +void Inter_Geisha::setupOpcodesDraw() { + Inter_v1::setupOpcodesDraw(); +} + +void Inter_Geisha::setupOpcodesFunc() { + Inter_v1::setupOpcodesFunc(); + + OPCODEFUNC(0x03, oGeisha_loadCursor); + OPCODEFUNC(0x12, oGeisha_loadTot); + OPCODEFUNC(0x25, oGeisha_goblinFunc); + OPCODEFUNC(0x3A, oGeisha_loadSound); + OPCODEFUNC(0x3F, oGeisha_checkData); + OPCODEFUNC(0x4D, oGeisha_readData); + OPCODEFUNC(0x4E, oGeisha_writeData); + + OPCODEGOB(0, oGeisha_gamePenetration); + OPCODEGOB(1, oGeisha_gameDiving); + OPCODEGOB(2, oGeisha_loadTitleMusic); + OPCODEGOB(3, oGeisha_playMusic); + OPCODEGOB(4, oGeisha_stopMusic); + OPCODEGOB(6, oGeisha_caress1); + OPCODEGOB(7, oGeisha_caress2); +} + +void Inter_Geisha::setupOpcodesGob() { +} + +void Inter_Geisha::oGeisha_loadCursor(OpFuncParams ¶ms) { + if (_vm->_game->_script->peekByte(1) & 0x80) + warning("Geisha Stub: oGeisha_loadCursor: script[1] & 0x80"); + + o1_loadCursor(params); +} + +struct TOTTransition { + const char *to; + const char *from; + int32 offset; +}; + +static const TOTTransition kTOTTransitions[] = { + {"chambre.tot", "photo.tot" , 1801}, + {"mo.tot" , "chambre.tot", 13580}, + {"chambre.tot", "mo.tot" , 564}, + {"hard.tot" , "chambre.tot", 13917}, + {"carte.tot" , "hard.tot" , 17926}, + {"chambre.tot", "carte.tot" , 14609}, + {"chambre.tot", "mo.tot" , 3658}, + {"streap.tot" , "chambre.tot", 14652}, + {"bonsai.tot" , "porte.tot" , 2858}, + {"lit.tot" , "napa.tot" , 3380}, + {"oko.tot" , "chambre.tot", 14146}, + {"chambre.tot", "oko.tot" , 2334} +}; + +void Inter_Geisha::oGeisha_loadTot(OpFuncParams ¶ms) { + o1_loadTot(params); + + // WORKAROUND: Geisha often displays text while it loads a new TOT. + // Back in the days, this took long enough so that the text + // could be read. Since this isn't the case anymore, we'll + // wait for the user to press a key or click the mouse. + bool needWait = false; + + for (int i = 0; i < ARRAYSIZE(kTOTTransitions); i++) + if ((_vm->_game->_script->pos() == kTOTTransitions[i].offset) && + (_vm->_game->_totToLoad == kTOTTransitions[i].to) && + (_vm->_game->_curTotFile == kTOTTransitions[i].from)) { + + needWait = true; + break; + } + + if (needWait) + while (!_vm->_util->keyPressed()) + _vm->_util->longDelay(1); +} + +void Inter_Geisha::oGeisha_loadSound(OpFuncParams ¶ms) { + loadSound(-1); +} + +void Inter_Geisha::oGeisha_goblinFunc(OpFuncParams ¶ms) { + OpGobParams gobParams; + int16 cmd; + + cmd = _vm->_game->_script->readInt16(); + + gobParams.paramCount = _vm->_game->_script->readInt16(); + gobParams.extraData = cmd; + + executeOpcodeGob(cmd, gobParams); +} + +int16 Inter_Geisha::loadSound(int16 slot) { + const char *sndFile = _vm->_game->_script->evalString(); + + if (slot == -1) + slot = _vm->_game->_script->readValExpr(); + + SoundDesc *sample = _vm->_sound->sampleGetBySlot(slot); + if (!sample) + return 0; + + int32 dataSize; + byte *dataPtr = _vm->_dataIO->getFile(sndFile, dataSize); + if (!dataPtr) + return 0; + + if (!sample->load(SOUND_SND, dataPtr, dataSize)) { + delete[] dataPtr; + return 0; + } + + return 0; +} + +void Inter_Geisha::oGeisha_checkData(OpFuncParams ¶ms) { + Common::String file = _vm->_game->_script->evalString(); + int16 varOff = _vm->_game->_script->readVarIndex(); + + file.toLowercase(); + if (file.hasSuffix(".0ot")) + file.setChar('t', file.size() - 3); + + bool exists = false; + + SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file.c_str()); + if (mode == SaveLoad::kSaveModeNone) { + + exists = _vm->_dataIO->hasFile(file); + if (!exists) + warning("File \"%s\" not found", file.c_str()); + + } else if (mode == SaveLoad::kSaveModeSave) + exists = _vm->_saveLoad->getSize(file.c_str()) >= 0; + else if (mode == SaveLoad::kSaveModeExists) + exists = true; + + WRITE_VAR_OFFSET(varOff, exists ? 50 : (uint32)-1); +} + +void Inter_Geisha::oGeisha_readData(OpFuncParams ¶ms) { + const char *file = _vm->_game->_script->evalString(); + + uint16 dataVar = _vm->_game->_script->readVarIndex(); + + debugC(2, kDebugFileIO, "Read from file \"%s\" (%d)", file, dataVar); + + WRITE_VAR(1, 1); + + SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file); + if (mode == SaveLoad::kSaveModeSave) { + + if (!_vm->_saveLoad->load(file, dataVar, 0, 0)) { + + GUI::MessageDialog dialog(_("Failed to load game state from file.")); + dialog.runModal(); + + } else + WRITE_VAR(1, 0); + + return; + + } else if (mode == SaveLoad::kSaveModeIgnore) { + WRITE_VAR(1, 0); + return; + } + + warning("Attempted to read from file \"%s\"", file); +} + +void Inter_Geisha::oGeisha_writeData(OpFuncParams ¶ms) { + const char *file = _vm->_game->_script->evalString(); + + int16 dataVar = _vm->_game->_script->readVarIndex(); + int32 size = _vm->_game->_script->readValExpr(); + + debugC(2, kDebugFileIO, "Write to file \"%s\" (%d, %d bytes)", file, dataVar, size); + + WRITE_VAR(1, 1); + + SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file); + if (mode == SaveLoad::kSaveModeSave) { + + if (!_vm->_saveLoad->save(file, dataVar, size, 0)) { + + GUI::MessageDialog dialog(_("Failed to save game state to file.")); + dialog.runModal(); + + } else + WRITE_VAR(1, 0); + + } else if (mode == SaveLoad::kSaveModeIgnore) { + WRITE_VAR(1, 0); + return; + } else if (mode == SaveLoad::kSaveModeNone) + warning("Attempted to write to file \"%s\"", file); + + WRITE_VAR(1, 0); +} + +void Inter_Geisha::oGeisha_gamePenetration(OpGobParams ¶ms) { + uint16 var1 = _vm->_game->_script->readUint16(); + uint16 var2 = _vm->_game->_script->readUint16(); + uint16 var3 = _vm->_game->_script->readUint16(); + uint16 resultVar = _vm->_game->_script->readUint16(); + + bool result = _penetration->play(var1, var2, var3); + + WRITE_VAR_UINT32(resultVar, result ? 1 : 0); +} + +void Inter_Geisha::oGeisha_gameDiving(OpGobParams ¶ms) { + uint16 playerCount = _vm->_game->_script->readUint16(); + uint16 hasPearlLocation = _vm->_game->_script->readUint16(); + uint16 resultVar = _vm->_game->_script->readUint16(); + + bool result = _diving->play(playerCount, hasPearlLocation); + + WRITE_VAR_UINT32(resultVar, result ? 1 : 0); +} + +void Inter_Geisha::oGeisha_loadTitleMusic(OpGobParams ¶ms) { + _vm->_sound->adlibLoadTBR("geisha.tbr"); + _vm->_sound->adlibLoadMDY("geisha.mdy"); +} + +void Inter_Geisha::oGeisha_playMusic(OpGobParams ¶ms) { + // TODO: The MDYPlayer is still broken! + warning("Geisha Stub: oGeisha_playMusic"); + // _vm->_sound->adlibPlay(); +} + +void Inter_Geisha::oGeisha_stopMusic(OpGobParams ¶ms) { + _vm->_sound->adlibStop(); + _vm->_sound->adlibUnload(); +} + +void Inter_Geisha::oGeisha_caress1(OpGobParams ¶ms) { + if (_vm->_draw->_spritesArray[0]) + _vm->_video->drawPackedSprite("hp1.cmp", *_vm->_draw->_spritesArray[0]); +} + +void Inter_Geisha::oGeisha_caress2(OpGobParams ¶ms) { + if (_vm->_draw->_spritesArray[1]) + _vm->_video->drawPackedSprite("hpsc1.cmp", *_vm->_draw->_spritesArray[1]); +} + +} // End of namespace Gob diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp index 47b0beaf63..0eb8be1a03 100644 --- a/engines/gob/inter_v1.cpp +++ b/engines/gob/inter_v1.cpp @@ -658,6 +658,20 @@ void Inter_v1::o1_callSub(OpFuncParams ¶ms) { return; } + // A cheat to get around the stupid mastermind puzzle in Geisha, + // while we're still testing it + if ((_vm->getGameType() == kGameTypeGeisha) && (offset == 12934) && + _vm->isCurrentTot("hard.tot") && _vm->_inter->_variables) { + + uint32 digit1 = READ_VARO_UINT32(0x768); + uint32 digit2 = READ_VARO_UINT32(0x76C); + uint32 digit3 = READ_VARO_UINT32(0x770); + uint32 digit4 = READ_VARO_UINT32(0x774); + uint32 digit5 = READ_VARO_UINT32(0x778); + + warning("Mastermind solution: %d %d %d %d %d", digit1, digit2, digit3, digit4, digit5); + } + // Skipping the copy protection screen in Gobliiins if (!_vm->_copyProtection && (_vm->getGameType() == kGameTypeGob1) && (offset == 3905) && _vm->isCurrentTot(_vm->_startTot)) { @@ -1094,6 +1108,8 @@ void Inter_v1::o1_palLoad(OpFuncParams ¶ms) { _vm->_draw->_vgaPalette[i].green = _vm->_game->_script->readByte(); _vm->_draw->_vgaPalette[i].blue = _vm->_game->_script->readByte(); } + + memcpy(_vm->_draw->_vgaSmallPalette, _vm->_draw->_vgaPalette, 16 * 3); break; case 53: diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp index 589328dfdb..505993ee4d 100644 --- a/engines/gob/inter_v6.cpp +++ b/engines/gob/inter_v6.cpp @@ -21,7 +21,6 @@ */ #include "common/str.h" -#include "graphics/dither.h" #include "gob/gob.h" #include "gob/inter.h" diff --git a/engines/gob/minigames/geisha/diving.cpp b/engines/gob/minigames/geisha/diving.cpp new file mode 100644 index 0000000000..0d216abf43 --- /dev/null +++ b/engines/gob/minigames/geisha/diving.cpp @@ -0,0 +1,155 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/list.h" + +#include "gob/global.h" +#include "gob/util.h" +#include "gob/draw.h" +#include "gob/video.h" +#include "gob/decfile.h" +#include "gob/anifile.h" + +#include "gob/minigames/geisha/evilfish.h" +#include "gob/minigames/geisha/diving.h" + +namespace Gob { + +namespace Geisha { + +Diving::Diving(GobEngine *vm) : _vm(vm), _background(0), + _objects(0), _gui(0), _oko(0), _lungs(0), _heart(0) { + +} + +Diving::~Diving() { + deinit(); +} + +bool Diving::play(uint16 playerCount, bool hasPearlLocation) { + init(); + initScreen(); + + _vm->_draw->blitInvalidated(); + _vm->_video->retrace(); + + EvilFish shark(*_objects, 320, 0, 14, 8, 9, 3); + + Common::List<ANIObject *> objects; + + objects.push_back(_water); + objects.push_back(&shark); + + shark.enter(EvilFish::kDirectionLeft, 90); + + while (!_vm->_util->keyPressed() && !_vm->shouldQuit()) { + int16 left, top, right, bottom; + + // Clear the previous animation frames + for (Common::List<ANIObject *>::iterator o = objects.reverse_begin(); + o != objects.end(); --o) { + + (*o)->clear(*_vm->_draw->_backSurface, left, top, right, bottom); + _vm->_draw->dirtiedRect(_vm->_draw->_backSurface, left, top, right, bottom); + } + + // Draw the current animation frames + for (Common::List<ANIObject *>::iterator o = objects.begin(); + o != objects.end(); ++o) { + + (*o)->draw(*_vm->_draw->_backSurface, left, top, right, bottom); + _vm->_draw->dirtiedRect(_vm->_draw->_backSurface, left, top, right, bottom); + + (*o)->advance(); + } + + _vm->_draw->blitInvalidated(); + + _vm->_util->waitEndFrame(); + _vm->_util->processInput(); + } + + deinit(); + return true; +} + +void Diving::init() { + _background = new DECFile(_vm, "tperle.dec" , 320, 200); + _objects = new ANIFile(_vm, "tperle.ani" , 320); + _gui = new ANIFile(_vm, "tperlcpt.ani", 320); + _oko = new ANIFile(_vm, "tplonge.ani" , 320); + + _water = new ANIObject(*_objects); + _lungs = new ANIObject(*_gui); + _heart = new ANIObject(*_gui); + + _water->setAnimation(7); + _water->setPosition(); + _water->setVisible(true); + + _lungs->setAnimation(0); + _lungs->setPosition(); + _lungs->setVisible(true); + + _heart->setAnimation(1); + _heart->setPosition(); + _heart->setVisible(true); +} + +void Diving::deinit() { + delete _heart; + delete _lungs; + delete _water; + + delete _oko; + delete _gui; + delete _objects; + delete _background; + + _water = 0; + _heart = 0; + _lungs = 0; + + _oko = 0; + _gui = 0; + _objects = 0; + _background = 0; +} + +void Diving::initScreen() { + _vm->_util->setFrameRate(15); + + _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc); + + _vm->_draw->_backSurface->clear(); + _background->draw(*_vm->_draw->_backSurface); + + int16 left, top, right, bottom; + _lungs->draw(*_vm->_draw->_backSurface, left, top, right, bottom); + _heart->draw(*_vm->_draw->_backSurface, left, top, right, bottom); + + _vm->_draw->dirtiedRect(_vm->_draw->_backSurface, 0, 0, 319, 199); +} + +} // End of namespace Geisha + +} // End of namespace Gob diff --git a/engines/gob/minigames/geisha/diving.h b/engines/gob/minigames/geisha/diving.h new file mode 100644 index 0000000000..238a1ad75b --- /dev/null +++ b/engines/gob/minigames/geisha/diving.h @@ -0,0 +1,68 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GOB_MINIGAMES_GEISHA_DIVING_H +#define GOB_MINIGAMES_GEISHA_DIVING_H + +#include "common/system.h" + +namespace Gob { + +class GobEngine; +class DECFile; +class ANIFile; +class ANIObject; + +namespace Geisha { + +/** Geisha's "Diving" minigame. */ +class Diving { +public: + Diving(GobEngine *vm); + ~Diving(); + + bool play(uint16 playerCount, bool hasPearlLocation); + +private: + GobEngine *_vm; + + DECFile *_background; + ANIFile *_objects; + ANIFile *_gui; + ANIFile *_oko; + + ANIObject *_water; + ANIObject *_lungs; + ANIObject *_heart; + + + void init(); + void deinit(); + + void initScreen(); +}; + +} // End of namespace Geisha + +} // End of namespace Gob + +#endif // GOB_MINIGAMES_GEISHA_DIVING_H diff --git a/engines/gob/minigames/geisha/evilfish.cpp b/engines/gob/minigames/geisha/evilfish.cpp new file mode 100644 index 0000000000..e2672d75c8 --- /dev/null +++ b/engines/gob/minigames/geisha/evilfish.cpp @@ -0,0 +1,163 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "gob/minigames/geisha/evilfish.h" + +namespace Gob { + +namespace Geisha { + +EvilFish::EvilFish(const ANIFile &ani, uint16 screenWidth, + uint16 animSwimLeft, uint16 animSwimRight, + uint16 animTurnLeft, uint16 animTurnRight, uint16 animDie) : + ANIObject(ani), _screenWidth(screenWidth), + _animSwimLeft(animSwimLeft), _animSwimRight(animSwimRight), + _animTurnLeft(animTurnLeft), _animTurnRight(animTurnRight), _animDie(animDie), + _shouldLeave(false), _state(kStateNone) { + +} + +EvilFish::~EvilFish() { +} + +bool EvilFish::isIn(int16 x, int16 y) const { + int16 frameX, frameY, frameWidth, frameHeight; + getFramePosition(frameX, frameY); + getFrameSize(frameWidth, frameHeight); + + if ((x < frameX) || (y < frameY)) + return false; + if ((x > (frameX + frameWidth)) || (y > (frameY + frameHeight))) + return false; + + return true; +} + +void EvilFish::enter(Direction from, int16 y) { + _shouldLeave = false; + + bool left = from == kDirectionLeft; + + setAnimation(left ? _animSwimLeft : _animSwimRight); + + int16 width, height; + getFrameSize(width, height); + + setPosition(left ? -width : _screenWidth, y); + setVisible(true); + + _state = left ? kStateSwimLeft : kStateSwimRight; +} + +void EvilFish::leave() { + if (_state == kStateNone) + return; + + _shouldLeave = true; +} + +void EvilFish::die() { + if ((_state == kStateNone) || (_state == kStateDie)) + return; + + int16 x, y; + getFramePosition(x, y); + + setAnimation(_animDie); + setPosition(x, y); + + _state = kStateDie; +} + +void EvilFish::advance() { + if (_state == kStateNone) + return; + + bool wasLastFrame = lastFrame(); + + ANIObject::advance(); + + int16 x, y, width, height; + getFramePosition(x, y); + getFrameSize(width, height); + + switch (_state) { + case kStateNone: + break; + + case kStateSwimLeft: + if (!_shouldLeave && (x >= _screenWidth - width)) { + setAnimation(_animTurnRight); + setPosition(x, y); + _state = kStateTurnRight; + } + + if (_shouldLeave && (x >= _screenWidth)) { + setVisible(false); + + _shouldLeave = false; + _state = kStateNone; + } + break; + + case kStateSwimRight: + if (!_shouldLeave && (x <= 0)) { + setAnimation(_animTurnLeft); + setPosition(x, y); + _state = kStateTurnLeft; + } + + if (_shouldLeave && (x < -width)) { + setVisible(false); + + _shouldLeave = false; + _state = kStateNone; + } + break; + + case kStateTurnLeft: + if (wasLastFrame) { + setAnimation(_animSwimLeft); + _state = kStateSwimLeft; + } + break; + + case kStateTurnRight: + if (wasLastFrame) { + setAnimation(_animSwimRight); + _state = kStateSwimRight; + } + break; + + case kStateDie: + if (wasLastFrame) { + setVisible(false); + + _state = kStateNone; + } + break; + } +} + +} // End of namespace Geisha + +} // End of namespace Gob diff --git a/engines/gob/minigames/geisha/evilfish.h b/engines/gob/minigames/geisha/evilfish.h new file mode 100644 index 0000000000..9144cefb4b --- /dev/null +++ b/engines/gob/minigames/geisha/evilfish.h @@ -0,0 +1,86 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GOB_MINIGAMES_GEISHA_EVILFISH_H +#define GOB_MINIGAMES_GEISHA_EVILFISH_H + +#include "gob/aniobject.h" + +namespace Gob { + +namespace Geisha { + +/** An "evil" fish in Geisha's "Diving" minigame. */ +class EvilFish : public ANIObject { +public: + enum Direction { + kDirectionLeft, + kDirectionRight + }; + + EvilFish(const ANIFile &ani, uint16 screenWidth, + uint16 animSwimLeft, uint16 animSwimRight, + uint16 animTurnLeft, uint16 animTurnRight, uint16 animDie); + ~EvilFish(); + + /** Are there coordinates within the fish's sprite? */ + bool isIn(int16 x, int16 y) const; + + /** Enter from this direction / screen edge. */ + void enter(Direction from, int16 y); + /** Leave the screen in the current direction. */ + void leave(); + + /** Kill the fish. */ + void die(); + + /** Advance the animation to the next frame. */ + void advance(); + +private: + enum State { + kStateNone, + kStateSwimLeft, + kStateSwimRight, + kStateTurnLeft, + kStateTurnRight, + kStateDie + }; + + uint16 _screenWidth; + + uint16 _animSwimLeft; + uint16 _animSwimRight; + uint16 _animTurnLeft; + uint16 _animTurnRight; + uint16 _animDie; + + bool _shouldLeave; + + State _state; +}; + +} // End of namespace Geisha + +} // End of namespace Gob + +#endif // GOB_MINIGAMES_GEISHA_EVILFISH_H diff --git a/engines/gob/minigames/geisha/penetration.cpp b/engines/gob/minigames/geisha/penetration.cpp new file mode 100644 index 0000000000..4334cae21a --- /dev/null +++ b/engines/gob/minigames/geisha/penetration.cpp @@ -0,0 +1,106 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "gob/global.h" +#include "gob/util.h" +#include "gob/draw.h" +#include "gob/video.h" +#include "gob/decfile.h" +#include "gob/anifile.h" + +#include "gob/minigames/geisha/penetration.h" + +namespace Gob { + +namespace Geisha { + +static byte kPalette[48] = { + 0x16, 0x16, 0x16, + 0x12, 0x14, 0x16, + 0x34, 0x00, 0x25, + 0x1D, 0x1F, 0x22, + 0x24, 0x27, 0x2A, + 0x2C, 0x0D, 0x22, + 0x2B, 0x2E, 0x32, + 0x12, 0x09, 0x20, + 0x3D, 0x3F, 0x00, + 0x3F, 0x3F, 0x3F, + 0x00, 0x00, 0x00, + 0x15, 0x15, 0x3F, + 0x25, 0x22, 0x2F, + 0x1A, 0x14, 0x28, + 0x3F, 0x00, 0x00, + 0x15, 0x3F, 0x15 +}; + +Penetration::Penetration(GobEngine *vm) : _vm(vm), _background(0), _objects(0) { + _background = new Surface(320, 200, 1); +} + +Penetration::~Penetration() { + deinit(); + + delete _background; +} + +bool Penetration::play(uint16 var1, uint16 var2, uint16 var3) { + init(); + initScreen(); + + _vm->_draw->blitInvalidated(); + _vm->_video->retrace(); + while (!_vm->_util->keyPressed() && !_vm->shouldQuit()) + _vm->_util->longDelay(1); + + deinit(); + return true; +} + +void Penetration::init() { + _background->clear(); + + _vm->_video->drawPackedSprite("hyprmef2.cmp", *_background); + + _objects = new ANIFile(_vm, "tcite.ani", 320); +} + +void Penetration::deinit() { + delete _objects; + + _objects = 0; +} + +void Penetration::initScreen() { + _vm->_util->setFrameRate(15); + + memcpy(_vm->_draw->_vgaPalette , kPalette, 48); + memcpy(_vm->_draw->_vgaSmallPalette, kPalette, 48); + + _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc); + + _vm->_draw->_backSurface->blit(*_background); + _vm->_draw->dirtiedRect(_vm->_draw->_backSurface, 0, 0, 319, 199); +} + +} // End of namespace Geisha + +} // End of namespace Gob diff --git a/engines/gob/minigames/geisha/penetration.h b/engines/gob/minigames/geisha/penetration.h new file mode 100644 index 0000000000..c346a7bf5a --- /dev/null +++ b/engines/gob/minigames/geisha/penetration.h @@ -0,0 +1,61 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GOB_MINIGAMES_GEISHA_PENETRATION_H +#define GOB_MINIGAMES_GEISHA_PENETRATION_H + +#include "common/system.h" + +namespace Gob { + +class GobEngine; +class Surface; +class ANIFile; + +namespace Geisha { + +/** Geisha's "Penetration" minigame. */ +class Penetration { +public: + Penetration(GobEngine *vm); + ~Penetration(); + + bool play(uint16 var1, uint16 var2, uint16 var3); + +private: + GobEngine *_vm; + + Surface *_background; + ANIFile *_objects; + + + void init(); + void deinit(); + + void initScreen(); +}; + +} // End of namespace Geisha + +} // End of namespace Gob + +#endif // GOB_MINIGAMES_GEISHA_PENETRATION_H diff --git a/engines/gob/module.mk b/engines/gob/module.mk index cdad1e6c46..bf040c5428 100644 --- a/engines/gob/module.mk +++ b/engines/gob/module.mk @@ -1,10 +1,13 @@ MODULE := engines/gob MODULE_OBJS := \ + anifile.o \ + aniobject.o \ console.o \ dataio.o \ databases.o \ dbase.o \ + decfile.o \ detection.o \ draw.o \ draw_v1.o \ @@ -25,6 +28,7 @@ MODULE_OBJS := \ iniconfig.o \ init.o \ init_v1.o \ + init_geisha.o \ init_v2.o \ init_fascin.o \ init_v3.o \ @@ -33,6 +37,7 @@ MODULE_OBJS := \ init_v7.o \ inter.o \ inter_v1.o \ + inter_geisha.o \ inter_v2.o \ inter_bargon.o \ inter_fascin.o \ @@ -51,6 +56,7 @@ MODULE_OBJS := \ mult_v2.o \ palanim.o \ resources.o \ + rxyfile.o \ scenery.o \ scenery_v1.o \ scenery_v2.o \ @@ -67,6 +73,9 @@ MODULE_OBJS := \ demos/demoplayer.o \ demos/scnplayer.o \ demos/batplayer.o \ + minigames/geisha/evilfish.o \ + minigames/geisha/diving.o \ + minigames/geisha/penetration.o \ save/savefile.o \ save/savehandler.o \ save/saveload.o \ @@ -75,6 +84,7 @@ MODULE_OBJS := \ save/saveload_v4.o \ save/saveload_v6.o \ save/saveload_v7.o \ + save/saveload_geisha.o \ save/saveload_fascin.o \ save/saveload_inca2.o \ save/saveload_playtoons.o \ diff --git a/engines/gob/palanim.cpp b/engines/gob/palanim.cpp index 42aeaf63eb..8a5327c3f1 100644 --- a/engines/gob/palanim.cpp +++ b/engines/gob/palanim.cpp @@ -79,9 +79,6 @@ bool PalAnim::fadeStep(int16 oper) { byte newGreen; byte newBlue; - if (_vm->_global->_colorCount != 256) - error("PalAnim::fadeStep(): Only 256 color mode is supported"); - if (oper == 0) { if (_vm->_global->_setAllPalette) { if (_vm->_global->_inVM != 0) @@ -134,12 +131,6 @@ void PalAnim::fade(Video::PalDesc *palDesc, int16 fadeV, int16 allColors) { _fadeValue = (fadeV < 0) ? -fadeV : 2; - if (_vm->_global->_colorCount < 256) { - if (palDesc) - _vm->_video->setFullPalette(palDesc); - return; - } - if (!_vm->_global->_setAllPalette) { if (!palDesc) { for (i = 0; i < 16; i++) { diff --git a/engines/gob/rxyfile.cpp b/engines/gob/rxyfile.cpp new file mode 100644 index 0000000000..5311eece0f --- /dev/null +++ b/engines/gob/rxyfile.cpp @@ -0,0 +1,82 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/stream.h" + +#include "gob/rxyfile.h" + +namespace Gob { + +RXYFile::RXYFile(Common::SeekableReadStream &rxy) : _width(0), _height(0) { + load(rxy); +} + +RXYFile::~RXYFile() { +} + +uint RXYFile::size() const { + return _coords.size(); +} + +uint16 RXYFile::getWidth() const { + return _width; +} + +uint16 RXYFile::getHeight() const { + return _height; +} + +uint16 RXYFile::getRealCount() const { + return _realCount; +} + +const RXYFile::Coordinates &RXYFile::operator[](uint i) const { + assert(i < _coords.size()); + + return _coords[i]; +} + +void RXYFile::load(Common::SeekableReadStream &rxy) { + if (rxy.size() < 2) + return; + + rxy.seek(0); + + _realCount = rxy.readUint16LE(); + + uint16 count = (rxy.size() - 2) / 8; + + _coords.resize(count); + for (CoordArray::iterator c = _coords.begin(); c != _coords.end(); ++c) { + c->left = rxy.readUint16LE(); + c->right = rxy.readUint16LE(); + c->top = rxy.readUint16LE(); + c->bottom = rxy.readUint16LE(); + + if (c->left != 0xFFFF) { + _width = MAX<uint16>(_width , c->right + 1); + _height = MAX<uint16>(_height, c->bottom + 1); + } + } +} + +} // End of namespace Gob diff --git a/engines/gob/rxyfile.h b/engines/gob/rxyfile.h new file mode 100644 index 0000000000..828f8b73c7 --- /dev/null +++ b/engines/gob/rxyfile.h @@ -0,0 +1,76 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GOB_RXYFILE_H +#define GOB_RXYFILE_H + +#include "common/system.h" +#include "common/array.h" + +namespace Common { + class SeekableReadStream; +} + +namespace Gob { + +/** A RXY file, containing relative sprite coordinates. + * + * Used in hardcoded "actiony" parts of gob games. + */ +class RXYFile { +public: + struct Coordinates { + uint16 left; + uint16 top; + uint16 right; + uint16 bottom; + }; + + RXYFile(Common::SeekableReadStream &rxy); + ~RXYFile(); + + uint size() const; + + uint16 getWidth () const; + uint16 getHeight() const; + + uint16 getRealCount() const; + + const Coordinates &operator[](uint i) const; + +private: + typedef Common::Array<Coordinates> CoordArray; + + CoordArray _coords; + + uint16 _realCount; + + uint16 _width; + uint16 _height; + + + void load(Common::SeekableReadStream &rxy); +}; + +} // End of namespace Gob + +#endif // GOB_RXYFILE_H diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h index 4d51a5b51c..66b3482bac 100644 --- a/engines/gob/save/saveload.h +++ b/engines/gob/save/saveload.h @@ -71,6 +71,60 @@ protected: virtual const char *getDescription(const char *fileName) const; }; +/** Save/Load class for Geisha. */ +class SaveLoad_Geisha : public SaveLoad { +public: + SaveLoad_Geisha(GobEngine *vm, const char *targetName); + virtual ~SaveLoad_Geisha(); + + SaveMode getSaveMode(const char *fileName) const; + +protected: + static const uint32 kSlotCount = 7; + static const uint32 kSlotSize = 44; + + static const uint32 kSaveFileSize = kSlotCount * kSlotSize; + + struct SaveFile { + const char *sourceName; + SaveMode mode; + SaveHandler *handler; + const char *description; + }; + + /** Handles the save slots. */ + class GameHandler : public SaveHandler { + public: + GameHandler(GobEngine *vm, const Common::String &target); + ~GameHandler(); + + int32 getSize(); + bool load(int16 dataVar, int32 size, int32 offset); + bool save(int16 dataVar, int32 size, int32 offset); + + private: + /** Slot file construction. */ + class File : public SlotFileIndexed { + public: + File(GobEngine *vm, const Common::String &base); + ~File(); + + int getSlot(int32 offset) const; + int getSlotRemainder(int32 offset) const; + }; + + File _file; + }; + + static SaveFile _saveFiles[]; + + SaveHandler *getHandler(const char *fileName) const; + const char *getDescription(const char *fileName) const; + + const SaveFile *getSaveFile(const char *fileName) const; + SaveFile *getSaveFile(const char *fileName); +}; + /** Save/Load class for Gobliins 2, Ween: The Prophecy and Bargon Attack. */ class SaveLoad_v2 : public SaveLoad { public: diff --git a/engines/gob/save/saveload_geisha.cpp b/engines/gob/save/saveload_geisha.cpp new file mode 100644 index 0000000000..3414c12dda --- /dev/null +++ b/engines/gob/save/saveload_geisha.cpp @@ -0,0 +1,215 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "gob/save/saveload.h" +#include "gob/save/saveconverter.h" +#include "gob/inter.h" +#include "gob/variables.h" + +namespace Gob { + +SaveLoad_Geisha::SaveFile SaveLoad_Geisha::_saveFiles[] = { + {"save.inf", kSaveModeSave, 0, "savegame"} +}; + + +SaveLoad_Geisha::GameHandler::File::File(GobEngine *vm, const Common::String &base) : + SlotFileIndexed(vm, SaveLoad_Geisha::kSlotCount, base, "s") { + +} + +SaveLoad_Geisha::GameHandler::File::~File() { +} + +int SaveLoad_Geisha::GameHandler::File::getSlot(int32 offset) const { + return 0; +} + +int SaveLoad_Geisha::GameHandler::File::getSlotRemainder(int32 offset) const { + return 0; +} + + +SaveLoad_Geisha::GameHandler::GameHandler(GobEngine *vm, const Common::String &target) : + SaveHandler(vm), _file(vm, target) { + +} + +SaveLoad_Geisha::GameHandler::~GameHandler() { +} + +int32 SaveLoad_Geisha::GameHandler::getSize() { + if (_file.getSlotMax() == 0) + return -1; + + return SaveLoad_Geisha::kSaveFileSize; +} + +bool SaveLoad_Geisha::GameHandler::load(int16 dataVar, int32 size, int32 offset) { + if ((size != 0) || (offset != 0)) { + warning("Invalid loading procedure: %d, %d, %d", dataVar, size, offset); + return false; + } + + memset(_vm->_inter->_variables->getAddressOff8(dataVar), 0, SaveLoad_Geisha::kSaveFileSize); + + for (uint32 slot = 0; slot < SaveLoad_Geisha::kSlotCount; + slot++, dataVar += SaveLoad_Geisha::kSlotSize) { + + if (!_file.exists(slot)) + continue; + + Common::String slotFile = _file.build(slot); + if (slotFile.empty()) + return false; + + SaveReader reader(2, slot, slotFile); + if (!reader.load()) { + warning("Save slot %d contains corrupted save", slot); + continue; + } + + SavePartInfo info(20, (uint32) _vm->getGameType(), 0, + _vm->getEndianness(), _vm->_inter->_variables->getSize()); + SavePartVars vars(_vm, SaveLoad_Geisha::kSlotSize); + + if (!reader.readPart(0, &info) || !reader.readPart(1, &vars)) { + warning("Save slot %d contains corrupted save", slot); + continue; + } + + if (!vars.writeInto(dataVar, 0, SaveLoad_Geisha::kSlotSize)) { + warning("Save slot %d contains corrupted save", slot); + continue; + } + } + + return true; +} + +bool SaveLoad_Geisha::GameHandler::save(int16 dataVar, int32 size, int32 offset) { + if (((uint32)size != SaveLoad_Geisha::kSaveFileSize) || (offset != 0)) { + warning("Invalid saving procedure: %d, %d, %d", dataVar, size, offset); + return false; + } + + for (uint32 slot = 0; slot < SaveLoad_Geisha::kSlotCount; + slot++, dataVar += SaveLoad_Geisha::kSlotSize) { + + const byte *slotData = _vm->_inter->_variables->getAddressOff8(dataVar); + + // Check of the slot's data is empty + bool empty = true; + for (uint32 j = 0; j < SaveLoad_Geisha::kSlotSize; j++) { + if (slotData[j] != 0) { + empty = false; + break; + } + } + + // Don't save empty slots + if (empty) + continue; + + Common::String slotFile = _file.build(slot); + if (slotFile.empty()) + return false; + + SaveWriter writer(2, slot, slotFile); + + SavePartInfo info(20, (uint32) _vm->getGameType(), 0, + _vm->getEndianness(), _vm->_inter->_variables->getSize()); + SavePartVars vars(_vm, SaveLoad_Geisha::kSlotSize); + + info.setDesc(Common::String::format("Geisha, slot %d", slot).c_str()); + if (!vars.readFrom(dataVar, 0, SaveLoad_Geisha::kSlotSize)) + return false; + + if (!writer.writePart(0, &info)) + return false; + if (!writer.writePart(1, &vars)) + return false; + } + + return true; +} + + +SaveLoad_Geisha::SaveLoad_Geisha(GobEngine *vm, const char *targetName) : + SaveLoad(vm) { + + _saveFiles[0].handler = new GameHandler(vm, targetName); +} + +SaveLoad_Geisha::~SaveLoad_Geisha() { + for (int i = 0; i < ARRAYSIZE(_saveFiles); i++) + delete _saveFiles[i].handler; +} + +const SaveLoad_Geisha::SaveFile *SaveLoad_Geisha::getSaveFile(const char *fileName) const { + fileName = stripPath(fileName); + + for (int i = 0; i < ARRAYSIZE(_saveFiles); i++) + if (!scumm_stricmp(fileName, _saveFiles[i].sourceName)) + return &_saveFiles[i]; + + return 0; +} + +SaveLoad_Geisha::SaveFile *SaveLoad_Geisha::getSaveFile(const char *fileName) { + fileName = stripPath(fileName); + + for (int i = 0; i < ARRAYSIZE(_saveFiles); i++) + if (!scumm_stricmp(fileName, _saveFiles[i].sourceName)) + return &_saveFiles[i]; + + return 0; +} + +SaveHandler *SaveLoad_Geisha::getHandler(const char *fileName) const { + const SaveFile *saveFile = getSaveFile(fileName); + + if (saveFile) + return saveFile->handler; + + return 0; +} + +const char *SaveLoad_Geisha::getDescription(const char *fileName) const { + const SaveFile *saveFile = getSaveFile(fileName); + + if (saveFile) + return saveFile->description; + + return 0; +} + +SaveLoad::SaveMode SaveLoad_Geisha::getSaveMode(const char *fileName) const { + const SaveFile *saveFile = getSaveFile(fileName); + + if (saveFile) + return saveFile->mode; + + return kSaveModeNone; +} + +} // End of namespace Gob diff --git a/engines/gob/sound/sound.cpp b/engines/gob/sound/sound.cpp index 212116f689..e064a312c2 100644 --- a/engines/gob/sound/sound.cpp +++ b/engines/gob/sound/sound.cpp @@ -330,7 +330,7 @@ void Sound::adlibPlayBgMusic() { if (!_adlPlayer) _adlPlayer = new ADLPlayer(*_vm->_mixer); - static const char *tracksMac[] = { + static const char *const tracksMac[] = { // "musmac1.adl", // TODO: This track isn't played correctly at all yet "musmac2.adl", "musmac3.adl", @@ -339,7 +339,7 @@ void Sound::adlibPlayBgMusic() { "musmac6.adl" }; - static const char *tracksWin[] = { + static const char *const tracksWin[] = { "musmac1.mid", "musmac2.mid", "musmac3.mid", @@ -534,7 +534,7 @@ void Sound::cdPlayBgMusic() { if (!_cdrom) return; - static const char *tracks[][2] = { + static const char *const tracks[][2] = { {"avt00.tot", "mine"}, {"avt001.tot", "nuit"}, {"avt002.tot", "campagne"}, @@ -571,7 +571,7 @@ void Sound::cdPlayMultMusic() { if (!_cdrom) return; - static const char *tracks[][6] = { + static const char *const tracks[][6] = { {"avt005.tot", "fra1", "all1", "ang1", "esp1", "ita1"}, {"avt006.tot", "fra2", "all2", "ang2", "esp2", "ita2"}, {"avt012.tot", "fra3", "all3", "ang3", "esp3", "ita3"}, diff --git a/engines/gob/util.cpp b/engines/gob/util.cpp index 6d83745602..7f9c6131fd 100644 --- a/engines/gob/util.cpp +++ b/engines/gob/util.cpp @@ -20,6 +20,10 @@ * */ +#include "common/stream.h" +#include "common/events.h" + +#include "graphics/palette.h" #include "gob/gob.h" #include "gob/util.h" @@ -31,10 +35,6 @@ #include "gob/videoplayer.h" #include "gob/sound/sound.h" -#include "common/events.h" - -#include "graphics/palette.h" - namespace Gob { Util::Util(GobEngine *vm) : _vm(vm) { @@ -257,6 +257,18 @@ bool Util::checkKey(int16 &key) { return true; } +bool Util::keyPressed() { + int16 key = checkKey(); + if (key) + return true; + + int16 x, y; + MouseButtons buttons; + + getMouseState(&x, &y, &buttons); + return buttons != kMouseButtonsNone; +} + void Util::getMouseState(int16 *pX, int16 *pY, MouseButtons *pButtons) { Common::Point mouse = g_system->getEventManager()->getMousePos(); *pX = mouse.x + _vm->_video->_scrollOffsetX - _vm->_video->_screenDeltaX; @@ -518,6 +530,11 @@ void Util::deleteList(List *list) { } char *Util::setExtension(char *str, const char *ext) { + assert(str && ext); + + if (str[0] == '\0') + return str; + char *dot = strrchr(str, '.'); if (dot) *dot = '\0'; @@ -527,6 +544,9 @@ char *Util::setExtension(char *str, const char *ext) { } Common::String Util::setExtension(const Common::String &str, const Common::String &ext) { + if (str.empty()) + return str; + const char *dot = strrchr(str.c_str(), '.'); if (dot) return Common::String(str.c_str(), dot - str.c_str()) + ext; @@ -534,6 +554,23 @@ Common::String Util::setExtension(const Common::String &str, const Common::Strin return str + ext; } +Common::String Util::readString(Common::SeekableReadStream &stream, int n) { + Common::String str; + + char c; + while (n-- > 0) { + if ((c = stream.readByte()) == '\0') + break; + + str += c; + } + + if (n > 0) + stream.skip(n); + + return str; +} + /* NOT IMPLEMENTED */ void Util::checkJoystick() { _vm->_global->_useJoystick = 0; diff --git a/engines/gob/util.h b/engines/gob/util.h index a6a689c1d2..4228dac768 100644 --- a/engines/gob/util.h +++ b/engines/gob/util.h @@ -23,8 +23,13 @@ #ifndef GOB_UTIL_H #define GOB_UTIL_H +#include "common/str.h" #include "common/keyboard.h" +namespace Common { + class SeekableReadStream; +} + namespace Gob { class GobEngine; @@ -103,6 +108,7 @@ public: int16 getKey(); int16 checkKey(); bool checkKey(int16 &key); + bool keyPressed(); void getMouseState(int16 *pX, int16 *pY, MouseButtons *pButtons); void setMousePos(int16 x, int16 y); @@ -131,6 +137,9 @@ public: static char *setExtension(char *str, const char *ext); static Common::String setExtension(const Common::String &str, const Common::String &ext); + /** Read a constant-length string out of a stream. */ + static Common::String readString(Common::SeekableReadStream &stream, int n); + Util(GobEngine *vm); protected: diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp index 651c9a3154..221f5ab3c9 100644 --- a/engines/gob/videoplayer.cpp +++ b/engines/gob/videoplayer.cpp @@ -61,7 +61,7 @@ void VideoPlayer::Video::close() { } -const char *VideoPlayer::_extensions[] = { "IMD", "IMD", "VMD", "RMD", "SMD" }; +const char *const VideoPlayer::_extensions[] = { "IMD", "IMD", "VMD", "RMD", "SMD" }; VideoPlayer::VideoPlayer(GobEngine *vm) : _vm(vm), _needBlit(false), _noCursorSwitch(false), _woodruffCohCottWorkaround(false) { @@ -262,7 +262,7 @@ void VideoPlayer::waitSoundEnd(int slot) { video->decoder->finishSound(); - while(video->decoder->isSoundPlaying()) + while (video->decoder->isSoundPlaying()) _vm->_util->longDelay(1); } diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h index 373832939a..bc7cb48768 100644 --- a/engines/gob/videoplayer.h +++ b/engines/gob/videoplayer.h @@ -167,7 +167,7 @@ private: static const int kVideoSlotCount = 32; - static const char *_extensions[]; + static const char *const _extensions[]; GobEngine *_vm; diff --git a/engines/groovie/roq.cpp b/engines/groovie/roq.cpp index 7f477c41fa..ca896a8d21 100644 --- a/engines/groovie/roq.cpp +++ b/engines/groovie/roq.cpp @@ -43,9 +43,6 @@ namespace Groovie { ROQPlayer::ROQPlayer(GroovieEngine *vm) : -#ifdef DITHER - _dither(NULL), -#endif VideoPlayer(vm), _codingTypeCount(0), _fg(&_vm->_graphicsMan->_foreground), _bg(&_vm->_graphicsMan->_background) { @@ -55,38 +52,13 @@ ROQPlayer::ROQPlayer(GroovieEngine *vm) : if (_vm->_mode8bit) { byte pal[256 * 3]; -#ifdef DITHER - // Initialize to a black palette - memset(pal, 0, 256 * 3); - - // Build a basic color palette - for (int r = 0; r < 4; r++) { - for (int g = 0; g < 4; g++) { - for (int b = 0; b < 4; b++) { - byte col = (r << 4) | (g << 2) | (b << 0); - pal[3 * col + 0] = r << 6; - pal[3 * col + 1] = g << 6; - pal[3 * col + 2] = b << 6; - } - } - } - - // Initialize the dithering algorithm - _paletteLookup = new Graphics::PaletteLUT(8, Graphics::PaletteLUT::kPaletteYUV); - _paletteLookup->setPalette(pal, Graphics::PaletteLUT::kPaletteRGB, 8); - for (int i = 0; (i < 64) && !_vm->shouldQuit(); i++) { - debug("Groovie::ROQ: Building palette table: %02d/63", i); - _paletteLookup->buildNext(); - } -#else // !DITHER // Set a grayscale palette for (int i = 0; i < 256; i++) { pal[(i * 3) + 0] = i; pal[(i * 3) + 1] = i; pal[(i * 3) + 2] = i; } -#endif // DITHER _syst->getPaletteManager()->setPalette(pal, 0, 256); } @@ -98,12 +70,6 @@ ROQPlayer::~ROQPlayer() { delete _currBuf; _prevBuf->free(); delete _prevBuf; - -#ifdef DITHER - // Free the dithering algorithm - delete _dither; - delete _paletteLookup; -#endif } uint16 ROQPlayer::loadInternal() { @@ -147,22 +113,13 @@ uint16 ROQPlayer::loadInternal() { } void ROQPlayer::buildShowBuf() { -#ifdef DITHER - // Start a new frame dithering - _dither->newFrame(); -#endif - for (int line = 0; line < _bg->h; line++) { byte *out = (byte *)_bg->getBasePtr(0, line); byte *in = (byte *)_currBuf->getBasePtr(0, line / _scaleY); for (int x = 0; x < _bg->w; x++) { if (_vm->_mode8bit) { -#ifdef DITHER - *out = _dither->dither(*in, *(in + 1), *(in + 2), x); -#else // Just use the luminancy component *out = *in; -#endif // DITHER #ifdef USE_RGB_COLOR } else { // Do the format conversion (YUV -> RGB -> Screen format) @@ -178,9 +135,6 @@ void ROQPlayer::buildShowBuf() { if (!(x % _scaleX)) in += _currBuf->format.bytesPerPixel; } -#ifdef DITHER - _dither->nextLine(); -#endif } // Swap buffers @@ -349,11 +303,6 @@ bool ROQPlayer::processBlockInfo(ROQBlockHeader &blockHeader) { *ptr2++ = 128; } -#ifdef DITHER - // Reset the dithering algorithm with the new width - delete _dither; - _dither = new Graphics::SierraLight(width * _scaleX, _paletteLookup); -#endif } return true; diff --git a/engines/groovie/roq.h b/engines/groovie/roq.h index ddb307065c..c5d3f255d3 100644 --- a/engines/groovie/roq.h +++ b/engines/groovie/roq.h @@ -25,12 +25,6 @@ #include "groovie/player.h" -//#define DITHER - -#ifdef DITHER -#include "graphics/dither.h" -#endif - namespace Groovie { class GroovieEngine; @@ -89,11 +83,6 @@ private: bool _dirty; byte _alpha; -#ifdef DITHER - // Dithering - Graphics::PaletteLUT *_paletteLookup; - Graphics::SierraLight *_dither; -#endif }; } // End of Groovie namespace diff --git a/engines/hugo/intro.cpp b/engines/hugo/intro.cpp index c66c0ef624..72f718fe8e 100644 --- a/engines/hugo/intro.cpp +++ b/engines/hugo/intro.cpp @@ -317,7 +317,7 @@ void intro_v3d::introInit() { _vm->_file->readBackground(22); // display screen MAP_3d _vm->_screen->displayBackground(); introTicks = 0; - _vm->_sound->DOSSongPtr = _vm->_sound->DOSIntroSong; + _vm->_sound->_DOSSongPtr = _vm->_sound->_DOSIntroSong; } /** diff --git a/engines/hugo/object.cpp b/engines/hugo/object.cpp index e5c7b4bf90..bc99abf410 100644 --- a/engines/hugo/object.cpp +++ b/engines/hugo/object.cpp @@ -283,7 +283,7 @@ void ObjectHandler::freeObjects() { free(_uses); } - for(int16 i = 0; i < _objCount; i++) { + for (int16 i = 0; i < _objCount; i++) { free(_objects[i].stateDataIndex); _objects[i].stateDataIndex = 0; } diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp index 38a8e4e3ff..bbf6c39f13 100644 --- a/engines/hugo/parser.cpp +++ b/engines/hugo/parser.cpp @@ -449,7 +449,7 @@ const char *Parser::findVerb() const { */ void Parser::showDosInventory() const { debugC(1, kDebugParser, "showDosInventory()"); - static const char *blanks = " "; + static const char *const blanks = " "; uint16 index = 0, len1 = 0, len2 = 0; for (int i = 0; i < _vm->_object->_numObj; i++) { // Find widths of 2 columns diff --git a/engines/hugo/schedule.cpp b/engines/hugo/schedule.cpp index d1b4aa6a9c..384b3ace8f 100644 --- a/engines/hugo/schedule.cpp +++ b/engines/hugo/schedule.cpp @@ -297,7 +297,7 @@ void Scheduler::readAct(Common::ReadStream &in, act &curAct) { curAct.a3.timer = in.readSint16BE(); curAct.a3.promptIndex = in.readSint16BE(); numSubAct = in.readUint16BE(); - curAct.a3.responsePtr = (int *) malloc(sizeof(int) * numSubAct); + curAct.a3.responsePtr = (int *)malloc(sizeof(int) * numSubAct); for (int k = 0; k < numSubAct; k++) curAct.a3.responsePtr[k] = in.readSint16BE(); curAct.a3.actPassIndex = in.readUint16BE(); @@ -566,7 +566,7 @@ void Scheduler::loadActListArr(Common::ReadStream &in) { for (int i = 0; i < numElem; i++) { numSubElem = in.readUint16BE(); if (varnt == _vm->_gameVariant) - _actListArr[i] = (act *) malloc(sizeof(act) * (numSubElem + 1)); + _actListArr[i] = (act *)malloc(sizeof(act) * (numSubElem + 1)); for (int j = 0; j < numSubElem; j++) { if (varnt == _vm->_gameVariant) { readAct(in, _actListArr[i][j]); @@ -1416,7 +1416,7 @@ event_t *Scheduler::doAction(event_t *curEvent) { break; case OLD_SONG: // Replaces ACT26 for DOS games. - _vm->_sound->DOSSongPtr = _vm->_text->getTextData(action->a49.songIndex); + _vm->_sound->_DOSSongPtr = _vm->_text->getTextData(action->a49.songIndex); break; default: error("An error has occurred: %s", "doAction"); @@ -1557,7 +1557,7 @@ void Scheduler_v1d::decodeString(char *line) { debugC(1, kDebugSchedule, "decodeString(%s)", line); uint16 linelength = strlen(line); - for(uint16 i = 0; i < linelength; i++) { + for (uint16 i = 0; i < linelength; i++) { line[i] = (line[i] + _cypher.c_str()[i % _cypher.size()]) % '~'; if (line[i] < ' ') line[i] += ' '; diff --git a/engines/hugo/sound.cpp b/engines/hugo/sound.cpp index fe34e6ff2d..9dcd7d346a 100644 --- a/engines/hugo/sound.cpp +++ b/engines/hugo/sound.cpp @@ -123,11 +123,11 @@ SoundHandler::SoundHandler(HugoEngine *vm) : _vm(vm) { _speakerStream = new Audio::PCSpeaker(_vm->_mixer->getOutputRate()); _vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &_speakerHandle, _speakerStream, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); - DOSSongPtr = 0; - curPriority = 0; - pcspkrTimer = 0; - pcspkrOctave = 3; - pcspkrNoteDuration = 2; + _DOSSongPtr = 0; + _curPriority = 0; + _pcspkrTimer = 0; + _pcspkrOctave = 3; + _pcspkrNoteDuration = 2; } SoundHandler::~SoundHandler() { @@ -207,7 +207,7 @@ void SoundHandler::playSound(int16 sound, const byte priority) { return; syncVolume(); - curPriority = priority; + _curPriority = priority; // Get sound data if ((sound_p = _vm->_file->getSound(sound, &size)) == 0) @@ -269,94 +269,112 @@ void SoundHandler::pcspkr_player() { static const uint16 pcspkrSharps[8] = {1279, 1171, 2150, 1916, 1755, 1611, 1435}; // The sharps, A# to B# static const uint16 pcspkrFlats[8] = {1435, 1279, 2342, 2150, 1916, 1755, 1611}; // The flats, Ab to Bb - _vm->getTimerManager()->removeTimerProc(&loopPlayer); - _vm->getTimerManager()->installTimerProc(&loopPlayer, 1000000 / 9, this, "hugoSoundLoop"); - - uint16 count; // Value to set timer chip to for note - bool cmd_note; - + // Does the user not want any sound? if (!_vm->_config.soundFl || !_vm->_mixer->isReady()) - return; // Poo! User doesn't want sound! + return; - if (!DOSSongPtr) + // Is there no song? + if (!_DOSSongPtr) return; - if (!*DOSSongPtr) // Song has finished + // Did we reach the end of the song? + if (!*_DOSSongPtr) return; - if (!--pcspkrTimer) { // timer zero, stop note + // Update the timer. + _pcspkrTimer--; + + // Check the timer state.. + if (!_pcspkrTimer) { + // A note just finished, stop the sound (if any) and return. _speakerStream->stop(); return; - } else if (pcspkrTimer >= 0) { // Note still going + } else if (_pcspkrTimer > 0) { + // A (rest or normal) note is still playing, return. return; } - // Time to play next note + // The timer is <0, time to play the next note. + bool cmdNote = true; do { - cmd_note = true; - switch (*DOSSongPtr) { - case 'O': // Switch to new octave 1..7 - DOSSongPtr++; - pcspkrOctave = *DOSSongPtr - '0'; - if ((pcspkrOctave < 0) || (pcspkrOctave > 7)) + switch (*_DOSSongPtr) { + case 'O': + // Switch to new octave 0..7 + _DOSSongPtr++; + _pcspkrOctave = *_DOSSongPtr - '0'; + if ((_pcspkrOctave < 0) || (_pcspkrOctave > 7)) error("pcspkr_player() - Bad octave"); - DOSSongPtr++; + _DOSSongPtr++; break; - case 'L': // Switch to new duration (in ticks) - DOSSongPtr++; - pcspkrNoteDuration = *DOSSongPtr - '0'; - if (pcspkrNoteDuration < 0) + case 'L': + // Switch to new duration (in ticks) + _DOSSongPtr++; + _pcspkrNoteDuration = *_DOSSongPtr - '0'; + if (_pcspkrNoteDuration < 0) error("pcspkr_player() - Bad duration"); - pcspkrNoteDuration--; - DOSSongPtr++; + _pcspkrNoteDuration--; + _DOSSongPtr++; break; case '<': - case '^': // Move up an octave - pcspkrOctave++; - DOSSongPtr++; + case '^': + // Move up an octave + _DOSSongPtr++; + _pcspkrOctave++; break; case '>': - case 'v': // Move down an octave - pcspkrOctave--; - DOSSongPtr++; + case 'v': + // Move down an octave + _DOSSongPtr++; + _pcspkrOctave--; break; default: - cmd_note = false; + // Not a command, probably a note; so we should stop + // processing commands and move onward now. + cmdNote = false; break; } - } while (cmd_note); + } while (cmdNote); - switch (*DOSSongPtr) { - case 'A': // The notes. + switch (*_DOSSongPtr) { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': - count = pcspkrNotes[*DOSSongPtr - 'A']; - switch (DOSSongPtr[1]) { // Check for sharp or flat (#, -) + // Play a note. + + // First, what frequency does this note get played at? + // We must check for sharp or flat (#, -). + uint16 count; + switch (_DOSSongPtr[1]) { case '#': - count = pcspkrSharps[*DOSSongPtr++ - 'A']; + count = pcspkrSharps[*_DOSSongPtr++ - 'A']; break; case 'b': - count = pcspkrFlats[*DOSSongPtr++ - 'A']; + count = pcspkrFlats[*_DOSSongPtr++ - 'A']; break; default: + count = pcspkrNotes[*_DOSSongPtr - 'A']; break; } - if (pcspkrOctave > 3) // Adjust for octave - count /= (1 << (pcspkrOctave - 3)); - else if (pcspkrOctave < 3) - count *= (1 << (3 - pcspkrOctave)); - _speakerStream->play(Audio::PCSpeaker::kWaveFormSaw, kHugoCNT / count, (int32) ((1 + pcspkrNoteDuration) * _vm->_normalTPS) * 8); - pcspkrTimer = pcspkrNoteDuration; - DOSSongPtr++; + // Adjust for the octave if needed. + if (_pcspkrOctave > 3) + count /= (1 << (_pcspkrOctave - 3)); + else if (_pcspkrOctave < 3) + count *= (1 << (3 - _pcspkrOctave)); + + // Start a note playing (we will stop it when the timer expires). + _speakerStream->play(Audio::PCSpeaker::kWaveFormSquare, kHugoCNT / count, -1); + _pcspkrTimer = _pcspkrNoteDuration; + _DOSSongPtr++; break; - case '.': // A rest note + case '.': + // Play a 'rest note' by being silent for a bit. _speakerStream->stop(); - pcspkrTimer = pcspkrNoteDuration; - DOSSongPtr++; + _pcspkrTimer = _pcspkrNoteDuration; + _DOSSongPtr++; break; default: warning("pcspkr_player() - Unhandled note"); @@ -367,12 +385,12 @@ void SoundHandler::loadIntroSong(Common::ReadStream &in) { for (int varnt = 0; varnt < _vm->_numVariant; varnt++) { uint16 numBuf = in.readUint16BE(); if (varnt == _vm->_gameVariant) - DOSIntroSong = _vm->_text->getTextData(numBuf); + _DOSIntroSong = _vm->_text->getTextData(numBuf); } } void SoundHandler::initPcspkrPlayer() { - _vm->getTimerManager()->installTimerProc(&loopPlayer, 1000000 / 9, this, "hugoSoundLoop"); + _vm->getTimerManager()->installTimerProc(&loopPlayer, 1000000 / _vm->_normalTPS, this, "hugoSoundLoop"); } } // End of namespace Hugo diff --git a/engines/hugo/sound.h b/engines/hugo/sound.h index 33dba9f2a8..1e504fbdea 100644 --- a/engines/hugo/sound.h +++ b/engines/hugo/sound.h @@ -60,12 +60,12 @@ public: static const int kHugoCNT = 1190000; - int8 pcspkrTimer; // Timer (ticks) for note being played - int8 pcspkrOctave; // Current octave 1..7 - int8 pcspkrNoteDuration; // Current length of note (ticks) + int8 _pcspkrTimer; // Timer (ticks) for note being played + int8 _pcspkrOctave; // Current octave 1..7 + int8 _pcspkrNoteDuration; // Current length of note (ticks) - const char *DOSSongPtr; - const char *DOSIntroSong; + const char *_DOSSongPtr; + const char *_DOSIntroSong; void toggleMusic(); void toggleSound(); @@ -80,7 +80,7 @@ public: void loadIntroSong(Common::ReadStream &in); void initPcspkrPlayer(); protected: - byte curPriority; // Priority of currently playing sound + byte _curPriority; // Priority of currently playing sound private: HugoEngine *_vm; diff --git a/engines/kyra/animator_mr.cpp b/engines/kyra/animator_mr.cpp index 6414b99ffd..31c5cd1a53 100644 --- a/engines/kyra/animator_mr.cpp +++ b/engines/kyra/animator_mr.cpp @@ -445,7 +445,7 @@ void KyraEngine_MR::showIdleAnim() { if (!_nextIdleType && !talkObjectsInCurScene()) { randomSceneChat(); } else { - static const char *facingTable[] = { + static const char *const facingTable[] = { "A", "R", "R", "FR", "FX", "FL", "L", "L" }; diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp index b82099f058..c9603a2523 100644 --- a/engines/kyra/kyra_hof.cpp +++ b/engines/kyra/kyra_hof.cpp @@ -857,7 +857,7 @@ void KyraEngine_HoF::loadOptionsBuffer(const char *file) { void KyraEngine_HoF::loadChapterBuffer(int chapter) { char tempString[14]; - static const char *chapterFilenames[] = { + static const char *const chapterFilenames[] = { "CH1.XXX", "CH2.XXX", "CH3.XXX", "CH4.XXX", "CH5.XXX" }; @@ -1413,7 +1413,7 @@ void KyraEngine_HoF::runIdleScript(int script) { setNextIdleAnimTimer(); } else { // FIXME: move this to staticres.cpp? - static const char *idleScriptFiles[] = { + static const char *const idleScriptFiles[] = { "_IDLHAIR.EMC", "_IDLDUST.EMC", "_IDLLEAN.EMC", "_IDLDIRT.EMC", "_IDLTOSS.EMC", "_IDLNOSE.EMC", "_IDLBRSH.EMC", "_Z3IDLE.EMC", "_Z4IDLE.EMC", "_Z6IDLE.EMC", "_Z7IDLE.EMC", "_Z8IDLE.EMC" }; diff --git a/engines/kyra/kyra_hof.h b/engines/kyra/kyra_hof.h index 2561171598..916cac0c9d 100644 --- a/engines/kyra/kyra_hof.h +++ b/engines/kyra/kyra_hof.h @@ -566,8 +566,8 @@ protected: // - char _internStringBuf[200]; - static const char *_languageExtension[]; - static const char *_scriptLangExt[]; + static const char *const _languageExtension[]; + static const char *const _scriptLangExt[]; // character bool _useCharPal; diff --git a/engines/kyra/kyra_mr.h b/engines/kyra/kyra_mr.h index ec76340638..473c0371dc 100644 --- a/engines/kyra/kyra_mr.h +++ b/engines/kyra/kyra_mr.h @@ -659,7 +659,7 @@ private: // resource specific private: - static const char *_languageExtension[]; + static const char *const _languageExtension[]; static const int _languageExtensionSize; int loadLanguageFile(const char *file, uint8 *&buffer); diff --git a/engines/kyra/sequences_mr.cpp b/engines/kyra/sequences_mr.cpp index d546d9c25b..76badb63f5 100644 --- a/engines/kyra/sequences_mr.cpp +++ b/engines/kyra/sequences_mr.cpp @@ -57,7 +57,7 @@ void KyraEngine_MR::showBadConscience() { talkObject.x = 30; talkObject.y = 30; - static const char *animFilenames[] = { + static const char *const animFilenames[] = { "GUNFL00.WSA", "GUNFL01.WSA", "GUNFL02.WSA", "GUNFL03.WSA", "GUNFL04.WSA", "GUNFL05.WSA", "GUNFL06.WSA", "GUNFL07.WSA", "GUNFR00.WSA", "GUNFR01.WSA", "GUNFR02.WSA", "GUNFR03.WSA", "GUNFR04.WSA", "GUNFR05.WSA", "GUNFR06.WSA", "GUNFR07.WSA" }; @@ -128,7 +128,7 @@ void KyraEngine_MR::showGoodConscience() { talkObject.x = 30; talkObject.y = 30; - static const char *animFilenames[] = { + static const char *const animFilenames[] = { "STUFL00.WSA", "STUFL02.WSA", "STUFL04.WSA", "STUFL03.WSA", "STUFL01.WSA", "STUFR00.WSA", "STUFR02.WSA", "STUFR04.WSA", "STUFR03.WSA", "STUFR01.WSA" }; diff --git a/engines/kyra/sound_adlib.cpp b/engines/kyra/sound_adlib.cpp index 12c980486c..67dc9863a8 100644 --- a/engines/kyra/sound_adlib.cpp +++ b/engines/kyra/sound_adlib.cpp @@ -395,7 +395,7 @@ private: static const uint8 _regOffset[]; static const uint16 _unkTable[]; - static const uint8 *_unkTable2[]; + static const uint8 *const _unkTable2[]; static const uint8 _unkTable2_1[]; static const uint8 _unkTable2_2[]; static const uint8 _unkTable2_3[]; @@ -2074,7 +2074,7 @@ const uint16 AdLibDriver::_unkTable[] = { // These tables are currently only used by updateCallback46(), which only ever // uses the first element of one of the sub-tables. -const uint8 *AdLibDriver::_unkTable2[] = { +const uint8 *const AdLibDriver::_unkTable2[] = { AdLibDriver::_unkTable2_1, AdLibDriver::_unkTable2_2, AdLibDriver::_unkTable2_1, diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp index f6d59922b1..e03369f700 100644 --- a/engines/kyra/staticres.cpp +++ b/engines/kyra/staticres.cpp @@ -794,8 +794,8 @@ void KyraEngine_LoK::initStaticResource() { } // audio data tables - static const char *tIntro98[] = { "INTRO%d.DAT" }; - static const char *tIngame98[] = { "KYRAM%d.DAT" }; + static const char *const tIntro98[] = { "INTRO%d.DAT" }; + static const char *const tIngame98[] = { "KYRAM%d.DAT" }; // FIXME: It seems Kyra1 MAC CD includes AdLib and MIDI music and sfx, thus we enable // support for those for now. (Based on patch #2767489 "Support for Mac Kyrandia 1 CD" by satz). @@ -1011,13 +1011,13 @@ void KyraEngine_HoF::initStaticResource() { _sequenceSoundList = tmpSndLst; // assign music data - static const char *fmtMusicFileListIntro[] = { "intro%d.twn" }; - static const char *fmtMusicFileListFinale[] = { "finale%d.twn" }; - static const char *fmtMusicFileListIngame[] = { "km%02d.twn" }; + static const char *const fmtMusicFileListIntro[] = { "intro%d.twn" }; + static const char *const fmtMusicFileListFinale[] = { "finale%d.twn" }; + static const char *const fmtMusicFileListIngame[] = { "km%02d.twn" }; - static const char *pc98MusicFileListIntro[] = { "intro%d.86" }; - static const char *pc98MusicFileListFinale[] = { "finale%d.86" }; - static const char *pc98MusicFileListIngame[] = { "km%02d.86" }; + static const char *const pc98MusicFileListIntro[] = { "intro%d.86" }; + static const char *const pc98MusicFileListFinale[] = { "finale%d.86" }; + static const char *const pc98MusicFileListIngame[] = { "km%02d.86" }; memset(_soundData, 0, sizeof(_soundData)); if (_flags.platform == Common::kPlatformPC) { @@ -1387,7 +1387,7 @@ const int GUI_v2::_sliderBarsPosition[] = { const uint8 KyraEngine_HoF::_seqTextColorPresets[] = { 0x01, 0x01, 0x00, 0x3f, 0x3f, 0x3f }; -const char *KyraEngine_HoF::_languageExtension[] = { +const char *const KyraEngine_HoF::_languageExtension[] = { "ENG", "FRE", "GER",/*, @@ -1396,7 +1396,7 @@ const char *KyraEngine_HoF::_languageExtension[] = { "JPN", }; -const char *KyraEngine_HoF::_scriptLangExt[] = { +const char *const KyraEngine_HoF::_scriptLangExt[] = { "EMC", "FMC", "GMC",/*, @@ -1885,7 +1885,7 @@ const uint8 KyraEngine_HoF::_rainbowRoomData[] = { // kyra 3 static res -const char *KyraEngine_MR::_languageExtension[] = { +const char *const KyraEngine_MR::_languageExtension[] = { "TRE", "TRF", "TRG"/*, diff --git a/engines/kyra/staticres_lol.cpp b/engines/kyra/staticres_lol.cpp index ca35569afa..bf838cd572 100644 --- a/engines/kyra/staticres_lol.cpp +++ b/engines/kyra/staticres_lol.cpp @@ -261,13 +261,13 @@ void StaticResource::freeButtonDefs(void *&ptr, int &size) { void LoLEngine::initStaticResource() { // assign music data - static const char *pcMusicFileListIntro[] = { "LOREINTR" }; - static const char *pcMusicFileListFinale[] = { "LOREFINL" }; - static const char *pcMusicFileListIngame[] = { "LORE%02d%c" }; + static const char *const pcMusicFileListIntro[] = { "LOREINTR" }; + static const char *const pcMusicFileListFinale[] = { "LOREFINL" }; + static const char *const pcMusicFileListIngame[] = { "LORE%02d%c" }; - static const char *pc98MusicFileListIntro[] = { 0, "lore84.86", "lore82.86", 0, 0, 0, "lore83.86", "lore81.86" }; - static const char *pc98MusicFileListFinale[] = { 0, 0, "lore85.86", "lore86.86", "lore87.86" }; - static const char *pc98MusicFileListIngame[] = { "lore%02d.86" }; + static const char *const pc98MusicFileListIntro[] = { 0, "lore84.86", "lore82.86", 0, 0, 0, "lore83.86", "lore81.86" }; + static const char *const pc98MusicFileListFinale[] = { 0, 0, "lore85.86", "lore86.86", "lore87.86" }; + static const char *const pc98MusicFileListIngame[] = { "lore%02d.86" }; memset(_soundData, 0, sizeof(_soundData)); if (_flags.platform == Common::kPlatformPC) { diff --git a/engines/kyra/text_hof.cpp b/engines/kyra/text_hof.cpp index 4406f3ec41..4a52d7d740 100644 --- a/engines/kyra/text_hof.cpp +++ b/engines/kyra/text_hof.cpp @@ -194,7 +194,7 @@ void KyraEngine_HoF::objectChat(const char *str, int object, int vocHigh, int vo assert(_mainCharacter.facing * 3 + chatType < ARRAYSIZE(talkScriptTable)); int script = talkScriptTable[_mainCharacter.facing * 3 + chatType]; - static const char *chatScriptFilenames[] = { + static const char *const chatScriptFilenames[] = { "_Z1FSTMT.EMC", "_Z1FQUES.EMC", "_Z1FEXCL.EMC", diff --git a/engines/kyra/text_mr.cpp b/engines/kyra/text_mr.cpp index fd4a00b73c..b680e9c6f9 100644 --- a/engines/kyra/text_mr.cpp +++ b/engines/kyra/text_mr.cpp @@ -216,7 +216,7 @@ void KyraEngine_MR::objectChat(const char *str, int object, int vocHigh, int voc 0x08, 0x09, 0x0A, 0x0B }; - static const char *talkFilenameTable[] = { + static const char *const talkFilenameTable[] = { "MTFL00S.EMC", "MTFL00Q.EMC", "MTFL00E.EMC", "MTFL00T.EMC", "MTFR00S.EMC", "MTFR00Q.EMC", "MTFR00E.EMC", "MTFR00T.EMC", "MTL00S.EMC", "MTL00Q.EMC", "MTL00E.EMC", "MTL00T.EMC", diff --git a/engines/lastexpress/entities/francois.cpp b/engines/lastexpress/entities/francois.cpp index 6bbe740730..2b170d93a3 100644 --- a/engines/lastexpress/entities/francois.cpp +++ b/engines/lastexpress/entities/francois.cpp @@ -221,7 +221,7 @@ IMPLEMENT_FUNCTION(9, Francois, function9) case 1: getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation2, kCursorKeepValue, kCursorKeepValue); - break; + // Fallback to next case case 2: getData()->location = kLocationOutsideCompartment; @@ -257,7 +257,7 @@ IMPLEMENT_FUNCTION(10, Francois, function10) case 1: getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation2, kCursorKeepValue, kCursorKeepValue); getSavePoints()->push(kEntityFrancois, kEntityMmeBoutarel, kAction102484312); - break; + // Fallback to next case case 2: getData()->location = kLocationInsideCompartment; diff --git a/engines/lure/hotspots.cpp b/engines/lure/hotspots.cpp index f38bac6e12..96e5e088ab 100644 --- a/engines/lure/hotspots.cpp +++ b/engines/lure/hotspots.cpp @@ -1673,6 +1673,12 @@ void Hotspot::doTalkTo(HotspotData *hotspot) { faceHotspot(hotspot); endAction(); + // WORKAROUND: Fix crash when talking when an ask conversation is active + if (_data->talkDestCharacterId != 0) { + // Don't allow the talk to start + return; + } + uint16 sequenceOffset = res.getHotspotAction(hotspot->actionsOffset, TALK_TO); if (sequenceOffset >= 0x8000) { showMessage(sequenceOffset); diff --git a/engines/mohawk/cursors.cpp b/engines/mohawk/cursors.cpp index cbd17e0b86..8c72c9875e 100644 --- a/engines/mohawk/cursors.cpp +++ b/engines/mohawk/cursors.cpp @@ -199,12 +199,10 @@ void MacCursorManager::setCursor(uint16 id) { if (!stream) stream = _resFork->getResource(MKTAG('C','U','R','S'), id); - if (stream) { + if (stream) setMacCursor(stream); - delete stream; - } else { + else setDefaultCursor(); - } } LivingBooksCursorManager_v2::LivingBooksCursorManager_v2() { diff --git a/engines/mohawk/graphics.cpp b/engines/mohawk/graphics.cpp index 35c9d478d8..c4326d175f 100644 --- a/engines/mohawk/graphics.cpp +++ b/engines/mohawk/graphics.cpp @@ -672,12 +672,50 @@ void MystGraphics::simulatePreviousDrawDelay(const Common::Rect &dest) { _nextAllowedDrawTime = time + _constantDrawDelay + dest.height() * dest.width() / _proportionalDrawDelay; } +void MystGraphics::copyBackBufferToScreenWithSaturation(int16 saturation) { + Graphics::Surface *screen = _vm->_system->lockScreen(); + + for (uint16 y = 0; y < _viewport.height(); y++) + for (uint16 x = 0; x < _viewport.width(); x++) { + uint32 color; + uint8 r, g, b; + + if (_pixelFormat.bytesPerPixel == 2) + color = *(const uint16 *)_backBuffer->getBasePtr(x, y); + else + color = *(const uint32 *)_backBuffer->getBasePtr(x, y); + + _pixelFormat.colorToRGB(color, r, g, b); + + r = CLIP<int16>((int16)r - saturation, 0, 255); + g = CLIP<int16>((int16)g - saturation, 0, 255); + b = CLIP<int16>((int16)b - saturation, 0, 255); + + color = _pixelFormat.RGBToColor(r, g, b); + + if (_pixelFormat.bytesPerPixel == 2) { + uint16 *dst = (uint16 *)screen->getBasePtr(x, y); + *dst = color; + } else { + uint32 *dst = (uint32 *)screen->getBasePtr(x, y); + *dst = color; + } + } + + _vm->_system->unlockScreen(); + _vm->_system->updateScreen(); +} + void MystGraphics::fadeToBlack() { - // TODO: Implement + for (int16 i = 0; i < 256; i += 32) { + copyBackBufferToScreenWithSaturation(i); + } } void MystGraphics::fadeFromBlack() { - // TODO: Implement + for (int16 i = 256; i >= 0; i -= 32) { + copyBackBufferToScreenWithSaturation(i); + } } #endif // ENABLE_MYST diff --git a/engines/mohawk/graphics.h b/engines/mohawk/graphics.h index 96357bbff1..463608a2aa 100644 --- a/engines/mohawk/graphics.h +++ b/engines/mohawk/graphics.h @@ -136,6 +136,7 @@ protected: MohawkSurface *decodeImage(uint16 id); MohawkEngine *getVM() { return (MohawkEngine *)_vm; } void simulatePreviousDrawDelay(const Common::Rect &dest); + void copyBackBufferToScreenWithSaturation(int16 saturation); private: MohawkEngine_Myst *_vm; diff --git a/engines/mohawk/myst_stacks/channelwood.cpp b/engines/mohawk/myst_stacks/channelwood.cpp index 0dd69a673a..9ca47cc92a 100644 --- a/engines/mohawk/myst_stacks/channelwood.cpp +++ b/engines/mohawk/myst_stacks/channelwood.cpp @@ -159,6 +159,16 @@ uint16 Channelwood::getVar(uint16 var) { return ((_state.waterValveStates & 0xe2) == 0x80) ? 1 : 0; case 30: // Door State return _doorOpened; + case 31: // Water flowing in pipe fork ? + // 0 -> keep sound. + // 1 -> not flowing. + // 2 --> flowing. + if ((_state.waterValveStates & 0xe2) == 0x82) // From left. + return 2; + if ((_state.waterValveStates & 0xf4) == 0xa0) // From right. + return 1; + + return 0; case 32: // Sound - Water Flowing in Pipe to Book Room Elevator return ((_state.waterValveStates & 0xf8) == 0xb0 && _state.pipeState) ? 1 : 0; case 33: // Channelwood Lower Walkway to Upper Walkway Spiral Stair Upper Door State diff --git a/engines/mohawk/myst_stacks/demo.cpp b/engines/mohawk/myst_stacks/demo.cpp index c9e806655e..fbad7dc384 100644 --- a/engines/mohawk/myst_stacks/demo.cpp +++ b/engines/mohawk/myst_stacks/demo.cpp @@ -84,7 +84,10 @@ void Demo::o_stopIntro(uint16 op, uint16 var, uint16 argc, uint16 *argv) { void Demo::o_fadeFromBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Fade from black", op); - _vm->_gfx->fadeFromBlack(); + + // FIXME: This glitches when enabled. The backbuffer is drawn to screen, + // and then the fading occurs, causing the background to appear for one frame. + // _vm->_gfx->fadeFromBlack(); } void Demo::o_fadeToBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) { @@ -101,14 +104,14 @@ void Demo::returnToMenu_run() { switch (_returnToMenuStep){ case 0: _vm->_gfx->fadeToBlack(); - _vm->changeToCard(2003, true); + _vm->changeToCard(2003, false); _vm->_gfx->fadeFromBlack(); _returnToMenuStep++; break; case 1: _vm->_gfx->fadeToBlack(); - _vm->changeToCard(2001, true); + _vm->changeToCard(2001, false); _vm->_gfx->fadeFromBlack(); _vm->_cursor->showCursor(); diff --git a/engines/mohawk/myst_stacks/dni.cpp b/engines/mohawk/myst_stacks/dni.cpp index cf28945c71..2ced265f02 100644 --- a/engines/mohawk/myst_stacks/dni.cpp +++ b/engines/mohawk/myst_stacks/dni.cpp @@ -106,7 +106,7 @@ void Dni::o_handPage(uint16 op, uint16 var, uint16 argc, uint16 *argv) { if (_globals.ending == 1 && _vm->_video->getElapsedTime(atrus) > (uint)Audio::Timestamp(0, 6801, 600).msecs()) { _globals.ending = 2; _globals.heldPage = 0; - _vm->_cursor->setCursor(kDefaultMystCursor); + _vm->setMainCursor(kDefaultMystCursor); // Play movie end (atrus leaving) _vm->_video->setVideoBounds(atrus, Audio::Timestamp(0, 14813, 600), Audio::Timestamp(0xFFFFFFFF)); diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp index 66492d1200..b67b333a85 100644 --- a/engines/mohawk/myst_stacks/myst.cpp +++ b/engines/mohawk/myst_stacks/myst.cpp @@ -1350,8 +1350,10 @@ void Myst::o_generatorButtonPressed(uint16 op, uint16 var, uint16 argc, uint16 * if (_state.generatorVoltage) _vm->_sound->replaceSoundMyst(8297); - else + else { _vm->_sound->replaceSoundMyst(9297); + _vm->_sound->stopBackgroundMyst(); + } } else { if (_generatorVoltage) _vm->_sound->replaceSoundMyst(6297); diff --git a/engines/mohawk/myst_stacks/preview.cpp b/engines/mohawk/myst_stacks/preview.cpp index 1b72c85d96..31e22bb8c5 100644 --- a/engines/mohawk/myst_stacks/preview.cpp +++ b/engines/mohawk/myst_stacks/preview.cpp @@ -85,7 +85,10 @@ void Preview::o_fadeToBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) { void Preview::o_fadeFromBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Fade from black", op); - _vm->_gfx->fadeFromBlack(); + + // FIXME: This glitches when enabled. The backbuffer is drawn to screen, + // and then the fading occurs, causing the background to appear for one frame. + // _vm->_gfx->fadeFromBlack(); } void Preview::o_stayHere(uint16 op, uint16 var, uint16 argc, uint16 *argv) { @@ -99,6 +102,7 @@ void Preview::o_stayHere(uint16 op, uint16 var, uint16 argc, uint16 *argv) { void Preview::o_speechStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Speech stop", op); + _vm->_sound->stopSound(3001); _speechRunning = false; _globals.currentAge = 2; } @@ -143,7 +147,7 @@ void Preview::speech_run() { case 2: // Go to Myst if (_currentCue >= 2) { _vm->_gfx->fadeToBlack(); - _vm->changeToCard(3002, true); + _vm->changeToCard(3002, false); _vm->_gfx->fadeFromBlack(); _speechStep++; @@ -186,7 +190,7 @@ void Preview::speech_run() { break; _vm->_gfx->fadeToBlack(); - _vm->changeToCard(3005, true); + _vm->changeToCard(3005, false); _vm->_gfx->fadeFromBlack(); _speechNextTime = time + 1000; _speechStep++; diff --git a/engines/mohawk/myst_stacks/slides.cpp b/engines/mohawk/myst_stacks/slides.cpp index 943cb90071..794793e49c 100644 --- a/engines/mohawk/myst_stacks/slides.cpp +++ b/engines/mohawk/myst_stacks/slides.cpp @@ -63,7 +63,7 @@ void Slides::runPersistentScripts() { // Used on Cards... if (_vm->_system->getMillis() > _nextCardTime) { _vm->_gfx->fadeToBlack(); - _vm->changeToCard(_nextCardID, true); + _vm->changeToCard(_nextCardID, false); _vm->_gfx->fadeFromBlack(); } } diff --git a/engines/parallaction/gfxbase.cpp b/engines/parallaction/gfxbase.cpp index 48d84ed101..c351551e36 100644 --- a/engines/parallaction/gfxbase.cpp +++ b/engines/parallaction/gfxbase.cpp @@ -55,17 +55,14 @@ const char *GfxObj::getName() const { return _name; } - uint GfxObj::getNum() { return _frames->getNum(); } - void GfxObj::getRect(uint f, Common::Rect &r) { _frames->getRect(f, r); } - byte *GfxObj::getData(uint f) { return _frames->getData(f); } @@ -77,7 +74,6 @@ uint GfxObj::getSize(uint f) { return _frames->getSize(f); } - void GfxObj::setFlags(uint32 flags) { _flags |= flags; } @@ -108,6 +104,7 @@ void Gfx::resetSceneDrawList() { } GfxObj* Gfx::loadAnim(const char *name) { + debugC(1, kDebugGraphics, "Gfx::loadAnim(\"%s\")", name); Frames* frames = _disk->loadFrames(name); assert(frames); @@ -146,7 +143,6 @@ GfxObj* Gfx::loadDoor(const char *name) { return obj; } - void Gfx::freeLocationObjects() { freeDialogueObjects(); freeLabels(); @@ -157,6 +153,7 @@ void Gfx::freeCharacterObjects() { } void BackgroundInfo::loadGfxObjMask(const char *name, GfxObj *obj) { + debugC(1, kDebugGraphics, "BackgroundInfo::loadGfxObjMask(\"%s\")", name); Common::Rect rect; obj->getRect(0, rect); @@ -180,6 +177,7 @@ void Gfx::showGfxObj(GfxObj* obj, bool visible) { if (!obj) { return; } + debugC(1, kDebugGraphics, "Gfx::showGfxObj(\"%s\", visible:%d)", obj->getName(), visible ? 1 : 0); if (visible) { obj->setFlags(kGfxObjVisible); @@ -188,27 +186,27 @@ void Gfx::showGfxObj(GfxObj* obj, bool visible) { } if (obj->_hasMask) { + debugC(1, kDebugGraphics, "\tHas Mask"); _backgroundInfo->toggleMaskPatch(obj->_maskId, obj->x, obj->y, visible); } if (obj->_hasPath) { + debugC(1, kDebugGraphics, "\tHas Path"); _backgroundInfo->togglePathPatch(obj->_pathId, obj->x, obj->y, visible); } } - - bool compareZ(const GfxObj* a1, const GfxObj* a2) { return (a1->z == a2->z) ? (a1->_prog < a2->_prog) : (a1->z < a2->z); } void Gfx::sortScene() { + debugC(3, kDebugGraphics, "Gfx::sortScene()"); GfxObjArray::iterator first = _sceneObjects.begin(); GfxObjArray::iterator last = _sceneObjects.end(); Common::sort(first, last, compareZ); } - void Gfx::drawGfxObject(GfxObj *obj, Graphics::Surface &surf) { if (!obj->isVisible()) { return; @@ -236,16 +234,13 @@ void Gfx::drawGfxObject(GfxObj *obj, Graphics::Surface &surf) { } - void Gfx::drawText(Font *font, Graphics::Surface* surf, uint16 x, uint16 y, const char *text, byte color) { byte *dst = (byte*)surf->getBasePtr(x, y); font->setColor(color); font->drawString(dst, surf->w, text); } - void Gfx::unpackBlt(const Common::Rect& r, byte *data, uint size, Graphics::Surface *surf, uint16 z, uint scale, byte transparentColor) { - byte *d = _unpackedBitmap; uint pixelsLeftInLine = r.width(); @@ -273,7 +268,6 @@ void Gfx::unpackBlt(const Common::Rect& r, byte *data, uint size, Graphics::Surf blt(r, _unpackedBitmap, surf, z, scale, transparentColor); } - void Gfx::bltMaskScale(const Common::Rect& r, byte *data, Graphics::Surface *surf, uint16 z, uint scale, byte transparentColor) { if (scale == 100) { // use optimized path @@ -301,7 +295,6 @@ void Gfx::bltMaskScale(const Common::Rect& r, byte *data, Graphics::Surface *sur dstRect.clip(clipper); if (!dstRect.isValidRect()) return; - // clipped source rectangle Common::Rect srcRect; srcRect.left = (dstRect.left - scaledLeft) * 100 / scale; @@ -448,10 +441,8 @@ void Gfx::bltNoMaskNoScale(const Common::Rect& r, byte *data, Graphics::Surface } } - void Gfx::blt(const Common::Rect& r, byte *data, Graphics::Surface *surf, uint16 z, uint scale, byte transparentColor) { bltMaskScale(r, data, surf, z, scale, transparentColor); } - } // namespace Parallaction diff --git a/engines/parallaction/walk.cpp b/engines/parallaction/walk.cpp index 5d5695ace4..53237db4ef 100644 --- a/engines/parallaction/walk.cpp +++ b/engines/parallaction/walk.cpp @@ -26,8 +26,6 @@ namespace Parallaction { -#define IS_PATH_CLEAR(x,y) _vm->_gfx->_backgroundInfo->_path->getValue((x), (y)) - enum { WALK_LEFT = 0, WALK_RIGHT = 1, @@ -56,21 +54,45 @@ WalkFrames _char24WalkFrames_NS = { { 2, 2, 4, 4 } }; +static int getPathWidth() { + if (!_vm->_gfx->_backgroundInfo->_path) { + warning("getPathWidth() _path is NULL!"); + return 0; + } else + return _vm->_gfx->_backgroundInfo->_path->w; +} + +static int getPathHeight() { + if (!_vm->_gfx->_backgroundInfo->_path) { + warning("getPathHeight() _path is NULL!"); + return 0; + } else + return _vm->_gfx->_backgroundInfo->_path->h; +} + +static bool isPathClear(uint16 x, uint16 y) { + if (!_vm->_gfx->_backgroundInfo->_path) { + warning("isPathClear() _path is NULL!"); + return false; + } else + return (_vm->_gfx->_backgroundInfo->_path->getValue(x, y) ? true : false); +} + // adjusts position towards nearest walkable point void PathWalker_NS::correctPathPoint(Common::Point &to) { - if (IS_PATH_CLEAR(to.x, to.y)) return; + if (isPathClear(to.x, to.y)) return; - int maxX = _vm->_gfx->_backgroundInfo->_path->w; - int maxY = _vm->_gfx->_backgroundInfo->_path->h; + int maxX = getPathWidth(); + int maxY = getPathHeight(); int16 right = to.x; int16 left = to.x; do { right++; - } while ((right < maxX) && !IS_PATH_CLEAR(right, to.y)); + } while ((right < maxX) && !isPathClear(right, to.y)); do { left--; - } while ((left > 0) && !IS_PATH_CLEAR(left, to.y)); + } while ((left > 0) && !isPathClear(left, to.y)); right = (right == maxX) ? 1000 : right - to.x; left = (left == 0) ? 1000 : to.x - left; @@ -78,10 +100,10 @@ void PathWalker_NS::correctPathPoint(Common::Point &to) { int16 bottom = to.y; do { top--; - } while ((top > 0) && !IS_PATH_CLEAR(to.x, top)); + } while ((top > 0) && !isPathClear(to.x, top)); do { bottom++; - } while ((bottom < maxY) && !IS_PATH_CLEAR(to.x, bottom)); + } while ((bottom < maxY) && !isPathClear(to.x, bottom)); top = (top == 0) ? 1000 : to.y - top; bottom = (bottom == maxY) ? 1000 : bottom - to.y; @@ -203,10 +225,10 @@ uint16 PathWalker_NS::walkFunc1(const Common::Point &to, Common::Point& node) { while (foot != arg) { - if (foot.x < to.x && IS_PATH_CLEAR(foot.x + 1, foot.y)) foot.x++; - if (foot.x > to.x && IS_PATH_CLEAR(foot.x - 1, foot.y)) foot.x--; - if (foot.y < to.y && IS_PATH_CLEAR(foot.x, foot.y + 1)) foot.y++; - if (foot.y > to.y && IS_PATH_CLEAR(foot.x, foot.y - 1)) foot.y--; + if (foot.x < to.x && isPathClear(foot.x + 1, foot.y)) foot.x++; + if (foot.x > to.x && isPathClear(foot.x - 1, foot.y)) foot.x--; + if (foot.y < to.y && isPathClear(foot.x, foot.y + 1)) foot.y++; + if (foot.y > to.y && isPathClear(foot.x, foot.y - 1)) foot.y--; if (foot == v8 && foot != arg) { // foot couldn't move and still away from target @@ -215,10 +237,10 @@ uint16 PathWalker_NS::walkFunc1(const Common::Point &to, Common::Point& node) { while (foot != arg) { - if (foot.x < to.x && !IS_PATH_CLEAR(foot.x + 1, foot.y)) foot.x++; - if (foot.x > to.x && !IS_PATH_CLEAR(foot.x - 1, foot.y)) foot.x--; - if (foot.y < to.y && !IS_PATH_CLEAR(foot.x, foot.y + 1)) foot.y++; - if (foot.y > to.y && !IS_PATH_CLEAR(foot.x, foot.y - 1)) foot.y--; + if (foot.x < to.x && !isPathClear(foot.x + 1, foot.y)) foot.x++; + if (foot.x > to.x && !isPathClear(foot.x - 1, foot.y)) foot.x--; + if (foot.y < to.y && !isPathClear(foot.x, foot.y + 1)) foot.y++; + if (foot.y > to.y && !isPathClear(foot.x, foot.y - 1)) foot.y--; if (foot == v8 && foot != arg) return 0; @@ -238,19 +260,19 @@ uint16 PathWalker_NS::walkFunc1(const Common::Point &to, Common::Point& node) { } void PathWalker_NS::clipMove(Common::Point& pos, const Common::Point& to) { - if ((pos.x < to.x) && (pos.x < _vm->_gfx->_backgroundInfo->_path->w) && IS_PATH_CLEAR(pos.x + 2, pos.y)) { + if ((pos.x < to.x) && (pos.x < getPathWidth()) && isPathClear(pos.x + 2, pos.y)) { pos.x = (pos.x + 2 < to.x) ? pos.x + 2 : to.x; } - if ((pos.x > to.x) && (pos.x > 0) && IS_PATH_CLEAR(pos.x - 2, pos.y)) { + if ((pos.x > to.x) && (pos.x > 0) && isPathClear(pos.x - 2, pos.y)) { pos.x = (pos.x - 2 > to.x) ? pos.x - 2 : to.x; } - if ((pos.y < to.y) && (pos.y < _vm->_gfx->_backgroundInfo->_path->h) && IS_PATH_CLEAR(pos.x, pos.y + 2)) { + if ((pos.y < to.y) && (pos.y < getPathHeight()) && isPathClear(pos.x, pos.y + 2)) { pos.y = (pos.y + 2 <= to.y) ? pos.y + 2 : to.y; } - if ((pos.y > to.y) && (pos.y > 0) && IS_PATH_CLEAR(pos.x, pos.y - 2)) { + if ((pos.y > to.y) && (pos.y > 0) && isPathClear(pos.x, pos.y - 2)) { pos.y = (pos.y - 2 >= to.y) ? pos.y - 2 : to.y; } } @@ -368,10 +390,10 @@ bool PathWalker_BR::directPathExists(const Common::Point &from, const Common::Po Common::Point p(copy); while (p != to) { - if (p.x < to.x && IS_PATH_CLEAR(p.x + 1, p.y)) p.x++; - if (p.x > to.x && IS_PATH_CLEAR(p.x - 1, p.y)) p.x--; - if (p.y < to.y && IS_PATH_CLEAR(p.x, p.y + 1)) p.y++; - if (p.y > to.y && IS_PATH_CLEAR(p.x, p.y - 1)) p.y--; + if (p.x < to.x && isPathClear(p.x + 1, p.y)) p.x++; + if (p.x > to.x && isPathClear(p.x - 1, p.y)) p.x--; + if (p.y < to.y && isPathClear(p.x, p.y + 1)) p.y++; + if (p.y > to.y && isPathClear(p.x, p.y - 1)) p.y--; if (p == copy && p != to) return false; @@ -620,7 +642,7 @@ void PathWalker_BR::doWalk(State &s) { assert (!s._walkPath.empty()); Common::Point p(*s._walkPath.begin()); - if (s._startFoot.y < p.y && (s._startFoot.y + yStep) < maxY && IS_PATH_CLEAR(s._startFoot.x, s._startFoot.y + yStep)) { + if (s._startFoot.y < p.y && (s._startFoot.y + yStep) < maxY && isPathClear(s._startFoot.x, s._startFoot.y + yStep)) { if (yStep + s._startFoot.y <= p.y) { s._stillWalkingTowardsNode = true; delta.y = yStep; @@ -631,7 +653,7 @@ void PathWalker_BR::doWalk(State &s) { } s._dirFrame = 9; } else - if (s._startFoot.y > p.y && (s._startFoot.y - yStep) > minY && IS_PATH_CLEAR(s._startFoot.x, s._startFoot.y - yStep)) { + if (s._startFoot.y > p.y && (s._startFoot.y - yStep) > minY && isPathClear(s._startFoot.x, s._startFoot.y - yStep)) { if (s._startFoot.y - yStep >= p.y) { s._stillWalkingTowardsNode = true; delta.y = yStep; @@ -643,7 +665,7 @@ void PathWalker_BR::doWalk(State &s) { s._dirFrame = 0; } - if (s._startFoot.x < p.x && (s._startFoot.x + xStep) < maxX && IS_PATH_CLEAR(s._startFoot.x + xStep, s._startFoot.y)) { + if (s._startFoot.x < p.x && (s._startFoot.x + xStep) < maxX && isPathClear(s._startFoot.x + xStep, s._startFoot.y)) { if (s._startFoot.x + xStep <= p.x) { s._stillWalkingTowardsNode = true; delta.x = xStep; @@ -656,7 +678,7 @@ void PathWalker_BR::doWalk(State &s) { s._dirFrame = 18; // right } } else - if (s._startFoot.x > p.x && (s._startFoot.x - xStep) > minX && IS_PATH_CLEAR(s._startFoot.x - xStep, s._startFoot.y)) { + if (s._startFoot.x > p.x && (s._startFoot.x - xStep) > minX && isPathClear(s._startFoot.x - xStep, s._startFoot.y)) { if (s._startFoot.x - xStep >= p.x) { s._stillWalkingTowardsNode = true; delta.x = xStep; diff --git a/engines/queen/graphics.cpp b/engines/queen/graphics.cpp index d9a8a10d70..fbb72fde44 100644 --- a/engines/queen/graphics.cpp +++ b/engines/queen/graphics.cpp @@ -1201,7 +1201,7 @@ void BamScene::updateCarAnimation() { } void BamScene::updateFightAnimation() { - static const BamDataBlock *fightDataBlocks[] = { + static const BamDataBlock *const fightDataBlocks[] = { _fight1Data, _fight2Data, _fight3Data diff --git a/engines/queen/input.cpp b/engines/queen/input.cpp index 5a04b0f8a4..30bf681e63 100644 --- a/engines/queen/input.cpp +++ b/engines/queen/input.cpp @@ -30,7 +30,7 @@ namespace Queen { -const char *Input::_commandKeys[] = { +const char *const Input::_commandKeys[] = { "ocmglptu", // English "osbgpnre", // German "ofdnepau", // French diff --git a/engines/queen/input.h b/engines/queen/input.h index 93e2bde638..0aa04dd026 100644 --- a/engines/queen/input.h +++ b/engines/queen/input.h @@ -141,7 +141,7 @@ private: const char *_currentCommandKeys; //! command keys for all languages - static const char *_commandKeys[]; + static const char *const _commandKeys[]; //! verbs matching the command keys static const Verb _verbKeys[]; diff --git a/engines/queen/musicdata.cpp b/engines/queen/musicdata.cpp index d3974dcdbf..a046355446 100644 --- a/engines/queen/musicdata.cpp +++ b/engines/queen/musicdata.cpp @@ -1495,7 +1495,7 @@ const TuneData Sound::_tune[] = { { { 77, 1017, 0 }, { 0, 0 }, 1, 0 } }; -const char *Sound::_sfxName[] = { +const char *const Sound::_sfxName[] = { /* 1 - Door Open (standard) */ "116Bssss", diff --git a/engines/queen/resource.cpp b/engines/queen/resource.cpp index d837a63cb5..84043fa3af 100644 --- a/engines/queen/resource.cpp +++ b/engines/queen/resource.cpp @@ -30,7 +30,7 @@ namespace Queen { -const char *Resource::_tableFilename = "queen.tbl"; +const char *const Resource::_tableFilename = "queen.tbl"; const RetailGameVersion Resource::_gameVersions[] = { { "PEM10", 1, 0x00000008, 22677657 }, diff --git a/engines/queen/resource.h b/engines/queen/resource.h index 5c6746e92f..ef8e463631 100644 --- a/engines/queen/resource.h +++ b/engines/queen/resource.h @@ -158,7 +158,7 @@ protected: static const RetailGameVersion *detectGameVersionFromSize(uint32 size); //! resource table filename (queen.tbl) - static const char *_tableFilename; + static const char *const _tableFilename; //! known FOTAQ versions static const RetailGameVersion _gameVersions[]; diff --git a/engines/queen/sound.h b/engines/queen/sound.h index 2aabb0d73b..371500f356 100644 --- a/engines/queen/sound.h +++ b/engines/queen/sound.h @@ -104,7 +104,7 @@ public: static const SongData _song[]; static const TuneData _tuneDemo[]; static const TuneData _tune[]; - static const char *_sfxName[]; + static const char *const _sfxName[]; static const int16 _jungleList[]; protected: diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp index fe37ed8995..994b35cbf8 100644 --- a/engines/saga/interface.cpp +++ b/engines/saga/interface.cpp @@ -324,6 +324,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) { } Interface::~Interface() { + _vm->getTimerManager()->removeTimerProc(&saveReminderCallback); } void Interface::saveReminderCallback(void *refCon) { diff --git a/engines/saga/sthread.cpp b/engines/saga/sthread.cpp index afd528f4b5..6e5cc68ae6 100644 --- a/engines/saga/sthread.cpp +++ b/engines/saga/sthread.cpp @@ -102,9 +102,8 @@ void Script::wakeUpThreadsDelayed(int waitType, int sleepTime) { void Script::executeThreads(uint msec) { ScriptThreadList::iterator threadIterator; - if (_vm->_interface->_statusTextInput) { + if (_vm->_interface->_statusTextInput) return; - } threadIterator = _threadList.begin(); @@ -129,11 +128,10 @@ void Script::executeThreads(uint msec) { switch (thread._waitType) { case kWaitTypeDelay: - if (thread._sleepTime < msec) { + if (thread._sleepTime < msec) thread._sleepTime = 0; - } else { + else thread._sleepTime -= msec; - } if (thread._sleepTime == 0) thread._flags &= ~kTFlagWaiting; @@ -141,11 +139,9 @@ void Script::executeThreads(uint msec) { case kWaitTypeWalk: { - ActorData *actor; - actor = (ActorData *)thread._threadObj; - if (actor->_currentAction == kActionWait) { + ActorData *actor = (ActorData *)thread._threadObj; + if (actor->_currentAction == kActionWait) thread._flags &= ~kTFlagWaiting; - } } break; @@ -157,9 +153,8 @@ void Script::executeThreads(uint msec) { } if (!(thread._flags & kTFlagWaiting)) { - if (runThread(thread)) { + if (runThread(thread)) break; - } } ++threadIterator; diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp index 33ca3a6c9c..56da696592 100644 --- a/engines/sci/detection.cpp +++ b/engines/sci/detection.cpp @@ -296,8 +296,10 @@ Common::String convertSierraGameId(Common::String sierraId, uint32 *gameFlags, R sierraId == "mg" || sierraId == "pq" || sierraId == "jones" || sierraId == "cardgames" || sierraId == "solitare" || - sierraId == "hoyle3" || sierraId == "hoyle4") + sierraId == "hoyle4") demoThreshold = 40; + if (sierraId == "hoyle3") + demoThreshold = 45; // cnick-kq has 42 scripts. The actual hoyle 3 demo has 27. if (sierraId == "fp" || sierraId == "gk" || sierraId == "pq4") demoThreshold = 150; @@ -310,8 +312,11 @@ Common::String convertSierraGameId(Common::String sierraId, uint32 *gameFlags, R return "cnick-lsl"; if (sierraId == "sq4" && resources->size() == 34) return "cnick-sq"; - - // TODO: cnick-kq, cnick-laurabow and cnick-longbow (their resources can't be read) + if (sierraId == "hoyle3" && resources->size() == 42) + return "cnick-kq"; + if (sierraId == "rh budget" && resources->size() == 39) + return "cnick-longbow"; + // TODO: cnick-laurabow (the name of the game object contains junk) // Handle Astrochicken 1 (SQ3) and 2 (SQ4) if (sierraId == "sq3" && resources->size() == 20) diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 3b18a1f68d..455223a086 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -91,7 +91,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, - // Castle of Dr. Brain - English DOS Floppy EGA (from omer_mor, bug report #3035349) + // Castle of Dr. Brain - English DOS 5.25" Floppy EGA (from omer_mor, bug report #3035349) {"castlebrain", "EGA", { {"resource.map", 0, "88d106f945f7fd9d1aeda961cfec38a9", 2646}, {"resource.000", 0, "6e125f4ce3f4f5c35f2617c7b66c6e21", 25325}, @@ -104,6 +104,16 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + // Castle of Dr. Brain - English DOS 3.5" Floppy EGA (from nozomi77, bug report #3405307) + {"castlebrain", "EGA", { + {"resource.map", 0, "dfcf23e36cb81223bdf11166aaf90754", 2730}, + {"resource.000", 0, "27ec5fa09cd12a7fd16e86d96a2ed245", 300857}, + {"resource.001", 0, "6e0020a9f9bef9a9d65943dc013f14b5", 222108}, + {"resource.002", 0, "de2f182529efaad2c4b510b452ab77ac", 633662}, + {"resource.003", 0, "38b4b37febc6b4f5061c461a283df148", 430388}, + AD_LISTEND}, + Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + // Castle of Dr. Brain - English DOS Floppy (from jvprat) // Executable scanning reports "1.000.044", Floppy label reports "1.0, 10.30.91", VERSION file reports "1.000" // SCI interpreter version 1.000.510 @@ -2649,6 +2659,14 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, + // Police Quest 4 - German DOS CD (German text, English speech) + // Supplied by markcoolio in bug report #3392955 + {"pq4", "CD", { + {"resource.map", 0, "a398076371ed0e1e706c8f9fb9fc7ac5", 11386}, + {"resource.000", 0, "6ff21954e0a2c5992279e7eb787c8d56", 18918747}, + AD_LISTEND}, + Common::DE_DEU, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, + // Police Quest 4 - English DOS // SCI interpreter version 2.000.000 (a guess?) {"pq4", "", { diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h index 0c5d4e680d..3c5af6fab7 100644 --- a/engines/sci/engine/kernel_tables.h +++ b/engines/sci/engine/kernel_tables.h @@ -602,7 +602,7 @@ static SciKernelMapEntry s_kernelMap[] = { }; /** Default kernel name table. */ -static const char *s_defaultKernelNames[] = { +static const char *const s_defaultKernelNames[] = { /*0x00*/ "Load", /*0x01*/ "UnLoad", /*0x02*/ "ScriptID", @@ -751,7 +751,7 @@ static const char *s_defaultKernelNames[] = { // NOTE: 0x72-0x79, 0x85-0x86, 0x88 are from the GK2 demo (which has debug support) and are // just Dummy in other SCI2 games. -static const char *sci2_default_knames[] = { +static const char *const sci2_default_knames[] = { /*0x00*/ "Load", /*0x01*/ "UnLoad", /*0x02*/ "ScriptID", @@ -916,7 +916,7 @@ static const char *sci2_default_knames[] = { /*0x9f*/ "MessageBox" }; -static const char *sci21_default_knames[] = { +static const char *const sci21_default_knames[] = { /*0x00*/ "Load", /*0x01*/ "UnLoad", /*0x02*/ "ScriptID", diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 36de767464..556e5249b6 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -49,6 +49,7 @@ #include "sci/graphics/text16.h" #include "sci/graphics/view.h" #ifdef ENABLE_SCI32 +#include "sci/graphics/text32.h" #include "sci/graphics/frameout.h" #include "sci/video/robot_decoder.h" #endif @@ -1380,15 +1381,19 @@ reg_t kIsOnMe(EngineState *s, int argc, reg_t *argv) { } reg_t kCreateTextBitmap(EngineState *s, int argc, reg_t *argv) { - // TODO: argument 0 is usually 0, and arguments 1 and 2 are usually 1 switch (argv[0].toUint16()) { case 0: { if (argc != 4) { warning("kCreateTextBitmap(0): expected 4 arguments, got %i", argc); return NULL_REG; } - //reg_t object = argv[3]; - //Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text))); + reg_t object = argv[3]; + Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text))); + debugC(kDebugLevelStrings, "kCreateTextBitmap case 0 (%04x:%04x, %04x:%04x, %04x:%04x)", + PRINT_REG(argv[1]), PRINT_REG(argv[2]), PRINT_REG(argv[3])); + debugC(kDebugLevelStrings, "%s", text.c_str()); + // TODO: arguments 1 and 2 + g_sci->_gfxText32->createTextBitmap(object); break; } case 1: { @@ -1396,8 +1401,11 @@ reg_t kCreateTextBitmap(EngineState *s, int argc, reg_t *argv) { warning("kCreateTextBitmap(0): expected 2 arguments, got %i", argc); return NULL_REG; } - //reg_t object = argv[1]; - //Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text))); + reg_t object = argv[1]; + Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text))); + debugC(kDebugLevelStrings, "kCreateTextBitmap case 1 (%04x:%04x)", PRINT_REG(argv[1])); + debugC(kDebugLevelStrings, "%s", text.c_str()); + g_sci->_gfxText32->createTextBitmap(object); break; } default: diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp index b383f88840..783845bb76 100644 --- a/engines/sci/engine/kstring.cpp +++ b/engines/sci/engine/kstring.cpp @@ -42,6 +42,14 @@ reg_t kStrCat(EngineState *s, int argc, reg_t *argv) { Common::String s1 = s->_segMan->getString(argv[0]); Common::String s2 = s->_segMan->getString(argv[1]); + // The Japanese version of PQ2 splits the two strings here + // (check bug #3396887). + if (g_sci->getGameId() == GID_PQ2 && + g_sci->getLanguage() == Common::JA_JPN) { + s1 = g_sci->strSplit(s1.c_str(), NULL); + s2 = g_sci->strSplit(s2.c_str(), NULL); + } + s1 += s2; s->_segMan->strcpy(argv[0], s1.c_str()); return argv[0]; diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index a714980a35..7efcb42f4b 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -855,26 +855,8 @@ const uint16 qfg3PatchImportDialog[] = { PATCH_END }; -// Script 23 in QFG3 has a typo/bug which makes it loop endlessly and -// read garbage. Fixes bug #3040722. -const byte qfg3DialogCrash[] = { - 5, - 0x34, 0xe7, 0x03, // ldi 3e7 (999) - 0x22, // lt? - 0x33, // jmp [back] ---> BUG! Infinite loop - 0 -}; - -const uint16 qfg3PatchDialogCrash[] = { - 0x34, 0xe7, 0x03, // ldi 3e7 (999) - 0x22, // lt? - 0x31, // bnt [back] - PATCH_END -}; - // script, description, magic DWORD, adjust const SciScriptSignature qfg3Signatures[] = { - { 23, "dialog crash", 1, PATCH_MAGICDWORD(0xe7, 0x03, 0x22, 0x33), -1, qfg3DialogCrash, qfg3PatchDialogCrash }, { 944, "import dialog continuous calls", 1, PATCH_MAGICDWORD(0x2a, 0x31, 0x0b, 0x7a), -1, qfg3SignatureImportDialog, qfg3PatchImportDialog }, SCI_SIGNATUREENTRY_TERMINATOR }; diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp index b2cde47f4a..968afcb11c 100644 --- a/engines/sci/engine/workarounds.cpp +++ b/engines/sci/engine/workarounds.cpp @@ -209,6 +209,8 @@ const SciWorkaroundEntry kDeviceInfo_workarounds[] = { // gameID, room,script,lvl, object-name, method-name, call,index, workaround 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_PQ1, 500, 500, 0, "endInter", "changeState", 0x3e8, 0, { WORKAROUND_IGNORE, 0 } }, // restoring a game at the map scene (bug #3389579) + { GID_PQ1, 500, 500, 0, "endInter", "changeState", 0x46b, 0, { WORKAROUND_IGNORE, 0 } }, // restoring a game at the map scene (bug #3389579) { 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 diff --git a/engines/sci/graphics/cursor.cpp b/engines/sci/graphics/cursor.cpp index ec49a38814..57c65aa6e0 100644 --- a/engines/sci/graphics/cursor.cpp +++ b/engines/sci/graphics/cursor.cpp @@ -227,8 +227,10 @@ void GfxCursor::kernelSetView(GuiResourceId viewNum, int loopNum, int celNum, Co // Game, newPosition, validRect static const SciCursorSetPositionWorkarounds setPositionWorkarounds[] = { { GID_ISLANDBRAIN, 84, 109, 46, 76, 174, 243 }, // island of dr. brain / game menu + { GID_ISLANDBRAIN,143, 135, 57, 102, 163, 218 },// island of dr. brain / pause menu within copy protection { GID_LSL5, 23, 171, 0, 0, 26, 320 }, // larry 5 / skip forward helper { GID_QFG1VGA, 64, 174, 40, 37, 74, 284 }, // Quest For Glory 1 VGA / run/walk/sleep sub-menu + { GID_QFG3, 70, 170, 40, 61, 81, 258 }, // Quest For Glory 3 / run/walk/sleep sub-menu { (SciGameId)0, -1, -1, -1, -1, -1, -1 } }; diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp index 11948d5d38..5499a2d192 100644 --- a/engines/sci/graphics/frameout.cpp +++ b/engines/sci/graphics/frameout.cpp @@ -43,6 +43,7 @@ #include "sci/graphics/paint32.h" #include "sci/graphics/palette.h" #include "sci/graphics/picture.h" +#include "sci/graphics/text32.h" #include "sci/graphics/frameout.h" #include "sci/video/robot_decoder.h" @@ -316,44 +317,6 @@ void GfxFrameout::sortPlanes() { Common::sort(_planes.begin(), _planes.end(), planeSortHelper); } -static int16 GetLongest(const char *text, int16 maxWidth, GfxFont *font) { - uint16 curChar = 0; - int16 maxChars = 0, curCharCount = 0; - uint16 width = 0; - - while (width <= maxWidth) { - curChar = (*(const byte *)text++); - - switch (curChar) { - // We need to add 0xD, 0xA and 0xD 0xA to curCharCount and then exit - // which means, we split text like - // 'Mature, experienced software analyst available.' 0xD 0xA - // 'Bug installation a proven speciality. "No version too clean."' (normal game text, this is from lsl2) - // and 0xA '-------' 0xA (which is the official sierra subtitle separator) - // Sierra did it the same way. - case 0xD: - // Check, if 0xA is following, if so include it as well - if ((*(const unsigned char *)text) == 0xA) - curCharCount++; - // it's meant to pass through here - case 0xA: - curCharCount++; - // and it's also meant to pass through here - case 0: - return curCharCount; - case ' ': - maxChars = curCharCount; // return count up to (but not including) breaking space - break; - } - if (width + font->getCharWidth(curChar) > maxWidth) - break; - width += font->getCharWidth(curChar); - curCharCount++; - } - - return maxChars; -} - void GfxFrameout::kernelFrameout() { if (g_sci->_robotDecoder->isVideoLoaded()) { bool skipVideo = false; @@ -578,62 +541,25 @@ void GfxFrameout::kernelFrameout() { } } else { // Most likely a text entry - // This draws text the "SCI0-SCI11" way. In SCI2, text is prerendered in kCreateTextBitmap - // TODO: rewrite this the "SCI2" way (i.e. implement the text buffer to draw inside kCreateTextBitmap) if (lookupSelector(_segMan, itemEntry->object, SELECTOR(text), NULL, NULL) == kSelectorVariable) { - reg_t stringObject = readSelector(_segMan, itemEntry->object, SELECTOR(text)); - - // The object in the text selector of the item can be either a raw string - // or a Str object. In the latter case, we need to access the object's data - // selector to get the raw string. - if (_segMan->isHeapObject(stringObject)) - stringObject = readSelector(_segMan, stringObject, SELECTOR(data)); - - Common::String text = _segMan->getString(stringObject); - GfxFont *font = _cache->getFont(readSelectorValue(_segMan, itemEntry->object, SELECTOR(font))); - bool dimmed = readSelectorValue(_segMan, itemEntry->object, SELECTOR(dimmed)); - uint16 foreColor = readSelectorValue(_segMan, itemEntry->object, SELECTOR(fore)); - - itemEntry->y = ((itemEntry->y * _screen->getHeight()) / scriptsRunningHeight); - itemEntry->x = ((itemEntry->x * _screen->getWidth()) / scriptsRunningWidth); - - uint16 startX = itemEntry->x + it->planeRect.left; - uint16 curY = itemEntry->y + it->planeRect.top; - const char *txt = text.c_str(); + TextEntry *textEntry = g_sci->_gfxText32->getTextEntry(itemEntry->object); + uint16 startX = ((textEntry->x * _screen->getWidth()) / scriptsRunningWidth) + it->planeRect.left; + uint16 startY = ((textEntry->y * _screen->getHeight()) / scriptsRunningHeight) + it->planeRect.top; // HACK. The plane sometimes doesn't contain the correct width. This // hack breaks the dialog options when speaking with Grace, but it's // the best we got up to now. This happens because of the unimplemented // kTextWidth function in SCI32. // TODO: Remove this once kTextWidth has been implemented. uint16 w = it->planeRect.width() >= 20 ? it->planeRect.width() : _screen->getWidth() - 10; - int16 charCount; // Upscale the coordinates/width if the fonts are already upscaled if (_screen->fontIsUpscaled()) { startX = startX * _screen->getDisplayWidth() / _screen->getWidth(); - curY = curY * _screen->getDisplayHeight() / _screen->getHeight(); + startY = startY * _screen->getDisplayHeight() / _screen->getHeight(); w = w * _screen->getDisplayWidth() / _screen->getWidth(); } - while (*txt) { - charCount = GetLongest(txt, w, font); - if (charCount == 0) - break; - - uint16 curX = startX; - - for (int i = 0; i < charCount; i++) { - unsigned char curChar = txt[i]; - font->draw(curChar, curY, curX, foreColor, dimmed); - curX += font->getCharWidth(curChar); - } - - curY += font->getHeight(); - txt += charCount; - while (*txt == ' ') - txt++; // skip over breaking spaces - } - + g_sci->_gfxText32->drawTextBitmap(itemEntry->object, startX, startY, w); } } } diff --git a/engines/sci/graphics/text32.cpp b/engines/sci/graphics/text32.cpp new file mode 100644 index 0000000000..21372f1502 --- /dev/null +++ b/engines/sci/graphics/text32.cpp @@ -0,0 +1,238 @@ +/* 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: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/sci/graphics/text16.cpp $ + * $Id: text16.cpp 55178 2011-01-08 23:16:44Z thebluegr $ + * + */ + +#include "common/util.h" +#include "common/stack.h" +#include "graphics/primitives.h" + +#include "sci/sci.h" +#include "sci/engine/kernel.h" +#include "sci/engine/selector.h" +#include "sci/engine/state.h" +#include "sci/graphics/cache.h" +#include "sci/graphics/font.h" +#include "sci/graphics/screen.h" +#include "sci/graphics/text32.h" + +namespace Sci { + +GfxText32::GfxText32(SegManager *segMan, GfxCache *fonts, GfxScreen *screen) + : _segMan(segMan), _cache(fonts), _screen(screen) { +} + +GfxText32::~GfxText32() { + purgeCache(); +} + +void GfxText32::purgeCache() { + for (TextCache::iterator cacheIterator = _textCache.begin(); cacheIterator != _textCache.end(); cacheIterator++) { + delete[] cacheIterator->_value->surface; + delete cacheIterator->_value; + cacheIterator->_value = 0; + } + + _textCache.clear(); +} + +void GfxText32::createTextBitmap(reg_t textObject) { + if (_textCache.size() >= MAX_CACHED_TEXTS) + purgeCache(); + + uint32 textId = (textObject.segment << 16) | textObject.offset; + + if (_textCache.contains(textId)) { + // Delete the old entry + TextEntry *oldEntry = _textCache[textId]; + delete[] oldEntry->surface; + delete oldEntry; + _textCache.erase(textId); + } + + _textCache[textId] = createTextEntry(textObject); +} + +// TODO: Finish this! +void GfxText32::drawTextBitmap(reg_t textObject, uint16 textX, uint16 textY, uint16 w) { + uint32 textId = (textObject.segment << 16) | textObject.offset; + + if (!_textCache.contains(textId)) + createTextBitmap(textObject); + + TextEntry *entry = _textCache[textId]; + + // This draws text the "SCI0-SCI11" way. In SCI2, text is prerendered in kCreateTextBitmap + // TODO: rewrite this the "SCI2" way (i.e. implement the text buffer to draw inside kCreateTextBitmap) + GfxFont *font = _cache->getFont(readSelectorValue(_segMan, textObject, SELECTOR(font))); + bool dimmed = readSelectorValue(_segMan,textObject, SELECTOR(dimmed)); + uint16 foreColor = readSelectorValue(_segMan, textObject, SELECTOR(fore)); + + const char *txt = entry->text.c_str(); + int16 charCount; + + while (*txt) { + charCount = GetLongest(txt, w, font); + if (charCount == 0) + break; + + uint16 curX = textX; + + for (int i = 0; i < charCount; i++) { + unsigned char curChar = txt[i]; + font->draw(curChar, textY, curX, foreColor, dimmed); + curX += font->getCharWidth(curChar); + } + + textY += font->getHeight(); + txt += charCount; + while (*txt == ' ') + txt++; // skip over breaking spaces + } + + // TODO: The "SCI2" way of font drawing. Currently buggy + /* + for (int x = textX; x < entry->width; x++) { + for (int y = textY; y < entry->height; y++) { + byte pixel = entry->surface[y * entry->width + x]; + if (pixel) + _screen->putPixel(x, y, 1, pixel, 0, 0); + } + } + */ +} + +TextEntry *GfxText32::getTextEntry(reg_t textObject) { + uint32 textId = (textObject.segment << 16) | textObject.offset; + + if (!_textCache.contains(textId)) + createTextBitmap(textObject); + + return _textCache[textId]; +} + +// TODO: Finish this! Currently buggy. +TextEntry *GfxText32::createTextEntry(reg_t textObject) { + reg_t stringObject = readSelector(_segMan, textObject, SELECTOR(text)); + + // The object in the text selector of the item can be either a raw string + // or a Str object. In the latter case, we need to access the object's data + // selector to get the raw string. + if (_segMan->isHeapObject(stringObject)) + stringObject = readSelector(_segMan, stringObject, SELECTOR(data)); + + const char *text = _segMan->getString(stringObject).c_str(); + GfxFont *font = _cache->getFont(readSelectorValue(_segMan, textObject, SELECTOR(font))); + bool dimmed = readSelectorValue(_segMan, textObject, SELECTOR(dimmed)); + uint16 foreColor = readSelectorValue(_segMan, textObject, SELECTOR(fore)); + uint16 x = readSelectorValue(_segMan, textObject, SELECTOR(x)); + uint16 y = readSelectorValue(_segMan, textObject, SELECTOR(y)); + + // Now get the bounding box from the associated plane + reg_t planeObject = readSelector(_segMan, textObject, SELECTOR(plane)); + Common::Rect planeRect; + if (!planeObject.isNull()) { + planeRect.top = readSelectorValue(_segMan, planeObject, SELECTOR(top)); + planeRect.left = readSelectorValue(_segMan, planeObject, SELECTOR(left)); + planeRect.bottom = readSelectorValue(_segMan, planeObject, SELECTOR(bottom)) + 1; + planeRect.right = readSelectorValue(_segMan, planeObject, SELECTOR(right)) + 1; + } else { + planeRect.top = 0; + planeRect.left = 0; + planeRect.bottom = _screen->getHeight(); + planeRect.right = _screen->getWidth(); + } + + TextEntry *newEntry = new TextEntry(); + newEntry->object = stringObject; + newEntry->x = x; + newEntry->y = y; + newEntry->width = planeRect.width(); + newEntry->height = planeRect.height(); + newEntry->surface = new byte[newEntry->width * newEntry->height]; + memset(newEntry->surface, 0, newEntry->width * newEntry->height); + newEntry->text = _segMan->getString(stringObject); + + int16 maxTextWidth, charCount; + uint16 curX = 0, curY = 0; + + maxTextWidth = 0; + while (*text) { + charCount = GetLongest(text, planeRect.width(), font); + if (charCount == 0) + break; + + for (int i = 0; i < charCount; i++) { + unsigned char curChar = text[i]; + font->drawToBuffer(curChar, curY, curX, foreColor, dimmed, newEntry->surface, newEntry->width, newEntry->height); + curX += font->getCharWidth(curChar); + } + + curY += font->getHeight(); + text += charCount; + while (*text == ' ') + text++; // skip over breaking spaces + } + + return newEntry; +} + +int16 GfxText32::GetLongest(const char *text, int16 maxWidth, GfxFont *font) { + uint16 curChar = 0; + int16 maxChars = 0, curCharCount = 0; + uint16 width = 0; + + while (width <= maxWidth) { + curChar = (*(const byte *)text++); + + switch (curChar) { + // We need to add 0xD, 0xA and 0xD 0xA to curCharCount and then exit + // which means, we split text like + // 'Mature, experienced software analyst available.' 0xD 0xA + // 'Bug installation a proven speciality. "No version too clean."' (normal game text, this is from lsl2) + // and 0xA '-------' 0xA (which is the official sierra subtitle separator) + // Sierra did it the same way. + case 0xD: + // Check, if 0xA is following, if so include it as well + if ((*(const unsigned char *)text) == 0xA) + curCharCount++; + // it's meant to pass through here + case 0xA: + curCharCount++; + // and it's also meant to pass through here + case 0: + return curCharCount; + case ' ': + maxChars = curCharCount; // return count up to (but not including) breaking space + break; + } + if (width + font->getCharWidth(curChar) > maxWidth) + break; + width += font->getCharWidth(curChar); + curCharCount++; + } + + return maxChars; +} + +} // End of namespace Sci diff --git a/engines/sci/graphics/text32.h b/engines/sci/graphics/text32.h new file mode 100644 index 0000000000..39fe710a86 --- /dev/null +++ b/engines/sci/graphics/text32.h @@ -0,0 +1,71 @@ +/* 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: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/sci/graphics/text16.h $ + * $Id: text16.h 55178 2011-01-08 23:16:44Z thebluegr $ + * + */ + +#ifndef SCI_GRAPHICS_TEXT32_H +#define SCI_GRAPHICS_TEXT32_H + +#include "common/hashmap.h" + +namespace Sci { + +struct TextEntry { + reg_t object; + uint16 x; + uint16 y; + uint16 width; + uint16 height; + byte *surface; + Common::String text; +}; + +// TODO: Move to Cache, perhaps? +#define MAX_CACHED_TEXTS 20 +typedef Common::HashMap<uint32, TextEntry *> TextCache; + +/** + * Text32 class, handles text calculation and displaying of text for SCI2, SCI21 and SCI3 games + */ +class GfxText32 { +public: + GfxText32(SegManager *segMan, GfxCache *fonts, GfxScreen *screen); + ~GfxText32(); + void createTextBitmap(reg_t textObject); + void drawTextBitmap(reg_t textObject, uint16 textX, uint16 textY, uint16 w); + int16 GetLongest(const char *text, int16 maxWidth, GfxFont *font); + TextEntry *getTextEntry(reg_t textObject); + +private: + TextEntry *createTextEntry(reg_t textObject); + void purgeCache(); + + SegManager *_segMan; + GfxCache *_cache; + TextCache _textCache; + GfxScreen *_screen; +}; + +} // End of namespace Sci + +#endif diff --git a/engines/sci/module.mk b/engines/sci/module.mk index 2202002e2e..c129ae5439 100644 --- a/engines/sci/module.mk +++ b/engines/sci/module.mk @@ -80,6 +80,7 @@ ifdef ENABLE_SCI32 MODULE_OBJS += \ graphics/frameout.o \ graphics/paint32.o \ + graphics/text32.o \ video/robot_decoder.o endif diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index f18b6c91f5..bdd7d6692b 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -93,7 +93,7 @@ const char *getSciVersionDesc(SciVersion version) { //#define SCI_VERBOSE_RESMAN 1 -static const char *sci_error_types[] = { +static const char *const sci_error_types[] = { "No error", "I/O error", "Resource is empty (size 0)", @@ -107,7 +107,7 @@ static const char *sci_error_types[] = { "SCI version is unsupported" }; -static const char *s_resourceTypeNames[] = { +static const char *const s_resourceTypeNames[] = { "view", "pic", "script", "text", "sound", "memory", "vocab", "font", "cursor", "patch", "bitmap", "palette", "cdaudio", @@ -120,7 +120,7 @@ static const char *s_resourceTypeNames[] = { // Resource type suffixes. Note that the // suffic of SCI3 scripts has been changed from // scr to csc -static const char *s_resourceTypeSuffixes[] = { +static const char *const s_resourceTypeSuffixes[] = { "v56", "p56", "scr", "tex", "snd", "", "voc", "fon", "cur", "pat", "bit", "pal", "cda", "aud", "syn", @@ -1158,8 +1158,10 @@ ResVersion ResourceManager::detectMapVersion() { } } - if (!fileStream) - error("Failed to open resource map file"); + if (!fileStream) { + warning("Failed to open resource map file"); + return kResVersionUnknown; + } // detection // SCI0 and SCI01 maps have last 6 bytes set to FF @@ -1259,7 +1261,7 @@ ResVersion ResourceManager::detectVolVersion() { } if (!fileStream) { - error("Failed to open volume file - if you got resource.p01/resource.p02/etc. files, merge them together into resource.000"); + warning("Failed to open volume file - if you got resource.p01/resource.p02/etc. files, merge them together into resource.000"); // resource.p01/resource.p02/etc. may be there when directly copying the files from the original floppies // the sierra installer would merge those together (perhaps we could do this as well?) // possible TODO @@ -1721,15 +1723,19 @@ int ResourceManager::readResourceMapSCI1(ResourceSource *map) { if (!resource) { addResource(resId, source, fileOffset); } else { - // if resource is already present, change it to new content - // this is needed at least for pharkas/german. This version - // contains several duplicate resources INSIDE the resource - // data files like fonts, views, scripts, etc. And if we use - // the first entries, half of the game will be english and - // umlauts will also be missing :P - resource->_source = source; - resource->_fileOffset = fileOffset; - resource->size = 0; + // If the resource is already present in a volume, change it to + // the new content (but only in a volume, so as not to overwrite + // external patches - refer to bug #3366295). + // This is needed at least for the German version of Pharkas. + // That version contains several duplicate resources INSIDE the + // resource data files like fonts, views, scripts, etc. Thus, + // if we use the first entries in the resource file, half of the + // game will be English and umlauts will also be missing :P + if (resource->_source->getSourceType() == kSourceVolume) { + resource->_source = source; + resource->_fileOffset = fileOffset; + resource->size = 0; + } } } } diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index 792b2b2055..6c1b6e4dd6 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -61,6 +61,7 @@ #include "sci/graphics/transitions.h" #ifdef ENABLE_SCI32 +#include "sci/graphics/text32.h" #include "sci/graphics/frameout.h" #include "sci/video/robot_decoder.h" #endif @@ -146,6 +147,7 @@ SciEngine::~SciEngine() { DebugMan.clearAllDebugChannels(); #ifdef ENABLE_SCI32 + delete _gfxText32; delete _robotDecoder; delete _gfxFrameout; #endif @@ -598,6 +600,7 @@ void SciEngine::initGraphics() { _gfxText16 = 0; _gfxTransitions = 0; #ifdef ENABLE_SCI32 + _gfxText32 = 0; _robotDecoder = 0; _gfxFrameout = 0; _gfxPaint32 = 0; @@ -627,6 +630,7 @@ void SciEngine::initGraphics() { _gfxCompare = new GfxCompare(_gamestate->_segMan, _kernel, _gfxCache, _gfxScreen, _gfxCoordAdjuster); _gfxPaint32 = new GfxPaint32(_resMan, _gamestate->_segMan, _kernel, _gfxCoordAdjuster, _gfxCache, _gfxScreen, _gfxPalette); _gfxPaint = _gfxPaint32; + _gfxText32 = new GfxText32(_gamestate->_segMan, _gfxCache, _gfxScreen); _robotDecoder = new RobotDecoder(g_system->getMixer(), getPlatform() == Common::kPlatformMacintosh); _gfxFrameout = new GfxFrameout(_gamestate->_segMan, _resMan, _gfxCoordAdjuster, _gfxCache, _gfxScreen, _gfxPalette, _gfxPaint32); } else { diff --git a/engines/sci/sci.h b/engines/sci/sci.h index b419d862a4..81bbdc51de 100644 --- a/engines/sci/sci.h +++ b/engines/sci/sci.h @@ -71,6 +71,7 @@ class GfxPalette; class GfxPorts; class GfxScreen; class GfxText16; +class GfxText32; class GfxTransitions; #ifdef ENABLE_SCI32 @@ -313,6 +314,7 @@ public: GfxPorts *_gfxPorts; // Port managment for 16-bit gfx GfxScreen *_gfxScreen; GfxText16 *_gfxText16; + GfxText32 *_gfxText32; GfxTransitions *_gfxTransitions; // transitions between screens for 16-bit gfx GfxMacIconBar *_gfxMacIconBar; // Mac Icon Bar manager diff --git a/engines/sci/sound/drivers/gm_names.h b/engines/sci/sound/drivers/gm_names.h index bfe5ff88c7..fbfa413a4a 100644 --- a/engines/sci/sound/drivers/gm_names.h +++ b/engines/sci/sound/drivers/gm_names.h @@ -30,7 +30,7 @@ namespace Sci { // is defined #ifndef REDUCE_MEMORY_USAGE -static const char *GmInstrumentNames[] = { +static const char *const GmInstrumentNames[] = { /*000*/ "Acoustic Grand Piano", /*001*/ "Bright Acoustic Piano", /*002*/ "Electric Grand Piano", @@ -162,7 +162,7 @@ static const char *GmInstrumentNames[] = { }; // The GM Percussion map is downwards compatible to the MT32 map, which is used in SCI -static const char *GmPercussionNames[] = { +static const char *const GmPercussionNames[] = { /*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*20*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp index 95b165468d..ad7ba7ca36 100644 --- a/engines/sci/sound/midiparser_sci.cpp +++ b/engines/sci/sound/midiparser_sci.cpp @@ -480,11 +480,18 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) { info.basic.param2 = 0; if (info.channel() == 0xF) {// SCI special case if (info.basic.param1 != kSetSignalLoop) { - // at least in kq5/french&mac the first scene in the intro has a song that sets signal to 4 immediately - // on tick 0. Signal isn't set at that point by sierra sci and it would cause the castle daventry text to - // get immediately removed, so we currently filter it. - // Sierra SCI ignores them as well at that time - if ((_position._play_tick) || (info.delta)) { + // At least in kq5/french&mac the first scene in the intro has + // a song that sets signal to 4 immediately on tick 0. Signal + // isn't set at that point by sierra sci and it would cause the + // castle daventry text to get immediately removed, so we + // currently filter it. Sierra SCI ignores them as well at that + // time. However, this filtering should only be performed for + // SCI1 and newer games. Signalling is done differently in SCI0 + // though, so ignoring these signals in SCI0 games will result + // in glitches (e.g. the intro of LB1 Amiga gets stuck - bug + // #3297883). Refer to MusicEntry::setSignal() in sound/music.cpp. + if (_soundVersion <= SCI_VERSION_0_LATE || + _position._play_tick || info.delta) { _signalSet = true; _signalToSet = info.basic.param1; } @@ -626,7 +633,11 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) { if (info.ext.type == 0x2F) {// end of track reached if (_pSnd->loop) _pSnd->loop--; - if (_pSnd->loop) { + // QFG3 abuses the hold flag. Its scripts call kDoSoundSetHold, + // but sometimes there's no hold marker in the associated songs + // (e.g. song 110, during the intro). The original interpreter + // treats this case as an infinite loop (bug #3311911). + if (_pSnd->loop || _pSnd->hold > 0) { // We need to play it again... jumpToTick(_loopTick); } else { diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp index 4ea290ff9e..d4cff7614c 100644 --- a/engines/sci/sound/soundcmd.cpp +++ b/engines/sci/sound/soundcmd.cpp @@ -49,11 +49,22 @@ reg_t SoundCommandParser::kDoSoundInit(int argc, reg_t *argv, reg_t acc) { return acc; } -void SoundCommandParser::processInitSound(reg_t obj) { - int resourceId = readSelectorValue(_segMan, obj, SELECTOR(number)); +int SoundCommandParser::getSoundResourceId(reg_t obj) { + int resourceId = obj.segment ? readSelectorValue(_segMan, obj, SELECTOR(number)) : -1; // Modify the resourceId for the Windows versions that have an alternate MIDI soundtrack, like SSCI did. - if (g_sci && g_sci->_features->useAltWinGMSound()) - resourceId += 1000; + if (g_sci && g_sci->_features->useAltWinGMSound()) { + // Check if the alternate MIDI song actually exists... + // There are cases where it just doesn't exist (e.g. SQ4, room 530 - + // bug #3392767). In these cases, use the DOS tracks instead. + if (resourceId && _resMan->testResource(ResourceId(kResourceTypeSound, resourceId + 1000))) + resourceId += 1000; + } + + return resourceId; +} + +void SoundCommandParser::processInitSound(reg_t obj) { + int resourceId = getSoundResourceId(obj); // Check if a track with the same sound object is already playing MusicEntry *oldSound = _music->getSlot(obj); @@ -123,10 +134,7 @@ void SoundCommandParser::processPlaySound(reg_t obj) { return; } - int resourceId = obj.segment ? readSelectorValue(_segMan, obj, SELECTOR(number)) : -1; - // Modify the resourceId for the Windows versions that have an alternate MIDI soundtrack, like SSCI did. - if (g_sci && g_sci->_features->useAltWinGMSound()) - resourceId += 1000; + int resourceId = getSoundResourceId(obj); if (musicSlot->resourceId != resourceId) { // another sound loaded into struct processDisposeSound(obj); @@ -618,13 +626,10 @@ reg_t SoundCommandParser::kDoSoundSetPriority(int argc, reg_t *argv, reg_t acc) } if (value == -1) { - uint16 resourceNr = musicSlot->resourceId; - // Modify the resourceId for the Windows versions that have an alternate MIDI soundtrack, like SSCI did. - if (g_sci && g_sci->_features->useAltWinGMSound()) - resourceNr += 1000; + uint16 resourceId = musicSlot->resourceId; // Set priority from the song data - Resource *song = _resMan->findResource(ResourceId(kResourceTypeSound, resourceNr), 0); + Resource *song = _resMan->findResource(ResourceId(kResourceTypeSound, resourceId), 0); if (song->data[0] == 0xf0) _music->soundSetPriority(musicSlot, song->data[1]); else diff --git a/engines/sci/sound/soundcmd.h b/engines/sci/sound/soundcmd.h index a542a8b384..7f6e2a0fe8 100644 --- a/engines/sci/sound/soundcmd.h +++ b/engines/sci/sound/soundcmd.h @@ -113,6 +113,7 @@ private: void processInitSound(reg_t obj); void processDisposeSound(reg_t obj); void processUpdateCues(reg_t obj); + int getSoundResourceId(reg_t obj); }; } // End of namespace Sci diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp index 20b929dfd4..eb23c30ebe 100644 --- a/engines/scumm/actor.cpp +++ b/engines/scumm/actor.cpp @@ -2287,7 +2287,7 @@ void Actor::setActorCostume(int c) { } } -static const char* v0ActorNames_English[25] = { +static const char *const v0ActorNames_English[25] = { "Syd", "Razor", "Dave", @@ -2313,7 +2313,7 @@ static const char* v0ActorNames_English[25] = { "Sandy" }; -static const char* v0ActorNames_German[25] = { +static const char *const v0ActorNames_German[25] = { "Syd", "Razor", "Dave", diff --git a/engines/scumm/charset.cpp b/engines/scumm/charset.cpp index 8558da397e..f7b98e2451 100644 --- a/engines/scumm/charset.cpp +++ b/engines/scumm/charset.cpp @@ -767,6 +767,13 @@ void CharsetRendererClassic::printChar(int chr, bool ignoreCharsetMask) { _textScreenID = vs->number; } + // We need to know the virtual screen we draw on for Indy 4 Amiga, since + // it selects the palette map according to this. We furthermore can not + // use _textScreenID here, since that will cause inventory graphics + // glitches. + if (_vm->_game.platform == Common::kPlatformAmiga && _vm->_game.id == GID_INDY4) + _drawScreen = vs->number; + printCharIntern(is2byte, _charPtr, _origWidth, _origHeight, _width, _height, vs, ignoreCharsetMask); _left += _origWidth; @@ -917,12 +924,27 @@ void CharsetRendererClassic::drawBitsN(const Graphics::Surface &s, byte *dst, co numbits = 8; byte *cmap = _vm->_charsetColorMap; + // Indy4 Amiga always uses the room or verb palette map to match colors to + // the currently setup palette, thus we need to select it over here too. + // Done like the original interpreter. + byte *amigaMap = 0; + if (_vm->_game.platform == Common::kPlatformAmiga && _vm->_game.id == GID_INDY4) { + if (_drawScreen == kVerbVirtScreen) + amigaMap = _vm->_verbPalette; + else + amigaMap = _vm->_roomPalette; + } + for (y = 0; y < height && y + drawTop < s.h; y++) { for (x = 0; x < width; x++) { color = (bits >> (8 - bpp)) & 0xFF; - if (color && y + drawTop >= 0) - *dst = cmap[color]; + if (color && y + drawTop >= 0) { + if (amigaMap) + *dst = amigaMap[cmap[color]]; + else + *dst = cmap[color]; + } dst++; bits <<= bpp; numbits -= bpp; diff --git a/engines/scumm/charset.h b/engines/scumm/charset.h index b23ec996f5..fabb82b389 100644 --- a/engines/scumm/charset.h +++ b/engines/scumm/charset.h @@ -119,6 +119,9 @@ protected: int _offsX, _offsY; const byte *_charPtr; + // On which virtual screen will be drawn right now + VirtScreenNumber _drawScreen; + public: CharsetRendererClassic(ScummEngine *vm) : CharsetRendererCommon(vm) {} diff --git a/engines/scumm/costume.cpp b/engines/scumm/costume.cpp index 4ca4988605..eb3cc3262c 100644 --- a/engines/scumm/costume.cpp +++ b/engines/scumm/costume.cpp @@ -545,6 +545,13 @@ void ClassicCostumeRenderer::proc3_ami(Codec1 &v1) { oldXpos = v1.x; oldScaleIndexX = _scaleIndexX; + // Indy4 Amiga always uses the room map to match colors to the currently + // setup palette in the actor code in the original, thus we need to do this + // mapping over here too. + byte *amigaMap = 0; + if (_vm->_game.platform == Common::kPlatformAmiga && _vm->_game.id == GID_INDY4) + amigaMap = _vm->_roomPalette; + do { len = *src++; color = len >> v1.shr; @@ -556,7 +563,10 @@ void ClassicCostumeRenderer::proc3_ami(Codec1 &v1) { masked = (y < 0 || y >= _out.h) || (v1.x < 0 || v1.x >= _out.w) || (v1.mask_ptr && (mask[0] & maskbit)); if (color && !masked) { - *dst = _palette[color]; + if (amigaMap) + *dst = amigaMap[_palette[color]]; + else + *dst = _palette[color]; } if (_scaleX == 255 || v1.scaletable[_scaleIndexX] < _scaleX) { diff --git a/engines/scumm/cursor.cpp b/engines/scumm/cursor.cpp index 6739282c9d..36f06a4889 100644 --- a/engines/scumm/cursor.cpp +++ b/engines/scumm/cursor.cpp @@ -609,7 +609,16 @@ void ScummEngine_v5::setBuiltinCursor(int idx) { for (i = 0; i < 1024; i++) WRITE_UINT16(_grabbedCursor + i * 2, 0xFF); } else { - color = default_cursor_colors[idx]; + // Indy4 Amiga uses its own color set for the cursor image. + // This is patchwork code to make the cursor flash in correct colors. + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + static const uint8 indy4AmigaColors[4] = { + 252, 252, 253, 254 + }; + color = indy4AmigaColors[idx]; + } else { + color = default_cursor_colors[idx]; + } memset(_grabbedCursor, 0xFF, sizeof(_grabbedCursor)); } diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp index 037c12bdbf..3ed9218776 100644 --- a/engines/scumm/detection.cpp +++ b/engines/scumm/detection.cpp @@ -436,7 +436,7 @@ static void computeGameSettingsFromMD5(const Common::FSList &fslist, const GameF } } -static void composeFileHashMap(DescMap &fileMD5Map, const Common::FSList &fslist, int depth, const char **globs) { +static void composeFileHashMap(DescMap &fileMD5Map, const Common::FSList &fslist, int depth, const char *const *globs) { if (depth <= 0) return; @@ -454,7 +454,7 @@ static void composeFileHashMap(DescMap &fileMD5Map, const Common::FSList &fslist continue; bool matched = false; - for (const char **glob = globs; *glob; glob++) + for (const char *const *glob = globs; *glob; glob++) if (file->getName().matchString(*glob, true)) { matched = true; break; diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h index 78645ea8d5..7463fa7dcc 100644 --- a/engines/scumm/detection_tables.h +++ b/engines/scumm/detection_tables.h @@ -49,7 +49,7 @@ namespace Scumm { * This table contains list of directories which could contain game data * and which should be looked into during detection. */ -static const char *directoryGlobs[] = { +static const char *const directoryGlobs[] = { "rooms *", // Mac version of indy3/loom 0 }; diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp index 74a92f2204..20aedae089 100644 --- a/engines/scumm/dialogs.cpp +++ b/engines/scumm/dialogs.cpp @@ -593,7 +593,7 @@ void SubtitleSettingsDialog::open() { } void SubtitleSettingsDialog::cycleValue() { - static const char* subtitleDesc[] = { + static const char *const subtitleDesc[] = { _s("Speech Only"), _s("Speech and Subtitles"), _s("Subtitles Only") diff --git a/engines/scumm/gfx.cpp b/engines/scumm/gfx.cpp index 8a32b963cd..a22aa1802f 100644 --- a/engines/scumm/gfx.cpp +++ b/engines/scumm/gfx.cpp @@ -1025,6 +1025,16 @@ void ScummEngine::restoreBackground(Common::Rect rect, byte backColor) { if (rect.left > vs->w) return; + // Indy4 Amiga always uses the room or verb palette map to match colors to + // the currently setup palette, thus we need to select it over here too. + // Done like the original interpreter. + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + if (vs->number == kVerbVirtScreen) + backColor = _verbPalette[backColor]; + else + backColor = _roomPalette[backColor]; + } + // Convert 'rect' to local (virtual screen) coordinates rect.top -= vs->topline; rect.bottom -= vs->topline; @@ -1235,6 +1245,16 @@ void ScummEngine::drawBox(int x, int y, int x2, int y2, int color) { if ((vs = findVirtScreen(y)) == NULL) return; + // Indy4 Amiga always uses the room or verb palette map to match colors to + // the currently setup palette, thus we need to select it over here too. + // Done like the original interpreter. + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + if (vs->number == kVerbVirtScreen) + color = _verbPalette[color]; + else + color = _roomPalette[color]; + } + if (x > x2) SWAP(x, x2); @@ -1872,6 +1892,16 @@ bool Gdi::drawStrip(byte *dstPtr, VirtScreen *vs, int x, int y, const int width, } assertRange(0, offset, smapLen-1, "screen strip"); + // Indy4 Amiga always uses the room or verb palette map to match colors to + // the currently setup palette, thus we need to select it over here too. + // Done like the original interpreter. + if (_vm->_game.platform == Common::kPlatformAmiga && _vm->_game.id == GID_INDY4) { + if (vs->number == kVerbVirtScreen) + _roomPalette = _vm->_verbPalette; + else + _roomPalette = _vm->_roomPalette; + } + return decompressBitmap(dstPtr, vs->pitch, smap_ptr + offset, height); } diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h index f4df6571fa..cdc5faa084 100644 --- a/engines/scumm/he/intern_he.h +++ b/engines/scumm/he/intern_he.h @@ -458,6 +458,7 @@ protected: virtual void saveOrLoad(Serializer *s); virtual void readMAXS(int blockSize); + void setResourceOffHeap(int typeId, int resId, int val); virtual void processActors(); diff --git a/engines/scumm/he/logic/basketball.cpp b/engines/scumm/he/logic/basketball.cpp index 8352aa4357..a4da8e05dc 100644 --- a/engines/scumm/he/logic/basketball.cpp +++ b/engines/scumm/he/logic/basketball.cpp @@ -157,7 +157,7 @@ int LogicHEbasketball::op_1012() { int LogicHEbasketball::op_1050(int32 *args) { // This function loads the court data - static const char *courtNames[] = { + static const char *const courtNames[] = { "Dobbaguchi", "Jocindas", "SandyFlats", "Queens", "Park", "Scheffler", "Polk", "McMillan", "CrownHill", "Memorial", "TechState", "Garden", diff --git a/engines/scumm/he/resource_he.cpp b/engines/scumm/he/resource_he.cpp index 39240e347f..42748d08ed 100644 --- a/engines/scumm/he/resource_he.cpp +++ b/engines/scumm/he/resource_he.cpp @@ -386,6 +386,40 @@ int ScummEngine_v72he::getSoundResourceSize(ResId id) { return size; } +void ScummEngine_v90he::setResourceOffHeap(int typeId, int resId, int val) { + debug(0, "setResourceOffHeap: type %d resId %d toggle %d", typeId, resId, val); + ResType type; + + switch (typeId) { + case 1: + type = rtRoom; + break; + case 2: + type = rtScript; + break; + case 3: + type = rtCostume; + break; + case 4: + type = rtSound; + break; + case 6: + type = rtCharset; + break; + case 19: + type = rtImage; + break; + default: + error("setResourceOffHeap: default case %d", typeId); + } + + if (val == 1) { + _res->setOffHeap(type, resId); + } else { + _res->setOnHeap(type, resId); + } +} + #endif } // End of namespace Scumm diff --git a/engines/scumm/he/script_v90he.cpp b/engines/scumm/he/script_v90he.cpp index 66a0a34d16..877f8b239d 100644 --- a/engines/scumm/he/script_v90he.cpp +++ b/engines/scumm/he/script_v90he.cpp @@ -2358,7 +2358,7 @@ void ScummEngine_v90he::o90_kernelSetFunctions() { _wiz->_rectOverrideEnabled = false; break; case 714: - debug(5, "o90_kernelSetFunctions: case 714: type %d resId %d unk1 %d", args[1], args[2], args[3]); + setResourceOffHeap(args[1], args[2], args[3]); break; case 1492: // Remote start script function diff --git a/engines/scumm/palette.cpp b/engines/scumm/palette.cpp index 30096000ce..2c10758730 100644 --- a/engines/scumm/palette.cpp +++ b/engines/scumm/palette.cpp @@ -372,6 +372,143 @@ void ScummEngine::setPaletteFromPtr(const byte *ptr, int numcolor) { setDirtyColors(firstIndex, numcolor - 1); } +void ScummEngine::setAmigaPaletteFromPtr(const byte *ptr) { + memcpy(_currentPalette, ptr, 768); + + for (int i = 0; i < 32; ++i) { + _shadowPalette[i] = i; + _colorUsedByCycle[i] = 0; + } + + amigaPaletteFindFirstUsedColor(); + + for (int i = 0; i < 64; ++i) { + _amigaPalette[i * 3 + 0] = _currentPalette[(i + 16) * 3 + 0] >> 4; + _amigaPalette[i * 3 + 1] = _currentPalette[(i + 16) * 3 + 1] >> 4; + _amigaPalette[i * 3 + 2] = _currentPalette[(i + 16) * 3 + 2] >> 4; + } + + for (int i = 0; i < 256; ++i) { + if (i < 16 || i >= _amigaFirstUsedColor) { + mapRoomPalette(i); + mapVerbPalette(i); + } else { + int idx = (i - 16) & 31; + // We adjust our verb palette map from [0, 31] to [32, 63], since unlike + // the original we set up the verb palette at colors [32, 63]. + // The original instead used two different palettes for the verb virtual + // screen and all the rest. + if (idx != 17) { + _roomPalette[i] = idx; + _verbPalette[i] = idx + 32; + } else { + // In all my tests it seems the colors 0 and 32 in + // _amigaPalette are in fact black. Thus 17 is probably black. + // For the room map the color 17 is 33 (17+16), for the verb + // map it is 65 (17+32). + _roomPalette[i] = 0; + _verbPalette[i] = 32; + } + } + } + + setDirtyColors(0, 255); +} + +void ScummEngine::amigaPaletteFindFirstUsedColor() { + for (_amigaFirstUsedColor = 80; _amigaFirstUsedColor < 256; ++_amigaFirstUsedColor) { + // We look for the first used color here. If all color components are + // >= 252 the color seems to be unused. Check remapPaletteColor for + // the same behavior. + if (_currentPalette[_amigaFirstUsedColor * 3 + 0] <= 251 + || _currentPalette[_amigaFirstUsedColor * 3 + 1] <= 251 + || _currentPalette[_amigaFirstUsedColor * 3 + 2] <= 251) + break; + } +} + +void ScummEngine::mapRoomPalette(int idx) { + // For Color 33 (which is in fact 17+16) see the special case in + // setAmigaPaletteFromPtr. + if (idx >= 16 && idx < 48 && idx != 33) + _roomPalette[idx] = idx - 16; + else + _roomPalette[idx] = remapRoomPaletteColor(_currentPalette[idx * 3 + 0] >> 4, + _currentPalette[idx * 3 + 1] >> 4, + _currentPalette[idx * 3 + 2] >> 4); +} + +static const uint8 amigaWeightTable[16] = { + 0, 1, 4, 9, 16, 25, 36, 49, + 64, 81, 100, 121, 144, 169, 196, 225 +}; + +int ScummEngine::remapRoomPaletteColor(int r, int g, int b) { + int idx = 0; + uint16 minValue = 0xFFFF; + + const byte *pal = _amigaPalette; + const byte *cycle = _colorUsedByCycle; + + for (int i = 0; i < 32; ++i) { + if (!*cycle++ && i != 17) { + int rD = ABS<int>(*pal++ - r); + int gD = ABS<int>(*pal++ - g); + int bD = ABS<int>(*pal++ - b); + + const uint16 weight = amigaWeightTable[rD] + amigaWeightTable[gD] + amigaWeightTable[bD]; + if (weight < minValue) { + minValue = weight; + idx = i; + } + } else { + pal += 3; + } + } + + return idx; +} + +void ScummEngine::mapVerbPalette(int idx) { + // We adjust our verb palette map from [0, 31] to [32, 63], since unlike + // the original we set up the verb palette at colors [32, 63]. + // The original instead used two different palettes for the verb virtual + // screen and all the rest. + // For Color 65 (which is in fact 17+32) see the special case in + // setAmigaPaletteFromPtr. + if (idx >= 48 && idx < 80 && idx != 65) + _verbPalette[idx] = idx - 16; + else + _verbPalette[idx] = remapVerbPaletteColor(_currentPalette[idx * 3 + 0] >> 4, + _currentPalette[idx * 3 + 1] >> 4, + _currentPalette[idx * 3 + 2] >> 4) + 32; +} + +int ScummEngine::remapVerbPaletteColor(int r, int g, int b) { + int idx = 0; + uint16 minValue = 0xFFFF; + + const byte *pal = _amigaPalette + 32 * 3; + + for (int i = 0; i < 32; ++i) { + if (i != 17) { + int rD = ABS<int>(*pal++ - r); + int gD = ABS<int>(*pal++ - g); + int bD = ABS<int>(*pal++ - b); + + const uint16 weight = amigaWeightTable[rD] + amigaWeightTable[gD] + amigaWeightTable[bD]; + if (weight < minValue) { + minValue = weight; + idx = i; + } + } else { + pal += 3; + } + } + + return idx; +} + void ScummEngine::setDirtyColors(int min, int max) { if (_palDirtyMin > min) _palDirtyMin = min; @@ -419,11 +556,26 @@ void ScummEngine::initCycl(const byte *ptr) { cycl->start = *ptr++; cycl->end = *ptr++; + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + cycl->start = CLIP(cycl->start - 16, 0, 31); + cycl->end = CLIP(cycl->end - 16, 0, 31); + } + for (int i = cycl->start; i <= cycl->end; ++i) { _colorUsedByCycle[i] = 1; } } } + + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + for (int i = 0; i < 256; ++i) { + if (i >= 16 && i < _amigaFirstUsedColor) + continue; + + if (_colorUsedByCycle[_roomPalette[i]]) + mapRoomPalette(i); + } + } } void ScummEngine::stopCycle(int i) { @@ -432,11 +584,25 @@ void ScummEngine::stopCycle(int i) { assertRange(0, i, 16, "stopCycle: cycle"); if (i != 0) { _colorCycle[i - 1].delay = 0; + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + cycl = &_colorCycle[i - 1]; + for (int j = cycl->start; j <= cycl->end && j < 32; ++j) { + _shadowPalette[j] = j; + _colorUsedByCycle[j] = 0; + } + } return; } - for (i = 0, cycl = _colorCycle; i < 16; i++, cycl++) + for (i = 0, cycl = _colorCycle; i < 16; i++, cycl++) { cycl->delay = 0; + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + for (int j = cycl->start; j <= cycl->end && j < 32; ++j) { + _shadowPalette[j] = j; + _colorUsedByCycle[j] = 0; + } + } + } } /** @@ -512,14 +678,18 @@ void ScummEngine::cyclePalette() { setDirtyColors(cycl->start, cycl->end); moveMemInPalRes(cycl->start, cycl->end, cycl->flags & 2); - doCyclePalette(_currentPalette, cycl->start, cycl->end, 3, !(cycl->flags & 2)); + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + doCyclePalette(_shadowPalette, cycl->start, cycl->end, 1, !(cycl->flags & 2)); + } else { + doCyclePalette(_currentPalette, cycl->start, cycl->end, 3, !(cycl->flags & 2)); - if (_shadowPalette) { - if (_game.version >= 7) { - for (j = 0; j < NUM_SHADOW_PALETTE; j++) + if (_shadowPalette) { + if (_game.version >= 7) { + for (j = 0; j < NUM_SHADOW_PALETTE; j++) doCycleIndirectPalette(_shadowPalette + j * 256, cycl->start, cycl->end, !(cycl->flags & 2)); - } else { - doCycleIndirectPalette(_shadowPalette, cycl->start, cycl->end, !(cycl->flags & 2)); + } else { + doCycleIndirectPalette(_shadowPalette, cycl->start, cycl->end, !(cycl->flags & 2)); + } } } } @@ -733,62 +903,106 @@ void ScummEngine::setShadowPalette(int redScale, int greenScale, int blueScale, } void ScummEngine::darkenPalette(int redScale, int greenScale, int blueScale, int startColor, int endColor) { - int max; - if (_game.version >= 5 && _game.version <= 6 && _game.heversion <= 60) { - max = 252; - } else { - max = 255; - } + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + startColor = CLIP(startColor, 0, 255); - if (startColor <= endColor) { - const byte *cptr; - const byte *palptr; - int color, idx, j; + //bool remappedVerbColors = false; + bool remappedRoomColors = false; + bool cycleFlag = (blueScale >= 250 && greenScale >= 250 && redScale >= 250); + + const byte *palptr = getPalettePtr(_curPalIndex, _roomResource) + startColor * 3; - if (_game.heversion >= 90 || _game.version == 8) { - palptr = _darkenPalette; + for (int i = startColor; i <= endColor; ++i) { + if (i > 16 && i < 48) { + if (cycleFlag) + _colorUsedByCycle[i - 16] &= ~2; + else + _colorUsedByCycle[i - 16] |= 2; + } + + _currentPalette[i * 3 + 0] = (*palptr++ * redScale) >> 8; + _currentPalette[i * 3 + 1] = (*palptr++ * greenScale) >> 8; + _currentPalette[i * 3 + 2] = (*palptr++ * blueScale) >> 8; + } + + for (int i = startColor; i <= endColor; ++i) { + // Colors 33 (17+16) and 65 (17+32) will never get changed. For + // more information about these check setAmigaPaletteFromPtr. + if (i >= 16 && i < 48 && i != 33) { + remappedRoomColors = true; + _amigaPalette[(i - 16) * 3 + 0] = _currentPalette[i * 3 + 0] >> 4; + _amigaPalette[(i - 16) * 3 + 1] = _currentPalette[i * 3 + 1] >> 4; + _amigaPalette[(i - 16) * 3 + 2] = _currentPalette[i * 3 + 2] >> 4; + } else if (i >= 48 && i < 80 && i != 65) { + //remappedVerbColors = true; + _amigaPalette[(i - 16) * 3 + 0] = _currentPalette[i * 3 + 0] >> 4; + _amigaPalette[(i - 16) * 3 + 1] = _currentPalette[i * 3 + 1] >> 4; + _amigaPalette[(i - 16) * 3 + 2] = _currentPalette[i * 3 + 2] >> 4; + } + } + + for (int i = 0; i < 256; ++i) { + if (i >= 16 && i < _amigaFirstUsedColor) + continue; + + bool inRange = (startColor <= i && i <= endColor); + int idx = _roomPalette[i] + 16; + bool mappedInRange = (startColor <= idx && idx <= endColor); + + if (inRange != mappedInRange || (remappedRoomColors && cycleFlag)) + mapRoomPalette(i); + } + + setDirtyColors(startColor, endColor); + } else { + int max; + if (_game.version >= 5 && _game.version <= 6 && _game.heversion <= 60) { + max = 252; } else { - palptr = getPalettePtr(_curPalIndex, _roomResource); + max = 255; } - for (j = startColor; j <= endColor; j++) { - idx = (_game.heversion == 70) ? _HEV7ActorPalette[j] : j; - cptr = palptr + idx * 3; - if (_game.heversion == 70) - setDirtyColors(idx, idx); + if (startColor <= endColor) { + const byte *cptr; + const byte *palptr; + int color, idx, j; - // Original FOA Amiga version skips these colors - // Fixes bug #1206994: "FOA AMIGA: Black cursor and text in Dig Site" - if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { - if (j < 16) { - cptr += 3; - continue; - } + if (_game.heversion >= 90 || _game.version == 8) { + palptr = _darkenPalette; + } else { + palptr = getPalettePtr(_curPalIndex, _roomResource); } - - color = *cptr++; - color = color * redScale / 0xFF; - if (color > max) - color = max; - _currentPalette[idx * 3 + 0] = color; - - color = *cptr++; - color = color * greenScale / 0xFF; - if (color > max) - color = max; - _currentPalette[idx * 3 + 1] = color; - - color = *cptr++; - color = color * blueScale / 0xFF; - if (color > max) - color = max; - _currentPalette[idx * 3 + 2] = color; - - if (_game.features & GF_16BIT_COLOR) - _16BitPalette[idx] = get16BitColor(_currentPalette[idx * 3 + 0], _currentPalette[idx * 3 + 1], _currentPalette[idx * 3 + 2]); + for (j = startColor; j <= endColor; j++) { + idx = (_game.heversion == 70) ? _HEV7ActorPalette[j] : j; + cptr = palptr + idx * 3; + + if (_game.heversion == 70) + setDirtyColors(idx, idx); + + color = *cptr++; + color = color * redScale / 0xFF; + if (color > max) + color = max; + _currentPalette[idx * 3 + 0] = color; + + color = *cptr++; + color = color * greenScale / 0xFF; + if (color > max) + color = max; + _currentPalette[idx * 3 + 1] = color; + + color = *cptr++; + color = color * blueScale / 0xFF; + if (color > max) + color = max; + _currentPalette[idx * 3 + 2] = color; + + if (_game.features & GF_16BIT_COLOR) + _16BitPalette[idx] = get16BitColor(_currentPalette[idx * 3 + 0], _currentPalette[idx * 3 + 1], _currentPalette[idx * 3 + 2]); + } + if (_game.heversion != 70) + setDirtyColors(startColor, endColor); } - if (_game.heversion != 70) - setDirtyColors(startColor, endColor); } } @@ -1007,6 +1221,41 @@ void ScummEngine::setPalColor(int idx, int r, int g, int b) { _darkenPalette[idx * 3 + 2] = b; } + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + // Colors 33 (17+16) and 65 (17+32) will never get changed. For + // more information about these check setAmigaPaletteFromPtr. + if (idx < 16 || idx >= _amigaFirstUsedColor) { + mapRoomPalette(idx); + mapVerbPalette(idx); + } else if (idx >= 16 && idx < 48 && idx != 33) { + _amigaPalette[(idx - 16) * 3 + 0] = _currentPalette[idx * 3 + 0] >> 4; + _amigaPalette[(idx - 16) * 3 + 1] = _currentPalette[idx * 3 + 1] >> 4; + _amigaPalette[(idx - 16) * 3 + 2] = _currentPalette[idx * 3 + 2] >> 4; + + for (int i = 0; i < 256; ++i) { + if (i >= 16 && i < _amigaFirstUsedColor) + continue; + + if (idx - 16 == _roomPalette[i]) + mapRoomPalette(i); + } + } else if (idx >= 48 && idx < 80 && idx != 65) { + _amigaPalette[(idx - 16) * 3 + 0] = _currentPalette[idx * 3 + 0] >> 4; + _amigaPalette[(idx - 16) * 3 + 1] = _currentPalette[idx * 3 + 1] >> 4; + _amigaPalette[(idx - 16) * 3 + 2] = _currentPalette[idx * 3 + 2] >> 4; + + for (int i = 0; i < 256; ++i) { + if (i >= 16 && i < _amigaFirstUsedColor) + continue; + + // We do - 16 instead of - 48 like the original, since our + // verb palette map is using [32, 63] instead of [0, 31]. + if (idx - 16 == _verbPalette[i]) + mapVerbPalette(i); + } + } + } + if (_game.features & GF_16BIT_COLOR) _16BitPalette[idx] = get16BitColor(r, g, b); @@ -1026,6 +1275,8 @@ void ScummEngine::setCurrentPalette(int palindex) { towns_setPaletteFromPtr(pals); #endif #endif + } else if (_game.id == GID_INDY4 && _game.platform == Common::kPlatformAmiga) { + setAmigaPaletteFromPtr(pals); } else { setPaletteFromPtr(pals); } @@ -1081,42 +1332,74 @@ void ScummEngine::updatePalette() { if (_palDirtyMax == -1) return; - bool noir_mode = (_game.id == GID_SAMNMAX && readVar(0x8000)); - int first = _palDirtyMin; - int num = _palDirtyMax - first + 1; - int i; - byte palette_colors[3 * 256]; byte *p = palette_colors; + int first; + int num; - for (i = _palDirtyMin; i <= _palDirtyMax; i++) { - byte *data; + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + // Indy4 Amiga has a special palette handling scheme + first = 0; + num = 64; - if (_game.features & GF_SMALL_HEADER && _game.version > 2) - data = _currentPalette + _shadowPalette[i] * 3; - else - data = _currentPalette + i * 3; + for (int i = 0; i < 64; ++i) { + byte *data; - // Sam & Max film noir mode. Convert the colors to grayscale - // before uploading them to the backend. + if (i < 32) + data = _amigaPalette + _shadowPalette[i] * 3; + else + data = _amigaPalette + i * 3; - if (noir_mode) { - int r, g, b; - byte brightness; + *p++ = data[0] * 255 / 15; + *p++ = data[1] * 255 / 15; + *p++ = data[2] * 255 / 15; + } - r = data[0]; - g = data[1]; - b = data[2]; + // Setup colors for the mouse cursor + // Color values taken from Indy4 DOS + static const uint8 mouseCursorPalette[] = { + 255, 255, 255, + 171, 171, 171, + 87, 87, 87 + }; - brightness = (byte)((0.299 * r + 0.587 * g + 0.114 * b) + 0.5); + _system->getPaletteManager()->setPalette(mouseCursorPalette, 252, 3); + } else { + bool noir_mode = (_game.id == GID_SAMNMAX && readVar(0x8000)); + int i; - *p++ = brightness; - *p++ = brightness; - *p++ = brightness; - } else { - *p++ = data[0]; - *p++ = data[1]; - *p++ = data[2]; + first = _palDirtyMin; + num = _palDirtyMax - first + 1; + + for (i = _palDirtyMin; i <= _palDirtyMax; i++) { + byte *data; + + if (_game.features & GF_SMALL_HEADER && _game.version > 2) + data = _currentPalette + _shadowPalette[i] * 3; + else + data = _currentPalette + i * 3; + + // Sam & Max film noir mode. Convert the colors to grayscale + // before uploading them to the backend. + + if (noir_mode) { + int r, g, b; + byte brightness; + + r = data[0]; + g = data[1]; + b = data[2]; + + brightness = (byte)((0.299 * r + 0.587 * g + 0.114 * b) + 0.5); + + *p++ = brightness; + *p++ = brightness; + *p++ = brightness; + } else { + *p++ = data[0]; + *p++ = data[1]; + *p++ = data[2]; + } } } @@ -1127,7 +1410,7 @@ void ScummEngine::updatePalette() { #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE if (_game.platform == Common::kPlatformFMTowns) { p = palette_colors; - for (i = first; i < first + num; ++i) { + for (int i = first; i < first + num; ++i) { _16BitPalette[i] = get16BitColor(p[0], p[1], p[2]); p += 3; } diff --git a/engines/scumm/resource.cpp b/engines/scumm/resource.cpp index 10301da3e3..f445a44ded 100644 --- a/engines/scumm/resource.cpp +++ b/engines/scumm/resource.cpp @@ -47,7 +47,8 @@ enum { RF_USAGE = 0x7F, RF_USAGE_MAX = RF_USAGE, - RS_MODIFIED = 0x10 + RS_MODIFIED = 0x10, + RF_OFFHEAP = 0x40 }; @@ -993,18 +994,42 @@ void ResourceManager::setModified(ResType type, ResId idx) { _types[type][idx].setModified(); } +void ResourceManager::setOffHeap(ResType type, ResId idx) { + if (!validateResource("setOffHeap", type, idx)) + return; + _types[type][idx].setOffHeap(); +} + +void ResourceManager::setOnHeap(ResType type, ResId idx) { + if (!validateResource("setOnHeap", type, idx)) + return; + _types[type][idx].setOnHeap(); +} + bool ResourceManager::isModified(ResType type, ResId idx) const { if (!validateResource("isModified", type, idx)) return false; return _types[type][idx].isModified(); } +bool ResourceManager::Resource::isModified() const { + return (_status & RS_MODIFIED) != 0; +} + +bool ResourceManager::Resource::isOffHeap() const { + return (_status & RF_OFFHEAP) != 0; +} + void ResourceManager::Resource::setModified() { _status |= RS_MODIFIED; } -bool ResourceManager::Resource::isModified() const { - return (_status & RS_MODIFIED) != 0; +void ResourceManager::Resource::setOffHeap() { + _status |= RF_OFFHEAP; +} + +void ResourceManager::Resource::setOnHeap() { + _status &= ~RF_OFFHEAP; } void ResourceManager::expireResources(uint32 size) { @@ -1035,7 +1060,7 @@ void ResourceManager::expireResources(uint32 size) { while (idx-- > 0) { Resource &tmp = _types[type][idx]; byte counter = tmp.getResourceCounter(); - if (!tmp.isLocked() && counter >= best_counter && tmp._address && !_vm->isResourceInUse(type, idx)) { + if (!tmp.isLocked() && counter >= best_counter && tmp._address && !_vm->isResourceInUse(type, idx) && !tmp.isOffHeap()) { best_counter = counter; best_type = type; best_res = idx; diff --git a/engines/scumm/resource.h b/engines/scumm/resource.h index 2e8960717f..aa7f809b76 100644 --- a/engines/scumm/resource.h +++ b/engines/scumm/resource.h @@ -138,8 +138,12 @@ public: void unlock(); bool isLocked() const; + // HE specific void setModified(); bool isModified() const; + void setOffHeap(); + void setOnHeap(); + bool isOffHeap() const; }; /** @@ -192,8 +196,11 @@ public: void unlock(ResType type, ResId idx); bool isLocked(ResType type, ResId idx) const; + // HE Specific void setModified(ResType type, ResId idx); bool isModified(ResType type, ResId idx) const; + void setOffHeap(ResType type, ResId idx); + void setOnHeap(ResType type, ResId idx); /** * This method increments the _expireCounter, and if it overflows (which happens diff --git a/engines/scumm/room.cpp b/engines/scumm/room.cpp index 8962a0e971..63cbef8944 100644 --- a/engines/scumm/room.cpp +++ b/engines/scumm/room.cpp @@ -552,6 +552,10 @@ void ScummEngine::resetRoomSubBlocks() { } } + // We need to setup the current palette before initCycl for Indy4 Amiga. + if (_PALS_offs || _CLUT_offs) + setCurrentPalette(0); + // Color cycling // HE 7.0 games load resources but don't use them. if (_game.version >= 4 && _game.heversion <= 62) { @@ -570,9 +574,6 @@ void ScummEngine::resetRoomSubBlocks() { } } #endif - - if (_PALS_offs || _CLUT_offs) - setCurrentPalette(0); } diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp index 870ec8cdf7..3ab13df032 100644 --- a/engines/scumm/saveload.cpp +++ b/engines/scumm/saveload.cpp @@ -30,7 +30,7 @@ #include "scumm/charset.h" #include "scumm/imuse_digi/dimuse.h" #include "scumm/imuse/imuse.h" -#include "player_towns.h" +#include "scumm/player_towns.h" #include "scumm/he/intern_he.h" #include "scumm/object.h" #include "scumm/resource.h" @@ -1322,6 +1322,9 @@ void ScummEngine::saveOrLoad(Serializer *s) { if (_shadowPaletteSize) { s->saveLoadArrayOf(_shadowPalette, _shadowPaletteSize, 1, sleByte); // _roomPalette didn't show up until V21 save games + // Note that we also save the room palette for Indy4 Amiga, since it + // is used as palette map there too, but we do so slightly a bit + // further down to group it with the other special palettes needed. if (s->getVersion() >= VER(21) && _game.version < 5) s->saveLoadArrayOf(_roomPalette, sizeof(_roomPalette), 1, sleByte); } @@ -1348,6 +1351,29 @@ void ScummEngine::saveOrLoad(Serializer *s) { memset(_colorUsedByCycle, 0, sizeof(_colorUsedByCycle)); } + // Indy4 Amiga specific palette tables were not saved before V85 + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4) { + if (s->getVersion() >= 85) { + s->saveLoadArrayOf(_roomPalette, 256, 1, sleByte); + s->saveLoadArrayOf(_verbPalette, 256, 1, sleByte); + s->saveLoadArrayOf(_amigaPalette, 3 * 64, 1, sleByte); + + // Starting from version 86 we also save the first used color in + // the palette beyond the verb palette. For old versions we just + // look for it again, which hopefully won't cause any troubles. + if (s->getVersion() >= 86) { + s->saveLoadArrayOf(&_amigaFirstUsedColor, 1, 2, sleUint16); + } else { + amigaPaletteFindFirstUsedColor(); + } + } else { + warning("Save with old Indiana Jones 4 Amiga palette handling detected"); + // We need to restore the internal state of the Amiga palette for Indy4 + // Amiga. This might lead to graphics glitches! + setAmigaPaletteFromPtr(_currentPalette); + } + } + // // Save/load more global object state // diff --git a/engines/scumm/saveload.h b/engines/scumm/saveload.h index 776f40e12b..16c225d20e 100644 --- a/engines/scumm/saveload.h +++ b/engines/scumm/saveload.h @@ -47,7 +47,7 @@ namespace Scumm { * only saves/loads those which are valid for the version of the savegame * which is being loaded/saved currently. */ -#define CURRENT_VER 84 +#define CURRENT_VER 86 /** * An auxillary macro, used to specify savegame versions. We use this instead diff --git a/engines/scumm/script_v0.cpp b/engines/scumm/script_v0.cpp index 1ef16d7106..e2d3f40e8e 100644 --- a/engines/scumm/script_v0.cpp +++ b/engines/scumm/script_v0.cpp @@ -442,7 +442,7 @@ void ScummEngine_v0::drawSentenceWord(int object, bool usePrep, bool objInInvent // The prepositions, like the fonts, were hard code in the engine. Thus // we have to do that, too, and provde localized versions for all the // languages MM/Zak are available in. - static const char *prepositions[][5] = { + static const char *const prepositions[][5] = { { " ", " in", " with", " on", " to" }, // English { " ", " mit", " mit", " mit", " zu" }, // German { " ", " dans", " avec", " sur", " <" }, // French diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index 3b83019275..81f6af453c 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -290,6 +290,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) #endif _shadowPalette = NULL; _shadowPaletteSize = 0; + _verbPalette = NULL; memset(_currentPalette, 0, sizeof(_currentPalette)); memset(_darkenPalette, 0, sizeof(_darkenPalette)); memset(_HEV7ActorPalette, 0, sizeof(_HEV7ActorPalette)); @@ -610,6 +611,7 @@ ScummEngine::~ScummEngine() { _textSurface.free(); free(_shadowPalette); + free(_verbPalette); free(_palManipPalette); free(_palManipIntermediatePal); @@ -1408,6 +1410,10 @@ void ScummEngine::resetScumm() { _16BitPalette = (uint16 *)calloc(512, sizeof(uint16)); #endif + // Indy4 Amiga needs another palette map for the verb area. + if (_game.platform == Common::kPlatformAmiga && _game.id == GID_INDY4 && !_verbPalette) + _verbPalette = (uint8 *)calloc(256, 1); + #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE if (_game.platform == Common::kPlatformFMTowns) { delete _townsScreen; diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 04a175e732..d9237b2b30 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -970,6 +970,7 @@ protected: void setCurrentPalette(int pal); void setRoomPalette(int pal, int room); void setPCEPaletteFromPtr(const byte *ptr); + void setAmigaPaletteFromPtr(const byte *ptr); virtual void setPaletteFromPtr(const byte *ptr, int numcolor = -1); virtual void setPalColor(int index, int r, int g, int b); @@ -1065,6 +1066,9 @@ public: uint16 _hePaletteSlot; uint16 *_16BitPalette; + // Indy4 Amiga specific + byte *_verbPalette; + protected: int _shadowPaletteSize; byte _currentPalette[3 * 256]; @@ -1085,6 +1089,15 @@ protected: bool _enable_gs; bool _copyProtection; + // Indy4 Amiga specific + uint16 _amigaFirstUsedColor; + byte _amigaPalette[3 * 64]; + void amigaPaletteFindFirstUsedColor(); + void mapRoomPalette(int idx); + int remapRoomPaletteColor(int r, int g, int b); + void mapVerbPalette(int idx); + int remapVerbPaletteColor(int r, int g, int b); + public: uint16 _extraBoxFlags[65]; diff --git a/engines/sky/compact.cpp b/engines/sky/compact.cpp index 84609d5500..fd81cb9bea 100644 --- a/engines/sky/compact.cpp +++ b/engines/sky/compact.cpp @@ -471,7 +471,7 @@ uint16 SkyCompact::giveDataListLen(uint16 listNum) { return _dataListLen[listNum]; } -const char *SkyCompact::_typeNames[NUM_CPT_TYPES] = { +const char *const SkyCompact::_typeNames[NUM_CPT_TYPES] = { "null", "COMPACT", "TURNTABLE", diff --git a/engines/sky/compact.h b/engines/sky/compact.h index a7b8520539..0bd5b4943b 100644 --- a/engines/sky/compact.h +++ b/engines/sky/compact.h @@ -88,7 +88,7 @@ private: uint16 **_cptTypes; Common::File *_cptFile; uint32 _resetDataPos; - static const char *_typeNames[NUM_CPT_TYPES]; + static const char *const _typeNames[NUM_CPT_TYPES]; }; } // End of namespace Sky diff --git a/engines/sky/debug.cpp b/engines/sky/debug.cpp index ebc1ee377d..a417bc2ece 100644 --- a/engines/sky/debug.cpp +++ b/engines/sky/debug.cpp @@ -35,7 +35,7 @@ namespace Sky { -static const char *logic_table_names[] = { +static const char *const logic_table_names[] = { "return", "Logic::script", "Logic::auto_route", @@ -79,7 +79,7 @@ static const char opcode_par[] = { 0 }; -static const char *opcodes[] = { +static const char *const opcodes[] = { "push_variable", "less_than", "push_number", @@ -103,7 +103,7 @@ static const char *opcodes[] = { "restart_script" }; -static const char *mcodes[] = { +static const char *const mcodes[] = { "fn_cache_chip", "fn_cache_fast", "fn_draw_screen", @@ -221,7 +221,7 @@ static const char *mcodes[] = { "fn_printf" }; -static const char *scriptVars[] = { +static const char *const scriptVars[] = { "result", "screen", "logic_list_no", @@ -1121,12 +1121,12 @@ bool Debugger::Cmd_ReloadGrid(int argc, const char **argv) { return true; } -static const char *logicTypes[] = { +static const char *const logicTypes[] = { "(none)", "SCRIPT", "AUTOROUTE", "AR_ANIM", "AR_TURNING", "ALT", "MOD_ANIM", "TURNING", "CURSOR", "TALK", "LISTEN", "STOPPED", "CHOOSE", "FRAMES", "PAUSE", "WAIT_SYNC", "SIMPLE MOD" }; -static const char *noYes[] = { "no", "yes" }; +static const char *const noYes[] = { "no", "yes" }; void Debugger::dumpCompact(uint16 cptId) { uint16 type, size; diff --git a/engines/sky/disk.cpp b/engines/sky/disk.cpp index a06c5c9be8..99b707dcf1 100644 --- a/engines/sky/disk.cpp +++ b/engines/sky/disk.cpp @@ -32,8 +32,8 @@ namespace Sky { -static const char *dataFilename = "sky.dsk"; -static const char *dinnerFilename = "sky.dnr"; +static const char *const dataFilename = "sky.dsk"; +static const char *const dinnerFilename = "sky.dnr"; Disk::Disk() { _dataDiskHandle = new Common::File(); diff --git a/engines/sky/sound.cpp b/engines/sky/sound.cpp index e94a2a61d9..a60e3d9e38 100644 --- a/engines/sky/sound.cpp +++ b/engines/sky/sound.cpp @@ -872,7 +872,7 @@ static const Sfx fx_orifice_swallow_drip = { } }; -static const Sfx *musicList[] = { +static const Sfx *const musicList[] = { &fx_press_bang, // 256 banging of the press &fx_press_hiss, // 257 hissing press &fx_wind_howl, // 258 howling wind diff --git a/engines/sword1/animation.cpp b/engines/sword1/animation.cpp index f19efd2635..324154f709 100644 --- a/engines/sword1/animation.cpp +++ b/engines/sword1/animation.cpp @@ -38,7 +38,7 @@ namespace Sword1 { -static const char *sequenceList[20] = { +static const char *const sequenceList[20] = { "ferrari", // 0 CD2 ferrari running down fitz in sc19 "ladder", // 1 CD2 george walking down ladder to dig sc24->sc$ "steps", // 2 CD2 george walking down steps sc23->sc24 diff --git a/engines/sword1/control.cpp b/engines/sword1/control.cpp index 36d5a24e99..6e395116f9 100644 --- a/engines/sword1/control.cpp +++ b/engines/sword1/control.cpp @@ -122,8 +122,8 @@ ControlButton::ControlButton(uint16 x, uint16 y, uint32 resId, uint8 id, uint8 f _width = (_width > SCREEN_WIDTH) ? SCREEN_WIDTH : _width; _height = _resMan->getUint16(tmp->height); if ((x == 0) && (y == 0)) { // center the frame (used for panels); - _x = (((640 - _width) / 2) < 0)? 0 : ((640 - _width) / 2); - _y = (((480 - _height) / 2) < 0)? 0 : ((480 - _height) / 2); + _x = (((640 - _width) / 2) < 0) ? 0 : ((640 - _width) / 2); + _y = (((480 - _height) / 2) < 0) ? 0 : ((480 - _height) / 2); } _dstBuf = screenBuf + _y * SCREEN_WIDTH + _x; _system = system; @@ -139,11 +139,11 @@ bool ControlButton::isSaveslot() { void ControlButton::draw() { FrameHeader *fHead = _resMan->fetchFrame(_resMan->fetchRes(_resId), _frameIdx); - uint8 *src = (uint8*)fHead + sizeof(FrameHeader); + uint8 *src = (uint8 *)fHead + sizeof(FrameHeader); uint8 *dst = _dstBuf; if (SwordEngine::isPsx() && _resId) { - uint8 *HIFbuf = (uint8*)malloc(_resMan->readUint16(&fHead->height) * _resMan->readUint16(&fHead->width)); + uint8 *HIFbuf = (uint8 *)malloc(_resMan->readUint16(&fHead->height) * _resMan->readUint16(&fHead->width)); memset(HIFbuf, 0, _resMan->readUint16(&fHead->height) * _resMan->readUint16(&fHead->width)); Screen::decompressHIF(src, HIFbuf); src = HIFbuf; @@ -163,24 +163,24 @@ void ControlButton::draw() { src += _resMan->readUint16(&fHead->width); } else if (_resId == SR_DEATHPANEL) { // Check for death panel psx version (which is 1/3 of original width) - for (uint16 cnt = 0; cnt < _resMan->readUint16(&fHead->height)/2; cnt++) { + for (uint16 cnt = 0; cnt < _resMan->readUint16(&fHead->height) / 2; cnt++) { //Stretched panel is bigger than 640px, check we don't draw outside screen - for (uint16 cntx = 0; (cntx < (_resMan->readUint16(&fHead->width))/3) && (cntx < (SCREEN_WIDTH-3) ); cntx++) + for (uint16 cntx = 0; (cntx < (_resMan->readUint16(&fHead->width)) / 3) && (cntx < (SCREEN_WIDTH - 3)); cntx++) if (src[cntx]) { dst[cntx * 3] = src[cntx]; dst[cntx * 3 + 1] = src[cntx]; dst[cntx * 3 + 2] = src[cntx]; } - dst+= SCREEN_WIDTH; + dst += SCREEN_WIDTH; - for (uint16 cntx = 0; cntx < (_resMan->readUint16(&fHead->width))/3; cntx++) + for (uint16 cntx = 0; cntx < (_resMan->readUint16(&fHead->width)) / 3; cntx++) if (src[cntx]) { dst[cntx * 3] = src[cntx]; dst[cntx * 3 + 1] = src[cntx]; dst[cntx * 3 + 2] = src[cntx]; } dst += SCREEN_WIDTH; - src += _resMan->readUint16(&fHead->width)/3; + src += _resMan->readUint16(&fHead->width) / 3; } } else { //save slots needs to be multiplied by 2 in height for (uint16 cnt = 0; cnt < _resMan->readUint16(&fHead->height); cnt++) { @@ -198,7 +198,7 @@ void ControlButton::draw() { } dst += SCREEN_WIDTH; - src += _resMan->readUint16(&fHead->width)/2; + src += _resMan->readUint16(&fHead->width) / 2; } } @@ -242,13 +242,13 @@ Control::Control(Common::SaveFileManager *saveFileMan, ResMan *pResMan, ObjectMa } void Control::askForCd() { - _screenBuf = (uint8*)malloc(640 * 480); + _screenBuf = (uint8 *)malloc(640 * 480); uint32 fontId = SR_FONT; if (SwordEngine::_systemVars.language == BS1_CZECH) fontId = CZECH_SR_FONT; - _font = (uint8*)_resMan->openFetchRes(fontId); - uint8 *pal = (uint8*)_resMan->openFetchRes(SR_PALETTE); - uint8 *palOut = (uint8*)malloc(256 * 3); + _font = (uint8 *)_resMan->openFetchRes(fontId); + uint8 *pal = (uint8 *)_resMan->openFetchRes(SR_PALETTE); + uint8 *palOut = (uint8 *)malloc(256 * 3); for (uint16 cnt = 1; cnt < 256; cnt++) { palOut[cnt * 3 + 0] = pal[cnt * 3 + 0] << 2; palOut[cnt * 3 + 1] = pal[cnt * 3 + 1] << 2; @@ -262,7 +262,7 @@ void Control::askForCd() { char fName[10]; uint8 textA[50]; sprintf(fName, "cd%d.id", SwordEngine::_systemVars.currentCD); - sprintf((char*)textA, "%s%d", _lStrings[STR_INSERT_CD_A], SwordEngine::_systemVars.currentCD); + sprintf((char *)textA, "%s%d", _lStrings[STR_INSERT_CD_A], SwordEngine::_systemVars.currentCD); bool notAccepted = true; bool refreshText = true; do { @@ -304,7 +304,7 @@ uint8 Control::runPanel() { _restoreBuf = NULL; _keyPressed.reset(); _numButtons = 0; - _screenBuf = (uint8*)malloc(640 * 480); + _screenBuf = (uint8 *)malloc(640 * 480); memset(_screenBuf, 0, 640 * 480); _system->copyRectToScreen(_screenBuf, 640, 0, 0, 640, 480); _sound->quitScreen(); @@ -314,11 +314,11 @@ uint8 Control::runPanel() { fontId = CZECH_SR_FONT; redFontId = CZECH_SR_REDFONT; } - _font = (uint8*)_resMan->openFetchRes(fontId); - _redFont = (uint8*)_resMan->openFetchRes(redFontId); + _font = (uint8 *)_resMan->openFetchRes(fontId); + _redFont = (uint8 *)_resMan->openFetchRes(redFontId); - uint8 *pal = (uint8*)_resMan->openFetchRes(SR_PALETTE); - uint8 *palOut = (uint8*)malloc(256 * 3); + uint8 *pal = (uint8 *)_resMan->openFetchRes(SR_PALETTE); + uint8 *palOut = (uint8 *)malloc(256 * 3); for (uint16 cnt = 1; cnt < 256; cnt++) { palOut[cnt * 3 + 0] = pal[cnt * 3 + 0] << 2; palOut[cnt * 3 + 1] = pal[cnt * 3 + 1] << 2; @@ -491,7 +491,7 @@ uint8 Control::handleButtonClick(uint8 id, uint8 mode, uint8 *retVal) { else return mode; } else if ((id == BUTTON_RESTORE_PANEL) || (id == BUTTON_SAVE_PANEL) || - (id == BUTTON_DONE) || (id == BUTTON_VOLUME_PANEL)) + (id == BUTTON_DONE) || (id == BUTTON_VOLUME_PANEL)) return id; else if (id == BUTTON_TEXT) { SwordEngine::_systemVars.showText ^= 1; @@ -641,14 +641,14 @@ void Control::handleVolumeClicks() { clickDest = 2; else if (ABS(mouseDiffY) <= 8) // right clickDest = 3; - else // lower right + else // lower right clickDest = 4; } else if (mouseDiffX < -8) { // left part if (mouseDiffY < -8) // upper left clickDest = 8; else if (ABS(mouseDiffY) <= 8) // left clickDest = 7; - else // lower left + else // lower left clickDest = 6; } else { // middle if (mouseDiffY < -8) @@ -754,9 +754,9 @@ bool Control::getConfirm(const uint8 *title) { bool Control::keyAccepted(uint16 ascii) { static const char allowedSpecials[] = ",.:-()?! \"\'"; if (((ascii >= 'A') && (ascii <= 'Z')) || - ((ascii >= 'a') && (ascii <= 'z')) || - ((ascii >= '0') && (ascii <= '9')) || - strchr(allowedSpecials, ascii)) + ((ascii >= 'a') && (ascii <= 'z')) || + ((ascii >= '0') && (ascii <= '9')) || + strchr(allowedSpecials, ascii)) return true; else return false; @@ -792,7 +792,7 @@ void Control::readSavegameDescriptions() { char saveName[40]; Common::String pattern = "sword1.???"; Common::StringArray filenames = _saveFileMan->listSavefiles(pattern); - sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) + sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) _saveNames.clear(); @@ -811,7 +811,7 @@ void Control::readSavegameDescriptions() { num++; Common::InSaveFile *in = _saveFileMan->openForLoading(*file); if (in) { - in->readUint32LE(); // header + in->readUint32LE(); // header in->read(saveName, 40); _saveNames.push_back(saveName); delete in; @@ -860,9 +860,9 @@ void Control::checkForOldSaveGames() { } GUI::MessageDialog dialog0( - _("ScummVM found that you have old savefiles for Broken Sword 1 that should be converted.\n" - "The old save game format is no longer supported, so you will not be able to load your games if you don't convert them.\n\n" - "Press OK to convert them now, otherwise you will be asked again the next time you start the game.\n"), _("OK"), _("Cancel")); + _("ScummVM found that you have old savefiles for Broken Sword 1 that should be converted.\n" + "The old save game format is no longer supported, so you will not be able to load your games if you don't convert them.\n\n" + "Press OK to convert them now, otherwise you will be asked again the next time you start the game.\n"), _("OK"), _("Cancel")); int choice = dialog0.runModal(); if (choice == GUI::kMessageCancel) { @@ -889,8 +889,8 @@ void Control::checkForOldSaveGames() { } } while ((ch != 10) && (ch != 255) && (!inf->eos())); - if (pos > 1) // if the slot has a description - convertSaveGame(slot, (char*)saveName); + if (pos > 1) // if the slot has a description + convertSaveGame(slot, (char *)saveName); slot++; } while ((ch != 255) && (!inf->eos())); @@ -906,12 +906,12 @@ void Control::showSavegameNames() { uint8 textMode = TEXT_LEFT_ALIGN; uint16 ycoord = _saveButtons[cnt].y + 2; uint8 str[40]; - sprintf((char*)str, "%d. %s", cnt + _saveScrollPos + 1, _saveNames[cnt + _saveScrollPos].c_str()); + sprintf((char *)str, "%d. %s", cnt + _saveScrollPos + 1, _saveNames[cnt + _saveScrollPos].c_str()); if (cnt + _saveScrollPos == _selectedSavegame) { textMode |= TEXT_RED_FONT; ycoord += 2; if (_cursorVisible) - strcat((char*)str, "_"); + strcat((char *)str, "_"); } renderText(str, _saveButtons[cnt].x + 6, ycoord, textMode); } @@ -1013,7 +1013,7 @@ void Control::renderText(const uint8 *str, uint16 x, uint16 y, uint8 mode) { uint8 *dst = _screenBuf + y * SCREEN_WIDTH + destX; FrameHeader *chSpr = _resMan->fetchFrame(font, *str - 32); - uint8 *sprData = (uint8*)chSpr + sizeof(FrameHeader); + uint8 *sprData = (uint8 *)chSpr + sizeof(FrameHeader); uint8 *HIFbuf = NULL; if (SwordEngine::isPsx()) { //Text fonts are compressed in psx version @@ -1056,7 +1056,7 @@ void Control::renderVolumeBar(uint8 id, uint8 volL, uint8 volR) { uint8 vol = (chCnt == 0) ? volL : volR; FrameHeader *frHead = _resMan->fetchFrame(_resMan->openFetchRes(SR_VLIGHT), (vol + 15) >> 4); uint8 *destMem = _screenBuf + destY * SCREEN_WIDTH + destX; - uint8 *srcMem = (uint8*)frHead + sizeof(FrameHeader); + uint8 *srcMem = (uint8 *)frHead + sizeof(FrameHeader); uint16 barHeight = _resMan->getUint16(frHead->height); uint8 *psxVolBuf = NULL; @@ -1135,7 +1135,7 @@ void Control::saveGameToFile(uint8 slot) { outf->writeUint32LE(Logic::_scriptVars[cnt]); uint32 playerSize = (sizeof(Object) - 12000) / 4; - uint32 *playerRaw = (uint32*)cpt; + uint32 *playerRaw = (uint32 *)cpt; for (uint32 cnt2 = 0; cnt2 < playerSize; cnt2++) outf->writeUint32LE(playerRaw[cnt2]); outf->finalize(); @@ -1163,7 +1163,7 @@ bool Control::restoreGameFromFile(uint8 slot) { return false; } - inf->skip(40); // skip description + inf->skip(40); // skip description uint8 saveVersion = inf->readByte(); if (saveVersion > SAVEGAME_VERSION) { @@ -1176,8 +1176,8 @@ bool Control::restoreGameFromFile(uint8 slot) { Graphics::skipThumbnail(*inf); - inf->readUint32BE(); // save date - inf->readUint16BE(); // save time + inf->readUint32BE(); // save date + inf->readUint16BE(); // save time if (saveVersion < 2) { // Before version 2 we didn't had play time feature g_engine->setTotalPlayTime(0); @@ -1185,14 +1185,14 @@ bool Control::restoreGameFromFile(uint8 slot) { g_engine->setTotalPlayTime(inf->readUint32BE() * 1000); } - _restoreBuf = (uint8*)malloc( - TOTAL_SECTIONS * 2 + - NUM_SCRIPT_VARS * 4 + - (sizeof(Object) - 12000)); + _restoreBuf = (uint8 *)malloc( + TOTAL_SECTIONS * 2 + + NUM_SCRIPT_VARS * 4 + + (sizeof(Object) - 12000)); - uint16 *liveBuf = (uint16*)_restoreBuf; - uint32 *scriptBuf = (uint32*)(_restoreBuf + 2 * TOTAL_SECTIONS); - uint32 *playerBuf = (uint32*)(_restoreBuf + 2 * TOTAL_SECTIONS + 4 * NUM_SCRIPT_VARS); + uint16 *liveBuf = (uint16 *)_restoreBuf; + uint32 *scriptBuf = (uint32 *)(_restoreBuf + 2 * TOTAL_SECTIONS); + uint32 *playerBuf = (uint32 *)(_restoreBuf + 2 * TOTAL_SECTIONS + 4 * NUM_SCRIPT_VARS); for (cnt = 0; cnt < TOTAL_SECTIONS; cnt++) liveBuf[cnt] = inf->readUint16LE(); @@ -1215,7 +1215,7 @@ bool Control::restoreGameFromFile(uint8 slot) { return true; } -bool Control::convertSaveGame(uint8 slot, char* desc) { +bool Control::convertSaveGame(uint8 slot, char *desc) { char oldFileName[15]; char newFileName[40]; sprintf(oldFileName, "SAVEGAME.%03d", slot); @@ -1230,8 +1230,8 @@ bool Control::convertSaveGame(uint8 slot, char* desc) { delete testSave; Common::String msg = Common::String::format(_("Target new save game already exists!\n" - "Would you like to keep the old save game (%s) or the new one (%s)?\n"), - oldFileName, newFileName); + "Would you like to keep the old save game (%s) or the new one (%s)?\n"), + oldFileName, newFileName); GUI::MessageDialog dialog0(msg, _("Keep the old one"), _("Keep the new one")); int choice = dialog0.runModal(); @@ -1299,17 +1299,17 @@ bool Control::convertSaveGame(uint8 slot, char* desc) { void Control::doRestore() { uint8 *bufPos = _restoreBuf; - _objMan->loadLiveList((uint16*)bufPos); + _objMan->loadLiveList((uint16 *)bufPos); bufPos += TOTAL_SECTIONS * 2; for (uint16 cnt = 0; cnt < NUM_SCRIPT_VARS; cnt++) { - Logic::_scriptVars[cnt] = *(uint32*)bufPos; + Logic::_scriptVars[cnt] = *(uint32 *)bufPos; bufPos += 4; } uint32 playerSize = (sizeof(Object) - 12000) / 4; - uint32 *playerRaw = (uint32*)_objMan->fetchObject(PLAYER); + uint32 *playerRaw = (uint32 *)_objMan->fetchObject(PLAYER); Object *cpt = _objMan->fetchObject(PLAYER); for (uint32 cnt2 = 0; cnt2 < playerSize; cnt2++) { - *playerRaw = *(uint32*)bufPos; + *playerRaw = *(uint32 *)bufPos; playerRaw++; bufPos += 4; } diff --git a/engines/sword1/control.h b/engines/sword1/control.h index c3550e6f02..a80ea05b03 100644 --- a/engines/sword1/control.h +++ b/engines/sword1/control.h @@ -101,7 +101,7 @@ public: private: int displayMessage(const char *altButton, const char *message, ...) GCC_PRINTF(3, 4); - bool convertSaveGame(uint8 slot, char* desc); + bool convertSaveGame(uint8 slot, char *desc); void showSavegameNames(); void deselectSaveslots(); uint8 *_restoreBuf; @@ -142,7 +142,7 @@ private: ControlButton *_buttons[MAX_BUTTONS]; static const ButtonInfo _deathButtons[3], _panelButtons[7], _saveButtons[16], _volumeButtons[4]; static const uint8 _languageStrings[8 * 20][43]; - const uint8 (*_lStrings)[43]; + const uint8(*_lStrings)[43]; Common::SaveFileManager *_saveFileMan; ObjectMan *_objMan; ResMan *_resMan; diff --git a/engines/sword1/detection.cpp b/engines/sword1/detection.cpp index 4da636bce9..e4c068e667 100644 --- a/engines/sword1/detection.cpp +++ b/engines/sword1/detection.cpp @@ -48,7 +48,7 @@ static const PlainGameDescriptor sword1PSXDemoSettings = // check these subdirectories (if present) -static const char *g_dirNames[] = { "clusters", "speech", "english", "italian"}; +static const char *const g_dirNames[] = { "clusters", "speech", "english", "italian"}; #define NUM_COMMON_FILES_TO_CHECK 1 #define NUM_PC_FILES_TO_CHECK 3 @@ -59,7 +59,7 @@ static const char *g_dirNames[] = { "clusters", "speech", "english", "italian"}; #define NUM_MAC_DEMO_FILES_TO_CHECK 1 #define NUM_FILES_TO_CHECK NUM_COMMON_FILES_TO_CHECK + NUM_PC_FILES_TO_CHECK + NUM_MAC_FILES_TO_CHECK + NUM_PSX_FILES_TO_CHECK + NUM_DEMO_FILES_TO_CHECK + NUM_MAC_DEMO_FILES_TO_CHECK + NUM_PSX_DEMO_FILES_TO_CHECK -static const char *g_filesToCheck[NUM_FILES_TO_CHECK] = { // these files have to be found +static const char *const g_filesToCheck[NUM_FILES_TO_CHECK] = { // these files have to be found "swordres.rif", // Mac, PC and PSX version "general.clu", // PC and PSX version "compacts.clu", // PC and PSX version @@ -68,7 +68,7 @@ static const char *g_filesToCheck[NUM_FILES_TO_CHECK] = { // these files have to "compacts.clm", // Mac version only "scripts.clm", // Mac version only "paris2.clm", // Mac version (full game only) - "cows.mad", // this one should only exist in the demo version + "cows.mad", // this one should only exist in the demo version "scripts.clm", // Mac version both demo and full game "train.plx", // PSX version only "speech.dat", // PSX version only @@ -99,20 +99,20 @@ public: bool SwordMetaEngine::hasFeature(MetaEngineFeature f) const { return - (f == kSupportsListSaves) || - (f == kSupportsLoadingDuringStartup) || - (f == kSupportsDeleteSave) || - (f == kSavesSupportMetaInfo) || - (f == kSavesSupportThumbnail) || - (f == kSavesSupportCreationDate) || - (f == kSavesSupportPlayTime); + (f == kSupportsListSaves) || + (f == kSupportsLoadingDuringStartup) || + (f == kSupportsDeleteSave) || + (f == kSavesSupportMetaInfo) || + (f == kSavesSupportThumbnail) || + (f == kSavesSupportCreationDate) || + (f == kSavesSupportPlayTime); } bool Sword1::SwordEngine::hasFeature(EngineFeature f) const { return - (f == kSupportsRTL) || - (f == kSupportsSavingDuringRuntime) || - (f == kSupportsLoadingDuringRuntime); + (f == kSupportsRTL) || + (f == kSupportsSavingDuringRuntime) || + (f == kSupportsLoadingDuringRuntime); } GameList SwordMetaEngine::getSupportedGames() const { @@ -225,7 +225,7 @@ SaveStateList SwordMetaEngine::listSaves(const char *target) const { char saveName[40]; Common::StringArray filenames = saveFileMan->listSavefiles("sword1.???"); - sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) + sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) int slotNum = 0; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { @@ -235,7 +235,7 @@ SaveStateList SwordMetaEngine::listSaves(const char *target) const { if (slotNum >= 0 && slotNum <= 999) { Common::InSaveFile *in = saveFileMan->openForLoading(*file); if (in) { - in->readUint32LE(); // header + in->readUint32LE(); // header in->read(saveName, 40); saveList.push_back(SaveStateDescriptor(slotNum, saveName)); delete in; @@ -261,9 +261,9 @@ SaveStateDescriptor SwordMetaEngine::querySaveMetaInfos(const char *target, int Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(fileName); if (in) { - in->skip(4); // header + in->skip(4); // header in->read(name, sizeof(name)); - in->read(&versionSave, 1); // version + in->read(&versionSave, 1); // version SaveStateDescriptor desc(slot, name); @@ -323,7 +323,7 @@ Common::Error SwordEngine::loadGameState(int slot) { reinitialize(); _control->doRestore(); reinitRes(); - return Common::kNoError; // TODO: return success/failure + return Common::kNoError; // TODO: return success/failure } bool SwordEngine::canLoadGameStateCurrently() { @@ -333,7 +333,7 @@ bool SwordEngine::canLoadGameStateCurrently() { Common::Error SwordEngine::saveGameState(int slot, const Common::String &desc) { _control->setSaveDescription(slot, desc.c_str()); _control->saveGameToFile(slot); - return Common::kNoError; // TODO: return success/failure + return Common::kNoError; // TODO: return success/failure } bool SwordEngine::canSaveGameStateCurrently() { diff --git a/engines/sword1/eventman.cpp b/engines/sword1/eventman.cpp index d95adebd86..113151bfd5 100644 --- a/engines/sword1/eventman.cpp +++ b/engines/sword1/eventman.cpp @@ -44,14 +44,14 @@ void EventManager::checkForEvent(Object *compact) { if (compact->o_event_list[objCnt].o_event) for (uint8 globCnt = 0; globCnt < TOTAL_EVENT_SLOTS; globCnt++) { if (_eventPendingList[globCnt].delay && - (_eventPendingList[globCnt].eventNumber == compact->o_event_list[objCnt].o_event)) { - compact->o_logic = LOGIC_script; //force into script mode - _eventPendingList[globCnt].delay = 0; //started, so remove from queue - compact->o_tree.o_script_level++; - compact->o_tree.o_script_id[compact->o_tree.o_script_level] = - compact->o_event_list[objCnt].o_event_script; - compact->o_tree.o_script_pc[compact->o_tree.o_script_level] = - compact->o_event_list[objCnt].o_event_script; + (_eventPendingList[globCnt].eventNumber == compact->o_event_list[objCnt].o_event)) { + compact->o_logic = LOGIC_script; //force into script mode + _eventPendingList[globCnt].delay = 0; //started, so remove from queue + compact->o_tree.o_script_level++; + compact->o_tree.o_script_id[compact->o_tree.o_script_level] = + compact->o_event_list[objCnt].o_event_script; + compact->o_tree.o_script_pc[compact->o_tree.o_script_level] = + compact->o_event_list[objCnt].o_event_script; } } } @@ -60,7 +60,7 @@ void EventManager::checkForEvent(Object *compact) { bool EventManager::eventValid(int32 event) { for (uint8 slot = 0; slot < TOTAL_EVENT_SLOTS; slot++) if ((_eventPendingList[slot].eventNumber == event) && - (_eventPendingList[slot].delay)) + (_eventPendingList[slot].delay)) return true; return false; } @@ -76,15 +76,15 @@ int EventManager::fnCheckForEvent(Object *cpt, int32 id, int32 pause) { if (cpt->o_event_list[objCnt].o_event) for (uint8 globCnt = 0; globCnt < TOTAL_EVENT_SLOTS; globCnt++) { if (_eventPendingList[globCnt].delay && - (_eventPendingList[globCnt].eventNumber == cpt->o_event_list[objCnt].o_event)) { - cpt->o_logic = LOGIC_script; //force into script mode - _eventPendingList[globCnt].delay = 0; //started, so remove from queue - cpt->o_tree.o_script_level++; - cpt->o_tree.o_script_id[cpt->o_tree.o_script_level] = - cpt->o_event_list[objCnt].o_event_script; - cpt->o_tree.o_script_pc[cpt->o_tree.o_script_level] = - cpt->o_event_list[objCnt].o_event_script; - return SCRIPT_STOP; + (_eventPendingList[globCnt].eventNumber == cpt->o_event_list[objCnt].o_event)) { + cpt->o_logic = LOGIC_script; //force into script mode + _eventPendingList[globCnt].delay = 0; //started, so remove from queue + cpt->o_tree.o_script_level++; + cpt->o_tree.o_script_id[cpt->o_tree.o_script_level] = + cpt->o_event_list[objCnt].o_event_script; + cpt->o_tree.o_script_pc[cpt->o_tree.o_script_level] = + cpt->o_event_list[objCnt].o_event_script; + return SCRIPT_STOP; } } } diff --git a/engines/sword1/logic.cpp b/engines/sword1/logic.cpp index 5b42c9340e..d1c69c80ff 100644 --- a/engines/sword1/logic.cpp +++ b/engines/sword1/logic.cpp @@ -89,14 +89,14 @@ void Logic::initialize() { delete _textMan; _textMan = new Text(_objMan, _resMan, - (SwordEngine::_systemVars.language == BS1_CZECH) ? true : false); + (SwordEngine::_systemVars.language == BS1_CZECH) ? true : false); _screen->useTextManager(_textMan); _textRunning = _speechRunning = false; _speechFinished = true; } void Logic::newScreen(uint32 screen) { - Object *compact = (Object*)_objMan->fetchObject(PLAYER); + Object *compact = (Object *)_objMan->fetchObject(PLAYER); // work around script bug #911508 if (((screen == 25) || (_scriptVars[SCREEN] == 25)) && (_scriptVars[SAND_FLAG] == 4)) { @@ -115,15 +115,15 @@ void Logic::newScreen(uint32 screen) { if (SwordEngine::_systemVars.justRestoredGame) { // if we've just restored a game - we want George to be exactly as saved fnAddHuman(NULL, 0, 0, 0, 0, 0, 0, 0); if (_scriptVars[GEORGE_WALKING]) { // except that if George was walking when we saveed the game - fnStandAt(compact, PLAYER, _scriptVars[CHANGE_X], _scriptVars[CHANGE_Y], _scriptVars[CHANGE_DIR], _scriptVars[CHANGE_STANCE], 0,0); - fnIdle(compact,PLAYER,0,0,0,0,0,0); + fnStandAt(compact, PLAYER, _scriptVars[CHANGE_X], _scriptVars[CHANGE_Y], _scriptVars[CHANGE_DIR], _scriptVars[CHANGE_STANCE], 0, 0); + fnIdle(compact, PLAYER, 0, 0, 0, 0, 0, 0); _scriptVars[GEORGE_WALKING] = 0; } SwordEngine::_systemVars.justRestoredGame = 0; _music->startMusic(_scriptVars[CURRENT_MUSIC], 1); } else { // if we haven't just restored a game, set George to stand, etc compact->o_screen = _scriptVars[NEW_SCREEN]; //move the mega/player at this point between screens - fnStandAt(compact, PLAYER, _scriptVars[CHANGE_X], _scriptVars[CHANGE_Y], _scriptVars[CHANGE_DIR], _scriptVars[CHANGE_STANCE], 0,0); + fnStandAt(compact, PLAYER, _scriptVars[CHANGE_X], _scriptVars[CHANGE_Y], _scriptVars[CHANGE_DIR], _scriptVars[CHANGE_STANCE], 0, 0); fnChangeFloor(compact, PLAYER, _scriptVars[CHANGE_PLACE], 0, 0, 0, 0, 0); } } @@ -227,7 +227,7 @@ void Logic::processLogic(Object *compact, uint32 id) { case LOGIC_restart: compact->o_tree.o_script_pc[compact->o_tree.o_script_level] = compact->o_tree.o_script_id[compact->o_tree.o_script_level]; compact->o_logic = LOGIC_script; - logicRet=1; + logicRet = 1; break; case LOGIC_bookmark: memcpy(&(compact->o_tree.o_script_level), &(compact->o_bookmark.o_script_level), sizeof(ScriptTree)); @@ -293,41 +293,41 @@ int Logic::logicArAnimate(Object *compact, uint32 id) { compact->o_status |= STAT_SHRINK; route = compact->o_route; - walkPc =compact->o_walk_pc; - compact->o_frame =route[walkPc].frame; - compact->o_dir =route[walkPc].dir; - compact->o_xcoord =route[walkPc].x; - compact->o_ycoord =route[walkPc].y; - compact->o_anim_x =compact->o_xcoord; - compact->o_anim_y =compact->o_ycoord; + walkPc = compact->o_walk_pc; + compact->o_frame = route[walkPc].frame; + compact->o_dir = route[walkPc].dir; + compact->o_xcoord = route[walkPc].x; + compact->o_ycoord = route[walkPc].y; + compact->o_anim_x = compact->o_xcoord; + compact->o_anim_y = compact->o_ycoord; if (((_scriptVars[GEORGE_WALKING] == 2) && (walkPc > 5) && (id == PLAYER) && - (route[walkPc - 1].step == 5) && (route[walkPc].step == 0)) || - ((_scriptVars[GEORGE_WALKING] == 3) && (id == PLAYER))) { - - compact->o_frame = 96 + compact->o_dir; //reset - if ((compact->o_dir != 2) && (compact->o_dir != 6)) { // on verticals and diagonals stand where george is - compact->o_xcoord = route[walkPc - 1].x; - compact->o_ycoord = route[walkPc - 1].y; - compact->o_anim_x = compact->o_xcoord; - compact->o_anim_y = compact->o_ycoord; - } - compact->o_logic = LOGIC_script; - compact->o_down_flag = 0; //0 means error - _scriptVars[GEORGE_WALKING] = 0; - route[compact->o_walk_pc+1].frame = 512; //end of sequence - if (_scriptVars[MEGA_ON_GRID] == 2) - _scriptVars[MEGA_ON_GRID] = 0; + (route[walkPc - 1].step == 5) && (route[walkPc].step == 0)) || + ((_scriptVars[GEORGE_WALKING] == 3) && (id == PLAYER))) { + + compact->o_frame = 96 + compact->o_dir; //reset + if ((compact->o_dir != 2) && (compact->o_dir != 6)) { // on verticals and diagonals stand where george is + compact->o_xcoord = route[walkPc - 1].x; + compact->o_ycoord = route[walkPc - 1].y; + compact->o_anim_x = compact->o_xcoord; + compact->o_anim_y = compact->o_ycoord; + } + compact->o_logic = LOGIC_script; + compact->o_down_flag = 0; //0 means error + _scriptVars[GEORGE_WALKING] = 0; + route[compact->o_walk_pc + 1].frame = 512; //end of sequence + if (_scriptVars[MEGA_ON_GRID] == 2) + _scriptVars[MEGA_ON_GRID] = 0; } compact->o_walk_pc++; - if (route[compact->o_walk_pc].frame == 512) { //end of sequence + if (route[compact->o_walk_pc].frame == 512) { //end of sequence compact->o_logic = LOGIC_script; if (((_scriptVars[GEORGE_WALKING] == 2) || (_scriptVars[GEORGE_WALKING] == 1)) && - (id == PLAYER)) { - _scriptVars[GEORGE_WALKING] = 0; - if (_scriptVars[MEGA_ON_GRID] == 2) - _scriptVars[MEGA_ON_GRID] = 0; + (id == PLAYER)) { + _scriptVars[GEORGE_WALKING] = 0; + if (_scriptVars[MEGA_ON_GRID] == 2) + _scriptVars[MEGA_ON_GRID] = 0; } } return 0; @@ -360,16 +360,16 @@ int Logic::speechDriver(Object *compact) { _speechFinished = true; } if (compact->o_anim_resource) { - uint8 *animData = ((uint8*)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header); + uint8 *animData = ((uint8 *)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header); int32 numFrames = _resMan->readUint32(animData); animData += 4; compact->o_anim_pc++; // go to next frame of anim if (_speechFinished || (compact->o_anim_pc >= numFrames) || - (_speechRunning && (_sound->amISpeaking() == 0))) - compact->o_anim_pc = 0; //set to frame 0, closed mouth + (_speechRunning && (_sound->amISpeaking() == 0))) + compact->o_anim_pc = 0; //set to frame 0, closed mouth - AnimUnit *animPtr = (AnimUnit*)(animData + sizeof(AnimUnit) * compact->o_anim_pc); + AnimUnit *animPtr = (AnimUnit *)(animData + sizeof(AnimUnit) * compact->o_anim_pc); if (!(compact->o_status & STAT_SHRINK)) { compact->o_anim_x = _resMan->getUint32(animPtr->animX); compact->o_anim_y = _resMan->getUint32(animPtr->animY); @@ -385,10 +385,10 @@ int Logic::fullAnimDriver(Object *compact) { compact->o_logic = LOGIC_script; return 1; } - uint8 *data = ((uint8*)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header); + uint8 *data = ((uint8 *)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header); uint32 numFrames = _resMan->readUint32(data); data += 4; - AnimUnit *animPtr = (AnimUnit*)(data + compact->o_anim_pc * sizeof(AnimUnit)); + AnimUnit *animPtr = (AnimUnit *)(data + compact->o_anim_pc * sizeof(AnimUnit)); compact->o_anim_x = compact->o_xcoord = _resMan->getUint32(animPtr->animX); compact->o_anim_y = compact->o_ycoord = _resMan->getUint32(animPtr->animY); @@ -407,9 +407,9 @@ int Logic::animDriver(Object *compact) { compact->o_logic = LOGIC_script; return 1; } - uint8 *data = ((uint8*)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header); + uint8 *data = ((uint8 *)_resMan->openFetchRes(compact->o_anim_resource)) + sizeof(Header); uint32 numFrames = _resMan->readUint32(data); - AnimUnit *animPtr = (AnimUnit*)(data + 4 + compact->o_anim_pc * sizeof(AnimUnit)); + AnimUnit *animPtr = (AnimUnit *)(data + 4 + compact->o_anim_pc * sizeof(AnimUnit)); if (!(compact->o_status & STAT_SHRINK)) { compact->o_anim_x = _resMan->getUint32(animPtr->animX); @@ -426,9 +426,9 @@ int Logic::animDriver(Object *compact) { } void Logic::updateScreenParams() { - Object *compact = (Object*)_objMan->fetchObject(PLAYER); + Object *compact = (Object *)_objMan->fetchObject(PLAYER); _screen->setScrolling((int16)(compact->o_xcoord - _scriptVars[FEET_X]), - (int16)(compact->o_ycoord - _scriptVars[FEET_Y])); + (int16)(compact->o_ycoord - _scriptVars[FEET_Y])); } int Logic::scriptManager(Object *compact, uint32 id) { @@ -465,7 +465,7 @@ void Logic::runMouseScript(Object *cpt, int32 scriptId) { } int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int scriptBase, int scriptNum) { - int32 *scriptCode = (int32*)(((uint8*)scriptModule) + sizeof(Header)); + int32 *scriptCode = (int32 *)(((uint8 *)scriptModule) + sizeof(Header)); int32 stack[MAX_STACK_SIZE]; int32 stackIdx = 0; int32 offset; @@ -609,7 +609,7 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc debug(9, "IT_SCRIPTEND"); return 0; case IT_POPVAR: // pop a variable - debug(9, "IT_POPVAR: ScriptVars[%d] = %d", scriptCode[pc], stack[stackIdx-1]); + debug(9, "IT_POPVAR: ScriptVars[%d] = %d", scriptCode[pc], stack[stackIdx - 1]); varNum = scriptCode[pc++]; if (SwordEngine::_systemVars.isDemo && SwordEngine::isPc()) { if (varNum >= 397) // BS1 Demo has different number of script variables @@ -622,15 +622,15 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc case IT_POPLONGOFFSET: offset = scriptCode[pc++]; debug(9, "IT_POPLONGOFFSET: Cpt[%d] = %d", offset, stack[stackIdx - 1]); - *((int32 *)((uint8*)compact + offset)) = stack[--stackIdx]; + *((int32 *)((uint8 *)compact + offset)) = stack[--stackIdx]; break; case IT_PUSHLONGOFFSET: offset = scriptCode[pc++]; - debug(9, "IT_PUSHLONGOFFSET: PUSH Cpt[%d] (==%d)", offset, *((int32 *)((uint8*)compact + offset))); - stack[stackIdx++] = *((int32 *)((uint8*)compact + offset)); + debug(9, "IT_PUSHLONGOFFSET: PUSH Cpt[%d] (==%d)", offset, *((int32 *)((uint8 *)compact + offset))); + stack[stackIdx++] = *((int32 *)((uint8 *)compact + offset)); break; case IT_SKIPONFALSE: - debug(9, "IT_SKIPONFALSE: %d (%s)", scriptCode[pc], (stack[stackIdx-1] ? "IS TRUE (NOT SKIPPED)" : "IS FALSE (SKIPPED)")); + debug(9, "IT_SKIPONFALSE: %d (%s)", scriptCode[pc], (stack[stackIdx - 1] ? "IS TRUE (NOT SKIPPED)" : "IS FALSE (SKIPPED)")); if (stack[--stackIdx]) pc++; else @@ -645,12 +645,12 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc { int switchValue = stack[--stackIdx]; int switchCount = scriptCode[pc++]; - int doneSwitch=0; + int doneSwitch = 0; - for (int cnt = 0; (cnt < switchCount) && (doneSwitch==0); cnt++) { + for (int cnt = 0; (cnt < switchCount) && (doneSwitch == 0); cnt++) { if (switchValue == scriptCode[pc]) { - pc += scriptCode[pc+1]; - doneSwitch=1; + pc += scriptCode[pc + 1]; + doneSwitch = 1; } else pc += 2; } @@ -659,7 +659,7 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc } break; case IT_SKIPONTRUE: // skip if expression true - debug(9, "IT_SKIPONTRUE: %d (%s)", scriptCode[pc], (stack[stackIdx-1] ? "IS TRUE (SKIPPED)" : "IS FALSE (NOT SKIPPED)")); + debug(9, "IT_SKIPONTRUE: %d (%s)", scriptCode[pc], (stack[stackIdx - 1] ? "IS TRUE (SKIPPED)" : "IS FALSE (NOT SKIPPED)")); stackIdx--; if (stack[stackIdx]) pc += scriptCode[pc]; @@ -667,7 +667,7 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc pc++; break; case IT_PRINTF: - debug(0, "IT_PRINTF(%d)",stack[stackIdx]); + debug(0, "IT_PRINTF(%d)", stack[stackIdx]); break; case IT_RESTARTSCRIPT: debug(9, "IT_RESTARTSCRIPT"); @@ -676,16 +676,16 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc case IT_POPWORDOFFSET: offset = scriptCode[pc++]; debug(9, "IT_POPWORDOFFSET: Cpt[%d] = %d", offset, stack[stackIdx - 1] & 0xFFFF); - *((int32 *)((uint8*)compact + offset)) = stack[--stackIdx] & 0xffff; + *((int32 *)((uint8 *)compact + offset)) = stack[--stackIdx] & 0xffff; break; case IT_PUSHWORDOFFSET: offset = scriptCode[pc++]; - debug(9, "IT_PUSHWORDOFFSET: PUSH Cpt[%d] == %d", offset, (*((int32 *)((uint8*)compact + offset))) & 0xffff); - stack[stackIdx++] = (*((int32 *)((uint8*)compact + offset))) & 0xffff; + debug(9, "IT_PUSHWORDOFFSET: PUSH Cpt[%d] == %d", offset, (*((int32 *)((uint8 *)compact + offset))) & 0xffff); + stack[stackIdx++] = (*((int32 *)((uint8 *)compact + offset))) & 0xffff; break; default: - error("Invalid operator %d",scriptCode[pc-1]); - return 0; // for compilers that don't support NORETURN + error("Invalid operator %d", scriptCode[pc - 1]); + return 0; // for compilers that don't support NORETURN } } } @@ -831,7 +831,7 @@ int Logic::fnAnim(Object *cpt, int32 id, int32 cdt, int32 spr, int32 e, int32 f, AnimSet *animTab; if (cdt && (!spr)) { - animTab = (AnimSet*)((uint8*)_resMan->openFetchRes(cdt) + sizeof(Header)); + animTab = (AnimSet *)((uint8 *)_resMan->openFetchRes(cdt) + sizeof(Header)); animTab += cpt->o_dir; cpt->o_anim_resource = _resMan->getUint32(animTab->cdt); @@ -865,13 +865,13 @@ int Logic::fnSetFrame(Object *cpt, int32 id, int32 cdt, int32 spr, int32 frameNo AnimUnit *animPtr; - uint8 *data = (uint8*)_resMan->openFetchRes(cdt); + uint8 *data = (uint8 *)_resMan->openFetchRes(cdt); data += sizeof(Header); if (frameNo == LAST_FRAME) frameNo = _resMan->readUint32(data) - 1; data += 4; - animPtr = (AnimUnit*)(data + frameNo * sizeof(AnimUnit)); + animPtr = (AnimUnit *)(data + frameNo * sizeof(AnimUnit)); cpt->o_anim_x = _resMan->getUint32(animPtr->animX); cpt->o_anim_y = _resMan->getUint32(animPtr->animY); @@ -895,13 +895,13 @@ int Logic::fnFullAnim(Object *cpt, int32 id, int32 anim, int32 graphic, int32 e, } int Logic::fnFullSetFrame(Object *cpt, int32 id, int32 cdt, int32 spr, int32 frameNo, int32 f, int32 z, int32 x) { - uint8 *data = (uint8*)_resMan->openFetchRes(cdt) + sizeof(Header); + uint8 *data = (uint8 *)_resMan->openFetchRes(cdt) + sizeof(Header); if (frameNo == LAST_FRAME) frameNo = _resMan->readUint32(data) - 1; data += 4; - AnimUnit *animPtr = (AnimUnit*)(data + sizeof(AnimUnit) * frameNo); + AnimUnit *animPtr = (AnimUnit *)(data + sizeof(AnimUnit) * frameNo); cpt->o_anim_x = cpt->o_xcoord = _resMan->getUint32(animPtr->animX); cpt->o_anim_y = cpt->o_ycoord = _resMan->getUint32(animPtr->animY); cpt->o_frame = _resMan->getUint32(animPtr->animFrame); @@ -1115,7 +1115,7 @@ int Logic::fnISpeak(Object *cpt, int32 id, int32 cdt, int32 textNo, int32 spr, i // first setup the talk animation if (cdt && (!spr)) { // if 'cdt' is non-zero but 'spr' is zero - 'cdt' is an anim table tag - AnimSet *animTab = (AnimSet*)((uint8*)_resMan->openFetchRes(cdt) + sizeof(Header)); + AnimSet *animTab = (AnimSet *)((uint8 *)_resMan->openFetchRes(cdt) + sizeof(Header)); animTab += cpt->o_dir; cpt->o_anim_resource = _resMan->getUint32(animTab->cdt); @@ -1152,10 +1152,10 @@ int Logic::fnISpeak(Object *cpt, int32 id, int32 cdt, int32 textNo, int32 spr, i char *text = _objMan->lockText(textNo); cpt->o_speech_time = strlen(text) + 5; - uint32 textCptId = _textMan->lowTextManager((uint8*)text, cpt->o_speech_width, (uint8)cpt->o_speech_pen); + uint32 textCptId = _textMan->lowTextManager((uint8 *)text, cpt->o_speech_width, (uint8)cpt->o_speech_pen); _objMan->unlockText(textNo); - Object * textCpt = _objMan->fetchObject(textCptId); + Object *textCpt = _objMan->fetchObject(textCptId); textCpt->o_screen = cpt->o_screen; textCpt->o_target = textCptId; @@ -1189,8 +1189,8 @@ int Logic::fnISpeak(Object *cpt, int32 id, int32 cdt, int32 textNo, int32 spr, i textTopMargin = SCREEN_TOP_EDGE + TEXT_MARGIN + _scriptVars[SCROLL_OFFSET_Y]; textBottomMargin = SCREEN_BOTTOM_EDGE - TEXT_MARGIN + _scriptVars[SCROLL_OFFSET_Y] - textSpriteHeight; - textCpt->o_anim_x = textCpt->o_xcoord = inRange(textLeftMargin, textX, textRightMargin); - textCpt->o_anim_y = textCpt->o_ycoord = inRange(textTopMargin, textY, textBottomMargin); + textCpt->o_anim_x = textCpt->o_xcoord = CLIP<uint16>(textX, textLeftMargin, textRightMargin); + textCpt->o_anim_y = textCpt->o_ycoord = CLIP<uint16>(textY, textTopMargin, textBottomMargin); } return SCRIPT_STOP; } @@ -1247,7 +1247,7 @@ int Logic::fnChangeSpeechText(Object *cpt, int32 id, int32 tar, int32 width, int //The game is halted for debugging. Maybe we'll remove this later. int Logic::fnTalkError(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x) { error("fnTalkError for id %d, instruction %d", id, cpt->o_down_flag); - return SCRIPT_STOP; // for compilers that don't support NORETURN + return SCRIPT_STOP; // for compilers that don't support NORETURN } int Logic::fnStartTalk(Object *cpt, int32 id, int32 target, int32 d, int32 e, int32 f, int32 z, int32 x) { @@ -1414,12 +1414,12 @@ int Logic::fnWalk(Object *cpt, int32 id, int32 x, int32 y, int32 dir, int32 stan int32 target = _scriptVars[CLICK_ID]; // exceptions: compacts that use hand pointers but are not actually exits if ((target != LEFT_SCROLL_POINTER) && (target != RIGHT_SCROLL_POINTER) && - (target != FLOOR_63) && (target != ROOF_63) && (target != GUARD_ROOF_63) && - (target != LEFT_TREE_POINTER_71) && (target != RIGHT_TREE_POINTER_71)) { + (target != FLOOR_63) && (target != ROOF_63) && (target != GUARD_ROOF_63) && + (target != LEFT_TREE_POINTER_71) && (target != RIGHT_TREE_POINTER_71)) { target = _objMan->fetchObject(_scriptVars[CLICK_ID])->o_mouse_on; if ((target >= SCR_exit0) && (target <= SCR_exit9)) { - fnStandAt(cpt,id,x,y,dir,stance,0,0); + fnStandAt(cpt, id, x, y, dir, stance, 0, 0); return SCRIPT_STOP; } } @@ -1439,13 +1439,13 @@ int Logic::fnTurn(Object *cpt, int32 id, int32 dir, int32 stance, int32 c, int32 dir = 9; int route = _router->routeFinder(id, cpt, cpt->o_xcoord, cpt->o_ycoord, dir); - if (route) - cpt->o_down_flag = 1; //1 means ok + if (route) + cpt->o_down_flag = 1; //1 means ok else - cpt->o_down_flag = 0; //0 means error + cpt->o_down_flag = 0; //0 means error cpt->o_logic = LOGIC_AR_animate; - cpt->o_walk_pc = 0; //reset + cpt->o_walk_pc = 0; //reset return SCRIPT_STOP; } @@ -1602,7 +1602,7 @@ int Logic::fnStopMusic(Object *cpt, int32 id, int32 a, int32 b, int32 c, int32 d int Logic::fnInnerSpace(Object *cpt, int32 id, int32 a, int32 b, int32 c, int32 d, int32 z, int32 x) { error("fnInnerSpace() not working"); - return SCRIPT_STOP; // for compilers that don't support NORETURN + return SCRIPT_STOP; // for compilers that don't support NORETURN } int Logic::fnSetScreen(Object *cpt, int32 id, int32 target, int32 screen, int32 c, int32 d, int32 z, int32 x) { @@ -1689,10 +1689,6 @@ int Logic::fnBlack(Object *cpt, int32 id, int32 a, int32 b, int32 c, int32 d, in return SCRIPT_CONT; } -uint16 Logic::inRange(uint16 a, uint16 b, uint16 c) { - return (a > b)? a : (((b > c) ? c : b)); -} - void Logic::startPosCallFn(uint8 fnId, uint32 param1, uint32 param2, uint32 param3) { Object *obj = NULL; switch (fnId) { @@ -1789,7 +1785,7 @@ void Logic::startPositions(uint32 pos) { if (pos == 0) pos = 1; Object *compact = _objMan->fetchObject(PLAYER); - fnEnterSection(compact, PLAYER, pos, 0, 0, 0, 0, 0); // (automatically opens the compact resource for that section) + fnEnterSection(compact, PLAYER, pos, 0, 0, 0, 0, 0); // (automatically opens the compact resource for that section) SwordEngine::_systemVars.controlPanelMode = CP_NORMAL; SwordEngine::_systemVars.wantFade = true; } diff --git a/engines/sword1/logic.h b/engines/sword1/logic.h index 13ddbc989b..a146d340cf 100644 --- a/engines/sword1/logic.h +++ b/engines/sword1/logic.h @@ -35,7 +35,7 @@ class OSystem; namespace Sword1 { #define NON_ZERO_SCRIPT_VARS 95 -#define NUM_SCRIPT_VARS 1179 +#define NUM_SCRIPT_VARS 1179 class SwordEngine; class Text; @@ -63,7 +63,7 @@ public: static uint32 _scriptVars[NUM_SCRIPT_VARS]; // public for mouse (menu looking) - int cfnPresetScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int cfnPresetScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); private: SwordEngine *_vm; ObjectMan *_objMan; @@ -97,118 +97,116 @@ private: void setupMcodeTable(); const BSMcodeTable *_mcodeTable; - uint16 inRange(uint16 a, uint16 b, uint16 c); - //- mcodeTable: - int fnBackground (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnForeground (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnSort (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnNoSprite (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnMegaSet (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnAnim (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnSetFrame (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnFullAnim (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnFullSetFrame (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnFadeDown (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnFadeUp (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnCheckFade (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnBackground(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnForeground(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnSort(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnNoSprite(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnMegaSet(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnAnim(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnSetFrame(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnFullAnim(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnFullSetFrame(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnFadeDown(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnFadeUp(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnCheckFade(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnSetSpritePalette(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnSetWholePalette(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnSetFadeTargetPalette(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnSetPaletteToFade(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnSetPaletteToCut(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnPlaySequence (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - - int fnIdle (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnPause (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnPauseSeconds (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnQuit (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnKillId (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnSuicide (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnNewScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnSubScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnRestartScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnSetBookmark (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnGotoBookmark (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnSendSync (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnWaitSync (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnPlaySequence(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + + int fnIdle(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnPause(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnPauseSeconds(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnQuit(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnKillId(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnSuicide(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnNewScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnSubScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnRestartScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnSetBookmark(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnGotoBookmark(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnSendSync(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnWaitSync(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int cfnClickInteract(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int cfnSetScript (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - - int fnInteract (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnIssueEvent (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnCheckForEvent (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnWipeHands (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnISpeak (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnTheyDo (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnTheyDoWeWait (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnWeWait (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int cfnSetScript(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + + int fnInteract(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnIssueEvent(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnCheckForEvent(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnWipeHands(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnISpeak(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnTheyDo(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnTheyDoWeWait(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnWeWait(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnChangeSpeechText(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnTalkError (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnStartTalk (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnTalkError(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnStartTalk(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnCheckForTextLine(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnAddTalkWaitStatusBit(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnRemoveTalkWaitStatusBit(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnNoHuman (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnAddHuman (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnBlankMouse (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnNormalMouse (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnLockMouse (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnUnlockMouse (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnNoHuman(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnAddHuman(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnBlankMouse(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnNormalMouse(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnLockMouse(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnUnlockMouse(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnSetMousePointer(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); int fnSetMouseLuggage(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnMouseOn (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnMouseOff (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnChooser (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnEndChooser (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnStartMenu (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnEndMenu (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - - int cfnReleaseMenu (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - - int fnAddSubject (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnAddObject (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnRemoveObject (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnEnterSection (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnLeaveSection (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnChangeFloor (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnWalk (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnTurn (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnStand (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnStandAt (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnFace (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnFaceXy (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnIsFacing (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnGetTo (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnGetToError (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnGetPos (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnGetGamepadXy (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnPlayFx (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnStopFx (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnPlayMusic (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnStopMusic (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnInnerSpace (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnRandom (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnSetScreen (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnPreload (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnCheckCD (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnRestartGame (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnQuitGame (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnDeathScreen (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnSetParallax (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnTdebug (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - - int fnRedFlash (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnBlueFlash (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnYellow (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnGreen (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnPurple (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); - int fnBlack (Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnMouseOn(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnMouseOff(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnChooser(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnEndChooser(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnStartMenu(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnEndMenu(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + + int cfnReleaseMenu(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + + int fnAddSubject(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnAddObject(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnRemoveObject(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnEnterSection(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnLeaveSection(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnChangeFloor(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnWalk(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnTurn(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnStand(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnStandAt(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnFace(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnFaceXy(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnIsFacing(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnGetTo(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnGetToError(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnGetPos(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnGetGamepadXy(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnPlayFx(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnStopFx(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnPlayMusic(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnStopMusic(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnInnerSpace(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnRandom(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnSetScreen(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnPreload(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnCheckCD(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnRestartGame(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnQuitGame(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnDeathScreen(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnSetParallax(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnTdebug(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + + int fnRedFlash(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnBlueFlash(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnYellow(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnGreen(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnPurple(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); + int fnBlack(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x); static const uint32 _scriptVarInit[NON_ZERO_SCRIPT_VARS][2]; - static const uint8 *_startData[]; - static const uint8 *_helperData[]; + static const uint8 *const _startData[]; + static const uint8 *const _helperData[]; void startPosCallFn(uint8 fnId, uint32 param1, uint32 param2, uint32 param3); void runStartScript(const uint8 *data); }; diff --git a/engines/sword1/memman.cpp b/engines/sword1/memman.cpp index 9fd763084a..19809249b5 100644 --- a/engines/sword1/memman.cpp +++ b/engines/sword1/memman.cpp @@ -40,7 +40,7 @@ MemMan::~MemMan() { void MemMan::alloc(MemHandle *bsMem, uint32 pSize, uint16 pCond) { _alloced += pSize; - bsMem->data = (void*)malloc(pSize); + bsMem->data = (void *)malloc(pSize); if (!bsMem->data) error("MemMan::alloc(): Can't alloc %d bytes of memory.", pSize); bsMem->cond = pCond; diff --git a/engines/sword1/memman.h b/engines/sword1/memman.h index 3f822189eb..7f84720248 100644 --- a/engines/sword1/memman.h +++ b/engines/sword1/memman.h @@ -35,9 +35,9 @@ struct MemHandle { MemHandle *next, *prev; }; // mem conditions: -#define MEM_FREED 0 -#define MEM_CAN_FREE 1 -#define MEM_DONT_FREE 2 +#define MEM_FREED 0 +#define MEM_CAN_FREE 1 +#define MEM_DONT_FREE 2 #define MAX_ALLOC (6*1024*1024) // max amount of mem we want to alloc(). diff --git a/engines/sword1/menu.cpp b/engines/sword1/menu.cpp index 3a99602fec..f61e10106a 100644 --- a/engines/sword1/menu.cpp +++ b/engines/sword1/menu.cpp @@ -85,7 +85,7 @@ void MenuIcon::setSelect(bool pSel) { void MenuIcon::draw(const byte *fadeMask, int8 fadeStatus) { uint16 x = _menuPos * 40; - uint16 y = (_menuType == MENU_TOP)?(0):(440); + uint16 y = (_menuType == MENU_TOP) ? (0) : (440); _screen->showFrame(x, y, _resId, _frame + (_selected ? 1 : 0), fadeMask, fadeStatus); } @@ -193,7 +193,7 @@ uint8 Menu::checkMenuClick(uint8 menuType) { _mouse->setLuggage(0, 0); Logic::_scriptVars[OBJECT_HELD] = 0; // reselected => deselect it } else { // the player is clicking another item on this one. - // run its use-script, if there is one + // run its use-script, if there is one Logic::_scriptVars[SECOND_ITEM] = _menuList[cnt]; _mouse->setLuggage(0, 0); } diff --git a/engines/sword1/mouse.cpp b/engines/sword1/mouse.cpp index cbf951aebc..4a62995d96 100644 --- a/engines/sword1/mouse.cpp +++ b/engines/sword1/mouse.cpp @@ -47,7 +47,7 @@ Mouse::~Mouse() { setLuggage(0, 0); setPointer(0, 0); - for (uint8 cnt = 0; cnt < 17; cnt++) // close mouse cursor resources + for (uint8 cnt = 0; cnt < 17; cnt++) // close mouse cursor resources _resMan->resClose(MSE_POINTER + cnt); } @@ -60,7 +60,7 @@ void Mouse::initialize() { _mouseOverride = false; _currentPtrId = _currentLuggageId = 0; - for (uint8 cnt = 0; cnt < 17; cnt++) // force res manager to keep mouse + for (uint8 cnt = 0; cnt < 17; cnt++) // force res manager to keep mouse _resMan->resOpen(MSE_POINTER + cnt); // cursors in memory all the time CursorMan.showMouse(false); @@ -112,7 +112,7 @@ void Mouse::engine(uint16 x, uint16 y, uint16 eventFlags) { _mouse.y = y; if (!(Logic::_scriptVars[MOUSE_STATUS] & 1)) { // no human? _numObjs = 0; - return; // no human, so we don't want the mouse engine + return; // no human, so we don't want the mouse engine } if (!Logic::_scriptVars[TOP_MENU_DISABLED]) { @@ -144,12 +144,12 @@ void Mouse::engine(uint16 x, uint16 y, uint16 eventFlags) { for (uint16 priority = 0; (priority < 10) && (!touchedId); priority++) { for (uint16 cnt = 0; (cnt < _numObjs) && (!touchedId); cnt++) { if ((_objList[cnt].compact->o_priority == priority) && - (Logic::_scriptVars[MOUSE_X] >= (uint32)_objList[cnt].compact->o_mouse_x1) && - (Logic::_scriptVars[MOUSE_X] <= (uint32)_objList[cnt].compact->o_mouse_x2) && - (Logic::_scriptVars[MOUSE_Y] >= (uint32)_objList[cnt].compact->o_mouse_y1) && - (Logic::_scriptVars[MOUSE_Y] <= (uint32)_objList[cnt].compact->o_mouse_y2)) { - touchedId = _objList[cnt].id; - clicked = cnt; + (Logic::_scriptVars[MOUSE_X] >= (uint32)_objList[cnt].compact->o_mouse_x1) && + (Logic::_scriptVars[MOUSE_X] <= (uint32)_objList[cnt].compact->o_mouse_x2) && + (Logic::_scriptVars[MOUSE_Y] >= (uint32)_objList[cnt].compact->o_mouse_y1) && + (Logic::_scriptVars[MOUSE_Y] <= (uint32)_objList[cnt].compact->o_mouse_y2)) { + touchedId = _objList[cnt].id; + clicked = cnt; } } } @@ -160,7 +160,7 @@ void Mouse::engine(uint16 x, uint16 y, uint16 eventFlags) { _getOff = 0; } if (touchedId) { // there's something new selected, now. - if (_objList[clicked].compact->o_mouse_on) //run its get on + if (_objList[clicked].compact->o_mouse_on) //run its get on _logic->runMouseScript(_objList[clicked].compact, _objList[clicked].compact->o_mouse_on); _getOff = _objList[clicked].compact->o_mouse_off; //setup get-off for later @@ -197,7 +197,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) { if (ptrId) { MousePtr *lugg = NULL; - MousePtr *ptr = (MousePtr*)_resMan->openFetchRes(ptrId); + MousePtr *ptr = (MousePtr *)_resMan->openFetchRes(ptrId); uint16 noFrames = _resMan->getLEUint16(ptr->numFrames); uint16 ptrSizeX = _resMan->getLEUint16(ptr->sizeX); uint16 ptrSizeY = _resMan->getLEUint16(ptr->sizeY); @@ -210,7 +210,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) { ptrSizeY *= 2; if (luggageId) { - lugg = (MousePtr*)_resMan->openFetchRes(luggageId); + lugg = (MousePtr *)_resMan->openFetchRes(luggageId); luggSizeX = _resMan->getLEUint16(lugg->sizeX); luggSizeY = _resMan->getLEUint16(lugg->sizeY); @@ -223,18 +223,18 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) { resSizeX = ptrSizeX; resSizeY = ptrSizeY; } - _currentPtr = (MousePtr*)malloc(sizeof(MousePtr) + resSizeX * resSizeY * noFrames); + _currentPtr = (MousePtr *)malloc(sizeof(MousePtr) + resSizeX * resSizeY * noFrames); _currentPtr->hotSpotX = _resMan->getLEUint16(ptr->hotSpotX); _currentPtr->hotSpotY = _resMan->getLEUint16(ptr->hotSpotY); _currentPtr->numFrames = noFrames; _currentPtr->sizeX = resSizeX; _currentPtr->sizeY = resSizeY; - uint8 *ptrData = (uint8*)_currentPtr + sizeof(MousePtr); + uint8 *ptrData = (uint8 *)_currentPtr + sizeof(MousePtr); memset(ptrData, 255, resSizeX * resSizeY * noFrames); if (luggageId) { uint8 *dstData = ptrData + resSizeX - luggSizeX; for (uint32 frameCnt = 0; frameCnt < noFrames; frameCnt++) { - uint8 *luggSrc = (uint8*)lugg + sizeof(MousePtr); + uint8 *luggSrc = (uint8 *)lugg + sizeof(MousePtr); dstData += (resSizeY - luggSizeY) * resSizeX; for (uint32 cnty = 0; cnty < (uint32)(SwordEngine::isPsx() ? luggSizeY / 2 : luggSizeY); cnty++) { for (uint32 cntx = 0; cntx < luggSizeX; cntx++) @@ -256,7 +256,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) { } uint8 *dstData = ptrData; - uint8 *srcData = (uint8*)ptr + sizeof(MousePtr); + uint8 *srcData = (uint8 *)ptr + sizeof(MousePtr); for (uint32 frameCnt = 0; frameCnt < noFrames; frameCnt++) { for (uint32 cnty = 0; cnty < (uint32)(SwordEngine::isPsx() ? ptrSizeY / 2 : ptrSizeY); cnty++) { for (uint32 cntx = 0; cntx < ptrSizeX; cntx++) @@ -264,7 +264,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) { dstData[cntx] = srcData[cntx]; if (SwordEngine::isPsx()) { - dstData +=resSizeX; + dstData += resSizeX; for (uint32 cntx = 0; cntx < ptrSizeX; cntx++) if (srcData[cntx]) dstData[cntx] = srcData[cntx]; @@ -309,7 +309,7 @@ void Mouse::animate() { if (_activeFrame == _frame) return; - uint8 *ptrData = (uint8*)_currentPtr + sizeof(MousePtr); + uint8 *ptrData = (uint8 *)_currentPtr + sizeof(MousePtr); ptrData += _frame * _currentPtr->sizeX * _currentPtr->sizeY; CursorMan.replaceCursor(ptrData, _currentPtr->sizeX, _currentPtr->sizeY, _currentPtr->hotSpotX, _currentPtr->hotSpotY, 255); diff --git a/engines/sword1/mouse.h b/engines/sword1/mouse.h index 44a6f76ad7..b2a844d0a9 100644 --- a/engines/sword1/mouse.h +++ b/engines/sword1/mouse.h @@ -34,22 +34,22 @@ namespace Sword1 { #define MAX_MOUSE 30 -#define BS1L_BUTTON_DOWN 2 -#define BS1L_BUTTON_UP 4 -#define BS1R_BUTTON_DOWN 8 -#define BS1R_BUTTON_UP 16 -#define BS1_WHEEL_UP 32 -#define BS1_WHEEL_DOWN 64 -#define MOUSE_BOTH_BUTTONS (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN) -#define MOUSE_DOWN_MASK (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN) -#define MOUSE_UP_MASK (BS1L_BUTTON_UP | BS1R_BUTTON_UP) +#define BS1L_BUTTON_DOWN 2 +#define BS1L_BUTTON_UP 4 +#define BS1R_BUTTON_DOWN 8 +#define BS1R_BUTTON_UP 16 +#define BS1_WHEEL_UP 32 +#define BS1_WHEEL_DOWN 64 +#define MOUSE_BOTH_BUTTONS (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN) +#define MOUSE_DOWN_MASK (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN) +#define MOUSE_UP_MASK (BS1L_BUTTON_UP | BS1R_BUTTON_UP) struct MouseObj { int id; Object *compact; }; -#include "common/pack-start.h" // START STRUCT PACKING +#include "common/pack-start.h" // START STRUCT PACKING struct MousePtr { uint16 numFrames; @@ -60,7 +60,7 @@ struct MousePtr { uint8 dummyData[0x30]; } PACKED_STRUCT; -#include "common/pack-end.h" // END STRUCT PACKING +#include "common/pack-end.h" // END STRUCT PACKING class Logic; class Menu; diff --git a/engines/sword1/music.cpp b/engines/sword1/music.cpp index b4656ff89f..c34630aceb 100644 --- a/engines/sword1/music.cpp +++ b/engines/sword1/music.cpp @@ -35,7 +35,7 @@ #include "audio/decoders/mp3.h" #include "audio/decoders/vorbis.h" #include "audio/decoders/wave.h" -#include "audio/decoders/vag.h" +#include "audio/decoders/xa.h" #define SMP_BUFSIZE 8192 @@ -110,7 +110,7 @@ bool MusicHandle::play(const Common::String &filename, bool loop) { return true; } -bool MusicHandle::playPSX(uint16 id, bool loop) { +bool MusicHandle::playPSX(uint16 id) { stop(); if (!_file.isOpen()) @@ -131,7 +131,7 @@ bool MusicHandle::playPSX(uint16 id, bool loop) { // not over file size if ((size != 0) && (size != 0xffffffff) && ((int32)(offset + size) <= _file.size())) { _file.seek(offset, SEEK_SET); - _audioSource = Audio::makeLoopingAudioStream(Audio::makeVagStream(_file.readStream(size)), loop ? 0 : 1); + _audioSource = Audio::makeXAStream(_file.readStream(size), 11025); fadeUp(); } else { _audioSource = NULL; @@ -297,7 +297,7 @@ void Music::startMusic(int32 tuneId, int32 loopFlag) { the mutex before, to have the soundthread playing normally. As the corresponding _converter is NULL, the handle will be ignored by the playing thread */ if (SwordEngine::isPsx()) { - if (_handles[newStream].playPSX(tuneId, loopFlag != 0)) { + if (_handles[newStream].playPSX(tuneId)) { _mutex.lock(); _converter[newStream] = Audio::makeRateConverter(_handles[newStream].getRate(), _mixer->getOutputRate(), _handles[newStream].isStereo(), false); _mutex.unlock(); diff --git a/engines/sword1/music.h b/engines/sword1/music.h index 4207019c13..f1366202d7 100644 --- a/engines/sword1/music.h +++ b/engines/sword1/music.h @@ -44,7 +44,7 @@ public: MusicHandle() : _fading(0), _audioSource(NULL) {} virtual int readBuffer(int16 *buffer, const int numSamples); bool play(const Common::String &filename, bool loop); - bool playPSX(uint16 id, bool loop); + bool playPSX(uint16 id); void stop(); void fadeUp(); void fadeDown(); diff --git a/engines/sword1/object.h b/engines/sword1/object.h index 4f5371fa72..0dab5519bd 100644 --- a/engines/sword1/object.h +++ b/engines/sword1/object.h @@ -27,98 +27,98 @@ namespace Sword1 { -#define O_TOTAL_EVENTS 5 -#define O_WALKANIM_SIZE 600 //max number of nodes in router output -#define O_GRID_SIZE 200 -#define EXTRA_GRID_SIZE 20 +#define O_TOTAL_EVENTS 5 +#define O_WALKANIM_SIZE 600 //max number of nodes in router output +#define O_GRID_SIZE 200 +#define EXTRA_GRID_SIZE 20 -#include "common/pack-start.h" // START STRUCT PACKING +#include "common/pack-start.h" // START STRUCT PACKING -struct OEventSlot { //receiving event list in the compact - - int32 o_event; //array of these with O_TOTAL_EVENTS elements - int32 o_event_script; -} PACKED_STRUCT; // size = 2*int32 = 8 bytes +struct OEventSlot { //receiving event list in the compact - + int32 o_event; //array of these with O_TOTAL_EVENTS elements + int32 o_event_script; +} PACKED_STRUCT; // size = 2*int32 = 8 bytes -#define TOTAL_script_levels 5 +#define TOTAL_script_levels 5 -struct ScriptTree { //this is a logic tree, used by OBJECTs - int32 o_script_level; //logic level - int32 o_script_id[TOTAL_script_levels]; //script id's (are unique to each level) - int32 o_script_pc[TOTAL_script_levels]; //pc of script for each (if script_manager) -} PACKED_STRUCT; // size = 11*int32 = 44 bytes +struct ScriptTree { //this is a logic tree, used by OBJECTs + int32 o_script_level; //logic level + int32 o_script_id[TOTAL_script_levels]; //script id's (are unique to each level) + int32 o_script_pc[TOTAL_script_levels]; //pc of script for each (if script_manager) +} PACKED_STRUCT; // size = 11*int32 = 44 bytes struct TalkOffset { - int32 x; - int32 y; -} PACKED_STRUCT; // size = 2*int32 = 8 bytes + int32 x; + int32 y; +} PACKED_STRUCT; // size = 2*int32 = 8 bytes struct WalkData { - int32 frame; - int32 x; - int32 y; - int32 step; - int32 dir; -} PACKED_STRUCT; // size = 5*int32 = 20 bytes + int32 frame; + int32 x; + int32 y; + int32 step; + int32 dir; +} PACKED_STRUCT; // size = 5*int32 = 20 bytes struct Object { - int32 o_type; // 0 broad description of type - object, floor, etc. - int32 o_status; // 4 bit flags for logic, graphics, mouse, etc. - int32 o_logic; // 8 logic type - int32 o_place; // 12 where is the mega character - int32 o_down_flag; // 16 pass back down with this - with C possibly both are unnecessary? - int32 o_target; // 20 target object for the GTM *these are linked to script - int32 o_screen; // 24 physical screen/section - int32 o_frame; // 28 frame number & - int32 o_resource; // 32 id of spr file it comes from - int32 o_sync; // 36 receive sync here - int32 o_pause; // 40 logic_engine() pauses these cycles - int32 o_xcoord; // 44 - int32 o_ycoord; // 48 - int32 o_mouse_x1; // 52 top-left of mouse area is (x1,y1) - int32 o_mouse_y1; // 56 - int32 o_mouse_x2; // 60 bottom-right of area is (x2,y2) (these coords are inclusive) - int32 o_mouse_y2; // 64 - int32 o_priority; // 68 - int32 o_mouse_on; // 72 - int32 o_mouse_off; // 76 - int32 o_mouse_click; // 80 - int32 o_interact; // 84 - int32 o_get_to_script; // 88 - int32 o_scale_a; // 92 used by floors - int32 o_scale_b; // 96 - int32 o_anim_x; // 100 - int32 o_anim_y; // 104 - - ScriptTree o_tree; // 108 size = 44 bytes - ScriptTree o_bookmark; // 152 size = 44 bytes - - int32 o_dir; // 196 - int32 o_speech_pen; // 200 - int32 o_speech_width; // 204 - int32 o_speech_time; // 208 - int32 o_text_id; // 212 working back from o_ins1 - int32 o_tag; // 216 - int32 o_anim_pc; // 220 position within an animation structure - int32 o_anim_resource; // 224 cdt or anim table - - int32 o_walk_pc; // 228 - - TalkOffset talk_table[6]; // 232 size = 6*8 bytes = 48 - - OEventSlot o_event_list[O_TOTAL_EVENTS]; // 280 size = 5*8 bytes = 40 - - int32 o_ins1; // 320 - int32 o_ins2; // 324 - int32 o_ins3; // 328 - - int32 o_mega_resource; // 332 - int32 o_walk_resource; // 336 - - WalkData o_route[O_WALKANIM_SIZE]; // 340 size = 600*20 bytes = 12000 - // mega size = 12340 bytes (+ 8 byte offset table + 20 byte header = 12368) + int32 o_type; // 0 broad description of type - object, floor, etc. + int32 o_status; // 4 bit flags for logic, graphics, mouse, etc. + int32 o_logic; // 8 logic type + int32 o_place; // 12 where is the mega character + int32 o_down_flag; // 16 pass back down with this - with C possibly both are unnecessary? + int32 o_target; // 20 target object for the GTM *these are linked to script + int32 o_screen; // 24 physical screen/section + int32 o_frame; // 28 frame number & + int32 o_resource; // 32 id of spr file it comes from + int32 o_sync; // 36 receive sync here + int32 o_pause; // 40 logic_engine() pauses these cycles + int32 o_xcoord; // 44 + int32 o_ycoord; // 48 + int32 o_mouse_x1; // 52 top-left of mouse area is (x1,y1) + int32 o_mouse_y1; // 56 + int32 o_mouse_x2; // 60 bottom-right of area is (x2,y2) (these coords are inclusive) + int32 o_mouse_y2; // 64 + int32 o_priority; // 68 + int32 o_mouse_on; // 72 + int32 o_mouse_off; // 76 + int32 o_mouse_click; // 80 + int32 o_interact; // 84 + int32 o_get_to_script; // 88 + int32 o_scale_a; // 92 used by floors + int32 o_scale_b; // 96 + int32 o_anim_x; // 100 + int32 o_anim_y; // 104 + + ScriptTree o_tree; // 108 size = 44 bytes + ScriptTree o_bookmark; // 152 size = 44 bytes + + int32 o_dir; // 196 + int32 o_speech_pen; // 200 + int32 o_speech_width; // 204 + int32 o_speech_time; // 208 + int32 o_text_id; // 212 working back from o_ins1 + int32 o_tag; // 216 + int32 o_anim_pc; // 220 position within an animation structure + int32 o_anim_resource; // 224 cdt or anim table + + int32 o_walk_pc; // 228 + + TalkOffset talk_table[6]; // 232 size = 6*8 bytes = 48 + + OEventSlot o_event_list[O_TOTAL_EVENTS]; // 280 size = 5*8 bytes = 40 + + int32 o_ins1; // 320 + int32 o_ins2; // 324 + int32 o_ins3; // 328 + + int32 o_mega_resource; // 332 + int32 o_walk_resource; // 336 + + WalkData o_route[O_WALKANIM_SIZE]; // 340 size = 600*20 bytes = 12000 + // mega size = 12340 bytes (+ 8 byte offset table + 20 byte header = 12368) } PACKED_STRUCT; -#include "common/pack-end.h" // END STRUCT PACKING +#include "common/pack-end.h" // END STRUCT PACKING } // End of namespace Sword1 diff --git a/engines/sword1/objectman.cpp b/engines/sword1/objectman.cpp index 8de29615d5..ed994a97fa 100644 --- a/engines/sword1/objectman.cpp +++ b/engines/sword1/objectman.cpp @@ -39,15 +39,15 @@ void ObjectMan::initialize() { uint16 cnt; for (cnt = 0; cnt < TOTAL_SECTIONS; cnt++) _liveList[cnt] = 0; // we don't need to close the files here. When this routine is - // called, the memory was flushed() anyways, so these resources - // already *are* closed. + // called, the memory was flushed() anyways, so these resources + // already *are* closed. _liveList[128] = _liveList[129] = _liveList[130] = _liveList[131] = _liveList[133] = - _liveList[134] = _liveList[145] = _liveList[146] = _liveList[TEXT_sect] = 1; + _liveList[134] = _liveList[145] = _liveList[146] = _liveList[TEXT_sect] = 1; for (cnt = 0; cnt < TOTAL_SECTIONS; cnt++) { if (_liveList[cnt]) - _cptData[cnt] = (uint8*)_resMan->cptResOpen(_objectList[cnt]) + sizeof(Header); + _cptData[cnt] = (uint8 *)_resMan->cptResOpen(_objectList[cnt]) + sizeof(Header); else _cptData[cnt] = NULL; } @@ -66,7 +66,7 @@ bool ObjectMan::sectionAlive(uint16 section) { void ObjectMan::megaEntering(uint16 section) { _liveList[section]++; if (_liveList[section] == 1) - _cptData[section] = ((uint8*)_resMan->cptResOpen(_objectList[section])) + sizeof(Header); + _cptData[section] = ((uint8 *)_resMan->cptResOpen(_objectList[section])) + sizeof(Header); } void ObjectMan::megaLeaving(uint16 section, int id) { @@ -87,7 +87,7 @@ uint8 ObjectMan::fnCheckForTextLine(uint32 textId) { return 0; // section does not exist uint8 lang = SwordEngine::_systemVars.language; - uint32 *textData = (uint32*)((uint8*)_resMan->openFetchRes(_textList[textId / ITM_PER_SEC][lang]) + sizeof(Header)); + uint32 *textData = (uint32 *)((uint8 *)_resMan->openFetchRes(_textList[textId / ITM_PER_SEC][lang]) + sizeof(Header)); if ((textId & ITM_ID) < _resMan->readUint32(textData)) { textData++; if (textData[textId & ITM_ID]) @@ -99,7 +99,7 @@ uint8 ObjectMan::fnCheckForTextLine(uint32 textId) { char *ObjectMan::lockText(uint32 textId) { uint8 lang = SwordEngine::_systemVars.language; - char *addr = (char*)_resMan->openFetchRes(_textList[textId / ITM_PER_SEC][lang]); + char *addr = (char *)_resMan->openFetchRes(_textList[textId / ITM_PER_SEC][lang]); if (addr == 0) return _missingSubTitleStr; addr += sizeof(Header); @@ -107,12 +107,12 @@ char *ObjectMan::lockText(uint32 textId) { warning("ObjectMan::lockText(%d): only %d texts in file", textId & ITM_ID, _resMan->readUint32(addr)); textId = 0; // get first line instead } - uint32 offset = _resMan->readUint32(addr + ((textId & ITM_ID) + 1)* 4); + uint32 offset = _resMan->readUint32(addr + ((textId & ITM_ID) + 1) * 4); if (offset == 0) { // Workaround bug for missing sentence in some langages in Syria (see bug #1977094). // We use the hardcoded text in this case. if (textId == 2950145) - return const_cast<char*>(_translationId2950145[lang]); + return const_cast<char *>(_translationId2950145[lang]); warning("ObjectMan::lockText(%d): text number has no text lines", textId); return _missingSubTitleStr; @@ -125,7 +125,7 @@ void ObjectMan::unlockText(uint32 textId) { } uint32 ObjectMan::lastTextNumber(int section) { - uint8 *data = (uint8*)_resMan->openFetchRes(_textList[section][SwordEngine::_systemVars.language]) + sizeof(Header); + uint8 *data = (uint8 *)_resMan->openFetchRes(_textList[section][SwordEngine::_systemVars.language]) + sizeof(Header); uint32 result = _resMan->readUint32(data) - 1; _resMan->resClose(_textList[section][SwordEngine::_systemVars.language]); return result; @@ -137,17 +137,17 @@ Object *ObjectMan::fetchObject(uint32 id) { error("fetchObject: section %d is not open", id / ITM_PER_SEC); id &= ITM_ID; // DON'T do endian conversion here. it's already done. - return (Object*)(addr + *(uint32*)(addr + (id + 1)*4)); + return (Object *)(addr + * (uint32 *)(addr + (id + 1) * 4)); } uint32 ObjectMan::fetchNoObjects(int section) { if (_cptData[section] == NULL) error("fetchNoObjects: section %d is not open", section); - return *(uint32*)_cptData[section]; + return *(uint32 *)_cptData[section]; } void ObjectMan::closeSection(uint32 screen) { - if (_liveList[screen] == 0) // close the section that PLAYER has just left, if it's empty now + if (_liveList[screen] == 0) // close the section that PLAYER has just left, if it's empty now _resMan->resClose(_objectList[screen]); } @@ -159,7 +159,7 @@ void ObjectMan::loadLiveList(uint16 *src) { } _liveList[cnt] = src[cnt]; if (_liveList[cnt]) - _cptData[cnt] = ((uint8*)_resMan->cptResOpen(_objectList[cnt])) + sizeof(Header); + _cptData[cnt] = ((uint8 *)_resMan->cptResOpen(_objectList[cnt])) + sizeof(Header); } } @@ -179,7 +179,7 @@ char ObjectMan::_missingSubTitleStr[] = " "; // is not needed. The English version of the game does not include Portuguese // so I cannot check.) -const char *ObjectMan::_translationId2950145[7] = { +const char *const ObjectMan::_translationId2950145[7] = { "Oh?", // English (not needed) "Quoi?", // French "Oh?", // German diff --git a/engines/sword1/objectman.h b/engines/sword1/objectman.h index 23047c14ea..ca3c7c1526 100644 --- a/engines/sword1/objectman.h +++ b/engines/sword1/objectman.h @@ -54,12 +54,12 @@ public: void loadLiveList(uint16 *src); private: ResMan *_resMan; - static const uint32 _objectList[TOTAL_SECTIONS]; //a table of pointers to object files - static const uint32 _textList[TOTAL_SECTIONS][7]; //a table of pointers to text files - uint16 _liveList[TOTAL_SECTIONS]; //which sections are active + static const uint32 _objectList[TOTAL_SECTIONS]; //a table of pointers to object files + static const uint32 _textList[TOTAL_SECTIONS][7]; //a table of pointers to text files + uint16 _liveList[TOTAL_SECTIONS]; //which sections are active uint8 *_cptData[TOTAL_SECTIONS]; static char _missingSubTitleStr[]; - static const char *_translationId2950145[7]; //translation for textId 2950145 (missing from cluster file for some langages) + static const char *const _translationId2950145[7]; //translation for textId 2950145 (missing from cluster file for some langages) }; } // End of namespace Sword1 diff --git a/engines/sword1/resman.cpp b/engines/sword1/resman.cpp index 807679a40e..878ba8eceb 100644 --- a/engines/sword1/resman.cpp +++ b/engines/sword1/resman.cpp @@ -31,14 +31,14 @@ #include "gui/message.h" namespace Sword1 { - void guiFatalError(char *msg) { - // Displays a dialog on-screen before terminating the engine. - // TODO: We really need to setup a special palette for cases when - // the engine is erroring before setting one... otherwise invisible cursor :) - - GUI::MessageDialog dialog(msg); - dialog.runModal(); - error("%s", msg); +void guiFatalError(char *msg) { + // Displays a dialog on-screen before terminating the engine. + // TODO: We really need to setup a special palette for cases when + // the engine is erroring before setting one... otherwise invisible cursor :) + + GUI::MessageDialog dialog(msg); + dialog.runModal(); + error("%s", msg); } #define MAX_PATH_LEN 260 @@ -62,7 +62,7 @@ ResMan::~ResMan() { for (uint32 resCnt = 0; resCnt < group->noRes; resCnt++) { if (group->resHandle[resCnt].cond == MEM_DONT_FREE) { warning("ResMan::~ResMan: Resource %02X.%04X.%02X is still open", - clusCnt + 1, grpCnt, resCnt); + clusCnt + 1, grpCnt, resCnt); } } } @@ -92,7 +92,7 @@ void ResMan::loadCluDescript(const char *fileName) { _prj.clu = new Clu[_prj.noClu]; memset(_prj.clu, 0, _prj.noClu * sizeof(Clu)); - uint32 *cluIndex = (uint32*)malloc(_prj.noClu * 4); + uint32 *cluIndex = (uint32 *)malloc(_prj.noClu * 4); file.read(cluIndex, _prj.noClu * 4); for (uint32 clusCnt = 0; clusCnt < _prj.noClu; clusCnt++) @@ -107,7 +107,7 @@ void ResMan::loadCluDescript(const char *fileName) { memset(cluster->grp, 0, cluster->noGrp * sizeof(Grp)); cluster->refCount = 0; - uint32 *grpIndex = (uint32*)malloc(cluster->noGrp * 4); + uint32 *grpIndex = (uint32 *)malloc(cluster->noGrp * 4); file.read(grpIndex, cluster->noGrp * 4); for (uint32 grpCnt = 0; grpCnt < cluster->noGrp; grpCnt++) @@ -117,7 +117,7 @@ void ResMan::loadCluDescript(const char *fileName) { group->resHandle = new MemHandle[group->noRes]; group->offset = new uint32[group->noRes]; group->length = new uint32[group->noRes]; - uint32 *resIdIdx = (uint32*)malloc(group->noRes * 4); + uint32 *resIdIdx = (uint32 *)malloc(group->noRes * 4); file.read(resIdIdx, group->noRes * 4); for (uint32 resCnt = 0; resCnt < group->noRes; resCnt++) { @@ -227,7 +227,7 @@ Header *ResMan::lockScript(uint32 scrID) { #else openScriptResourceLittleEndian(scrID); #endif - return (Header*)resHandle(scrID)->data; + return (Header *)resHandle(scrID)->data; } void ResMan::unlockScript(uint32 scrID) { @@ -276,23 +276,23 @@ void ResMan::resClose(uint32 id) { } else { handle->refCount--; if (!handle->refCount) - _memMan->setCondition( handle, MEM_CAN_FREE); + _memMan->setCondition(handle, MEM_CAN_FREE); } } FrameHeader *ResMan::fetchFrame(void *resourceData, uint32 frameNo) { - uint8 *frameFile = (uint8*)resourceData; + uint8 *frameFile = (uint8 *)resourceData; uint8 *idxData = frameFile + sizeof(Header); if (_isBigEndian) { if (frameNo >= READ_BE_UINT32(idxData)) error("fetchFrame:: frame %d doesn't exist in resource.", frameNo); - frameFile += READ_BE_UINT32(idxData + (frameNo+1) * 4); + frameFile += READ_BE_UINT32(idxData + (frameNo + 1) * 4); } else { if (frameNo >= READ_LE_UINT32(idxData)) error("fetchFrame:: frame %d doesn't exist in resource.", frameNo); - frameFile += READ_LE_UINT32(idxData + (frameNo+1) * 4); + frameFile += READ_LE_UINT32(idxData + (frameNo + 1) * 4); } - return (FrameHeader*)frameFile; + return (FrameHeader *)frameFile; } Common::File *ResMan::resFile(uint32 id) { @@ -310,9 +310,9 @@ Common::File *ResMan::resFile(uint32 id) { // Supposes that big endian means mac cluster file and little endian means PC cluster file. // This works, but we may want to separate the file name from the endianess or try .CLM extension if opening.clu file fail. if (_isBigEndian) - sprintf(fileName, "%s.CLM", _prj.clu[(id >> 24)-1].label); + sprintf(fileName, "%s.CLM", _prj.clu[(id >> 24) - 1].label); else - sprintf(fileName, "%s.CLU", _prj.clu[(id >> 24)-1].label); + sprintf(fileName, "%s.CLU", _prj.clu[(id >> 24) - 1].label); cluster->file->open(fileName); if (!cluster->file->isOpen()) { char msg[512]; @@ -392,7 +392,7 @@ void ResMan::openCptResourceBigEndian(uint32 id) { if (!handle) return; uint32 totSize = handle->size; - uint32 *data = (uint32*)((uint8*)handle->data + sizeof(Header)); + uint32 *data = (uint32 *)((uint8 *)handle->data + sizeof(Header)); totSize -= sizeof(Header); if (totSize & 3) error("Illegal compact size for id %d: %d", id, totSize); @@ -420,7 +420,7 @@ void ResMan::openCptResourceLittleEndian(uint32 id) { if (!handle) return; uint32 totSize = handle->size; - uint32 *data = (uint32*)((uint8*)handle->data + sizeof(Header)); + uint32 *data = (uint32 *)((uint8 *)handle->data + sizeof(Header)); totSize -= sizeof(Header); if (totSize & 3) error("Illegal compact size for id %d: %d", id, totSize); @@ -448,11 +448,11 @@ void ResMan::openScriptResourceBigEndian(uint32 id) { if (!handle) return; // uint32 totSize = handle->size; - Header *head = (Header*)handle->data; + Header *head = (Header *)handle->data; head->comp_length = FROM_LE_32(head->comp_length); head->decomp_length = FROM_LE_32(head->decomp_length); head->version = FROM_LE_16(head->version); - uint32 *data = (uint32*)((uint8*)handle->data + sizeof(Header)); + uint32 *data = (uint32 *)((uint8 *)handle->data + sizeof(Header)); uint32 size = handle->size - sizeof(Header); if (size & 3) error("Odd size during script endian conversion. Resource ID =%d, size = %d", id, size); @@ -480,11 +480,11 @@ void ResMan::openScriptResourceLittleEndian(uint32 id) { if (!handle) return; // uint32 totSize = handle->size; - Header *head = (Header*)handle->data; + Header *head = (Header *)handle->data; head->comp_length = FROM_BE_32(head->comp_length); head->decomp_length = FROM_BE_32(head->decomp_length); head->version = FROM_BE_16(head->version); - uint32 *data = (uint32*)((uint8*)handle->data + sizeof(Header)); + uint32 *data = (uint32 *)((uint8 *)handle->data + sizeof(Header)); uint32 size = handle->size - sizeof(Header); if (size & 3) error("Odd size during script endian conversion. Resource ID =%d, size = %d", id, size); @@ -498,34 +498,34 @@ void ResMan::openScriptResourceLittleEndian(uint32 id) { uint32 ResMan::_srIdList[29] = { // the file numbers differ for the control panel file IDs, so we need this array - OTHER_SR_FONT, // SR_FONT - 0x04050000, // SR_BUTTON - OTHER_SR_REDFONT, // SR_REDFONT - 0x04050001, // SR_PALETTE - 0x04050002, // SR_PANEL_ENGLISH - 0x04050003, // SR_PANEL_FRENCH - 0x04050004, // SR_PANEL_GERMAN - 0x04050005, // SR_PANEL_ITALIAN - 0x04050006, // SR_PANEL_SPANISH - 0x04050007, // SR_PANEL_AMERICAN - 0x04050008, // SR_TEXT_BUTTON - 0x04050009, // SR_SPEED - 0x0405000A, // SR_SCROLL1 - 0x0405000B, // SR_SCROLL2 - 0x0405000C, // SR_CONFIRM - 0x0405000D, // SR_VOLUME - 0x0405000E, // SR_VLIGHT - 0x0405000F, // SR_VKNOB - 0x04050010, // SR_WINDOW - 0x04050011, // SR_SLAB1 - 0x04050012, // SR_SLAB2 - 0x04050013, // SR_SLAB3 - 0x04050014, // SR_SLAB4 - 0x04050015, // SR_BUTUF - 0x04050016, // SR_BUTUS - 0x04050017, // SR_BUTDS - 0x04050018, // SR_BUTDF - 0x04050019, // SR_DEATHPANEL + OTHER_SR_FONT, // SR_FONT + 0x04050000, // SR_BUTTON + OTHER_SR_REDFONT, // SR_REDFONT + 0x04050001, // SR_PALETTE + 0x04050002, // SR_PANEL_ENGLISH + 0x04050003, // SR_PANEL_FRENCH + 0x04050004, // SR_PANEL_GERMAN + 0x04050005, // SR_PANEL_ITALIAN + 0x04050006, // SR_PANEL_SPANISH + 0x04050007, // SR_PANEL_AMERICAN + 0x04050008, // SR_TEXT_BUTTON + 0x04050009, // SR_SPEED + 0x0405000A, // SR_SCROLL1 + 0x0405000B, // SR_SCROLL2 + 0x0405000C, // SR_CONFIRM + 0x0405000D, // SR_VOLUME + 0x0405000E, // SR_VLIGHT + 0x0405000F, // SR_VKNOB + 0x04050010, // SR_WINDOW + 0x04050011, // SR_SLAB1 + 0x04050012, // SR_SLAB2 + 0x04050013, // SR_SLAB3 + 0x04050014, // SR_SLAB4 + 0x04050015, // SR_BUTUF + 0x04050016, // SR_BUTUS + 0x04050017, // SR_BUTDS + 0x04050018, // SR_BUTDF + 0x04050019, // SR_DEATHPANEL 0, }; diff --git a/engines/sword1/resman.h b/engines/sword1/resman.h index 82074e5740..49d974c1db 100644 --- a/engines/sword1/resman.h +++ b/engines/sword1/resman.h @@ -33,11 +33,11 @@ namespace Sword1 { #define MAX_LABEL_SIZE (31+1) #if defined(__PSP__) -#define MAX_OPEN_CLUS 4 // the PSP can't have more than 8 files open simultaneously - // since we also need filehandles for music and sometimes savegames - // set the maximum number of open clusters to 4. +#define MAX_OPEN_CLUS 4 // the PSP can't have more than 8 files open simultaneously + // since we also need filehandles for music and sometimes savegames + // set the maximum number of open clusters to 4. #else -#define MAX_OPEN_CLUS 8 // don't open more than 8 files at once +#define MAX_OPEN_CLUS 8 // don't open more than 8 files at once #endif struct Grp { @@ -77,10 +77,10 @@ public: FrameHeader *fetchFrame(void *resourceData, uint32 frameNo); uint16 getUint16(uint16 value) { - return (_isBigEndian) ? FROM_BE_16(value): FROM_LE_16(value); + return (_isBigEndian) ? FROM_BE_16(value) : FROM_LE_16(value); } uint32 getUint32(uint32 value) { - return (_isBigEndian) ? FROM_BE_32(value): FROM_LE_32(value); + return (_isBigEndian) ? FROM_BE_32(value) : FROM_LE_32(value); } uint16 getLEUint16(uint16 value) { return FROM_LE_16(value); @@ -89,24 +89,24 @@ public: return FROM_LE_32(value); } uint16 readUint16(const void *ptr) { - return (_isBigEndian) ? READ_BE_UINT16(ptr): READ_LE_UINT16(ptr); + return (_isBigEndian) ? READ_BE_UINT16(ptr) : READ_LE_UINT16(ptr); } uint32 readUint32(const void *ptr) { - return (_isBigEndian) ? READ_BE_UINT32(ptr):READ_LE_UINT32(ptr); + return (_isBigEndian) ? READ_BE_UINT32(ptr) : READ_LE_UINT32(ptr); } uint32 readLEUint32(const void *ptr) { return READ_LE_UINT32(ptr); } uint16 toUint16(uint16 value) { - return (_isBigEndian) ? TO_BE_16(value): TO_LE_16(value); + return (_isBigEndian) ? TO_BE_16(value) : TO_LE_16(value); } uint32 toUint32(uint32 value) { - return (_isBigEndian) ? TO_BE_32(value): TO_LE_32(value); + return (_isBigEndian) ? TO_BE_32(value) : TO_LE_32(value); } private: - uint32 resLength(uint32 id); + uint32 resLength(uint32 id); MemHandle *resHandle(uint32 id); uint32 resOffset(uint32 id); Common::File *resFile(uint32 id); @@ -120,7 +120,7 @@ private: void freeCluDescript(); Prj _prj; MemMan *_memMan; - static const uint32 _scriptList[TOTAL_SECTIONS]; //a table of resource tags + static const uint32 _scriptList[TOTAL_SECTIONS]; //a table of resource tags static uint32 _srIdList[29]; Clu *_openCluStart, *_openCluEnd; int _openClus; diff --git a/engines/sword1/router.cpp b/engines/sword1/router.cpp index aaf475912d..ef07a0bf02 100644 --- a/engines/sword1/router.cpp +++ b/engines/sword1/router.cpp @@ -33,25 +33,25 @@ namespace Sword1 { /**************************************************************************** - * JROUTER.C polygon router with modular walks - * using a tree of modules - * 21 july 94 + * JROUTER.C polygon router with modular walks + * using a tree of modules + * 21 july 94 * 3 november 94 - * System currently works by scanning grid data and coming up with a ROUTE + * System currently works by scanning grid data and coming up with a ROUTE * as a series of way points(nodes), the smoothest eight directional PATH - * through these nodes is then found, and a WALK created to fit the PATH. + * through these nodes is then found, and a WALK created to fit the PATH. * - * Two funtions are called by the user, RouteFinder creates a route as a - * module list, HardWalk creates an animation list from the module list. - * The split is only provided to allow the possibility of turning the - * autorouter over two game cycles. + * Two funtions are called by the user, RouteFinder creates a route as a + * module list, HardWalk creates an animation list from the module list. + * The split is only provided to allow the possibility of turning the + * autorouter over two game cycles. **************************************************************************** * * Routine timings on osborne 486 * - * Read floor resource (file already loaded) 112 pixels + * Read floor resource (file already loaded) 112 pixels * - * Read mega resource (file already loaded) 112 pixels + * Read mega resource (file already loaded) 112 pixels * * * @@ -59,16 +59,16 @@ namespace Sword1 { * * Modified 12 Oct 95 * - * Target Points within 1 pixel of a line are ignored ??? + * Target Points within 1 pixel of a line are ignored ??? * - * Modules split into Points within 1 pixel of a line are ignored ??? + * Modules split into Points within 1 pixel of a line are ignored ??? * ****************************************************************************/ -#define NO_DIRECTIONS 8 -#define SLOW_IN 3 -#define SLOW_OUT 7 -#define ROUTE_END_FLAG 255 +#define NO_DIRECTIONS 8 +#define SLOW_IN 3 +#define SLOW_OUT 7 +#define ROUTE_END_FLAG 255 Router::Router(ObjectMan *pObjMan, ResMan *pResMan) { _objMan = pObjMan; @@ -85,9 +85,9 @@ Router::Router(ObjectMan *pObjMan, ResMan *pResMan) { int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32 dir) { /********************************************************************* - * RouteFinder.C polygon router with modular walks - * 21 august 94 - * 3 november 94 + * RouteFinder.C polygon router with modular walks + * 21 august 94 + * 3 november 94 * routeFinder creates a list of modules that enables HardWalk to * create an animation list. * @@ -99,11 +99,11 @@ int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32 * * 30 november 94 return values modified * - * return 0 = failed to find a route + * return 0 = failed to find a route * - * 1 = found a route + * 1 = found a route * - * 2 = mega already at target + * 2 = mega already at target * *********************************************************************/ @@ -117,7 +117,7 @@ int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32 walkAnim = megaObject->o_route; - _framesPerStep = _nWalkFrames/2; + _framesPerStep = _nWalkFrames / 2; _framesPerChar = _nWalkFrames * NO_DIRECTIONS; // offset pointers added Oct 30 95 JPS @@ -145,12 +145,12 @@ int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32 slowOutFrames = 0; } -// ************************************************************************** -// All route data now loaded start finding a route -// ************************************************************************** -// ************************************************************************** -// check if we can get a route through the floor changed 12 Oct95 JPS -// ************************************************************************** + // ************************************************************************** + // All route data now loaded start finding a route + // ************************************************************************** + // ************************************************************************** + // check if we can get a route through the floor changed 12 Oct95 JPS + // ************************************************************************** routeFlag = getRoute(); @@ -220,26 +220,26 @@ int32 Router::routeFinder(int32 id, Object *megaObject, int32 x, int32 y, int32 break; } - return routeFlag; // send back null route + return routeFlag; // send back null route } int32 Router::getRoute() { /********************************************************************* - * GetRoute.C extract a path from walk grid - * 12 october 94 + * GetRoute.C extract a path from walk grid + * 12 october 94 * * GetRoute currently works by scanning grid data and coming up with * a ROUTE as a series of way points(nodes). * * static routeData _route[O_ROUTE_SIZE]; * - * return 0 = failed to find a route + * return 0 = failed to find a route * - * 1 = found a route + * 1 = found a route * - * 2 = mega already at target + * 2 = mega already at target * - * 3 = failed to find a route because target was on a line + * 3 = failed to find a route because target was on a line * *********************************************************************/ @@ -459,7 +459,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD) // set up sd0-ss2 to reflect possible movement in each direction - if (dirS == 0 || dirS == 4) { // vert and diag + if (dirS == 0 || dirS == 4) { // vert and diag ddx = ldx; ddy = (ldx * _diagonaly) / _diagonalx; dsy = ldy - ddy; @@ -492,7 +492,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD) } switch (best) { - case 0: // halfsquare, diagonal, halfsquare + case 0: // halfsquare, diagonal, halfsquare _smoothPath[k].x = x + dsx / 2; _smoothPath[k].y = y + dsy / 2; _smoothPath[k].dir = dirS; @@ -512,7 +512,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD) k++; break; - case 1: // square, diagonal + case 1: // square, diagonal _smoothPath[k].x = x + dsx; _smoothPath[k].y = y + dsy; _smoothPath[k].dir = dirS; @@ -526,7 +526,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD) k++; break; - case 2: // diagonal square + case 2: // diagonal square _smoothPath[k].x = x + ddx; _smoothPath[k].y = y + ddy; _smoothPath[k].dir = dirD; @@ -540,7 +540,7 @@ void Router::smoothCheck(int32 &k, int32 best, int32 p, int32 dirS, int32 dirD) k++; break; - default: // halfdiagonal, square, halfdiagonal + default: // halfdiagonal, square, halfdiagonal _smoothPath[k].x = x + ddx / 2; _smoothPath[k].y = y + ddy / 2; _smoothPath[k].dir = dirD; @@ -627,17 +627,17 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { * fits the smoothPath and uses foot slipping to fit whole steps into * the route * - * Parameters: georgeg, mouseg - * Returns: rout + * Parameters: georgeg, mouseg + * Returns: rout * * produce a module list from the line data *********************************************************************/ int32 p; - int32 lastDir; - int32 lastRealDir; - int32 currentDir; - int32 turnDir; + int32 lastDir; + int32 lastRealDir; + int32 currentDir; + int32 turnDir; int32 scale; int32 step; int32 module; @@ -677,7 +677,7 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { // START THE WALK WITH THE FIRST STANDFRAME THIS MAY CAUSE A DELAY // BUT IT STOPS THE PLAYER MOVING FOR COLLISIONS ARE DETECTED //**************************************************************************** - module = _framesPerChar + lastDir; + module = _framesPerChar + lastDir; walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; walkAnim[stepCount].dir = lastDir; @@ -694,7 +694,7 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { // get the direction to turn turnDir = currentDir - lastDir; if (turnDir < 0) - turnDir += NO_DIRECTIONS; + turnDir += NO_DIRECTIONS; if (turnDir > 4) turnDir = -1; @@ -704,10 +704,10 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { // rotate to new walk direction // for george and nico put in a head turn at the start if ((megaId == GEORGE) || (megaId == NICO)) { - if (turnDir < 0) { // new frames for turn frames 29oct95jps - module = turnFramesLeft + lastDir; + if (turnDir < 0) { // new frames for turn frames 29oct95jps + module = turnFramesLeft + lastDir; } else { - module = turnFramesRight + lastDir; + module = turnFramesRight + lastDir; } walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; @@ -720,14 +720,14 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { // rotate till were facing new dir then go back 45 degrees while (lastDir != currentDir) { lastDir += turnDir; - if (turnDir < 0) { // new frames for turn frames 29oct95jps + if (turnDir < 0) { // new frames for turn frames 29oct95jps if (lastDir < 0) - lastDir += NO_DIRECTIONS; - module = turnFramesLeft + lastDir; + lastDir += NO_DIRECTIONS; + module = turnFramesLeft + lastDir; } else { if (lastDir > 7) - lastDir -= NO_DIRECTIONS; - module = turnFramesRight + lastDir; + lastDir -= NO_DIRECTIONS; + module = turnFramesRight + lastDir; } walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; @@ -760,17 +760,17 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { lastDir = currentDir; lastCount = stepCount; } - //calculate average amount to lose in each step on the way to the next _node + //calculate average amount to lose in each step on the way to the next _node currentDir = _modularPath[p].dir; if (currentDir < NO_DIRECTIONS) { - module = currentDir * _framesPerStep * 2 + _slidyWalkAnimatorState * _framesPerStep; + module = currentDir * _framesPerStep * 2 + _slidyWalkAnimatorState * _framesPerStep; _slidyWalkAnimatorState = !_slidyWalkAnimatorState; moduleEnd = module + _framesPerStep; step = 0; scale = (_scaleA * moduleY + _scaleB); do { - module16X += _dx[module]*scale; - module16Y += _dy[module]*scale; + module16X += _dx[module] * scale; + module16Y += _dy[module] * scale; moduleX = module16X >> 16; moduleY = module16Y >> 16; walkAnim[stepCount].frame = module; @@ -781,53 +781,53 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { stepCount += 1; step += 1; module += 1; - } while ( module < moduleEnd); + } while (module < moduleEnd); stepX = _modX[_modularPath[p].dir]; stepY = _modY[_modularPath[p].dir]; - errorX = _modularPath[p].x - moduleX; + errorX = _modularPath[p].x - moduleX; errorX = errorX * stepX; - errorY = _modularPath[p].y - moduleY; + errorY = _modularPath[p].y - moduleY; errorY = errorY * stepY; if ((errorX < 0) || (errorY < 0)) { - _modularPath[p].num = 0; // the end of the path + _modularPath[p].num = 0; // the end of the path // okay those last steps took us past our target but do we want to scoot or moonwalk frames = stepCount - lastCount; - errorX = _modularPath[p].x - walkAnim[stepCount-1].x; - errorY = _modularPath[p].y - walkAnim[stepCount-1].y; + errorX = _modularPath[p].x - walkAnim[stepCount - 1].x; + errorY = _modularPath[p].y - walkAnim[stepCount - 1].y; if (frames > _framesPerStep) { - lastErrorX = _modularPath[p].x - walkAnim[stepCount-7].x; - lastErrorY = _modularPath[p].y - walkAnim[stepCount-7].y; - if (stepX==0) { - if (3*ABS(lastErrorY) < ABS(errorY)) { //the last stop was closest + lastErrorX = _modularPath[p].x - walkAnim[stepCount - 7].x; + lastErrorY = _modularPath[p].y - walkAnim[stepCount - 7].y; + if (stepX == 0) { + if (3 * ABS(lastErrorY) < ABS(errorY)) { //the last stop was closest stepCount -= _framesPerStep; _slidyWalkAnimatorState = !_slidyWalkAnimatorState; } } else { - if (3*ABS(lastErrorX) < ABS(errorX)) { //the last stop was closest + if (3 * ABS(lastErrorX) < ABS(errorX)) { //the last stop was closest stepCount -= _framesPerStep; _slidyWalkAnimatorState = !_slidyWalkAnimatorState; } } } - errorX = _modularPath[p].x - walkAnim[stepCount-1].x; - errorY = _modularPath[p].y - walkAnim[stepCount-1].y; + errorX = _modularPath[p].x - walkAnim[stepCount - 1].x; + errorY = _modularPath[p].y - walkAnim[stepCount - 1].y; // okay we've reached the end but we still have an error if (errorX != 0) { frameCount = 0; frames = stepCount - lastCount; do { frameCount += 1; - walkAnim[lastCount + frameCount - 1].x += errorX*frameCount/frames; - } while (frameCount<frames); + walkAnim[lastCount + frameCount - 1].x += errorX * frameCount / frames; + } while (frameCount < frames); } if (errorY != 0) { frameCount = 0; frames = stepCount - lastCount; do { frameCount += 1; - walkAnim[lastCount + frameCount-1].y += errorY*frameCount/frames; - } while (frameCount<frames); + walkAnim[lastCount + frameCount - 1].y += errorY * frameCount / frames; + } while (frameCount < frames); } // Now is the time to put in the turn frames for the last turn if (frames < _framesPerStep) @@ -858,8 +858,8 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { // all turns checked lastCount = stepCount; - moduleX = walkAnim[stepCount-1].x; - moduleY = walkAnim[stepCount-1].y; + moduleX = walkAnim[stepCount - 1].x; + moduleY = walkAnim[stepCount - 1].y; module16X = moduleX << 16; module16Y = moduleY << 16; } @@ -879,9 +879,9 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { // We've done the walk now put in any turns at the end - if (_targetDir == NO_DIRECTIONS) { // stand in the last direction - module = standFrames + lastRealDir; - _targetDir = lastRealDir; + if (_targetDir == NO_DIRECTIONS) { // stand in the last direction + module = standFrames + lastRealDir; + _targetDir = lastRealDir; walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; walkAnim[stepCount].dir = lastRealDir; @@ -891,7 +891,7 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { } if (_targetDir == 9) { if (stepCount == 0) { - module = _framesPerChar + lastRealDir; + module = _framesPerChar + lastRealDir; walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; walkAnim[stepCount].dir = lastRealDir; @@ -913,10 +913,10 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { // rotate to target direction // for george and nico put in a head turn at the start if ((megaId == GEORGE) || (megaId == NICO)) { - if (turnDir < 0) { // new frames for turn frames 29oct95jps - module = turnFramesLeft + lastDir; + if (turnDir < 0) { // new frames for turn frames 29oct95jps + module = turnFramesLeft + lastDir; } else { - module = turnFramesRight + lastDir; + module = turnFramesRight + lastDir; } walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; @@ -929,14 +929,14 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { // rotate if we need to while (lastRealDir != _targetDir) { lastRealDir += turnDir; - if (turnDir < 0) { // new frames for turn frames 29oct95jps + if (turnDir < 0) { // new frames for turn frames 29oct95jps if (lastRealDir < 0) - lastRealDir += NO_DIRECTIONS; - module = turnFramesLeft + lastRealDir; + lastRealDir += NO_DIRECTIONS; + module = turnFramesLeft + lastRealDir; } else { if (lastRealDir > 7) - lastRealDir -= NO_DIRECTIONS; - module = turnFramesRight + lastRealDir; + lastRealDir -= NO_DIRECTIONS; + module = turnFramesRight + lastRealDir; } walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; @@ -945,10 +945,10 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { walkAnim[stepCount].y = moduleY; stepCount += 1; } - module = standFrames + lastRealDir; - walkAnim[stepCount-1].frame = module; + module = standFrames + lastRealDir; + walkAnim[stepCount - 1].frame = module; } else { // just stand at the end - module = standFrames + lastRealDir; + module = standFrames + lastRealDir; walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; walkAnim[stepCount].dir = lastRealDir; @@ -962,7 +962,7 @@ void Router::slidyWalkAnimator(WalkData *walkAnim) { walkAnim[stepCount].frame = 512; stepCount += 1; walkAnim[stepCount].frame = 512; -// Tdebug("RouteFinder RouteSize is %d", stepCount); + //Tdebug("RouteFinder RouteSize is %d", stepCount); return; } @@ -1071,7 +1071,7 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) { // start at the begining for a change lastDir = _modularPath[0].dir; currentDir = _modularPath[1].dir; - module = _framesPerChar + lastDir; + module = _framesPerChar + lastDir; moduleX = _startX; moduleY = _startY; module16X = moduleX << 16; @@ -1100,7 +1100,7 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) { // get the direction to turn turnDir = currentDir - lastDir; if (turnDir < 0) - turnDir += NO_DIRECTIONS; + turnDir += NO_DIRECTIONS; if (turnDir > 4) turnDir = -1; @@ -1110,10 +1110,10 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) { // rotate to new walk direction // for george and nico put in a head turn at the start if ((megaId == GEORGE) || (megaId == NICO)) { - if (turnDir < 0) { // new frames for turn frames 29oct95jps - module = turnFramesLeft + lastDir; + if (turnDir < 0) { // new frames for turn frames 29oct95jps + module = turnFramesLeft + lastDir; } else { - module = turnFramesRight + lastDir; + module = turnFramesRight + lastDir; } walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; @@ -1126,14 +1126,14 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) { // rotate till were facing new dir then go back 45 degrees while (lastDir != currentDir) { lastDir += turnDir; - if (turnDir < 0) { // new frames for turn frames 29oct95jps + if (turnDir < 0) { // new frames for turn frames 29oct95jps if (lastDir < 0) lastDir += NO_DIRECTIONS; - module = turnFramesLeft + lastDir; + module = turnFramesLeft + lastDir; } else { if (lastDir > 7) lastDir -= NO_DIRECTIONS; - module = turnFramesRight + lastDir; + module = turnFramesRight + lastDir; } walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; @@ -1213,19 +1213,19 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) { int32 p; - for (p = 1; _modularPath[p].dir < NO_DIRECTIONS; ++p) { + for (p = 1; _modularPath[p].dir < NO_DIRECTIONS; ++p) { while (_modularPath[p].num > 0) { currentDir = _modularPath[p].dir; if (currentDir < NO_DIRECTIONS) { - module = currentDir * _framesPerStep * 2 + left * _framesPerStep; + module = currentDir * _framesPerStep * 2 + left * _framesPerStep; left = !left; moduleEnd = module + _framesPerStep; step = 0; scale = (_scaleA * moduleY + _scaleB); do { - module16X += _dx[module]*scale; - module16Y += _dy[module]*scale; + module16X += _dx[module] * scale; + module16Y += _dy[module] * scale; moduleX = module16X >> 16; moduleY = module16Y >> 16; walkAnim[stepCount].frame = module; @@ -1236,22 +1236,22 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) { stepCount += 1; module += 1; step += 1; - } while ( module < moduleEnd); - errorX = _modularPath[p].x - moduleX; + } while (module < moduleEnd); + errorX = _modularPath[p].x - moduleX; errorX = errorX * _modX[_modularPath[p].dir]; - errorY = _modularPath[p].y - moduleY; + errorY = _modularPath[p].y - moduleY; errorY = errorY * _modY[_modularPath[p].dir]; if ((errorX < 0) || (errorY < 0)) { _modularPath[p].num = 0; stepCount -= _framesPerStep; left = !left; // Okay this is the end of a section - moduleX = walkAnim[stepCount-1].x; - moduleY = walkAnim[stepCount-1].y; + moduleX = walkAnim[stepCount - 1].x; + moduleY = walkAnim[stepCount - 1].y; module16X = moduleX << 16; module16Y = moduleY << 16; - _modularPath[p].x =moduleX; - _modularPath[p].y =moduleY; + _modularPath[p].x = moduleX; + _modularPath[p].y = moduleY; // Now is the time to put in the turn frames for the last turn if ((stepCount - lastCount) < _framesPerStep) { // no step taken currentDir = 99;// this ensures that we don't put in turn frames for this walk or the next @@ -1350,10 +1350,10 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) { stepCount += 1; } } - module = _framesPerChar + _modularPath[p-1].dir; + module = _framesPerChar + _modularPath[p - 1].dir; walkAnim[stepCount].frame = module; walkAnim[stepCount].step = 0; - walkAnim[stepCount].dir = _modularPath[p-1].dir; + walkAnim[stepCount].dir = _modularPath[p - 1].dir; walkAnim[stepCount].x = moduleX; walkAnim[stepCount].y = moduleY; stepCount += 1; @@ -1395,7 +1395,7 @@ int32 Router::solidWalkAnimator(WalkData *walkAnim) { bool Router::scan(int32 level) { /********************************************************************* - * Called successively from routeFinder until no more changes take + * Called successively from routeFinder until no more changes take * place in the grid array, ie he best path has been found * * Scans through every point in the node array and checks if there is @@ -1447,7 +1447,7 @@ bool Router::scan(int32 level) { } -int32 Router::newCheck(int32 status, int32 x1 , int32 y1 , int32 x2 ,int32 y2) { +int32 Router::newCheck(int32 status, int32 x1, int32 y1, int32 x2, int32 y2) { /********************************************************************* * newCheck routine checks if the route between two points can be * achieved without crossing any of the bars in the Bars array. @@ -1531,7 +1531,7 @@ int32 Router::newCheck(int32 status, int32 x1 , int32 y1 , int32 x2 ,int32 y2) { step2 = check(x1 + ldx / 2, y1, x1 + ldx / 2 + dlx, y2); if (step2 != 0) { step3 = check(x1 + ldx / 2 + dlx, y2, x2, y2); - if (step3 != 0) { + if (step3 != 0) { steps = step1 + step2 + step3; options |= 1; } @@ -1565,8 +1565,8 @@ int32 Router::newCheck(int32 status, int32 x1 , int32 y1 , int32 x2 ,int32 y2) { ldx = 0; // options are square, diagonal a code 1 route - step1 = check(x1 ,y1, x1, y1 + ldy); - if (step1 != 0) { + step1 = check(x1 , y1, x1, y1 + ldy); + if (step1 != 0) { step2 = check(x1, y1 + ldy, x2, y2); if (step2 != 0) { steps = step1 + step2; @@ -1608,7 +1608,7 @@ int32 Router::newCheck(int32 status, int32 x1 , int32 y1 , int32 x2 ,int32 y2) { step2 = check(x1 + dlx / 2, y1 + dly / 2, x1 + dlx / 2, y1 + ldy + dly / 2); if (step2 != 0) { step3 = check(x1 + dlx / 2, y1 + ldy + dly / 2, x2, y2); - if (step3 != 0) { + if (step3 != 0) { steps = step1 + step2 + step3; options |= 8; } @@ -1659,7 +1659,7 @@ bool Router::lineCheck(int32 x1, int32 y1, int32 x2, int32 y2) { int32 dirx = x2 - x1; int32 diry = y2 - y1; - int32 co = (y1 * dirx) - (x1 * diry); // new line equation + int32 co = (y1 * dirx) - (x1 * diry); // new line equation for (int i = 0; i < _nBars && linesCrossed; i++) { // skip if not on module @@ -1668,7 +1668,7 @@ bool Router::lineCheck(int32 x1, int32 y1, int32 x2, int32 y2) { // but all this arithmetic we must have loads of time // slope it he slope between the two lines - int32 slope = (_bars[i].dx * diry) - (_bars[i].dy *dirx); + int32 slope = (_bars[i].dx * diry) - (_bars[i].dy * dirx); // assuming parallel lines don't cross if (slope != 0) { // calculate x intercept and check its on both @@ -1818,50 +1818,50 @@ int32 Router::checkTarget(int32 x, int32 y) { // **************************************************************************** int32 Router::LoadWalkResources(Object *megaObject, int32 x, int32 y, int32 dir) { - WalkGridHeader floorHeader; - int32 i; - uint8 *fPolygrid; - uint8 *fMegaWalkData; + WalkGridHeader floorHeader; + int32 i; + uint8 *fPolygrid; + uint8 *fMegaWalkData; - int32 floorId; - int32 walkGridResourceId; + int32 floorId; + int32 walkGridResourceId; Object *floorObject; - int32 cnt; + int32 cnt; uint32 cntu; // load in floor grid for current mega floorId = megaObject->o_place; - //floorObject = (object *) Lock_object(floorId); + //floorObject = (object *)Lock_object(floorId); floorObject = _objMan->fetchObject(floorId); walkGridResourceId = floorObject->o_resource; //Unlock_object(floorId); - //ResOpen(walkGridResourceId); // mouse wiggle - //fPolygrid = ResLock(walkGridResourceId); // mouse wiggle - fPolygrid = (uint8*)_resMan->openFetchRes(walkGridResourceId); + //ResOpen(walkGridResourceId); // mouse wiggle + //fPolygrid = ResLock(walkGridResourceId); // mouse wiggle + fPolygrid = (uint8 *)_resMan->openFetchRes(walkGridResourceId); fPolygrid += sizeof(Header); - memcpy(&floorHeader,fPolygrid,sizeof(WalkGridHeader)); + memcpy(&floorHeader, fPolygrid, sizeof(WalkGridHeader)); fPolygrid += sizeof(WalkGridHeader); _nBars = _resMan->getUint32(floorHeader.numBars); if (_nBars >= O_GRID_SIZE) { - #ifdef DEBUG //check for id > number in file, +#ifdef DEBUG //check for id > number in file, error("RouteFinder Error too many _bars %d", _nBars); - #endif +#endif _nBars = 0; } - _nNodes = _resMan->getUint32(floorHeader.numNodes)+1; //array starts at 0 begins at a start _node has nnodes nodes and a target _node + _nNodes = _resMan->getUint32(floorHeader.numNodes) + 1; //array starts at 0 begins at a start _node has nnodes nodes and a target _node if (_nNodes >= O_GRID_SIZE) { - #ifdef DEBUG //check for id > number in file, - error("RouteFinder Error too many nodes %d", _nNodes); - #endif +#ifdef DEBUG //check for id > number in file, + error("RouteFinder Error too many nodes %d", _nNodes); +#endif _nNodes = 0; } @@ -1883,37 +1883,37 @@ int32 Router::LoadWalkResources(Object *megaObject, int32 x, int32 y, int32 dir) /*j = 1;// leave _node 0 for start _node do { - memmove(&_node[j].x,fPolygrid,2*sizeof(int16)); - fPolygrid += 2*sizeof(int16); - j ++; + memmove(&_node[j].x,fPolygrid,2*sizeof(int16)); + fPolygrid += 2*sizeof(int16); + j ++; } while (j < _nNodes);//array starts at 0*/ for (cnt = 1; cnt < _nNodes; cnt++) { _node[cnt].x = _resMan->readUint16(fPolygrid); fPolygrid += 2; _node[cnt].y = _resMan->readUint16(fPolygrid); fPolygrid += 2; } - //ResUnlock(walkGridResourceId); // mouse wiggle - //ResClose(walkGridResourceId); // mouse wiggle + //ResUnlock(walkGridResourceId); // mouse wiggle + //ResClose(walkGridResourceId); // mouse wiggle _resMan->resClose(walkGridResourceId); // floor grid loaded -// copy the mega structure into the local variables for use in all subroutines + // copy the mega structure into the local variables for use in all subroutines _startX = megaObject->o_xcoord; _startY = megaObject->o_ycoord; _startDir = megaObject->o_dir; _targetX = x; - _targetY= y; + _targetY = y; _targetDir = dir; _scaleA = megaObject->o_scale_a; _scaleB = megaObject->o_scale_b; - //ResOpen(megaObject->o_mega_resource); // mouse wiggle - //fMegaWalkData = ResLock(megaObject->o_mega_resource); // mouse wiggle - fMegaWalkData = (uint8*)_resMan->openFetchRes(megaObject->o_mega_resource); + //ResOpen(megaObject->o_mega_resource); // mouse wiggle + //fMegaWalkData = ResLock(megaObject->o_mega_resource); // mouse wiggle + fMegaWalkData = (uint8 *)_resMan->openFetchRes(megaObject->o_mega_resource); // Apparently this resource is in little endian in both the Mac and the PC version _nWalkFrames = fMegaWalkData[0]; @@ -1945,28 +1945,28 @@ int32 Router::LoadWalkResources(Object *megaObject, int32 x, int32 y, int32 dir) memmove(&_modY[0],fMegaWalkData,NO_DIRECTIONS*sizeof(int32)); fMegaWalkData += NO_DIRECTIONS*sizeof(int32);*/ - //ResUnlock(megaObject->o_mega_resource); // mouse wiggle - //ResClose(megaObject->o_mega_resource); // mouse wiggle + //ResUnlock(megaObject->o_mega_resource); // mouse wiggle + //ResClose(megaObject->o_mega_resource); // mouse wiggle _resMan->resClose(megaObject->o_mega_resource); _diagonalx = _modX[3]; //36 _diagonaly = _modY[3]; //8 -// mega data ready + // mega data ready -// finish setting grid by putting mega _node at begining -// and target _node at end and reset current values + // finish setting grid by putting mega _node at begining + // and target _node at end and reset current values _node[0].x = _startX; _node[0].y = _startY; _node[0].level = 1; _node[0].prev = 0; _node[0].dist = 0; - i=1; + i = 1; do { _node[i].level = 0; _node[i].prev = 0; _node[i].dist = 9999; - i=i+1; + i = i + 1; } while (i < _nNodes); _node[_nNodes].x = _targetX; _node[_nNodes].y = _targetY; @@ -2088,12 +2088,12 @@ void Router::extractRoute() { #define DIAGONALY 8 int whatTarget(int32 startX, int32 startY, int32 destX, int32 destY) { int tar_dir; -//setting up - int deltaX = destX-startX; - int deltaY = destY-startY; + //setting up + int deltaX = destX - startX; + int deltaY = destY - startY; int signX = (deltaX > 0); int signY = (deltaY > 0); - int slope; + int slope; if ((ABS(deltaY) * DIAGONALX) < (ABS(deltaX) * DIAGONALY / 2)) slope = 0;// its flat @@ -2103,22 +2103,22 @@ int whatTarget(int32 startX, int32 startY, int32 destX, int32 destY) { slope = 1;// its diagonal if (slope == 0) { //flat - if (signX == 1) // going right + if (signX == 1) // going right tar_dir = 2; else tar_dir = 6; } else if (slope == 2) { //vertical - if (signY == 1) // going down + if (signY == 1) // going down tar_dir = 4; else tar_dir = 0; } else if (signX == 1) { //right diagonal - if (signY == 1) // going down + if (signY == 1) // going down tar_dir = 3; else tar_dir = 1; } else { //left diagonal - if (signY == 1) // going down + if (signY == 1) // going down tar_dir = 5; else tar_dir = 7; diff --git a/engines/sword1/router.h b/engines/sword1/router.h index 31c4291eed..82724b1e6e 100644 --- a/engines/sword1/router.h +++ b/engines/sword1/router.h @@ -27,7 +27,7 @@ namespace Sword1 { -#include "common/pack-start.h" // START STRUCT PACKING +#include "common/pack-start.h" // START STRUCT PACKING struct BarData { int16 x1; @@ -38,9 +38,9 @@ struct BarData { int16 ymin; int16 xmax; int16 ymax; - int16 dx; // x2 - x1 - int16 dy; // y2 - y1 - int32 co; // co = (y1*dx) - (x1*dy) from an equation for a line y*dx = x*dy + co + int16 dx; // x2 - x1 + int16 dy; // y2 - y1 + int32 co; // co = (y1*dx) - (x1*dy) from an equation for a line y*dx = x*dy + co } PACKED_STRUCT; struct NodeData { @@ -51,13 +51,13 @@ struct NodeData { int16 dist; } PACKED_STRUCT; -#include "common/pack-end.h" // END STRUCT PACKING +#include "common/pack-end.h" // END STRUCT PACKING struct FloorData { - int32 nbars; - BarData *bars; - int32 nnodes; - NodeData *node; + int32 nbars; + BarData *bars; + int32 nnodes; + NodeData *node; }; struct RouteData { @@ -115,24 +115,24 @@ private: int32 megaId; - RouteData _route[O_ROUTE_SIZE]; - PathData _smoothPath[O_ROUTE_SIZE]; - PathData _modularPath[O_ROUTE_SIZE]; - int32 _routeLength; - - int32 _framesPerStep, _framesPerChar; - uint8 _nWalkFrames, _nTurnFrames; - int32 _dx[NO_DIRECTIONS + MAX_FRAMES_PER_CHAR]; - int32 _dy[NO_DIRECTIONS + MAX_FRAMES_PER_CHAR]; - int32 _modX[NO_DIRECTIONS]; - int32 _modY[NO_DIRECTIONS]; - int32 _diagonalx, _diagonaly; - int32 standFrames; - int32 turnFramesLeft, turnFramesRight; - int32 walkFramesLeft, walkFramesRight; // left/right walking turn - int32 slowInFrames, slowOutFrames; - - bool _slidyWalkAnimatorState; + RouteData _route[O_ROUTE_SIZE]; + PathData _smoothPath[O_ROUTE_SIZE]; + PathData _modularPath[O_ROUTE_SIZE]; + int32 _routeLength; + + int32 _framesPerStep, _framesPerChar; + uint8 _nWalkFrames, _nTurnFrames; + int32 _dx[NO_DIRECTIONS + MAX_FRAMES_PER_CHAR]; + int32 _dy[NO_DIRECTIONS + MAX_FRAMES_PER_CHAR]; + int32 _modX[NO_DIRECTIONS]; + int32 _modY[NO_DIRECTIONS]; + int32 _diagonalx, _diagonaly; + int32 standFrames; + int32 turnFramesLeft, turnFramesRight; + int32 walkFramesLeft, walkFramesRight; // left/right walking turn + int32 slowInFrames, slowOutFrames; + + bool _slidyWalkAnimatorState; int32 LoadWalkResources(Object *mega, int32 x, int32 y, int32 dir); int32 getRoute(); diff --git a/engines/sword1/screen.cpp b/engines/sword1/screen.cpp index 1da89a1091..ae128b8c05 100644 --- a/engines/sword1/screen.cpp +++ b/engines/sword1/screen.cpp @@ -78,13 +78,9 @@ void Screen::useTextManager(Text *pTextMan) { _textMan = pTextMan; } -int32 Screen::inRange(int32 a, int32 b, int32 c) { // return b(!) so that: a <= b <= c - return (a > b) ? (a) : ((b < c) ? b : c); -} - void Screen::setScrolling(int16 offsetX, int16 offsetY) { - offsetX = inRange(0, offsetX, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]); - offsetY = inRange(0, offsetY, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]); + offsetX = CLIP<int32>(offsetX, 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]); + offsetY = CLIP<int32>(offsetY, 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]); if (Logic::_scriptVars[SCROLL_FLAG] == 2) { // first time on this screen - need absolute scroll immediately! _oldScrollX = Logic::_scriptVars[SCROLL_OFFSET_X] = (uint32)offsetX; @@ -101,18 +97,18 @@ void Screen::setScrolling(int16 offsetX, int16 offsetY) { _oldScrollY = Logic::_scriptVars[SCROLL_OFFSET_Y]; int dx = offsetX - Logic::_scriptVars[SCROLL_OFFSET_X]; int dy = offsetY - Logic::_scriptVars[SCROLL_OFFSET_Y]; - int scrlDistX = inRange(-MAX_SCROLL_DISTANCE, (((SCROLL_FRACTION - 1) + ABS(dx)) / SCROLL_FRACTION) * ((dx > 0) ? 1 : -1), MAX_SCROLL_DISTANCE); - int scrlDistY = inRange(-MAX_SCROLL_DISTANCE, (((SCROLL_FRACTION - 1) + ABS(dy)) / SCROLL_FRACTION) * ((dy > 0) ? 1 : -1), MAX_SCROLL_DISTANCE); + int scrlDistX = CLIP<int32>((((SCROLL_FRACTION - 1) + ABS(dx)) / SCROLL_FRACTION) * ((dx > 0) ? 1 : -1), -MAX_SCROLL_DISTANCE, MAX_SCROLL_DISTANCE); + int scrlDistY = CLIP<int32>((((SCROLL_FRACTION - 1) + ABS(dy)) / SCROLL_FRACTION) * ((dy > 0) ? 1 : -1), -MAX_SCROLL_DISTANCE, MAX_SCROLL_DISTANCE); if ((scrlDistX != 0) || (scrlDistY != 0)) _fullRefresh = true; - Logic::_scriptVars[SCROLL_OFFSET_X] = inRange(0, Logic::_scriptVars[SCROLL_OFFSET_X] + scrlDistX, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]); - Logic::_scriptVars[SCROLL_OFFSET_Y] = inRange(0, Logic::_scriptVars[SCROLL_OFFSET_Y] + scrlDistY, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]); + Logic::_scriptVars[SCROLL_OFFSET_X] = CLIP<int32>(Logic::_scriptVars[SCROLL_OFFSET_X] + scrlDistX, 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]); + Logic::_scriptVars[SCROLL_OFFSET_Y] = CLIP<int32>(Logic::_scriptVars[SCROLL_OFFSET_Y] + scrlDistY, 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]); } else { // SCROLL_FLAG == 0, this usually means that the screen is smaller than 640x400 and doesn't need scrolling at all // however, it can also mean that the gamescript overwrote the scrolling flag to take care of scrolling directly, // (see bug report #1345130) so we ignore the offset arguments in this case - Logic::_scriptVars[SCROLL_OFFSET_X] = inRange(0, Logic::_scriptVars[SCROLL_OFFSET_X], Logic::_scriptVars[MAX_SCROLL_OFFSET_X]); - Logic::_scriptVars[SCROLL_OFFSET_Y] = inRange(0, Logic::_scriptVars[SCROLL_OFFSET_Y], Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]); + Logic::_scriptVars[SCROLL_OFFSET_X] = CLIP<int32>(Logic::_scriptVars[SCROLL_OFFSET_X], 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_X]); + Logic::_scriptVars[SCROLL_OFFSET_Y] = CLIP<int32>(Logic::_scriptVars[SCROLL_OFFSET_Y], 0, Logic::_scriptVars[MAX_SCROLL_OFFSET_Y]); if ((Logic::_scriptVars[SCROLL_OFFSET_X] != _oldScrollX) || (Logic::_scriptVars[SCROLL_OFFSET_Y] != _oldScrollY)) { _fullRefresh = true; _oldScrollX = Logic::_scriptVars[SCROLL_OFFSET_X]; @@ -134,13 +130,13 @@ void Screen::fadeUpPalette() { } void Screen::fnSetPalette(uint8 start, uint16 length, uint32 id, bool fadeUp) { - uint8 *palData = (uint8*)_resMan->openFetchRes(id); + uint8 *palData = (uint8 *)_resMan->openFetchRes(id); if (start == 0) // force color 0 to black palData[0] = palData[1] = palData[2] = 0; if (SwordEngine::isMac()) { // see bug #1701058 if (start != 0 && start + length == 256) // and force color 255 to black as well - palData[(length-1)*3+0] = palData[(length-1)*3+1] = palData[(length-1)*3+2] = 0; + palData[(length - 1) * 3 + 0] = palData[(length - 1) * 3 + 1] = palData[(length - 1) * 3 + 2] = 0; } for (uint32 cnt = 0; cnt < length; cnt++) { @@ -172,7 +168,7 @@ bool Screen::showScrollFrame() { if ((!_fullRefresh) || Logic::_scriptVars[NEW_PALETTE] || _updatePalette) return false; // don't draw an additional frame if we aren't scrolling or have to change the palette if ((_oldScrollX == Logic::_scriptVars[SCROLL_OFFSET_X]) && - (_oldScrollY == Logic::_scriptVars[SCROLL_OFFSET_Y])) + (_oldScrollY == Logic::_scriptVars[SCROLL_OFFSET_Y])) return false; // check again if we *really* are scrolling. uint16 avgScrlX = (uint16)(_oldScrollX + Logic::_scriptVars[SCROLL_OFFSET_X]) / 2; @@ -322,25 +318,25 @@ void Screen::newScreen(uint32 screen) { if (SwordEngine::isPsx()) flushPsxCache(); - _screenBuf = (uint8*)malloc(_scrnSizeX * _scrnSizeY); - _screenGrid = (uint8*)malloc(_gridSizeX * _gridSizeY); + _screenBuf = (uint8 *)malloc(_scrnSizeX * _scrnSizeY); + _screenGrid = (uint8 *)malloc(_gridSizeX * _gridSizeY); memset(_screenGrid, 0, _gridSizeX * _gridSizeY); for (cnt = 0; cnt < _roomDefTable[_currentScreen].totalLayers; cnt++) { // open and lock all resources, will be closed in quitScreen() - _layerBlocks[cnt] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].layers[cnt]); + _layerBlocks[cnt] = (uint8 *)_resMan->openFetchRes(_roomDefTable[_currentScreen].layers[cnt]); if (cnt > 0) _layerBlocks[cnt] += sizeof(Header); } for (cnt = 0; cnt < _roomDefTable[_currentScreen].totalLayers - 1; cnt++) { // there's no grid for the background layer, so it's totalLayers - 1 - _layerGrid[cnt] = (uint16*)_resMan->openFetchRes(_roomDefTable[_currentScreen].grids[cnt]); + _layerGrid[cnt] = (uint16 *)_resMan->openFetchRes(_roomDefTable[_currentScreen].grids[cnt]); _layerGrid[cnt] += 14; } _parallax[0] = _parallax[1] = NULL; if (_roomDefTable[_currentScreen].parallax[0]) - _parallax[0] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[0]); + _parallax[0] = (uint8 *)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[0]); if (_roomDefTable[_currentScreen].parallax[1]) - _parallax[1] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[1]); + _parallax[1] = (uint8 *)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[1]); _updatePalette = true; _fullRefresh = true; @@ -393,13 +389,13 @@ void Screen::draw() { src++; dest++; } - } + } } else if (!(SwordEngine::isPsx())) { memcpy(_screenBuf, _layerBlocks[0], _scrnSizeX * _scrnSizeY); } else { //We are using PSX version if (_currentScreen == 45 || _currentScreen == 55 || - _currentScreen == 57 || _currentScreen == 63 || _currentScreen == 71) { // Width shrinked backgrounds + _currentScreen == 57 || _currentScreen == 63 || _currentScreen == 71) { // Width shrinked backgrounds if (!_psxCache.decodedBackground) _psxCache.decodedBackground = psxShrinkedBackgroundToIndexed(_layerBlocks[0], _scrnSizeX, _scrnSizeY); } else { @@ -431,7 +427,7 @@ void Screen::draw() { if (!_psxCache.extPlxCache) { Common::File parallax; parallax.open("TRAIN.PLX"); - _psxCache.extPlxCache = (uint8*) malloc(parallax.size()); + _psxCache.extPlxCache = (uint8 *)malloc(parallax.size()); parallax.read(_psxCache.extPlxCache, parallax.size()); parallax.close(); } @@ -456,7 +452,7 @@ void Screen::processImage(uint32 id) { else frameHead = _resMan->fetchFrame(_resMan->openFetchRes(compact->o_resource), compact->o_frame); - uint8 *sprData = ((uint8*)frameHead) + sizeof(FrameHeader); + uint8 *sprData = ((uint8 *)frameHead) + sizeof(FrameHeader); uint16 spriteX = compact->o_anim_x; uint16 spriteY = compact->o_anim_y; @@ -474,8 +470,8 @@ void Screen::processImage(uint32 id) { uint8 *tonyBuf = NULL; uint8 *hifBuf = NULL; if (SwordEngine::isPsx() && compact->o_type != TYPE_TEXT) { // PSX sprites are compressed with HIF - hifBuf = (uint8*)malloc(_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height)/2); - memset(hifBuf, 0x00, (_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height)/2)); + hifBuf = (uint8 *)malloc(_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height) / 2); + memset(hifBuf, 0x00, (_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height) / 2)); decompressHIF(sprData, hifBuf); sprData = hifBuf; } else if (frameHead->runTimeComp[3] == '7') { // RLE7 encoded? @@ -485,7 +481,7 @@ void Screen::processImage(uint32 id) { decompressRLE0(sprData, _resMan->readUint32(&frameHead->compSize), _rleBuffer); sprData = _rleBuffer; } else if (frameHead->runTimeComp[1] == 'I') { // new type - tonyBuf = (uint8*)malloc(_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height)); + tonyBuf = (uint8 *)malloc(_resMan->readUint16(&frameHead->width) * _resMan->readUint16(&frameHead->height)); decompressTony(sprData, _resMan->readUint32(&frameHead->compSize), tonyBuf); sprData = tonyBuf; } @@ -538,16 +534,16 @@ void Screen::processImage(uint32 id) { if ((sprSizeX > 0) && (sprSizeY > 0)) { if ((!(SwordEngine::isPsx()) || (compact->o_type == TYPE_TEXT) - || (compact->o_resource == LVSFLY) || (!(compact->o_resource == GEORGE_MEGA) && (sprSizeX < 260)))) + || (compact->o_resource == LVSFLY) || (!(compact->o_resource == GEORGE_MEGA) && (sprSizeX < 260)))) drawSprite(sprData + incr, spriteX, spriteY, sprSizeX, sprSizeY, sprPitch); else if (((sprSizeX >= 260) && (sprSizeX < 450)) || ((compact->o_resource == GMWRITH) && (sprSizeX < 515)) // a psx shrinked sprite (1/2 width) - || ((compact->o_resource == GMPOWER) && (sprSizeX < 515))) // some needs to be hardcoded, headers don't give useful infos + || ((compact->o_resource == GMPOWER) && (sprSizeX < 515))) // some needs to be hardcoded, headers don't give useful infos drawPsxHalfShrinkedSprite(sprData + incr, spriteX, spriteY, sprSizeX / 2, sprSizeY, sprPitch / 2); else if (sprSizeX >= 450) // A PSX double shrinked sprite (1/3 width) drawPsxFullShrinkedSprite(sprData + incr, spriteX, spriteY, sprSizeX / 3, sprSizeY, sprPitch / 3); else // This is for psx half shrinked, walking george and remaining sprites drawPsxHalfShrinkedSprite(sprData + incr, spriteX, spriteY, sprSizeX, sprSizeY, sprPitch); - if (!(compact->o_status&STAT_FORE) && !(SwordEngine::isPsx() && (compact->o_resource == MOUBUSY))) // Check fixes moue sprite being masked by layer, happens only on psx + if (!(compact->o_status & STAT_FORE) && !(SwordEngine::isPsx() && (compact->o_resource == MOUBUSY))) // Check fixes moue sprite being masked by layer, happens only on psx verticalMask(spriteX, spriteY, sprSizeX, sprSizeY); } @@ -636,8 +632,8 @@ void Screen::renderParallax(uint8 *data) { if (SwordEngine::isPsx()) //Parallax headers are different in PSX version fetchPsxParallaxSize(data, ¶SizeX, ¶SizeY); else { - header = (ParallaxHeader*)data; - lineIndexes = (uint32*)(data + sizeof(ParallaxHeader)); + header = (ParallaxHeader *)data; + lineIndexes = (uint32 *)(data + sizeof(ParallaxHeader)); paraSizeX = _resMan->getUint16(header->sizeX); paraSizeY = _resMan->getUint16(header->sizeY); } @@ -832,7 +828,7 @@ void Screen::addToGraphicList(uint8 listId, uint32 objId) { _sortList[_sortLength].id = objId; _sortList[_sortLength].y = cpt->o_anim_y; // gives feet coords if boxed mega, otherwise top of sprite box if (!(cpt->o_status & STAT_SHRINK)) { // not a boxed mega using shrinking - Header *frameRaw = (Header*)_resMan->openFetchRes(cpt->o_resource); + Header *frameRaw = (Header *)_resMan->openFetchRes(cpt->o_resource); FrameHeader *frameHead = _resMan->fetchFrame(frameRaw, cpt->o_frame); _sortList[_sortLength].y += _resMan->readUint16(&frameHead->height) - 1; // now pointing to base of sprite _resMan->resClose(cpt->o_resource); @@ -845,7 +841,7 @@ void Screen::addToGraphicList(uint8 listId, uint32 objId) { } } -uint8* Screen::psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres) { +uint8 *Screen::psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres) { uint32 xresInTiles = bakXres / 16; uint32 yresInTiles = ((bakYres / 2) % 16) ? (bakYres / 32) + 1 : (bakYres / 32); uint32 totTiles = xresInTiles * yresInTiles; @@ -867,7 +863,7 @@ uint8* Screen::psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint if (isCompressed) decompressHIF(psxBackground + tileOffset - 4, decomp_tile); //Decompress the tile into decomp_tile else - memcpy(decomp_tile, psxBackground + tileOffset - 4, 16*16); + memcpy(decomp_tile, psxBackground + tileOffset - 4, 16 * 16); if (currentTile > 0 && !(currentTile % xresInTiles)) { //Finished a line of tiles, going down tileYpos++; @@ -887,7 +883,7 @@ uint8* Screen::psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint } // needed because some psx backgrounds are half width and half height -uint8* Screen::psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres) { +uint8 *Screen::psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres) { uint32 xresInTiles = ((bakXres / 2) % 16) ? (bakXres / 32) + 1 : (bakXres / 32); uint32 yresInTiles = ((bakYres / 2) % 16) ? (bakYres / 32) + 1 : (bakYres / 32); uint32 totTiles = xresInTiles * yresInTiles; @@ -899,7 +895,7 @@ uint8* Screen::psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXr uint8 *fullres_buffer = (uint8 *)malloc(bakXres * (yresInTiles + 1) * 32); memset(fullres_buffer, 0, bakXres * (yresInTiles + 1) * 32); - bool isCompressed = (READ_LE_UINT32(psxBackground) == MKTAG('C','O','M','P')); + bool isCompressed = (READ_LE_UINT32(psxBackground) == MKTAG('C', 'O', 'M', 'P')); totTiles -= xresInTiles; psxBackground += 4; //We skip the id tag @@ -1182,7 +1178,7 @@ void Screen::spriteClipAndSet(uint16 *pSprX, uint16 *pSprY, uint16 *pSprWidth, u if (*pSprWidth && *pSprHeight) { // sprite will be drawn, so mark it in the grid buffer uint16 gridH = (*pSprHeight + (sprY & (SCRNGRID_Y - 1)) + (SCRNGRID_Y - 1)) / SCRNGRID_Y; - uint16 gridW = (*pSprWidth + (sprX & (SCRNGRID_X - 1)) + (SCRNGRID_X - 1)) / SCRNGRID_X; + uint16 gridW = (*pSprWidth + (sprX & (SCRNGRID_X - 1)) + (SCRNGRID_X - 1)) / SCRNGRID_X; if (SwordEngine::isPsx()) { gridH *= 2; // This will correct the PSX sprite being cut at half height @@ -1229,10 +1225,10 @@ void Screen::showFrame(uint16 x, uint16 y, uint32 resId, uint32 frameNo, const b if (resId != 0xffffffff) { FrameHeader *frameHead = _resMan->fetchFrame(_resMan->openFetchRes(resId), frameNo); - uint8 *frameData = ((uint8*)frameHead) + sizeof(FrameHeader); + uint8 *frameData = ((uint8 *)frameHead) + sizeof(FrameHeader); if (SwordEngine::isPsx()) { //We need to decompress PSX frames - uint8 *frameBufferPSX = (uint8 *)malloc(_resMan->getUint16(frameHead->width) * _resMan->getUint16(frameHead->height)/2); + uint8 *frameBufferPSX = (uint8 *)malloc(_resMan->getUint16(frameHead->width) * _resMan->getUint16(frameHead->height) / 2); decompressHIF(frameData, frameBufferPSX); for (i = 0; i < _resMan->getUint16(frameHead->height) / 2; i++) { diff --git a/engines/sword1/screen.h b/engines/sword1/screen.h index ff4df8c7c6..7586e937a7 100644 --- a/engines/sword1/screen.h +++ b/engines/sword1/screen.h @@ -38,14 +38,14 @@ struct SortSpr { }; struct RoomDef { - int totalLayers; - int sizeX; - int sizeY; - int gridWidth; //number of 16*16 grid blocks across - including off screen edges. - uint32 layers[4]; - uint32 grids[3]; - uint32 palettes[2]; - uint32 parallax[2]; + int totalLayers; + int sizeX; + int sizeY; + int gridWidth; //number of 16*16 grid blocks across - including off screen edges. + uint32 layers[4]; + uint32 grids[3]; + uint32 palettes[2]; + uint32 parallax[2]; }; struct PSXDataCache { // Cache for PSX screen, to avoid decompressing background at every screen update @@ -68,7 +68,7 @@ struct PSXDataCache { // Cache for PSX screen, to avoid decompressing background class ResMan; class ObjectMan; class Text; // Text objects use sprites that are created internally at run-time - // the buffer belongs to Text, so we need a reference here. + // the buffer belongs to Text, so we need a reference here. class Screen { public: @@ -118,15 +118,14 @@ private: void drawSprite(uint8 *sprData, uint16 sprX, uint16 sprY, uint16 sprWidth, uint16 sprHeight, uint16 sprPitch); void drawPsxHalfShrinkedSprite(uint8 *sprData, uint16 sprX, uint16 sprY, uint16 sprWidth, uint16 sprHeight, uint16 sprPitch); void drawPsxFullShrinkedSprite(uint8 *sprData, uint16 sprX, uint16 sprY, uint16 sprWidth, uint16 sprHeight, uint16 sprPitch); - uint8* psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres); - uint8* psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres); + uint8 *psxBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres); + uint8 *psxShrinkedBackgroundToIndexed(uint8 *psxBackground, uint32 bakXres, uint32 bakYres); void fetchPsxParallaxSize(uint8 *psxParallax, uint16 *paraSizeX, uint16 *paraSizeY); void drawPsxParallax(uint8 *psxParallax, uint16 paraScrlX, uint16 scrnScrlX, uint16 scrnWidth); void decompressRLE7(uint8 *src, uint32 compSize, uint8 *dest); void decompressRLE0(uint8 *src, uint32 compSize, uint8 *dest); void decompressTony(uint8 *src, uint32 compSize, uint8 *dest); void fastShrink(uint8 *src, uint32 width, uint32 height, uint32 scale, uint8 *dest); - int32 inRange(int32 a, int32 b, int32 c); void fadePalette(); void flushPsxCache(); @@ -163,7 +162,7 @@ private: uint8 _fadingStep; int8 _fadingDirection; // 1 for fade up, -1 for fade down bool _isBlack; // if the logic already faded down the palette, this is set to show the - // mainloop that no further fading is necessary. + // mainloop that no further fading is necessary. }; } // End of namespace Sword1 diff --git a/engines/sword1/sound.cpp b/engines/sword1/sound.cpp index f7ab9ca1de..b74cd8c393 100644 --- a/engines/sword1/sound.cpp +++ b/engines/sword1/sound.cpp @@ -38,7 +38,7 @@ #include "audio/decoders/raw.h" #include "audio/decoders/vorbis.h" #include "audio/decoders/wave.h" -#include "audio/decoders/vag.h" +#include "audio/decoders/xa.h" namespace Sword1 { @@ -124,10 +124,10 @@ void Sound::checkSpeechFileEndianness() { size = 2000; else size /= 2; - int16 prev_be_value = (int16)SWAP_BYTES_16(*((uint16*)(data))); + int16 prev_be_value = (int16)SWAP_BYTES_16(*((uint16 *)(data))); for (uint32 i = 1; i < size; ++i) { - le_diff_sum += fabs((double)(data[i] - data[i-1])); - int16 be_value = (int16)SWAP_BYTES_16(*((uint16*)(data + i))); + le_diff_sum += fabs((double)(data[i] - data[i - 1])); + int16 be_value = (int16)SWAP_BYTES_16(*((uint16 *)(data + i))); be_diff_sum += fabs((double)(be_value - prev_be_value)); prev_be_value = be_value; } @@ -187,7 +187,7 @@ void Sound::engine() { } else { if (!_mixer->isSoundHandleActive(_fxQueue[cnt2].handle)) { // sound finished _resMan->resClose(_fxList[_fxQueue[cnt2].id].sampleId); - if (cnt2 != _endOfQueue-1) + if (cnt2 != _endOfQueue - 1) _fxQueue[cnt2] = _fxQueue[_endOfQueue - 1]; _endOfQueue--; } @@ -201,8 +201,8 @@ void Sound::fnStopFx(int32 fxNo) { if (_fxQueue[cnt].id == (uint32)fxNo) { if (!_fxQueue[cnt].delay) // sound was started _resMan->resClose(_fxList[_fxQueue[cnt].id].sampleId); - if (cnt != _endOfQueue-1) - _fxQueue[cnt] = _fxQueue[_endOfQueue-1]; + if (cnt != _endOfQueue - 1) + _fxQueue[cnt] = _fxQueue[_endOfQueue - 1]; _endOfQueue--; return; } @@ -243,35 +243,36 @@ void Sound::quitScreen() { } void Sound::playSample(QueueElement *elem) { - uint8 *sampleData = (uint8*)_resMan->fetchRes(_fxList[elem->id].sampleId); + uint8 *sampleData = (uint8 *)_resMan->fetchRes(_fxList[elem->id].sampleId); for (uint16 cnt = 0; cnt < MAX_ROOMS_PER_FX; cnt++) { if (_fxList[elem->id].roomVolList[cnt].roomNo) { if ((_fxList[elem->id].roomVolList[cnt].roomNo == (int)Logic::_scriptVars[SCREEN]) || - (_fxList[elem->id].roomVolList[cnt].roomNo == -1)) { - - uint8 volL = (_fxList[elem->id].roomVolList[cnt].leftVol * 10 * _sfxVolL) / 255; - uint8 volR = (_fxList[elem->id].roomVolList[cnt].rightVol * 10 * _sfxVolR) / 255; - int8 pan = (volR - volL) / 2; - uint8 volume = (volR + volL) / 2; - - if (SwordEngine::isPsx()) { - uint32 size = READ_LE_UINT32(sampleData); - Audio::AudioStream *audStream = Audio::makeLoopingAudioStream(Audio::makeVagStream(new Common::MemoryReadStream(sampleData + 4, size-4)), (_fxList[elem->id].type == FX_LOOP) ? 0 : 1); - _mixer->playStream(Audio::Mixer::kSFXSoundType, &elem->handle, audStream, elem->id, volume, pan); - } else { - uint32 size = READ_LE_UINT32(sampleData + 0x28); - uint8 flags; - if (READ_LE_UINT16(sampleData + 0x22) == 16) - flags = Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN; - else - flags = Audio::FLAG_UNSIGNED; - if (READ_LE_UINT16(sampleData + 0x16) == 2) - flags |= Audio::FLAG_STEREO; - Audio::AudioStream *stream = Audio::makeLoopingAudioStream( - Audio::makeRawStream(sampleData + 0x2C, size, 11025, flags, DisposeAfterUse::NO), - (_fxList[elem->id].type == FX_LOOP) ? 0 : 1); - _mixer->playStream(Audio::Mixer::kSFXSoundType, &elem->handle, stream, elem->id, volume, pan); - } + (_fxList[elem->id].roomVolList[cnt].roomNo == -1)) { + + uint8 volL = (_fxList[elem->id].roomVolList[cnt].leftVol * 10 * _sfxVolL) / 255; + uint8 volR = (_fxList[elem->id].roomVolList[cnt].rightVol * 10 * _sfxVolR) / 255; + int8 pan = (volR - volL) / 2; + uint8 volume = (volR + volL) / 2; + + if (SwordEngine::isPsx()) { + // We ignore FX_LOOP as XA has its own looping mechanism + uint32 size = READ_LE_UINT32(sampleData); + Audio::AudioStream *audStream = Audio::makeXAStream(new Common::MemoryReadStream(sampleData + 4, size - 4), 11025); + _mixer->playStream(Audio::Mixer::kSFXSoundType, &elem->handle, audStream, elem->id, volume, pan); + } else { + uint32 size = READ_LE_UINT32(sampleData + 0x28); + uint8 flags; + if (READ_LE_UINT16(sampleData + 0x22) == 16) + flags = Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN; + else + flags = Audio::FLAG_UNSIGNED; + if (READ_LE_UINT16(sampleData + 0x16) == 2) + flags |= Audio::FLAG_STEREO; + Audio::AudioStream *stream = Audio::makeLoopingAudioStream( + Audio::makeRawStream(sampleData + 0x2C, size, 11025, flags, DisposeAfterUse::NO), + (_fxList[elem->id].type == FX_LOOP) ? 0 : 1); + _mixer->playStream(Audio::Mixer::kSFXSoundType, &elem->handle, stream, elem->id, volume, pan); + } } } else break; @@ -293,7 +294,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { uint16 i; if (!file.open("speech.lis")) { - warning ("Could not open speech.lis"); + warning("Could not open speech.lis"); return false; } @@ -305,12 +306,12 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { file.close(); if (locIndex == 0xFFFFFFFF) { - warning ("Could not find room %d in speech.lis", roomNo); + warning("Could not find room %d in speech.lis", roomNo); return false; } if (!file.open("speech.inf")) { - warning ("Could not open speech.inf"); + warning("Could not open speech.inf"); return false; } @@ -332,7 +333,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { } if (locIndex == 0xFFFFFFFF) { - warning ("Could not find local number %d in room %d in speech.inf", roomNo, localNo); + warning("Could not find local number %d in room %d in speech.inf", roomNo, localNo); return false; } @@ -364,7 +365,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { _cowFile.seek(index * 2048); Common::SeekableReadStream *tmp = _cowFile.readStream(sampleSize); assert(tmp); - stream = Audio::makeVagStream(tmp); + stream = Audio::makeXAStream(tmp, 11025); _mixer->playStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, stream, SOUND_SPEECH_ID, speechVol, speechPan); // with compressed audio, we can't calculate the wave volume. // so default to talking. @@ -420,7 +421,7 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { } int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { - uint8 *fBuf = (uint8*)malloc(cSize); + uint8 *fBuf = (uint8 *)malloc(cSize); _cowFile.seek(index); _cowFile.read(fBuf, cSize); uint32 headerPos = 0; @@ -455,7 +456,7 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { resSize >>= 1; } else { resSize = 0; - srcData = (int16*)fBuf; + srcData = (int16 *)fBuf; srcPos = headerPos >> 1; while (srcPos < cSize) { length = (int16)READ_LE_UINT16(srcData + srcPos); @@ -471,10 +472,10 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { } } assert(!(headerPos & 1)); - srcData = (int16*)fBuf; + srcData = (int16 *)fBuf; srcPos = headerPos >> 1; uint32 dstPos = 0; - int16 *dstData = (int16*)malloc(resSize * 2); + int16 *dstData = (int16 *)malloc(resSize * 2); int32 samplesLeft = resSize; while (srcPos < cSize && samplesLeft > 0) { length = (int16)(_bigEndianSpeech ? READ_BE_UINT16(srcData + srcPos) : READ_LE_UINT16(srcData + srcPos)); @@ -485,7 +486,7 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { length = samplesLeft; int16 value; if (_bigEndianSpeech) { - value = (int16)SWAP_BYTES_16(*((uint16*)(srcData + srcPos))); + value = (int16)SWAP_BYTES_16(*((uint16 *)(srcData + srcPos))); } else { value = srcData[srcPos]; } @@ -497,7 +498,7 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { length = samplesLeft; if (_bigEndianSpeech) { for (uint16 cnt = 0; cnt < (uint16)length; cnt++) - dstData[dstPos++] = (int16)SWAP_BYTES_16(*((uint16*)(srcData + (srcPos++)))); + dstData[dstPos++] = (int16)SWAP_BYTES_16(*((uint16 *)(srcData + (srcPos++)))); } else { memcpy(dstData + dstPos, srcData + srcPos, length * 2); dstPos += length; @@ -510,7 +511,7 @@ int16 *Sound::uncompressSpeech(uint32 index, uint32 cSize, uint32 *size) { memset(dstData + dstPos, 0, samplesLeft * 2); } if (_cowMode == CowDemo) // demo has wave output size embedded in the compressed data - *(uint32*)dstData = 0; + *(uint32 *)dstData = 0; free(fBuf); *size = resSize * 2; calcWaveVolume(dstData, resSize); @@ -606,7 +607,7 @@ void Sound::initCowSystem() { _currentCowFile = SwordEngine::_systemVars.currentCD; if (!_cowFile.isOpen()) { if (!_cowFile.open("speech.dat")) - error ("Could not open speech.dat"); + error("Could not open speech.dat"); _cowMode = CowPSX; } } @@ -625,7 +626,7 @@ void Sound::initCowSystem() { // Get data from the external table file Common::File tableFile; if (!tableFile.open("speech.tab")) - error ("Could not open speech.tab"); + error("Could not open speech.tab"); _cowHeaderSize = tableFile.size(); _cowHeader = (uint32 *)malloc(_cowHeaderSize); if (_cowHeaderSize & 3) @@ -634,7 +635,7 @@ void Sound::initCowSystem() { _cowHeader[cnt] = tableFile.readUint32LE(); } else { _cowHeaderSize = _cowFile.readUint32LE(); - _cowHeader = (uint32*)malloc(_cowHeaderSize); + _cowHeader = (uint32 *)malloc(_cowHeaderSize); if (_cowHeaderSize & 3) error("Unexpected cow header size %d", _cowHeaderSize); for (uint32 cnt = 0; cnt < (_cowHeaderSize / 4) - 1; cnt++) diff --git a/engines/sword1/sound.h b/engines/sword1/sound.h index a6313f85eb..112ae5b6aa 100644 --- a/engines/sword1/sound.h +++ b/engines/sword1/sound.h @@ -36,9 +36,9 @@ class Mixer; namespace Sword1 { -#define TOTAL_FX_PER_ROOM 7 // total loop & random fx per room (see fx_list.c) -#define MAX_ROOMS_PER_FX 7 // max no. of rooms in the fx's room,vol list -#define MAX_FXQ_LENGTH 32 // max length of sound queue - ie. max number of fx that can be stored up/playing together +#define TOTAL_FX_PER_ROOM 7 // total loop & random fx per room (see fx_list.c) +#define MAX_ROOMS_PER_FX 7 // max no. of rooms in the fx's room,vol list +#define MAX_FXQ_LENGTH 32 // max length of sound queue - ie. max number of fx that can be stored up/playing together #define FX_SPOT 1 #define FX_LOOP 2 @@ -105,15 +105,15 @@ private: bool _waveVolume[WAVE_VOL_TAB_LENGTH]; uint16 _waveVolPos; Common::File _cowFile; - uint32 *_cowHeader; - uint32 _cowHeaderSize; - uint8 _currentCowFile; - CowMode _cowMode; + uint32 *_cowHeader; + uint32 _cowHeaderSize; + uint8 _currentCowFile; + CowMode _cowMode; Audio::SoundHandle _speechHandle, _fxHandle; Common::RandomSource _rnd; QueueElement _fxQueue[MAX_FXQ_LENGTH]; - uint8 _endOfQueue; + uint8 _endOfQueue; Audio::Mixer *_mixer; ResMan *_resMan; bool _bigEndianSpeech; diff --git a/engines/sword1/staticres.cpp b/engines/sword1/staticres.cpp index 402e349576..60c6877232 100644 --- a/engines/sword1/staticres.cpp +++ b/engines/sword1/staticres.cpp @@ -7055,7 +7055,7 @@ const uint8 g_genWhiteCoat[] = { INIT_SEQ_END }; -const uint8 *Logic::_startData[] = { +const uint8 *const Logic::_startData[] = { g_startPos0, g_startPos1, g_startPos2, @@ -7139,7 +7139,7 @@ const uint8 *Logic::_startData[] = { g_startPos80 }; -const uint8 *Logic::_helperData[] = { +const uint8 *const Logic::_helperData[] = { g_genIreland, g_genSyria, g_genSpain, diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp index 23dff4dec2..865e025786 100644 --- a/engines/sword1/sword1.cpp +++ b/engines/sword1/sword1.cpp @@ -48,9 +48,9 @@ SystemVars SwordEngine::_systemVars; SwordEngine::SwordEngine(OSystem *syst) : Engine(syst) { - if (!scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1demo") || - !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psxdemo") || - !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1macdemo")) + if (!scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1demo") || + !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psxdemo") || + !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1macdemo")) _features = GF_DEMO; else _features = 0; @@ -85,11 +85,11 @@ Common::Error SwordEngine::init() { initGraphics(640, 480, true); - if ( 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1mac") || - 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1macdemo") ) + if (0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1mac") || + 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1macdemo")) _systemVars.platform = Common::kPlatformMacintosh; - else if (0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psx") || - 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psxdemo") ) + else if (0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psx") || + 0 == scumm_stricmp(ConfMan.get("gameid").c_str(), "sword1psxdemo")) _systemVars.platform = Common::kPlatformPSX; else _systemVars.platform = Common::kPlatformWindows; @@ -240,7 +240,7 @@ void SwordEngine::flagsToBool(bool *dest, uint8 flags) { } } -static const char *errorMsgs[] = { +static const char *const errorMsgs[] = { "The file \"%s\" is missing and the game doesn't work without it.\n" "Please copy it from CD %d and try starting the game again.\n" "The Readme file also contains further information.", @@ -279,18 +279,18 @@ const CdFile SwordEngine::_pcCdFileList[] = { { "text.clu", FLAG_CD1 | FLAG_DEMO }, { "cows.mad", FLAG_DEMO }, { "speech1.clu", FLAG_SPEECH1 }, - { "speech2.clu", FLAG_SPEECH2 } + { "speech2.clu", FLAG_SPEECH2 } #ifdef USE_FLAC - ,{ "speech1.clf", FLAG_SPEECH1 }, - { "speech2.clf", FLAG_SPEECH2 } + , { "speech1.clf", FLAG_SPEECH1 }, + { "speech2.clf", FLAG_SPEECH2 } #endif #ifdef USE_VORBIS - ,{ "speech1.clv", FLAG_SPEECH1 }, - { "speech2.clv", FLAG_SPEECH2 } + , { "speech1.clv", FLAG_SPEECH1 }, + { "speech2.clv", FLAG_SPEECH2 } #endif #ifdef USE_MAD - ,{ "speech1.cl3", FLAG_SPEECH1 }, - { "speech2.cl3", FLAG_SPEECH2 } + , { "speech1.cl3", FLAG_SPEECH1 }, + { "speech2.cl3", FLAG_SPEECH2 } #endif }; @@ -311,18 +311,18 @@ const CdFile SwordEngine::_macCdFileList[] = { { "swordres.rif", FLAG_CD1 | FLAG_DEMO | FLAG_IMMED }, { "text.clm", FLAG_CD1 | FLAG_DEMO }, { "speech1.clu", FLAG_SPEECH1 }, - { "speech2.clu", FLAG_SPEECH2 } + { "speech2.clu", FLAG_SPEECH2 } #ifdef USE_FLAC ,{ "speech1.clf", FLAG_SPEECH1 }, - { "speech2.clf", FLAG_SPEECH2 } + { "speech2.clf", FLAG_SPEECH2 } #endif #ifdef USE_VORBIS ,{ "speech1.clv", FLAG_SPEECH1 }, - { "speech2.clv", FLAG_SPEECH2 } + { "speech2.clv", FLAG_SPEECH2 } #endif #ifdef USE_MAD ,{ "speech1.cl3", FLAG_SPEECH1 }, - { "speech2.cl3", FLAG_SPEECH2 } + { "speech2.cl3", FLAG_SPEECH2 } #endif }; @@ -364,7 +364,7 @@ void SwordEngine::showFileErrorMsg(uint8 type, bool *fileExists) { int msgId = (type == TYPE_IMMED) ? 0 : 2; if (missCnt == 1) { sprintf(msg, errorMsgs[msgId], - _macCdFileList[missNum].name, (_macCdFileList[missNum].flags & FLAG_CD2) ? 2 : 1); + _macCdFileList[missNum].name, (_macCdFileList[missNum].flags & FLAG_CD2) ? 2 : 1); warning("%s", msg); } else { char *pos = msg + sprintf(msg, errorMsgs[msgId + 1], missCnt); @@ -407,7 +407,7 @@ void SwordEngine::showFileErrorMsg(uint8 type, bool *fileExists) { int msgId = (type == TYPE_IMMED) ? 0 : 2; if (missCnt == 1) { sprintf(msg, errorMsgs[msgId], - _pcCdFileList[missNum].name, (_pcCdFileList[missNum].flags & FLAG_CD2) ? 2 : 1); + _pcCdFileList[missNum].name, (_pcCdFileList[missNum].flags & FLAG_CD2) ? 2 : 1); warning("%s", msg); } else { char *pos = msg + sprintf(msg, errorMsgs[msgId + 1], missCnt); @@ -454,9 +454,9 @@ void SwordEngine::checkCdFiles() { // check if we're running from cd, hdd or wha if (Common::File::exists(_psxCdFileList[fcnt].name)) { fileExists[fcnt] = true; flagsToBool(foundTypes, _psxCdFileList[fcnt].flags); - if (!(_psxCdFileList[fcnt].flags & FLAG_DEMO)) + if (!(_psxCdFileList[fcnt].flags & FLAG_DEMO)) isFullVersion = true; - cd2FilesFound = true; + cd2FilesFound = true; } else { flagsToBool(missingTypes, _psxCdFileList[fcnt].flags); fileExists[fcnt] = false; @@ -486,9 +486,9 @@ void SwordEngine::checkCdFiles() { // check if we're running from cd, hdd or wha if (foundTypes[TYPE_SPEECH2]) // same for speech2 missingTypes[TYPE_SPEECH2] = false; - if (isFullVersion) // if this is the full version... + if (isFullVersion) // if this is the full version... missingTypes[TYPE_DEMO] = false; // then we don't need demo files... - else // and vice versa + else // and vice versa missingTypes[TYPE_SPEECH1] = missingTypes[TYPE_SPEECH2] = missingTypes[TYPE_CD1] = missingTypes[TYPE_CD2] = false; bool somethingMissing = false; @@ -526,13 +526,13 @@ void SwordEngine::checkCdFiles() { // check if we're running from cd, hdd or wha showFileErrorMsg(TYPE_IMMED, fileExists); } else if ((!missingTypes[TYPE_CD1]) && !cd2FilesFound) { /* we have all the data from cd one, but not a single one from CD2. - I'm not sure how we should handle this, for now I'll just assume that the - user has set up the extrapath correctly and copied the necessary files to HDD. - A quite optimistic assumption, I'd say. Maybe we should change this for the release - to warn the user? */ + I'm not sure how we should handle this, for now I'll just assume that the + user has set up the extrapath correctly and copied the necessary files to HDD. + A quite optimistic assumption, I'd say. Maybe we should change this for the release + to warn the user? */ warning("CD2 data files not found. I hope you know what you're doing and that\n" - "you have set up the extrapath and additional data correctly.\n" - "If you didn't, you should better read the ScummVM readme file"); + "you have set up the extrapath and additional data correctly.\n" + "If you didn't, you should better read the ScummVM readme file"); _systemVars.runningFromCd = true; _systemVars.playSpeech = true; } else if (missingTypes[TYPE_CD1] || missingTypes[TYPE_CD2]) { @@ -542,13 +542,13 @@ void SwordEngine::checkCdFiles() { // check if we're running from cd, hdd or wha // not so important, but there won't be any voices if (missingTypes[TYPE_SPEECH1] && missingTypes[TYPE_SPEECH2]) warning("Unable to find the speech files. The game will work, but you won't hear any voice output.\n" - "Please copy the SPEECH.CLU files from both CDs and rename them to SPEECH1.CLU and SPEECH2.CLU,\n" - "corresponding to the CD number.\n" - "Please read the ScummVM Readme file for more information"); + "Please copy the SPEECH.CLU files from both CDs and rename them to SPEECH1.CLU and SPEECH2.CLU,\n" + "corresponding to the CD number.\n" + "Please read the ScummVM Readme file for more information"); else warning("Unable to find the speech file from CD %d.\n" - "You won't hear any voice output in that part of the game.\n" - "Please read the ScummVM Readme file for more information", missingTypes[TYPE_SPEECH1] ? 1 : 2); + "You won't hear any voice output in that part of the game.\n" + "Please read the ScummVM Readme file for more information", missingTypes[TYPE_SPEECH1] ? 1 : 2); } else if (missingTypes[TYPE_DEMO]) { // for the demo version, we simply expect to have all files immediately showFileErrorMsg(TYPE_IMMED, fileExists); @@ -618,9 +618,9 @@ void SwordEngine::checkCd() { _music->startMusic(0, 0); // _sound->closeCowSystem(); // close music and sound files before changing CDs _systemVars.currentCD = needCd; // askForCd will ask the player to insert _systemVars.currentCd, - _control->askForCd(); // so it has to be updated before calling it. + _control->askForCd(); // so it has to be updated before calling it. } - } else { // we're running from HDD, we don't have to care about music files and Sound will take care of + } else { // we're running from HDD, we don't have to care about music files and Sound will take care of if (needCd) // switching sound.clu files on Sound::newScreen by itself, so there's nothing to be done. _systemVars.currentCD = needCd; else if (_systemVars.currentCD == 0) @@ -673,7 +673,7 @@ uint8 SwordEngine::mainLoop() { // The control panel is triggered by F5 or ESC. else if (((_keyPressed.keycode == Common::KEYCODE_F5 || _keyPressed.keycode == Common::KEYCODE_ESCAPE) - && (Logic::_scriptVars[MOUSE_STATUS] & 1)) || (_systemVars.controlPanelMode)) { + && (Logic::_scriptVars[MOUSE_STATUS] & 1)) || (_systemVars.controlPanelMode)) { retCode = _control->runPanel(); if (retCode == CONTROL_NOTHING_DONE) _screen->fullRefresh(); diff --git a/engines/sword1/sword1.h b/engines/sword1/sword1.h index 2d6db21d19..e973c12754 100644 --- a/engines/sword1/sword1.h +++ b/engines/sword1/sword1.h @@ -63,16 +63,16 @@ class Music; class Control; struct SystemVars { - bool runningFromCd; - uint32 currentCD; // starts at zero, then either 1 or 2 depending on section being played - uint32 justRestoredGame; // see main() in sword.c & New_screen() in gtm_core.c - - uint8 controlPanelMode; // 1 death screen version of the control panel, 2 = successful end of game, 3 = force restart - bool forceRestart; - bool wantFade; // when true => fade during scene change, else cut. - uint8 playSpeech; - uint8 showText; - uint8 language; + bool runningFromCd; + uint32 currentCD; // starts at zero, then either 1 or 2 depending on section being played + uint32 justRestoredGame; // see main() in sword.c & New_screen() in gtm_core.c + + uint8 controlPanelMode; // 1 death screen version of the control panel, 2 = successful end of game, 3 = force restart + bool forceRestart; + bool wantFade; // when true => fade during scene change, else cut. + uint8 playSpeech; + uint8 showText; + uint8 language; bool isDemo; Common::Platform platform; }; @@ -131,18 +131,18 @@ private: uint16 _mouseState; Common::KeyState _keyPressed; - ResMan *_resMan; - ObjectMan *_objectMan; - Screen *_screen; - Mouse *_mouse; - Logic *_logic; - Sound *_sound; - Menu *_menu; - Music *_music; - Control *_control; + ResMan *_resMan; + ObjectMan *_objectMan; + Screen *_screen; + Mouse *_mouse; + Logic *_logic; + Sound *_sound; + Menu *_menu; + Music *_music; + Control *_control; static const uint8 _cdList[TOTAL_SECTIONS]; - static const CdFile _pcCdFileList[]; - static const CdFile _macCdFileList[]; + static const CdFile _pcCdFileList[]; + static const CdFile _macCdFileList[]; static const CdFile _psxCdFileList[]; }; diff --git a/engines/sword1/sworddefs.h b/engines/sword1/sworddefs.h index 15736dcae0..db4146f37e 100644 --- a/engines/sword1/sworddefs.h +++ b/engines/sword1/sworddefs.h @@ -29,13 +29,13 @@ namespace Sword1 { #define LOOPED 1 -#define FRAME_RATE 12 // number of frames per second (max rate) -#define SCREEN_WIDTH 640 -#define SCREEN_DEPTH 400 -#define SCREEN_LEFT_EDGE 128 -#define SCREEN_RIGHT_EDGE (128+SCREEN_WIDTH-1) -#define SCREEN_TOP_EDGE 128 -#define SCREEN_BOTTOM_EDGE (128+SCREEN_DEPTH-1) +#define FRAME_RATE 12 // number of frames per second (max rate) +#define SCREEN_WIDTH 640 +#define SCREEN_DEPTH 400 +#define SCREEN_LEFT_EDGE 128 +#define SCREEN_RIGHT_EDGE (128+SCREEN_WIDTH-1) +#define SCREEN_TOP_EDGE 128 +#define SCREEN_BOTTOM_EDGE (128+SCREEN_DEPTH-1) #define TYPE_FLOOR 1 #define TYPE_MOUSE 2 #define TYPE_SPRITE 3 @@ -81,22 +81,22 @@ namespace Sword1 { #define TOTAL_subjects (375-256+1) #define BASE_SUBJECT 256 -#define TOTAL_SECTIONS 150 //number of sections, rooms + mega sections -#define TOTAL_ROOMS 100 //total number of rooms -#define ITM_PER_SEC 0x10000 //65536 items per section -> was originally called "SIZE" -#define ITM_ID 0xFFFF //& with this -> originally "NuSIZE" +#define TOTAL_SECTIONS 150 //number of sections, rooms + mega sections +#define TOTAL_ROOMS 100 //total number of rooms +#define ITM_PER_SEC 0x10000 //65536 items per section -> was originally called "SIZE" +#define ITM_ID 0xFFFF //& with this -> originally "NuSIZE" -#define MAX_text_obs 2 //text compacts -#define TEXT_sect 149 //text compacts exist in section 149, probably after all the megas +#define MAX_text_obs 2 //text compacts +#define TEXT_sect 149 //text compacts exist in section 149, probably after all the megas -#include "common/pack-start.h" // START STRUCT PACKING +#include "common/pack-start.h" // START STRUCT PACKING struct Header { char type[6]; uint16 version; - uint32 comp_length; - char compression[4]; - uint32 decomp_length; + uint32 comp_length; + char compression[4]; + uint32 decomp_length; } PACKED_STRUCT; struct FrameHeader { @@ -132,7 +132,7 @@ struct WalkGridHeader { int32 numNodes; } PACKED_STRUCT; -#include "common/pack-end.h" // END STRUCT PACKING +#include "common/pack-end.h" // END STRUCT PACKING enum fileTypes { TYPE_CD1 = 0, @@ -144,12 +144,12 @@ enum fileTypes { }; enum fileFlags { - FLAG_CD1 = (1 << TYPE_CD1), // this file is on cd1 - FLAG_CD2 = (1 << TYPE_CD2), // this file is on cd2 - FLAG_DEMO = (1 << TYPE_DEMO), // file for the demo version - FLAG_IMMED = (1 << TYPE_IMMED), // this file is needed immediately, game won't start without it - FLAG_SPEECH1 = (1 << TYPE_SPEECH1), - FLAG_SPEECH2 = (1 << TYPE_SPEECH2) + FLAG_CD1 = (1 << TYPE_CD1), // this file is on cd1 + FLAG_CD2 = (1 << TYPE_CD2), // this file is on cd2 + FLAG_DEMO = (1 << TYPE_DEMO), // file for the demo version + FLAG_IMMED = (1 << TYPE_IMMED), // this file is needed immediately, game won't start without it + FLAG_SPEECH1 = (1 << TYPE_SPEECH1), + FLAG_SPEECH2 = (1 << TYPE_SPEECH2) }; struct CdFile { @@ -167,29 +167,29 @@ enum Language { BS1_PORT }; -#define SAM 2162689 -#define PLAYER 8388608 -#define GEORGE 8388608 -#define NICO 8454144 -#define BENOIR 8585216 -#define ROSSO 8716288 -#define DUANE 8781824 -#define MOUE 9502720 -#define ALBERT 9568256 +#define SAM 2162689 +#define PLAYER 8388608 +#define GEORGE 8388608 +#define NICO 8454144 +#define BENOIR 8585216 +#define ROSSO 8716288 +#define DUANE 8781824 +#define MOUE 9502720 +#define ALBERT 9568256 -#define STAND 0 -#define UP 0 -#define UP_RIGHT 1 -#define U_R 1 -#define RIGHT 2 -#define DOWN_RIGHT 3 -#define D_R 3 -#define DOWN 4 -#define DOWN_LEFT 5 -#define D_L 5 -#define LEFT 6 -#define UP_LEFT 7 -#define U_L 7 +#define STAND 0 +#define UP 0 +#define UP_RIGHT 1 +#define U_R 1 +#define RIGHT 2 +#define DOWN_RIGHT 3 +#define D_R 3 +#define DOWN 4 +#define DOWN_LEFT 5 +#define D_L 5 +#define LEFT 6 +#define UP_LEFT 7 +#define U_L 7 #define BEER_TOWEL 3 #define HOTEL_KEY 4 @@ -373,10 +373,10 @@ enum Language { #define IT_MINUS 12 #define IT_AND 13 #define IT_OR 14 -#define IT_GTE 15 // >= -#define IT_LTE 16 // <= -#define IT_DEVIDE 17 // <= -#define IT_GT 18 // > +#define IT_GTE 15 // >= +#define IT_LTE 16 // <= +#define IT_DEVIDE 17 // <= +#define IT_GT 18 // > #define IT_SCRIPTEND 20 #define IT_POPVAR 21 diff --git a/engines/sword1/text.cpp b/engines/sword1/text.cpp index 2d4b07020f..3bd2fdb2e6 100644 --- a/engines/sword1/text.cpp +++ b/engines/sword1/text.cpp @@ -35,7 +35,7 @@ namespace Sword1 { #define OVERLAP 3 #define SPACE ' ' -#define MAX_LINES 30 +#define MAX_LINES 30 Text::Text(ObjectMan *pObjMan, ResMan *pResMan, bool czechVersion) { @@ -43,7 +43,7 @@ Text::Text(ObjectMan *pObjMan, ResMan *pResMan, bool czechVersion) { _resMan = pResMan; _textCount = 0; _fontId = (czechVersion) ? CZECH_GAME_FONT : GAME_FONT; - _font = (uint8*)_resMan->openFetchRes(_fontId); + _font = (uint8 *)_resMan->openFetchRes(_fontId); _joinWidth = charWidth(SPACE) - 2 * OVERLAP; _charHeight = _resMan->getUint16(_resMan->fetchFrame(_font, 0)->height); // all chars have the same height @@ -86,16 +86,16 @@ void Text::makeTextSprite(uint8 slot, const uint8 *text, uint16 maxWidth, uint8 uint16 sprHeight = _charHeight * numLines; uint32 sprSize = sprWidth * sprHeight; assert(!_textBlocks[slot]); // if this triggers, the speechDriver failed to call Text::releaseText. - _textBlocks[slot] = (FrameHeader*)malloc(sprSize + sizeof(FrameHeader)); + _textBlocks[slot] = (FrameHeader *)malloc(sprSize + sizeof(FrameHeader)); memcpy(_textBlocks[slot]->runTimeComp, "Nu ", 4); - _textBlocks[slot]->compSize = 0; - _textBlocks[slot]->width = _resMan->toUint16(sprWidth); - _textBlocks[slot]->height = _resMan->toUint16(sprHeight); - _textBlocks[slot]->offsetX = 0; - _textBlocks[slot]->offsetY = 0; + _textBlocks[slot]->compSize = 0; + _textBlocks[slot]->width = _resMan->toUint16(sprWidth); + _textBlocks[slot]->height = _resMan->toUint16(sprHeight); + _textBlocks[slot]->offsetX = 0; + _textBlocks[slot]->offsetY = 0; - uint8 *linePtr = ((uint8*)_textBlocks[slot]) + sizeof(FrameHeader); + uint8 *linePtr = ((uint8 *)_textBlocks[slot]) + sizeof(FrameHeader); memset(linePtr, NO_COL, sprSize); for (lineCnt = 0; lineCnt < numLines; lineCnt++) { uint8 *sprPtr = linePtr + (sprWidth - lines[lineCnt].width) / 2; // center the text @@ -132,7 +132,7 @@ uint16 Text::analyzeSentence(const uint8 *text, uint16 maxWidth, LineInfo *line) text++; wordWidth += OVERLAP; // no overlap on final letter of word! - if (firstWord) { // first word on first line, so no separating SPACE needed + if (firstWord) { // first word on first line, so no separating SPACE needed line[0].width = wordWidth; line[0].length = wordLength; firstWord = false; @@ -144,7 +144,7 @@ uint16 Text::analyzeSentence(const uint8 *text, uint16 maxWidth, LineInfo *line) if (line[lineNo].width + spaceNeeded <= maxWidth) { line[lineNo].width += spaceNeeded; line[lineNo].length += 1 + wordLength; // NB. space+word characters - } else { // put word (without separating SPACE) at start of next line + } else { // put word (without separating SPACE) at start of next line lineNo++; assert(lineNo < MAX_LINES); line[lineNo].width = wordWidth; @@ -152,21 +152,21 @@ uint16 Text::analyzeSentence(const uint8 *text, uint16 maxWidth, LineInfo *line) } } } - return lineNo+1; // return no of lines + return lineNo + 1; // return no of lines } uint16 Text::copyChar(uint8 ch, uint8 *sprPtr, uint16 sprWidth, uint8 pen) { FrameHeader *chFrame = _resMan->fetchFrame(_font, ch - SPACE); - uint8 *chData = ((uint8*)chFrame) + sizeof(FrameHeader); + uint8 *chData = ((uint8 *)chFrame) + sizeof(FrameHeader); uint8 *dest = sprPtr; uint8 *decBuf = NULL; uint8 *decChr; uint16 frameHeight = 0; if (SwordEngine::isPsx()) { - frameHeight = _resMan->getUint16(chFrame->height)/2; + frameHeight = _resMan->getUint16(chFrame->height) / 2; if (_fontId == CZECH_GAME_FONT) { //Czech game fonts are compressed - decBuf = (uint8*) malloc((_resMan->getUint16(chFrame->width))*(_resMan->getUint16(chFrame->height)/2)); + decBuf = (uint8 *)malloc((_resMan->getUint16(chFrame->width)) * (_resMan->getUint16(chFrame->height) / 2)); Screen::decompressHIF(chData, decBuf); decChr = decBuf; } else //Normal game fonts are not compressed diff --git a/engines/sword1/text.h b/engines/sword1/text.h index 2224fbcac5..4dcb9e26a7 100644 --- a/engines/sword1/text.h +++ b/engines/sword1/text.h @@ -30,17 +30,17 @@ namespace Sword1 { #define MAX_TEXT_OBS 3 -#define BORDER_COL 200 +#define BORDER_COL 200 #define BORDER_COL_PSX 199 -#define LETTER_COL 193 -#define NO_COL 0 // sprite background - 0 for transparency +#define LETTER_COL 193 +#define NO_COL 0 // sprite background - 0 for transparency class ObjectMan; class ResMan; struct LineInfo { - uint16 width; // width of line in pixels - uint16 length; // length of line in characters + uint16 width; // width of line in pixels + uint16 length; // length of line in characters }; class Text { diff --git a/engines/sword2/music.cpp b/engines/sword2/music.cpp index 63116e954a..1bb08fd36f 100644 --- a/engines/sword2/music.cpp +++ b/engines/sword2/music.cpp @@ -39,7 +39,7 @@ #include "audio/decoders/vorbis.h" #include "audio/decoders/flac.h" #include "audio/decoders/wave.h" -#include "audio/decoders/vag.h" +#include "audio/decoders/xa.h" #include "audio/rate.h" #include "sword2/sword2.h" @@ -267,7 +267,7 @@ Audio::AudioStream *makePSXCLUStream(Common::File *file, int size) { byte *buffer = (byte *)malloc(size); file->read(buffer, size); - return Audio::makeVagStream(new Common::MemoryReadStream(buffer, size, DisposeAfterUse::YES)); + return Audio::makeXAStream(new Common::MemoryReadStream(buffer, size, DisposeAfterUse::YES), 11025); } // ---------------------------------------------------------------------------- diff --git a/engines/sword2/sound.cpp b/engines/sword2/sound.cpp index 19e244e61c..aea33e99e3 100644 --- a/engines/sword2/sound.cpp +++ b/engines/sword2/sound.cpp @@ -47,7 +47,7 @@ #include "sword2/sound.h" #include "audio/decoders/wave.h" -#include "audio/decoders/vag.h" +#include "audio/decoders/xa.h" #define Debug_Printf _vm->_debugger->DebugPrintf @@ -234,7 +234,7 @@ void Sound::playMovieSound(int32 res, int type) { Audio::RewindableAudioStream *input = 0; if (Sword2Engine::isPsx()) { - input = Audio::makeVagStream(stream); + input = Audio::makeXAStream(stream, 11025); } else { input = Audio::makeWAVStream(stream, DisposeAfterUse::YES); } @@ -361,7 +361,7 @@ int32 Sound::playFx(Audio::SoundHandle *handle, byte *data, uint32 len, uint8 vo Audio::RewindableAudioStream *input = 0; if (Sword2Engine::isPsx()) - input = Audio::makeVagStream(stream); + input = Audio::makeXAStream(stream, 11025); else input = Audio::makeWAVStream(stream, DisposeAfterUse::YES); diff --git a/engines/tinsel/sound.cpp b/engines/tinsel/sound.cpp index bf48dd1511..130928d885 100644 --- a/engines/tinsel/sound.cpp +++ b/engines/tinsel/sound.cpp @@ -41,8 +41,9 @@ #include "audio/decoders/flac.h" #include "audio/decoders/mp3.h" #include "audio/decoders/raw.h" -#include "audio/decoders/vag.h" #include "audio/decoders/vorbis.h" +#include "audio/decoders/xa.h" + #include "gui/message.h" @@ -106,8 +107,8 @@ bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::Sound error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage)); if (TinselV1PSX) { - // Read the stream and create a VAG Audio stream - Audio::AudioStream *vagStream = Audio::makeVagStream(_sampleStream.readStream(sampleLen), 44100); + // Read the stream and create a XA ADPCM audio stream + Audio::AudioStream *xaStream = Audio::makeXAStream(_sampleStream.readStream(sampleLen), 44100); // FIXME: Should set this in a different place ;) _vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, _vm->_config->_soundVolume); @@ -115,7 +116,7 @@ bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::Sound _vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, _vm->_config->_voiceVolume); // Play the audio stream - _vm->_mixer->playStream(type, &curChan.handle, vagStream); + _vm->_mixer->playStream(type, &curChan.handle, xaStream); } else { // allocate a buffer byte *sampleBuf = (byte *)malloc(sampleLen); diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp index 80f02ff8d1..635845ab26 100644 --- a/engines/tinsel/tinsel.cpp +++ b/engines/tinsel/tinsel.cpp @@ -778,7 +778,7 @@ static const GameSettings tinselSettings[] = { // For the languages, refer to the LANGUAGE enum in dw.h -const char *TinselEngine::_sampleIndices[][3] = { +const char *const TinselEngine::_sampleIndices[][3] = { { "english.idx", "english1.idx", "english2.idx" }, // English { "french.idx", "french1.idx", "french2.idx" }, // French { "german.idx", "german1.idx", "german2.idx" }, // German @@ -789,7 +789,7 @@ const char *TinselEngine::_sampleIndices[][3] = { { "english.idx", "english1.idx", "english2.idx" }, // Japanese (FIXME: not sure if this is correct) { "us.idx", "us1.idx", "us2.idx" } // US English }; -const char *TinselEngine::_sampleFiles[][3] = { +const char *const TinselEngine::_sampleFiles[][3] = { { "english.smp", "english1.smp", "english2.smp" }, // English { "french.smp", "french1.smp", "french2.smp" }, // French { "german.smp", "german1.smp", "german2.smp" }, // German @@ -800,7 +800,7 @@ const char *TinselEngine::_sampleFiles[][3] = { { "english.smp", "english1.smp", "english2.smp" }, // Japanese (FIXME: not sure if this is correct) { "us.smp", "us1.smp", "us2.smp" }, // US English }; -const char *TinselEngine::_textFiles[][3] = { +const char *const TinselEngine::_textFiles[][3] = { { "english.txt", "english1.txt", "english2.txt" }, // English { "french.txt", "french1.txt", "french2.txt" }, // French { "german.txt", "german1.txt", "german2.txt" }, // German diff --git a/engines/tinsel/tinsel.h b/engines/tinsel/tinsel.h index e18216cdf7..59344c44f4 100644 --- a/engines/tinsel/tinsel.h +++ b/engines/tinsel/tinsel.h @@ -156,9 +156,9 @@ class TinselEngine : public Engine { Console *_console; Scheduler *_scheduler; - static const char *_sampleIndices[][3]; - static const char *_sampleFiles[][3]; - static const char *_textFiles[][3]; + static const char *const _sampleIndices[][3]; + static const char *const _sampleFiles[][3]; + static const char *const _textFiles[][3]; protected: diff --git a/engines/toon/anim.cpp b/engines/toon/anim.cpp index 07d51ef1b9..a529001af5 100644 --- a/engines/toon/anim.cpp +++ b/engines/toon/anim.cpp @@ -693,7 +693,7 @@ AnimationManager::AnimationManager(ToonEngine *vm) : _vm(vm) { bool AnimationManager::hasInstance(AnimationInstance* instance) { for (uint32 i = 0; i < _instances.size(); i++) { - if(_instances[i] == instance) + if (_instances[i] == instance) return true; } return false; @@ -709,7 +709,7 @@ void AnimationManager::addInstance(AnimationInstance *instance) { // if the instance already exists, we skip the add for (uint32 i = 0; i < _instances.size(); i++) { - if(_instances[i] == instance) + if (_instances[i] == instance) return; } diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp index 4a4a84e62c..5b2d06b74d 100644 --- a/engines/toon/audio.cpp +++ b/engines/toon/audio.cpp @@ -65,7 +65,7 @@ void AudioManager::muteMusic(bool muted) { } void AudioManager::muteVoice(bool muted) { - if(voiceStillPlaying() && _channels[2]) { + if (voiceStillPlaying() && _channels[2]) { _channels[2]->setVolume(muted ? 0 : 255); } _voiceMuted = muted; @@ -272,7 +272,7 @@ AudioStreamInstance::~AudioStreamInstance() { int AudioStreamInstance::readBuffer(int16 *buffer, const int numSamples) { debugC(5, kDebugAudio, "readBuffer(buffer, %d)", numSamples); - if(_stopped) + if (_stopped) return 0; handleFade(numSamples); @@ -598,7 +598,7 @@ void AudioManager::updateAmbientSFX() for (int32 i = 0; i < 4; i++) { AudioAmbientSFX* ambient = &_ambientSFXs[i]; if (ambient->_enabled && (ambient->_channel < 0 || !(_channels[ambient->_channel] && _channels[ambient->_channel]->isPlaying()))) { - if(ambient->_mode == 1) { + if (ambient->_mode == 1) { if (_vm->randRange(0, 32767) < ambient->_delay) { ambient->_channel = playSFX(ambient->_id, ambient->_volume, false); } diff --git a/engines/toon/picture.cpp b/engines/toon/picture.cpp index 295e304765..6367165d6f 100644 --- a/engines/toon/picture.cpp +++ b/engines/toon/picture.cpp @@ -323,7 +323,7 @@ void Picture::drawLineOnMask(int32 x, int32 y, int32 x2, int32 y2, bool walkable int32 rx = bx >> 16; int32 ry = by >> 16; - if( rx >= 0 && rx < _width-1 && ry >= 0 && ry < _height) { // sanity check: some lines in the game + if ( rx >= 0 && rx < _width-1 && ry >= 0 && ry < _height) { // sanity check: some lines in the game // were drawing outside the screen causing corruption if (!walkable) { _data[_width * ry + rx] &= 0xe0; diff --git a/engines/toon/resource.cpp b/engines/toon/resource.cpp index cef916c7de..384a363d7d 100644 --- a/engines/toon/resource.cpp +++ b/engines/toon/resource.cpp @@ -41,7 +41,7 @@ Resources::~Resources() { delete temp; } - while(!_pakFiles.empty()) { + while (!_pakFiles.empty()) { PakFile *temp = _pakFiles.back(); _pakFiles.pop_back(); delete temp; diff --git a/engines/toon/script_func.cpp b/engines/toon/script_func.cpp index 005a299502..b6a374ab5c 100644 --- a/engines/toon/script_func.cpp +++ b/engines/toon/script_func.cpp @@ -223,7 +223,7 @@ ScriptFunc::ScriptFunc(ToonEngine *vm) { } ScriptFunc::~ScriptFunc(void) { - while(!_opcodes.empty()) { + while (!_opcodes.empty()) { const OpcodeV2 *temp = _opcodes.back(); _opcodes.pop_back(); delete temp; @@ -990,7 +990,7 @@ int32 ScriptFunc::sys_Cmd_Set_Scene_Animation_Active_Flag(EMCState *state) { if (sceneAnim->_active) { sceneAnim->_animInstance->setVisible(activeFlag > 0); - if(activeFlag) { + if (activeFlag) { _vm->getAnimationManager()->addInstance(sceneAnim->_animInstance); } } diff --git a/engines/toon/tools.cpp b/engines/toon/tools.cpp index c2ee8acf8a..added39940 100644 --- a/engines/toon/tools.cpp +++ b/engines/toon/tools.cpp @@ -383,7 +383,7 @@ int32 RncDecoder::unpackM1(const void *input, uint16 inputSize, void *output) { uint16 b; if (_inputByteLeft <= 2) b = 0; - else if(_inputByteLeft == 3) + else if (_inputByteLeft == 3) b = *(_srcPtr + 2); else b = READ_LE_UINT16(_srcPtr + 2); diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp index cff6c24469..4631e5f0d0 100644 --- a/engines/toon/toon.cpp +++ b/engines/toon/toon.cpp @@ -191,11 +191,11 @@ void ToonEngine::parseInput() { _audioManager->stopCurrentVoice(); } if (event.kbd.keycode == Common::KEYCODE_F5 && !hasModifier) { - if(canSaveGameStateCurrently()) + if (canSaveGameStateCurrently()) saveGame(-1, Common::String()); } if (event.kbd.keycode == Common::KEYCODE_F6 && !hasModifier) { - if(canLoadGameStateCurrently()) + if (canLoadGameStateCurrently()) loadGame(-1); } if (event.kbd.ascii == 't' && !hasModifier) { @@ -509,7 +509,7 @@ void ToonEngine::copyToVirtualScreen(bool updateScreen) { Common::Rect rect = _oldDirtyRects[i]; rect.translate(-state()->_currentScrollValue, 0); offX = 0; - if(rect.right <= 0) + if (rect.right <= 0) continue; if (rect.left < 0) { offX = -rect.left; @@ -663,7 +663,7 @@ bool ToonEngine::showMainmenu(bool &loadedGame) { while (!clickRelease) { - if(_dirtyAll) { + if (_dirtyAll) { mainmenuPicture->draw(*_mainSurface, 0, 0, 0, 0); addDirtyRect(0, 0, TOON_SCREEN_WIDTH, TOON_SCREEN_HEIGHT); } else { @@ -936,7 +936,7 @@ ToonEngine::~ToonEngine() { delete _animationManager; delete _moviePlayer; - if(_mainSurface) { + if (_mainSurface) { _mainSurface->free(); delete _mainSurface; } @@ -4677,7 +4677,7 @@ void ToonEngine::makeLineWalkable(int32 x, int32 y, int32 x2, int32 y2) { } void ToonEngine::playRoomMusic() { - if(_gameState->_inConversation) { + if (_gameState->_inConversation) { const char* music = getSpecialConversationMusic(_gameState->_currentConversationId); if (music) { _audioManager->playMusic(_gameState->_locations[_gameState->_currentScene]._name, music); diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp new file mode 100644 index 0000000000..e074f8884d --- /dev/null +++ b/engines/tsage/blue_force/blueforce_dialogs.cpp @@ -0,0 +1,434 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/translation.h" + +#include "gui/dialog.h" +#include "gui/widget.h" + +#include "tsage/tsage.h" +#include "tsage/core.h" +#include "tsage/dialogs.h" +#include "tsage/staticres.h" +#include "tsage/globals.h" +#include "tsage/blue_force/blueforce_dialogs.h" +#include "tsage/ringworld/ringworld_logic.h" + +namespace TsAGE { + +namespace BlueForce { + +/** + * This dialog implements the right-click dialog + */ +RightClickDialog::RightClickDialog() : GfxDialog() { + // Setup button areas + _rectList1[0] = Rect(7, 50, 41, 67); + _rectList1[1] = Rect(13, 27, 50, 50); + _rectList1[2] = Rect(49, 27, 84, 50); + _rectList1[3] = Rect(56, 50, 90, 67); + _rectList1[4] = Rect(26, 68, 69, 99); + + _rectList3[0] = Rect(12, 49, 27, 64); + _rectList3[1] = Rect(27, 31, 42, 46); + _rectList3[2] = Rect(56, 31, 71, 46); + _rectList3[3] = Rect(72, 50, 87, 65); + _rectList3[4] = Rect(41, 81, 56, 96); + + // Set the palette and change the cursor + GfxSurface cursor = surfaceFromRes(1, 5, 9); + BF_GLOBALS._events.setCursor(cursor); + + setPalette(); + + // Get the dialog image + _surface = surfaceFromRes(1, 1, 1); + + // Set the dialog position + Rect dialogRect; + dialogRect.resize(_surface, 0, 0, 100); + dialogRect.center(_globals->_events._mousePos.x, _globals->_events._mousePos.y); + + // Ensure the dialog will be entirely on-screen + Rect screenRect = _globals->gfxManager()._bounds; + screenRect.collapse(4, 4); + dialogRect.contain(screenRect); + + // Load selected button images + _btnImages.setVisage(1, 2); + + _bounds = dialogRect; + _gfxManager._bounds = _bounds; + + _highlightedAction = -1; + _selectedAction = -1; +} + +RightClickDialog::~RightClickDialog() { +} + +void RightClickDialog::draw() { + // Save the covered background area + _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); + + // Draw the dialog image + _globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top); + + // Pre-process rect lists + for (int idx = 0; idx < 5; ++idx) { + _rectList2[idx] = _rectList1[idx]; + _rectList4[idx] = _rectList3[idx]; + + _rectList2[idx].translate(_bounds.left, _bounds.top); + _rectList4[idx].translate(_bounds.left, _bounds.top); + } +} + +bool RightClickDialog::process(Event &event) { + switch (event.eventType) { + case EVENT_MOUSE_MOVE: { + // Check whether a button is highlighted + int buttonIndex = 0; + while ((buttonIndex < 5) && !_rectList1[buttonIndex].contains(event.mousePos)) + ++buttonIndex; + if (buttonIndex == 5) + buttonIndex = -1; + + // If selection has changed, handle it + if (buttonIndex != _highlightedAction) { + if (_highlightedAction != -1) { + // Another button was previously selected, so restore dialog + _gfxManager.copyFrom(_surface, 0, 0); + } + + if (buttonIndex != -1) { + // Draw newly selected button + GfxSurface btn = _btnImages.getFrame(buttonIndex + 1); + _gfxManager.copyFrom(btn, _rectList3[buttonIndex].left, _rectList3[buttonIndex].top); + } + + _highlightedAction = buttonIndex; + } + + event.handled = true; + return true; + } + + case EVENT_BUTTON_DOWN: + // Specify the selected action + _selectedAction = (_highlightedAction == -1) ? 5 : _highlightedAction; + event.handled = true; + return true; + + default: + break; + } + + return false; +} + +void RightClickDialog::execute() { + // Draw the dialog + draw(); + + // Dialog event handler loop + _gfxManager.activate(); + + while (!_vm->shouldQuit() && (_selectedAction == -1)) { + Event evt; + while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) { + evt.mousePos.x -= _bounds.left; + evt.mousePos.y -= _bounds.top; + + process(evt); + } + + g_system->delayMillis(10); + g_system->updateScreen(); + } + + // Execute the specified action + CursorType cursorNum = CURSOR_NONE; + switch (_selectedAction) { + case 0: + // Walk action + cursorNum = BF_GLOBALS._player._canWalk ? CURSOR_WALK : CURSOR_USE; + break; + case 1: + // Use action + cursorNum = CURSOR_USE; + break; + case 2: + // Look action + cursorNum = CURSOR_LOOK; + break; + case 3: + // Talk action + cursorNum = CURSOR_TALK; + break; + case 4: + // Options dialog + break; + } + + if (cursorNum != CURSOR_NONE) + BF_GLOBALS._events.setCursor(cursorNum); + + _gfxManager.deactivate(); +} + +/*--------------------------------------------------------------------------*/ + +AmmoBeltDialog::AmmoBeltDialog() : GfxDialog() { + _cursorNum = BF_GLOBALS._events.getCursor(); + _inDialog = -1; + _closeFlag = false; + + // Get the dialog image + _surface = surfaceFromRes(9, 5, 2); + + // Set the dialog position + _dialogRect.resize(_surface, 0, 0, 100); + _dialogRect.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2); + + _bounds = _dialogRect; + _gfxManager._bounds = _bounds; + _savedArea = NULL; + + // Set up area rects + _gunRect.set(0, 0, 82, 48); + _clip1Rect.set(90, 6, _bounds.width(), 39); + _clip2Rect.set(90, 40, _bounds.width(), _bounds.height()); + _loadedRect.set(50, 40, 60, 50); +} + +AmmoBeltDialog::~AmmoBeltDialog() { + BF_GLOBALS._events.setCursor(_cursorNum); +} + +void AmmoBeltDialog::execute() { + // Draw the dialog + draw(); + + // Dialog event handler loop + _gfxManager.activate(); + + while (!_vm->shouldQuit() && !_closeFlag) { + Event evt; + while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) { + evt.mousePos.x -= _bounds.left; + evt.mousePos.y -= _bounds.top; + + process(evt); + } + + g_system->delayMillis(10); + g_system->updateScreen(); + } + + _gfxManager.deactivate(); +} + +bool AmmoBeltDialog::process(Event &event) { + switch (event.eventType) { + case EVENT_MOUSE_MOVE: { + // Handle updating cursor depending on whether cursor is in dialog or not + int inDialog = Rect(0, 0, _bounds.width(), _bounds.height()).contains(event.mousePos); + if (inDialog != _inDialog) { + // Update cursor + BF_GLOBALS._events.setCursor(inDialog ? CURSOR_USE : CURSOR_EXIT); + _inDialog = inDialog; + } + return true; + } + + case EVENT_BUTTON_DOWN: + if (!_inDialog) + // Clicked outside dialog, so flag to close it + _closeFlag = true; + else { + int v = (BF_GLOBALS.getFlag(fGunLoaded) ? 1 : 0) * (BF_GLOBALS.getFlag(fLoadedSpare) ? 2 : 1); + + // Handle first clip + if ((v != 1) && _clip1Rect.contains(event.mousePos)) { + if (BF_GLOBALS.getFlag(fGunLoaded)) { + event.mousePos.x = event.mousePos.y = 0; + } + + BF_GLOBALS.setFlag(fGunLoaded); + BF_GLOBALS.clearFlag(fLoadedSpare); + } + + // Handle second clip + if ((v != 2) && _clip2Rect.contains(event.mousePos)) { + if (BF_GLOBALS.getFlag(fGunLoaded)) { + event.mousePos.x = event.mousePos.y = 0; + } + + BF_GLOBALS.setFlag(fGunLoaded); + BF_GLOBALS.setFlag(fLoadedSpare); + } + + if (_gunRect.contains(event.mousePos) && BF_GLOBALS.getFlag(fGunLoaded)) { + BF_GLOBALS.clearFlag(fGunLoaded); + v = (BF_GLOBALS.getFlag(fGunLoaded) ? 1 : 0) * (BF_GLOBALS.getFlag(fLoadedSpare) ? 2 : 1); + + if (v != 2) + BF_GLOBALS.clearFlag(fLoadedSpare); + } + + draw(); + } + + return true; + + case EVENT_KEYPRESS: + if ((event.kbd.keycode == Common::KEYCODE_ESCAPE) || (event.kbd.keycode == Common::KEYCODE_RETURN)) { + // Escape pressed, so flag to close dialog + _closeFlag = true; + return true; + } + break; + + default: + break; + } + + return false; +} + +void AmmoBeltDialog::draw() { + Rect bounds = _bounds; + + if (!_savedArea) { + // Save the covered background area + _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); + } else { + bounds.moveTo(0, 0); + } + + // Draw the dialog image + _globals->gfxManager().copyFrom(_surface, bounds.left, bounds.top); + + // Setup clip flags + bool clip1 = true, clip2 = true; + bool gunLoaded = BF_GLOBALS.getFlag(fGunLoaded); + if (gunLoaded) { + // A clip is currently loaded. Hide the appropriate clip + if (BF_GLOBALS.getFlag(fLoadedSpare)) + clip2 = false; + else + clip1 = false; + } + + // Draw the first clip if necessary + if (clip1) { + GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip1Bullets); + _clip1Rect.resize(clipSurface, _clip1Rect.left, _clip1Rect.top, 100); + _globals->gfxManager().copyFrom(clipSurface, bounds.left + _clip1Rect.left, + bounds.top + _clip1Rect.top); + } + + // Draw the second clip if necessary + if (clip2) { + GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip2Bullets); + _clip2Rect.resize(clipSurface, _clip2Rect.left, _clip2Rect.top, 100); + _globals->gfxManager().copyFrom(clipSurface, bounds.left + _clip2Rect.left, + bounds.top + _clip2Rect.top); + } + + // If a clip is loaded, draw the 'loaded' portion of the gun + if (gunLoaded) { + GfxSurface loadedSurface = surfaceFromRes(9, 7, 1); + _loadedRect.resize(loadedSurface, _loadedRect.left, _loadedRect.top, 100); + _globals->gfxManager().copyFrom(loadedSurface, bounds.left + _loadedRect.left, + bounds.top + _loadedRect.top); + } +} + +/*--------------------------------------------------------------------------*/ + +RadioConvDialog::RadioConvDialog() : ModalDialog() { + int idx; + + // Set up the list of buttons + int maxWidth = 0; + for (idx = 0; idx < 8; ++idx) { + _buttons[idx].setText(RADIO_BTN_LIST[idx]); + maxWidth = MAX(maxWidth, (int)_buttons[idx]._bounds.width()); + + add(&_buttons[idx]); + } + + // Set up the button positions and add them to the dialog + for (idx = 0; idx < 8; ++idx) { + _buttons[idx]._bounds.moveTo((idx % 2) * maxWidth + 2, + idx / 2 * _buttons[idx]._bounds.height() + 2); + _buttons[idx]._bounds.setWidth(maxWidth); + + add(&_buttons[idx]); + } + + // Set the dialog size and position + setDefaults(); + setTopLeft(8, 92); + + BF_GLOBALS._events.setCursor(CURSOR_ARROW); +} + +RadioConvDialog::~RadioConvDialog() { + BF_GLOBALS._events.setCursor(CURSOR_WALK); +} + +int RadioConvDialog::execute() { + GfxButton *btn = ModalDialog::execute(); + + // Get which button was pressed + int btnIndex = -1; + for (int idx = 0; idx < 8; ++idx) { + if (btn == &_buttons[idx]) { + btnIndex = idx; + break; + } + } + + return btnIndex; +} + +int RadioConvDialog::show() { + // Show the dialog + RadioConvDialog *dlg = new RadioConvDialog(); + dlg->draw(); + + int btnIndex = dlg->execute(); + + // Close the dialog + dlg->remove(); + delete dlg; + + return btnIndex; +} + + +} // End of namespace BlueForce + +} // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_dialogs.h b/engines/tsage/blue_force/blueforce_dialogs.h new file mode 100644 index 0000000000..e9ce29c019 --- /dev/null +++ b/engines/tsage/blue_force/blueforce_dialogs.h @@ -0,0 +1,92 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_DIALOGS_H +#define TSAGE_BLUEFORCE_DIALOGS_H + +#include "gui/options.h" +#include "tsage/dialogs.h" +#include "tsage/events.h" +#include "tsage/graphics.h" +#include "common/list.h" +#include "common/rect.h" +#include "common/system.h" + +namespace TsAGE { + +namespace BlueForce { + +using namespace TsAGE; + +class RightClickDialog : public GfxDialog { +private: + GfxSurface _surface; + Visage _btnImages; + Rect _rectList1[5]; + Rect _rectList2[5]; + Rect _rectList3[5]; + Rect _rectList4[5]; + + int _highlightedAction; + int _selectedAction; +public: + RightClickDialog(); + ~RightClickDialog(); + + virtual void draw(); + virtual bool process(Event &event); + void execute(); +}; + +class AmmoBeltDialog : public GfxDialog { +private: + GfxSurface _surface; + Visage _cursorImages; + Rect _dialogRect, _loadedRect, _gunRect, _clip1Rect, _clip2Rect; + CursorType _cursorNum; + int _inDialog; + bool _closeFlag; +public: + AmmoBeltDialog(); + ~AmmoBeltDialog(); + + virtual void draw(); + virtual bool process(Event &event); + void execute(); +}; + +class RadioConvDialog : public ModalDialog { +private: + GfxButton _buttons[8]; +public: + RadioConvDialog(); + virtual ~RadioConvDialog(); + int execute(); + + static int show(); +}; + +} // End of namespace BlueForce + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 46c9307632..0a64e90304 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -21,10 +21,14 @@ */ #include "tsage/blue_force/blueforce_logic.h" +#include "tsage/blue_force/blueforce_dialogs.h" #include "tsage/blue_force/blueforce_scenes0.h" #include "tsage/blue_force/blueforce_scenes1.h" +#include "tsage/blue_force/blueforce_scenes3.h" +#include "tsage/blue_force/blueforce_scenes6.h" #include "tsage/scenes.h" #include "tsage/tsage.h" +#include "tsage/graphics.h" #include "tsage/staticres.h" namespace TsAGE { @@ -33,7 +37,7 @@ namespace BlueForce { void BlueForceGame::start() { // Start the game - _globals->_sceneManager.changeScene(50); + _globals->_sceneManager.changeScene(300); _globals->_events.setCursor(CURSOR_WALK); } @@ -45,9 +49,11 @@ Scene *BlueForceGame::createScene(int sceneNumber) { // Tsunami Title Screen return new Scene20(); case 50: + // Map screen return new Scene50(); case 60: - error("Scene group 0 not implemented"); + // Motorcycle + return new Scene60(); /* Scene Group #1 */ case 100: // Tsnunami Title Screen #2 @@ -64,8 +70,10 @@ Scene *BlueForceGame::createScene(int sceneNumber) { case 150: case 160: case 180: - case 190: error("Scene group 1 not implemented"); + case 190: + // Front of Police Station + return new Scene190(); case 200: case 210: case 220: @@ -76,8 +84,14 @@ Scene *BlueForceGame::createScene(int sceneNumber) { case 280: error("Scene group 2 not implemented"); case 300: + // Outside Police Station + return new Scene300(); case 315: + // Inside Police Station + return new Scene315(); case 325: + // Police Station Conference Room + return new Scene325(); case 330: case 340: case 342: @@ -104,6 +118,8 @@ Scene *BlueForceGame::createScene(int sceneNumber) { case 600: case 620: case 666: + // Death scene + return new Scene666(); case 690: error("Scene group 6 not implemented"); case 710: @@ -131,6 +147,56 @@ Scene *BlueForceGame::createScene(int sceneNumber) { } } +void BlueForceGame::rightClick() { + RightClickDialog *dlg = new RightClickDialog(); + dlg->execute(); + delete dlg; +} + +void BlueForceGame::processEvent(Event &event) { + if (event.eventType == EVENT_KEYPRESS) { + switch (event.kbd.keycode) { + case Common::KEYCODE_F1: + // F1 - Help + MessageDialog::show(HELP_MSG, OK_BTN_STRING); + break; + + case Common::KEYCODE_F2: + // F2 - Sound Options + SoundDialog::execute(); + break; + + case Common::KEYCODE_F3: + // F3 - Quit + quitGame(); + event.handled = false; + break; + + case Common::KEYCODE_F4: + // F4 - Restart + restartGame(); + _globals->_events.setCursorFromFlag(); + break; + + case Common::KEYCODE_F7: + // F7 - Restore + restoreGame(); + _globals->_events.setCursorFromFlag(); + break; + + case Common::KEYCODE_F10: + // F10 - Pause + GfxDialog::setPalette(); + MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING); + _globals->_events.setCursorFromFlag(); + break; + + default: + break; + } + } +} + /*--------------------------------------------------------------------------*/ AObjectArray::AObjectArray(): EventHandler() { @@ -212,6 +278,13 @@ void Timer::remove() { ((Scene100 *)BF_GLOBALS._sceneManager._scene)->removeTimer(this); } +void Timer::synchronize(Serializer &s) { + EventHandler::synchronize(s); + SYNC_POINTER(_tickAction); + SYNC_POINTER(_endAction); + s.syncAsUint32LE(_endFrame); +} + void Timer::signal() { assert(_endAction); Action *action = _endAction; @@ -231,24 +304,49 @@ void Timer::dispatch() { } } -void Timer::set(uint32 delay, Action *action) { +void Timer::set(uint32 delay, Action *endAction) { assert(delay != 0); _endFrame = BF_GLOBALS._sceneHandler->getFrameDifference() + delay; - _endAction = action; + _endAction = endAction; ((SceneExt *)BF_GLOBALS._sceneManager._scene)->addTimer(this); } /*--------------------------------------------------------------------------*/ -void SceneItemType1::process(Event &event) { - if (_action) - _action->process(event); +TimerExt::TimerExt(): Timer() { + _action = NULL; +} + +void TimerExt::set(uint32 delay, Action *endAction, Action *newAction) { + _newAction = newAction; + Timer::set(delay, endAction); +} + +void TimerExt::synchronize(Serializer &s) { + EventHandler::synchronize(s); + SYNC_POINTER(_action); +} + +void TimerExt::remove() { + _action = NULL; + remove(); } -void SceneItemType1::startMove(SceneObject *sceneObj, va_list va) { - warning("TODO: sub_1621C"); +void TimerExt::signal() { + Action *endAction = _endAction; + Action *newAction = _newAction; + remove(); + + // If the end action doesn't have an action anymore, set it to the specified new action + assert(endAction); + if (!endAction->_action) + endAction->setAction(newAction); +} + +void TimerExt::dispatch() { + } /*--------------------------------------------------------------------------*/ @@ -258,17 +356,172 @@ void SceneItemType2::startMove(SceneObject *sceneObj, va_list va) { /*--------------------------------------------------------------------------*/ -SceneExt::SceneExt(): Scene() { - warning("TODO: dword_503AA/dword_503AE/dword_53030"); +void NamedObject::postInit(SceneObjectList *OwnerList) { + _lookLineNum = _talkLineNum = _useLineNum = -1; + SceneObject::postInit(); +} + +void NamedObject::synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsSint16LE(_resNum); + s.syncAsSint16LE(_lookLineNum); + s.syncAsSint16LE(_talkLineNum); + s.syncAsSint16LE(_useLineNum); +} + +bool NamedObject::startAction(CursorType action, Event &event) { + bool handled = true; + + switch (action) { + case CURSOR_LOOK: + if (_lookLineNum == -1) + handled = false; + else + SceneItem::display2(_resNum, _lookLineNum); + break; + case CURSOR_USE: + if (_useLineNum == -1) + handled = false; + else + SceneItem::display2(_resNum, _useLineNum); + break; + case CURSOR_TALK: + if (_talkLineNum == -1) + handled = false; + else + SceneItem::display2(_resNum, _talkLineNum); + break; + default: + handled = false; + break; + } + + if (!handled) + ((SceneExt *)BF_GLOBALS._sceneManager._scene)->display(action); + return handled; +} + +void NamedObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) { + _resNum = resNum; + _lookLineNum = lookLineNum; + _talkLineNum = talkLineNum; + _useLineNum = useLineNum; + + switch (mode) { + case 2: + _globals->_sceneItems.push_front(this); + break; + case 4: + _globals->_sceneItems.addBefore(item, this); + break; + case 5: + _globals->_sceneItems.addAfter(item, this); + break; + default: + _globals->_sceneItems.push_back(this); + break; + } +} + + +/*--------------------------------------------------------------------------*/ + +CountdownObject::CountdownObject(): NamedObject() { + _countDown = 0; +} + +void CountdownObject::synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsSint16LE(_countDown); +} + +void CountdownObject::dispatch() { + int frameNum = _frame; + SceneObject::dispatch(); + + if ((frameNum != _frame) && (_countDown > 0)) { + if (--_countDown == 0) { + animate(ANIM_MODE_NONE, 0); + _frame = 1; + } + } +} + +void CountdownObject::fixCountdown(int mode, ...) { + if (mode == 8) { + va_list va; + va_start(va, mode); + + _countDown = va_arg(va, int); + animate(ANIM_MODE_8, _countDown, NULL); + va_end(va); + } +} + +/*--------------------------------------------------------------------------*/ + +FollowerObject::FollowerObject(): NamedObject() { + _object = NULL; +} + +void FollowerObject::synchronize(Serializer &s) { + NamedObject::synchronize(s); + SYNC_POINTER(_object); +} + +void FollowerObject::remove() { + NamedObject::remove(); + _object = NULL; +} + +void FollowerObject::dispatch() { + SceneObject::dispatch(); + assert(_object); + + if ((_object->_flags & OBJFLAG_HIDE) || ((_object->_visage != 307) && + ((_object->_visage != 308) || (_object->_strip != 1)))) { + hide(); + } else if ((_object->_visage != 308) || (_object->_strip != 1)) { + show(); + setStrip(_object->_strip); + setPosition(_object->_position, _object->_yDiff); + } +} + +void FollowerObject::reposition() { + assert(_object); + setStrip(_object->_strip); + setPosition(_object->_position, _object->_yDiff); + reposition(); +} + +void FollowerObject::setup(SceneObject *object, int visage, int frameNum, int yDiff) { + SceneObject::postInit(); + _object = object; + _yDiff = yDiff; + setVisage(visage); + setFrame(frameNum); - _field372 = 0; - _field37A = 0; - _field37C = NULL; + dispatch(); +} + +/*--------------------------------------------------------------------------*/ + +SceneExt::SceneExt(): Scene() { + _stripManager._onBegin = SceneExt::startStrip; + _stripManager._onEnd = SceneExt::endStrip; + + _field372 = _field37A = 0; + _savedPlayerEnabled = false; + _savedUiEnabled = false; + _savedCanWalk = false; + _eventHandler = NULL; + _cursorVisage.setVisage(1, 8); } void SceneExt::postInit(SceneObjectList *OwnerList) { Scene::postInit(OwnerList); - if (BF_GLOBALS._v4CEA2) { + if (BF_GLOBALS._dayNumber) { // Blank out the bottom portion of the screen BF_GLOBALS._interfaceY = BF_INTERFACE_Y; @@ -287,7 +540,7 @@ void SceneExt::dispatch() { _timerList.dispatch(); if (_field37A) { - if ((--_field37A == 0) && BF_GLOBALS._v4CEA2) { + if ((--_field37A == 0) && BF_GLOBALS._dayNumber) { if (BF_GLOBALS._v4E238 && (BF_GLOBALS._v4CF9E == 1)) { warning("sub_1B052"); } @@ -306,19 +559,110 @@ void SceneExt::loadScene(int sceneNum) { _v51C34.bottom = 300; } +void SceneExt::checkGun() { + // Remove a bullet from the currently loaded clip + if (BF_GLOBALS.getFlag(fLoadedSpare) && (BF_GLOBALS._clip2Bullets > 0)) { + if (--BF_GLOBALS._clip2Bullets == 0) + BF_GLOBALS.clearFlag(fGunLoaded); + } else { + if (BF_GLOBALS._clip1Bullets > 0) + --BF_GLOBALS._clip1Bullets; + + if (!BF_GLOBALS._clip1Bullets) + BF_GLOBALS.clearFlag(fGunLoaded); + } + + BF_GLOBALS._sound3.play(4); +} + +bool SceneExt::display(CursorType action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2)); + break; + case CURSOR_USE: + SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2) + 6); + break; + case CURSOR_TALK: + SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2) + 3); + break; + case INV_COLT45: + gunDisplay(); + break; + default: + if (action < BF_LAST_INVENT) + SceneItem::display2(9002, (int)action); + else + return false; + break; + } + + return true; +} + +void SceneExt::fadeOut() { + uint32 black = 0; + BF_GLOBALS._scenePalette.fade((const byte *)&black, false, 100); +} + +void SceneExt::gunDisplay() { + if (!BF_GLOBALS.getFlag(gunDrawn)) { + // Gun not drawn + SceneItem::display2(1, BF_GLOBALS.getFlag(fCanDrawGun) ? 0 : 4); + } else if (!BF_GLOBALS.getFlag(fGunLoaded)) { + // Gun not loaded + SceneItem::display2(1, 1); + } else if (!BF_GLOBALS.getHasBullets()) { + // Out of ammunition + SceneItem::display2(1, 2); + } else { + // Check scene for whether gun can fire + checkGun(); + } +} + +void SceneExt::startStrip() { + SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene; + scene->_field372 = 1; + scene->_savedPlayerEnabled = BF_GLOBALS._player._enabled; + + if (scene->_savedPlayerEnabled) { + scene->_savedUiEnabled = BF_GLOBALS._player._uiEnabled; + scene->_savedCanWalk = BF_GLOBALS._player._canWalk; + BF_GLOBALS._player.disableControl(); + + if (!BF_GLOBALS._v50696 && BF_GLOBALS._uiElements._active) + BF_GLOBALS._uiElements.hide(); + } +} + +void SceneExt::endStrip() { + SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene; + scene->_field372 = 0; + + if (scene->_savedPlayerEnabled) { + BF_GLOBALS._player.enableControl(); + BF_GLOBALS._player._uiEnabled = scene->_savedUiEnabled; + BF_GLOBALS._player._canWalk = scene->_savedCanWalk; + + if (!BF_GLOBALS._v50696 && BF_GLOBALS._uiElements._active) + BF_GLOBALS._uiElements.show(); + } +} + /*--------------------------------------------------------------------------*/ -GameScene::GameScene() { +GroupedScene::GroupedScene() { } -void GameScene::postInit(SceneObjectList *OwnerList) { +void GroupedScene::postInit(SceneObjectList *OwnerList) { _field794 = 0; _field412 = 1; SceneExt::postInit(OwnerList); } -void GameScene::remove() { +void GroupedScene::remove() { SceneExt::remove(); if (_field794 == 1) { for (SynchronizedList<SceneObject *>::iterator i = BF_GLOBALS._sceneObjects->begin(); @@ -340,16 +684,271 @@ void SceneHandlerExt::postInit(SceneObjectList *OwnerList) { SceneHandler::postInit(OwnerList); // Load the low end palette data - GLOBALS._scenePalette.loadPalette(2); - GLOBALS._scenePalette.refresh(); + BF_GLOBALS._scenePalette.loadPalette(2); + BF_GLOBALS._scenePalette.refresh(); } void SceneHandlerExt::process(Event &event) { + if (BF_GLOBALS._uiElements._active) { + BF_GLOBALS._uiElements.process(event); + if (event.handled) + return; + } + + // If the strip proxy is currently being controlled by the strip manager, + // then pass all events to it first + if (BF_GLOBALS._stripProxy._action) { + BF_GLOBALS._stripProxy._action->process(event); + if (event.handled) + return; + } + SceneHandler::process(event); +} + +void SceneHandlerExt::playerAction(Event &event) { + if (BF_GLOBALS._events.getCursor() == INV_DOG_WHISTLE) { + SceneItem::display2(1, 6); + event.handled = true; + } +} - // TODO: All the new stuff from Blue Force +void SceneHandlerExt::processEnd(Event &event) { + // Check for a fallback text display for the given cursor/item being used in the scene + if (!event.handled && BF_GLOBALS._sceneManager._scene) { + CursorType cursor = BF_GLOBALS._events.getCursor(); + if (((SceneExt *)BF_GLOBALS._sceneManager._scene)->display(cursor)) + event.handled = true; + } } +/*--------------------------------------------------------------------------*/ + +BlueForceInvObjectList::BlueForceInvObjectList(): + _none(9, 5, 1), + _colt45(9, 1, 1), + _ammoClip(9, 4, 2), + _spareClip(9, 4, 3), + _handcuffs(9, 1, 4), + _greensGun(9, 1, 5), + _ticketBook(9, 1, 6), + _mirandaCard(9, 1, 7), + _forestRap(9, 1, 8), + _greenId(9, 1, 9), + _baseballCard(9, 1, 10), + _bookingGreen(9, 1, 11), + _flare(9, 1, 12), + _cobbRap(9, 1, 13), + _bullet22(9, 1, 14), + _autoRifle(9, 1, 15), + _wig(9, 1, 16), + _frankieId(9, 1, 17), + _tyroneId(9, 1, 18), + _snub22(9, 1, 19), + _bug(1, 1, 1), + _bookingFrankie(9, 2, 1), + _bookingGang(9, 2, 2), + _fbiTeletype(9, 2, 3), + _daNote(9, 2, 4), + _printOut(9, 2, 5), + _warehouseKeys(9, 2, 6), + _centerPunch(9, 2, 7), + _tranqGun(9, 2, 8), + _hook(9, 2, 9), + _rags(9, 2, 10), + _jar(9, 2, 11), + _screwdriver(9, 2, 12), + _dFloppy(9, 2, 13), + _blankDisk(9, 2, 14), + _stick(9, 2, 15), + _crate1(9, 2, 16), + _crate2(9, 2, 17), + _shoebox(9, 2, 18), + _badge(9, 2, 19), + _bug2(1, 1, 1), + _rentalCoupon(9, 3, 1), + _nickel(9, 3, 2), + _lyleCard(9, 3, 3), + _carterNote(9, 3, 4), + _mugshot(9, 3, 5), + _clipping(9, 3, 6), + _microfilm(9, 3, 7), + _waveKeys(9, 3, 8), + _rentalKeys(9, 3, 9), + _napkin(9, 3, 10), + _dmvPrintout(9, 3, 11), + _fishingNet(9, 3, 12), + _id(9, 3, 13), + _bullets9mm(9, 3, 14), + _schedule(9, 3, 15), + _grenades(9, 3, 16), + _yellowCord(9, 3, 17), + _halfYellowCord(9, 3, 18), + _blackCord(9, 3, 19), + _bug3(1, 1, 1), + _halfBlackCord(9, 4, 1), + _warrant(9, 4, 2), + _jacket(9, 4, 3), + _greensKnife(9, 4, 4), + _dogWhistle(9, 4, 5), + _ammoBelt(9, 1, 2), + _lastInvent(9, 4, 7) { + + // Add the items to the list + _itemList.push_back(&_none); + _itemList.push_back(&_colt45); + _itemList.push_back(&_ammoClip); + _itemList.push_back(&_spareClip); + _itemList.push_back(&_handcuffs); + _itemList.push_back(&_greensGun); + _itemList.push_back(&_ticketBook); + _itemList.push_back(&_mirandaCard); + _itemList.push_back(&_forestRap); + _itemList.push_back(&_greenId); + _itemList.push_back(&_baseballCard); + _itemList.push_back(&_bookingGreen); + _itemList.push_back(&_flare); + _itemList.push_back(&_cobbRap); + _itemList.push_back(&_bullet22); + _itemList.push_back(&_autoRifle); + _itemList.push_back(&_wig); + _itemList.push_back(&_frankieId); + _itemList.push_back(&_tyroneId); + _itemList.push_back(&_snub22); + _itemList.push_back(&_bug); + _itemList.push_back(&_bookingFrankie); + _itemList.push_back(&_bookingGang); + _itemList.push_back(&_fbiTeletype); + _itemList.push_back(&_daNote); + _itemList.push_back(&_printOut); + _itemList.push_back(&_warehouseKeys); + _itemList.push_back(&_centerPunch); + _itemList.push_back(&_tranqGun); + _itemList.push_back(&_hook); + _itemList.push_back(&_rags); + _itemList.push_back(&_jar); + _itemList.push_back(&_screwdriver); + _itemList.push_back(&_dFloppy); + _itemList.push_back(&_blankDisk); + _itemList.push_back(&_stick); + _itemList.push_back(&_crate1); + _itemList.push_back(&_crate2); + _itemList.push_back(&_shoebox); + _itemList.push_back(&_badge); + _itemList.push_back(&_bug2); + _itemList.push_back(&_rentalCoupon); + _itemList.push_back(&_nickel); + _itemList.push_back(&_lyleCard); + _itemList.push_back(&_carterNote); + _itemList.push_back(&_mugshot); + _itemList.push_back(&_clipping); + _itemList.push_back(&_microfilm); + _itemList.push_back(&_waveKeys); + _itemList.push_back(&_rentalKeys); + _itemList.push_back(&_napkin); + _itemList.push_back(&_dmvPrintout); + _itemList.push_back(&_fishingNet); + _itemList.push_back(&_id); + _itemList.push_back(&_bullets9mm); + _itemList.push_back(&_schedule); + _itemList.push_back(&_grenades); + _itemList.push_back(&_yellowCord); + _itemList.push_back(&_halfYellowCord); + _itemList.push_back(&_blackCord); + _itemList.push_back(&_bug3); + _itemList.push_back(&_halfBlackCord); + _itemList.push_back(&_warrant); + _itemList.push_back(&_jacket); + _itemList.push_back(&_greensKnife); + _itemList.push_back(&_dogWhistle); + _itemList.push_back(&_ammoBelt); + _itemList.push_back(&_lastInvent); +} + +void BlueForceInvObjectList::reset() { + // Reset all object scene numbers + SynchronizedList<InvObject *>::iterator i; + for (i = _itemList.begin(); i != _itemList.end(); ++i) { + (*i)->_sceneNumber = 0; + } + + // Set up default inventory + setObjectScene(INV_COLT45, 1); + setObjectScene(INV_HANDCUFFS, 1); + setObjectScene(INV_AMMO_BELT, 1); + setObjectScene(INV_ID, 1); + + // Set default room for other objects + setObjectScene(INV_TICKET_BOOK, 60); + setObjectScene(INV_MIRANDA_CARD, 60); + setObjectScene(INV_FOREST_RAP, 320); + setObjectScene(INV_GREEN_ID, 370); + setObjectScene(INV_BASEBALL_CARD, 840); + setObjectScene(INV_BOOKING_GREEN, 390); + setObjectScene(INV_FLARE, 355); + setObjectScene(INV_COBB_RAP, 810); + setObjectScene(INV_22_BULLET, 415); + setObjectScene(INV_AUTO_RIFLE, 415); + setObjectScene(INV_WIG, 415); + setObjectScene(INV_FRANKIE_ID, 410); + setObjectScene(INV_TYRONE_ID, 410); + setObjectScene(INV_22_SNUB, 410); + setObjectScene(INV_FBI_TELETYPE, 320); + setObjectScene(INV_DA_NOTE, 320); + setObjectScene(INV_PRINT_OUT, 570); + setObjectScene(INV_WHAREHOUSE_KEYS, 360); + setObjectScene(INV_CENTER_PUNCH, 0); + setObjectScene(INV_TRANQ_GUN, 830); + setObjectScene(INV_HOOK, 350); + setObjectScene(INV_RAGS, 870); + setObjectScene(INV_JAR, 870); + setObjectScene(INV_SCREWDRIVER, 355); + setObjectScene(INV_D_FLOPPY, 570); + setObjectScene(INV_BLANK_DISK, 560); + setObjectScene(INV_STICK, 710); + setObjectScene(INV_CRATE1, 710); + setObjectScene(INV_CRATE2, 870); + setObjectScene(INV_SHOEBOX, 270); + setObjectScene(INV_BADGE, 560); + setObjectScene(INV_RENTAL_COUPON, 0); + setObjectScene(INV_NICKEL, 560); + setObjectScene(INV_LYLE_CARD, 270); + setObjectScene(INV_CARTER_NOTE, 830); + setObjectScene(INV_MUG_SHOT, 810); + setObjectScene(INV_CLIPPING, 810); + setObjectScene(INV_MICROFILM, 810); + setObjectScene(INV_WAVE_KEYS, 840); + setObjectScene(INV_RENTAL_KEYS, 840); + setObjectScene(INV_NAPKIN, 115); + setObjectScene(INV_DMV_PRINTOUT, 810); + setObjectScene(INV_FISHING_NET, 830); + setObjectScene(INV_9MM_BULLETS, 930); + setObjectScene(INV_SCHEDULE, 930); + setObjectScene(INV_GRENADES, 355); + setObjectScene(INV_GREENS_KNIFE, 370); + setObjectScene(INV_JACKET, 880); + setObjectScene(INV_DOG_WHISTLE, 880); + setObjectScene(INV_YELLOW_CORD, 910); + setObjectScene(INV_BLACK_CORD, 910); +} + +void BlueForceInvObjectList::setObjectScene(int objectNum, int sceneNumber) { + // Find the appropriate object + int num = objectNum; + SynchronizedList<InvObject *>::iterator i = _itemList.begin(); + while (num-- > 0) ++i; + (*i)->_sceneNumber = sceneNumber; + + // If the item is the currently active one, default back to the use cursor + if (BF_GLOBALS._events.getCursor() == objectNum) + BF_GLOBALS._events.setCursor(CURSOR_USE); + + // Update the user interface if necessary + BF_GLOBALS._uiElements.updateInventory(); +} + +/*--------------------------------------------------------------------------*/ + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index 9ab8a87a0c..8a827a3214 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -29,18 +29,20 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -#define BF_INTERFACE_Y 168 - namespace TsAGE { namespace BlueForce { using namespace TsAGE; +#define BF_INVENTORY (*((::TsAGE::BlueForce::BlueForceInvObjectList *)_globals->_inventory)) + class BlueForceGame: public Game { public: virtual void start(); virtual Scene *createScene(int sceneNumber); + virtual void rightClick(); + virtual void processEvent(Event &event); }; #define OBJ_ARRAY_SIZE 10 @@ -69,30 +71,90 @@ public: uint32 _endFrame; public: Timer(); - void set(uint32 delay, Action *action); + void set(uint32 delay, Action *endAction); + virtual Common::String getClassName() { return "Timer"; } + virtual void synchronize(Serializer &s); virtual void remove(); virtual void signal(); virtual void dispatch(); }; -class SceneItemType1: public SceneItem { +class TimerExt: public Timer { +public: + Action *_newAction; +public: + TimerExt(); + void set(uint32 delay, Action *endAction, Action *action); + + virtual Common::String getClassName() { return "TimerExt"; } + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void signal(); + virtual void dispatch(); +}; + +class SceneItemType2: public SceneHotspot { public: - virtual void process(Event &event); virtual void startMove(SceneObject *sceneObj, va_list va); }; -class SceneItemType2: public SceneItemType1 { +class NamedObject: public SceneObject { public: - virtual void startMove(SceneObject *sceneObj, va_list va); + int _resNum; + int _lookLineNum, _talkLineNum, _useLineNum; + + virtual Common::String getClassName() { return "NamedObject"; } + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual bool startAction(CursorType action, Event &event); + + void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item); }; +class CountdownObject: public NamedObject { +public: + int _countDown; + CountdownObject(); + void fixCountdown(int mode, ...); + + virtual Common::String getClassName() { return "CountdownObject"; } + virtual void synchronize(Serializer &s); + virtual void dispatch(); +}; + +class FollowerObject: public NamedObject { +public: + SceneObject *_object; + FollowerObject(); + + virtual Common::String getClassName() { return "SceneObjectExt4"; } + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void dispatch(); + virtual void reposition(); + + void setup(SceneObject *object, int visage, int frameNum, int yDiff); +}; + +enum ExitFrame { EXITFRAME_N = 1, EXITFRAME_NE = 2, EXITFRAME_E = 3, EXITFRAME_SE = 4, + EXITFRAME_S = 5, EXITFRAME_SW = 6, EXITFRAME_W = 7, EXITFRAME_NW = 8 }; + class SceneExt: public Scene { +private: + void gunDisplay(); + static void startStrip(); + static void endStrip(); public: AObjectArray _timerList, _objArray2; int _field372; + bool _savedPlayerEnabled; + bool _savedUiEnabled; + bool _savedCanWalk; int _field37A; - EventHandler *_field37C; + + EventHandler *_eventHandler; + Visage _cursorVisage; Rect _v51C34; public: @@ -103,18 +165,20 @@ public: virtual void process(Event &event); virtual void dispatch(); virtual void loadScene(int sceneNum); - virtual void proc13() { warning("TODO: SceneExt::proc13"); } + virtual void checkGun(); void addTimer(Timer *timer) { _timerList.add(timer); } void removeTimer(Timer *timer) { _timerList.remove(timer); } + bool display(CursorType action); + void fadeOut(); }; -class GameScene: public SceneExt { +class GroupedScene: public SceneExt { public: int _field412; int _field794; public: - GameScene(); + GroupedScene(); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); @@ -124,10 +188,87 @@ class SceneHandlerExt: public SceneHandler { public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void process(Event &event); + + virtual void playerAction(Event &event); + virtual void processEnd(Event &event); }; -class BlueAnimatedSpeaker: public Speaker { +class BlueForceInvObjectList : public InvObjectList { public: + InvObject _none; + InvObject _colt45; + InvObject _ammoClip; + InvObject _spareClip; + InvObject _handcuffs; + InvObject _greensGun; + InvObject _ticketBook; + InvObject _mirandaCard; + InvObject _forestRap; + InvObject _greenId; + InvObject _baseballCard; + InvObject _bookingGreen; + InvObject _flare; + InvObject _cobbRap; + InvObject _bullet22; + InvObject _autoRifle; + InvObject _wig; + InvObject _frankieId; + InvObject _tyroneId; + InvObject _snub22; + InvObject _bug; + InvObject _bookingFrankie; + InvObject _bookingGang; + InvObject _fbiTeletype; + InvObject _daNote; + InvObject _printOut; + InvObject _warehouseKeys; + InvObject _centerPunch; + InvObject _tranqGun; + InvObject _hook; + InvObject _rags; + InvObject _jar; + InvObject _screwdriver; + InvObject _dFloppy; + InvObject _blankDisk; + InvObject _stick; + InvObject _crate1; + InvObject _crate2; + InvObject _shoebox; + InvObject _badge; + InvObject _bug2; + InvObject _rentalCoupon; + InvObject _nickel; + InvObject _lyleCard; + InvObject _carterNote; + InvObject _mugshot; + InvObject _clipping; + InvObject _microfilm; + InvObject _waveKeys; + InvObject _rentalKeys; + InvObject _napkin; + InvObject _dmvPrintout; + InvObject _fishingNet; + InvObject _id; + InvObject _bullets9mm; + InvObject _schedule; + InvObject _grenades; + InvObject _yellowCord; + InvObject _halfYellowCord; + InvObject _blackCord; + InvObject _bug3; + InvObject _halfBlackCord; + InvObject _warrant; + InvObject _jacket; + InvObject _greensKnife; + InvObject _dogWhistle; + InvObject _ammoBelt; + InvObject _lastInvent; + + BlueForceInvObjectList(); + void reset(); + void setObjectScene(int objectNum, int sceneNumber); + + virtual Common::String getClassName() { return "BlueForceInvObjectList"; } }; } // End of namespace BlueForce diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index f1b714ec6c..9ba1db8688 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -21,6 +21,7 @@ */ #include "tsage/blue_force/blueforce_scenes0.h" +#include "tsage/blue_force/blueforce_dialogs.h" #include "tsage/scenes.h" #include "tsage/tsage.h" #include "tsage/staticres.h" @@ -191,6 +192,7 @@ void Scene20::postInit(SceneObjectList *OwnerList) { _object8.changeZoom(100); setAction(&_action1); + BF_GLOBALS._dialogCenter.y = 165; } /*-------------------------------------------------------------------------- @@ -263,34 +265,36 @@ void Scene50::Tooltip::highlight(bool btnDown) { update(); if (btnDown) { - if ((BF_GLOBALS._bikiniHutState == 14) && BF_GLOBALS.getFlag(98)) + if ((BF_GLOBALS._bookmark == bCalledToDrunkStop) && BF_GLOBALS.getFlag(beenToJRDay2)) scene->_sceneNumber = 600; - else if (BF_GLOBALS._bikiniHutState == 5) + else if (BF_GLOBALS._bookmark == bBookedGreen) scene->_sceneNumber = 410; else { - BF_GLOBALS._v4CEF4 = _newSceneNumber; + BF_GLOBALS._driveToScene = _newSceneNumber; - switch (BF_GLOBALS._v4CEF2) { + switch (BF_GLOBALS._driveFromScene) { case 330: case 340: case 342: BF_GLOBALS._player.disableControl(); - if (_locationId != BF_GLOBALS._mapLocationId) { + BF_GLOBALS._mapLocationId = _locationId; + + if (BF_GLOBALS._driveToScene == 330) { scene->_sceneNumber = 330; } else { - scene->_sceneNumber = (BF_GLOBALS._v4CEA2 != 1) || (BF_GLOBALS._bikiniHutState < 1) || - (BF_GLOBALS._bikiniHutState >= 2) ? 342 : 340; + scene->_sceneNumber = (BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) || + (BF_GLOBALS._bookmark >= bCalledToDomesticViolence) ? 342 : 340; } break; case 410: case 551: - if (BF_GLOBALS.getFlag((BF_GLOBALS._v4CEF2 == 410) ? 41 : 40)) { + if (BF_GLOBALS.getFlag((BF_GLOBALS._driveFromScene == 410) ? fSearchedTruck : didDrunk)) { BF_GLOBALS._mapLocationId = _locationId; BF_GLOBALS._player.disableControl(); scene->_sceneNumber = _newSceneNumber; } else { - BF_GLOBALS._v4CEA8 = 4; + BF_GLOBALS._deathReason = 4; BF_GLOBALS._sceneManager.changeScene(666); return; } @@ -298,7 +302,7 @@ void Scene50::Tooltip::highlight(bool btnDown) { case 300: if (_locationId == 1) { - BF_GLOBALS._v4CEF4 = 300; + BF_GLOBALS._driveToScene = 300; _newSceneNumber = 300; } // Deliberate fall through to default @@ -354,7 +358,7 @@ void Scene50::postInit(SceneObjectList *OwnerList) { _location5.set(Rect(383, 57, 402, 70), 380, CITY_HALL_JAIL, 32); _location7.set(Rect(128, 32, 143, 42), 800, JAMISON_RYAN, 128); _location9.set(Rect(349, 125, 359, 132), - (BF_GLOBALS._bikiniHutState == 13) || (BF_GLOBALS._bikiniHutState == 14) ? 551 : 550, + (BF_GLOBALS._bookmark == bInspectionDone) || (BF_GLOBALS._bookmark == bCalledToDrunkStop) ? 551 : 550, BIKINI_HUT, 16); _item.setBounds(Rect(0, 0, SCREEN_WIDTH * 2, SCREEN_HEIGHT)); @@ -424,7 +428,7 @@ void Scene50::remove() { void Scene50::signal() { if (_sceneMode == 1) { // Destination selected - if ((BF_GLOBALS._v4CEF2 == 551) && (_sceneNumber != BF_GLOBALS._v4CEF2)) { + if ((BF_GLOBALS._driveFromScene == 551) && (_sceneNumber != BF_GLOBALS._driveFromScene)) { BF_GLOBALS.setFlag(109); BF_GLOBALS.setFlag(115); BF_GLOBALS.setFlag(121); @@ -432,21 +436,21 @@ void Scene50::signal() { BF_GLOBALS.setFlag(133); } - if ((BF_GLOBALS._v4CEF2 == 410) && (_sceneNumber != BF_GLOBALS._v4CEF2)) { + if ((BF_GLOBALS._driveFromScene == 410) && (_sceneNumber != BF_GLOBALS._driveFromScene)) { BF_GLOBALS.setFlag(125); } - if ((BF_GLOBALS._v4CEF2 == 340) && (_sceneNumber != BF_GLOBALS._v4CEF2)) { + if ((BF_GLOBALS._driveFromScene == 340) && (_sceneNumber != BF_GLOBALS._driveFromScene)) { BF_GLOBALS.setFlag(123); } - if ((BF_GLOBALS._v4CEF2 == 380) && (_sceneNumber != BF_GLOBALS._v4CEF2)) { - if (BF_GLOBALS._bikiniHutState >= 4) + if ((BF_GLOBALS._driveFromScene == 380) && (_sceneNumber != BF_GLOBALS._driveFromScene)) { + if (BF_GLOBALS._bookmark >= bLauraToParamedics) BF_GLOBALS.setFlag(129); - if (BF_GLOBALS._bikiniHutState >= 6) + if (BF_GLOBALS._bookmark >= bStoppedFrankie) BF_GLOBALS.setFlag(131); - if (BF_GLOBALS._bikiniHutState == 3) { - BF_GLOBALS._v4CEA8 = 19; + if (BF_GLOBALS._bookmark == bArrestedGreen) { + BF_GLOBALS._deathReason = 19; _sceneNumber = 666; } } @@ -496,6 +500,613 @@ void Scene50::process(Event &event) { } } +/*-------------------------------------------------------------------------- + * Scene 60 - Motorcycle + * + *--------------------------------------------------------------------------*/ + +bool Scene60::Item2::startAction(CursorType action, Event &event) { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(60, 15); + break; + default: + switch (BF_GLOBALS._dayNumber) { + case 1: + if (BF_GLOBALS.getFlag(onDuty) && check1()) + return true; + break; + case 2: + if (BF_GLOBALS.getFlag(onDuty) && check2()) + return true; + } + + BF_GLOBALS._sound1.play(BF_GLOBALS.getFlag(fWithLyle) ? 80 : 31); + BF_GLOBALS._sound1.holdAt(1); + scene->fadeOut(); + BF_GLOBALS._sceneManager.changeScene(50); + break; + } + + return true; +} + +bool Scene60::Item2::check1() { + if (BF_GLOBALS._bookmark >= bStoppedFrankie) { + BF_GLOBALS._v5098C |= 1; + return false; + } else { + if ((BF_GLOBALS._bookmark == bBookedGreen) && BF_GLOBALS.getFlag(fArrivedAtGangStop)) { + BF_GLOBALS.set2Flags(f1035Frankie); + BF_GLOBALS._sceneManager.changeScene(410); + } + + if (BF_GLOBALS._bookmark >= bLauraToParamedics) { + if (BF_GLOBALS.getFlag(fLeftTraceIn910)) { + if (BF_GLOBALS._bookmark < bBookedGreen) { + BF_GLOBALS._bookmark = bBookedGreen; + BF_GLOBALS.clearFlag(fCalledBackup); + BF_GLOBALS.set2Flags(f1035Frankie); + return false; + } else if (BF_GLOBALS._bookmark == bBookedGreen) { + if (!BF_GLOBALS.getFlag(fCalledBackup)) + BF_GLOBALS.setFlag(f1035Frankie); + + BF_GLOBALS._sceneManager.changeScene(410); + return true; + } + } + + } else if (BF_GLOBALS._bookmark < bStartOfGame) { + // Should never reach here + } else if (BF_GLOBALS._bookmark < bCalledToDomesticViolence) { + if ((BF_GLOBALS._v5098C >> 1) & 1) + BF_GLOBALS.setFlag(fLateToMarina); + else + BF_GLOBALS._v5098C |= 2; + } else { + int v = ((BF_GLOBALS._v5098C >> 2) & 15 + 1) & 15; + BF_GLOBALS._v5098C = (BF_GLOBALS._v5098C & 0xC3) | (v << 2); + + if ((v != 1) && (v != 2)) { + BF_GLOBALS._deathReason = 19; + BF_GLOBALS._sceneManager.changeScene(666); + return true; + } + } + } + + BF_GLOBALS._v5098C |= 1; + return false; +} + +bool Scene60::Item2::check2() { + switch (BF_GLOBALS._bookmark) { + case bInspectionDone: + if (BF_GLOBALS._v5098D & 1) { + BF_GLOBALS.setFlag(fLateToDrunkStop); + } else { + BF_GLOBALS._v5098D |= 1; + } + break; + case bCalledToDrunkStop: + BF_GLOBALS.setFlag(fHasDrivenFromDrunk); + break; + default: + break; + } + + BF_GLOBALS._v5098C |= 0x80; + return false; +} + +/*--------------------------------------------------------------------------*/ + +bool Scene60::Item3::startAction(CursorType action, Event &event) { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + scene->fadeOut(); + BF_GLOBALS._sceneManager.changeScene(scene->_newScene); + return true; +} + +bool Scene60::Radio::startAction(CursorType action, Event &event) { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + + switch(action) { + case CURSOR_LOOK: + SceneItem::display2(60, 0); + break; + case CURSOR_USE: + case CURSOR_TALK: + scene->_sound.play(32); + scene->setAction(&scene->_action1); + break; + default: + SceneItem::display2(60, 1); + break; + } + return true; +} + +bool Scene60::Compartment::startAction(CursorType action, Event &event) { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + + switch(action) { + case CURSOR_LOOK: + SceneItem::display2(60, 8); + break; + case CURSOR_USE: + if ((BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 1) && + (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 1)) { + SceneItem::display2(60, 9); + } + break; + case CURSOR_TALK: + SceneItem::display2(60, 10); + break; + case INV_TICKET_BOOK: + SceneItem::display2(60, 11); + scene->_ticketBook.show(); + BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60); + BF_GLOBALS._events.setCursor(CURSOR_USE); + BF_GLOBALS._sceneItems.addBefore(&scene->_radio, &scene->_ticketBook); + break; + case INV_MIRANDA_CARD: + SceneItem::display2(60, 12); + scene->_mirandaCard.show(); + BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60); + BF_GLOBALS._events.setCursor(CURSOR_USE); + BF_GLOBALS._sceneItems.addAfter(&scene->_compartmentDoor, &scene->_mirandaCard); + break; + default: + return NamedHotspot::startAction(action, event); + } + + return true; +} + +/*--------------------------------------------------------------------------*/ + +bool Scene60::MirandaCard::startAction(CursorType action, Event &event) { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(60, 5); + return true; + case CURSOR_USE: + if (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 60) { + SceneItem::display2(60, 6); + BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 1); + if (!BF_GLOBALS.getFlag(fGotPointsForTktBook)) { + BF_GLOBALS._uiElements.addScore(10); + BF_GLOBALS.setFlag(fGotPointsForTktBook); + } + + scene->_mirandaCard.hide(); + BF_GLOBALS._sceneItems.remove(&scene->_mirandaCard); + } + return true; + case CURSOR_TALK: + SceneItem::display2(60, 7); + return true; + default: + return NamedObject::startAction(action, event); + break; + } +} + +bool Scene60::TicketBook::startAction(CursorType action, Event &event) { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(60, 2); + return true; + case CURSOR_USE: + if (BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 60) { + scene->_ticketBook.hide(); + BF_GLOBALS._sceneItems.remove(&scene->_ticketBook); + SceneItem::display2(60, 3); + BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 1); + if (!BF_GLOBALS.getFlag(fShotNicoIn910)) { + BF_GLOBALS._uiElements.addScore(10); + BF_GLOBALS.setFlag(fShotNicoIn910); + } + } + return true; + case CURSOR_TALK: + SceneItem::display2(60, 4); + return true; + default: + return NamedObject::startAction(action, event); + break; + } +} + +bool Scene60::CompartmentDoor::startAction(CursorType action, Event &event) { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(60, 13); + return true; + case CURSOR_USE: + if (_flag) { + _flag = false; + BF_GLOBALS._player.disableControl(); + Common::Point pt(308, 165); + NpcMover *mover = new NpcMover(); + addMover(mover, &pt, scene); + } else { + _flag = true; + BF_GLOBALS._player.disableControl(); + Common::Point pt(288, 165); + NpcMover *mover = new NpcMover(); + addMover(mover, &pt, scene); + } + return true; + case CURSOR_TALK: + SceneItem::display2(60, 14); + return true; + default: + return NamedObject::startAction(action, event); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene60::Action1::signal() { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(2); + break; + case 1: + scene->_stripManager.start(634, this); + break; + case 2: + _state = useRadio(); + setDelay(4); + break; + case 3: + switch (_state) { + case 1: + if (BF_GLOBALS.removeFlag(fCan1004Marina)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 606; + } else if (BF_GLOBALS.removeFlag(fCan1004Drunk)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 606; + } else { + _state = 611; + } + break; + case 2: + _state = 612; + break; + case 3: + if (BF_GLOBALS.removeFlag(f1015Marina)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 613; + } else if (BF_GLOBALS.removeFlag(f1015Frankie)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 614; + } else if (BF_GLOBALS.removeFlag(f1015Drunk)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 615; + } else { + _state = 616; + } + break; + case 4: + if (BF_GLOBALS.removeFlag(f1027Marina)) { + BF_GLOBALS._uiElements.addScore(10); + _actionIndex = 5; + _state = 617; + } else if (BF_GLOBALS.removeFlag(f1027Frankie)) { + BF_GLOBALS._uiElements.addScore(10); + _actionIndex = 5; + _state = 618; + } else if (BF_GLOBALS.removeFlag(f1015Drunk)) { + BF_GLOBALS._uiElements.addScore(10); + _actionIndex = 5; + _state = 619; + } else { + _state = 620; + } + break; + case 5: + if (BF_GLOBALS.removeFlag(f1035Marina)) { + BF_GLOBALS.setFlag(fCalledBackup); + BF_GLOBALS._uiElements.addScore(50); + _state = 621; + } else if (BF_GLOBALS.removeFlag(f1035Frankie)) { + BF_GLOBALS.setFlag(fCalledBackup); + BF_GLOBALS._uiElements.addScore(50); + _actionIndex = 5; + _state = 622; + } else if (BF_GLOBALS.removeFlag(f1035Drunk)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 623; + } else { + _state = 624; + } + break; + case 6: + if (BF_GLOBALS.removeFlag(f1097Marina)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 625; + } else if (BF_GLOBALS.removeFlag(f1097Frankie)) { + BF_GLOBALS._uiElements.addScore(10); + _actionIndex = 5; + _state = 626; + } else if (BF_GLOBALS.removeFlag(f1097Drunk)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 627; + } else { + _state = 628; + } + break; + case 7: + if (BF_GLOBALS.removeFlag(f1098Marina)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 629; + } else if (BF_GLOBALS.removeFlag(f1098Frankie)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 630; + } else if (BF_GLOBALS.removeFlag(f1098Drunk)) { + BF_GLOBALS._uiElements.addScore(10); + _state = 631; + } else { + _state = 632; + } + break; + case 0: + default: + _state = 610; + break; + } + + scene->_stripManager.start(_state, this); + break; + case 4: + remove(); + case 5: + setDelay(120); + break; + case 6: + _actionIndex = 4; + scene->_stripManager.start(633, this); + break; + } +} + +int Scene60::Action1::useRadio() { + return RadioConvDialog::show(); +} + +void Scene60::Action2::signal() { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + scene->_sound.play(32); + setDelay(2); + break; + case 1: + BF_GLOBALS._bookmark = bStartOfGame; + BF_GLOBALS.set2Flags(f1035Marina); + scene->_stripManager.start(60, this); + break; + case 2: + BF_GLOBALS._player.enableControl(); + remove(); + break; + } +} + +void Scene60::Action3::signal() { + Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + scene->_sound.play(32); + setDelay(2); + break; + case 1: + BF_GLOBALS._bookmark = bInspectionDone; + BF_GLOBALS.set2Flags(f1035Drunk); + BF_GLOBALS.setFlag(fCan1004Drunk); + scene->_stripManager.start(71, this); + break; + case 2: + scene->_field1222 = true; + BF_GLOBALS._player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene60::Scene60(): SceneExt() { + _field1222 = false; + _newScene = 0; +} + +void Scene60::postInit(SceneObjectList *OwnerList) { + _newScene = BF_GLOBALS._driveFromScene = BF_GLOBALS._sceneManager._previousScene; + + // Set up which scene background to use + switch (_newScene) { + case 300: + _sceneNumber = 1301; + break; + case 380: + _sceneNumber = 1380; + break; + case 410: + _sceneNumber = 1410; + break; + case 551: + _sceneNumber = 1550; + break; + case 550: + _sceneNumber = 1555; + break; + case 580: + _sceneNumber = 1580; + break; + case 800: + _sceneNumber = 1810; + break; + default: + _sceneNumber = 60; + break; + } + + if (_sceneNumber == 1550) { + if (BF_GLOBALS.getFlag(fHasDrivenFromDrunk)) + _sceneNumber = 1555; + else { + _object1.postInit(); + _object1.setVisage(1550); + _object1.animate(ANIM_MODE_2); + _object1.setPosition(Common::Point(158, 18)); + } + } + + loadScene(_sceneNumber); + + if ((_sceneNumber == 1810) && (BF_GLOBALS._dayNumber > 1) && + (BF_GLOBALS._dayNumber < 5) && !BF_GLOBALS.getFlag(fWithLyle) && + ((BF_GLOBALS._dayNumber != 4) && (BF_GLOBALS._bookmark >= bEndDayThree))) { + _car.setup(1810, 1, 1, 164, 131, 1); + } + + if ((_sceneNumber == 1410) && (BF_GLOBALS._bookmark == bBookedGreen) && + !BF_GLOBALS.getFlag(fDriverOutOfTruck)) { + _object1.postInit(); + _object1.setVisage(410); + _object1.setStrip(6); + _object1.setPosition(Common::Point(135, 47)); + } + + if (BF_GLOBALS.getFlag(fWithLyle)) { + _visage = 62; + _item2._sceneRegionId = 22; + } else if (BF_GLOBALS.getFlag(onDuty)) { + _visage = 63; + _item2._sceneRegionId = 20; + } else { + _visage = 61; + _item2._sceneRegionId = 28; + } + _dashboard.setup(_visage, 1, 1, 160, 168, 100); + _cursorId = CURSOR_USE; + + if (_visage == 63) { + _compartmentDoor.postInit(); + _compartmentDoor.setVisage(60); + _compartmentDoor.setStrip(1); + _compartmentDoor.setFrame(1); + _compartmentDoor.setPosition(Common::Point(288, 165)); + _compartmentDoor.setPriority(250); + _compartmentDoor._flag = true; + BF_GLOBALS._sceneItems.push_back(&_compartmentDoor); + + _mirandaCard.postInit(); + _mirandaCard.setVisage(60); + _mirandaCard.setStrip(2); + _mirandaCard.setFrame(2); + _mirandaCard.setPosition(Common::Point(280, 160)); + + if (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 60) { + _mirandaCard.show(); + BF_GLOBALS._sceneItems.push_back(&_mirandaCard); + } else { + _mirandaCard.hide(); + } + + _ticketBook.postInit(); + _ticketBook.setVisage(60); + _ticketBook.setStrip(2); + _ticketBook.setFrame(1); + _ticketBook.setPosition(Common::Point(289, 161)); + + if (BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 60) { + _ticketBook.show(); + BF_GLOBALS._sceneItems.push_back(&_ticketBook); + } else { + _ticketBook.hide(); + } + } + + _item3._sceneRegionId = 7; + _radio._sceneRegionId = 12; + _compartment._sceneRegionId = 14; + + _stripManager.addSpeaker(&_gameTextSpeaker); + _stripManager.addSpeaker(&_jakeRadioSpeaker); + + if (BF_GLOBALS.getFlag(onDuty) && !BF_GLOBALS.getFlag(fWithLyle)) { + BF_GLOBALS._sceneItems.push_back(&_radio); + BF_GLOBALS._sceneItems.push_back(&_compartment); + } + + BF_GLOBALS._sceneItems.push_back(&_item2); + BF_GLOBALS._sceneItems.push_back(&_item3); + BF_GLOBALS._player.enableControl(); + BF_GLOBALS._events.setCursor(CURSOR_USE); + + switch (BF_GLOBALS._dayNumber) { + case 1: + if (BF_GLOBALS.getFlag(onDuty) && (BF_GLOBALS._v5098C & 1) && + (BF_GLOBALS._bookmark < bStartOfGame) && (BF_GLOBALS._sceneManager._previousScene != 342)) { + setAction(&_action2); + if (BF_GLOBALS._sceneManager._previousScene == 342) + _newScene = 340; + } + break; + case 2: + if (BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._v5098C >> 7) & 1) && + (BF_GLOBALS._sceneManager._previousScene != 550) && + (BF_GLOBALS._bookmark < bInspectionDone)) { + setAction(&_action3); + } + } +} + +void Scene60::signal() { + ++_sceneMode; + BF_GLOBALS._player.enableControl(); +} + +void Scene60::dispatch() { + SceneExt::dispatch(); + + int idx = BF_GLOBALS._sceneRegions.indexOf(Common::Point( + BF_GLOBALS._sceneManager._scene->_sceneBounds.left + BF_GLOBALS._events._mousePos.x, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + BF_GLOBALS._events._mousePos.y)); + + if (idx == _item3._sceneRegionId) { + if (BF_GLOBALS._events.getCursor() != CURSOR_EXIT) { + _cursorId = BF_GLOBALS._events.getCursor(); + BF_GLOBALS._events.setCursor(CURSOR_EXIT); + } + } else { + if (BF_GLOBALS._events.getCursor() == CURSOR_EXIT) { + BF_GLOBALS._events.setCursor(_cursorId); + } + } +} + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 5c98184ed8..963f8b25a8 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -25,6 +25,7 @@ #include "common/scummsys.h" #include "tsage/blue_force/blueforce_logic.h" +#include "tsage/blue_force/blueforce_speakers.h" #include "tsage/converse.h" #include "tsage/events.h" #include "tsage/core.h" @@ -96,6 +97,90 @@ public: virtual void process(Event &event); }; +class Scene60 : public SceneExt { + /* Items */ + class Item2: public NamedHotspot { + private: + bool check1(); + bool check2(); + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item3: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Radio: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Compartment: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Objects */ + class MirandaCard: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class TicketBook: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class CompartmentDoor: public NamedObject { + public: + bool _flag; + virtual bool startAction(CursorType action, Event &event); + }; + + /* Actions */ + class Action1: public ActionExt { + private: + int useRadio(); + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + class Action3: public Action { + public: + virtual void signal(); + }; +public: + SequenceManager _sequenceManager; + Action1 _action1; + Action2 _action2; + Action3 _action3; + NamedObject _object1; + MirandaCard _mirandaCard; + TicketBook _ticketBook; + CompartmentDoor _compartmentDoor; + SceneObject _dashboard; + AltSceneObject _car; + NamedHotspot _item1; + Item2 _item2; + Item3 _item3; + Radio _radio; + Compartment _compartment; + SpeakerGameText _gameTextSpeaker; + SpeakerJakeRadio _jakeRadioSpeaker; + ASound _sound; + int _newScene; + int _sceneNumber; + int _visage; + CursorType _cursorId; + bool _field1222; + + Scene60(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 650b63c24b..b4e41c20e3 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -176,7 +176,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) { _globals->_player.disableControl(); _index = 109; - if (BF_GLOBALS._v4CEA2 < 6) { + if (BF_GLOBALS._dayNumber < 6) { // Title loadScene(100); BF_GLOBALS._sound1.play(2); @@ -191,7 +191,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) { void Scene100::signal() { ++_sceneMode; - if (BF_GLOBALS._v4CEA2 < 6) { + if (BF_GLOBALS._dayNumber < 6) { BF_GLOBALS._scenePalette.clearListeners(); BF_GLOBALS._scenePalette.loadPalette(100); BF_GLOBALS._sceneManager.changeScene(_index); @@ -346,11 +346,11 @@ void Scene109::Text::dispatch() { /*--------------------------------------------------------------------------*/ -Scene109::Scene109(): GameScene() { +Scene109::Scene109(): GroupedScene() { } void Scene109::postInit(SceneObjectList *OwnerList) { - GameScene::postInit(OwnerList); + GroupedScene::postInit(OwnerList); loadScene(999); _protaginist2.postInit(); @@ -427,6 +427,281 @@ void Scene109::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 190 - Front of Police Station + * + *--------------------------------------------------------------------------*/ + +bool Scene190::Object4::startAction(CursorType action, Event &event) { + Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: { + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 13; + Common::Point pt(62, 96); + PlayerMover *mover = new PlayerMover(); + BF_GLOBALS._player.addMover(mover, &pt, scene); + return true; + } + default: + return NamedObject::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +bool Scene190::Item1::startAction(CursorType action, Event &event) { + Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + scene->setAction(&scene->_action1); + return true; + default: + return NamedHotspot::startAction(action, event); + } +} + +bool Scene190::Item2::startAction(CursorType action, Event &event) { + Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + scene->_stripManager.start(1900, scene); + return true; + default: + return NamedHotspot::startAction(action, event); + } +} + +bool Scene190::Exit::startAction(CursorType action, Event &event) { + Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; + + Common::Point pt(316, 91); + PlayerMover *mover = new PlayerMover(); + BF_GLOBALS._player.addMover(mover, &pt, scene); + return true; +} + +/*--------------------------------------------------------------------------*/ + +void Scene190::Action1::signal() { + Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + setDelay(2); + break; + case 1: { + ADD_MOVER(BF_GLOBALS._player, 165, 91); + break; + } + case 2: + scene->_sound.play(82); + scene->_object2.animate(ANIM_MODE_5, this); + break; + case 3: + ADD_MOVER(BF_GLOBALS._player, 180, 86); + break; + case 4: + scene->_sound.play(82); + scene->_object2.animate(ANIM_MODE_6, this); + break; + case 5: + BF_GLOBALS._sound1.fadeOut2(NULL); + BF_GLOBALS._sceneManager.changeScene(315); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene190::Scene190(): SceneExt() { + _fieldB52 = true; + _cursorVisage.setVisage(1, 8); +} + +void Scene190::postInit(SceneObjectList *OwnerList) { + BF_GLOBALS._dialogCenter.y = 100; + if ((BF_GLOBALS._sceneManager._previousScene == 100) || + (BF_GLOBALS._sceneManager._previousScene == 20)) { +// clearScreen(); + } + if (BF_GLOBALS._dayNumber == 0) + // If at start of game, change to first day + BF_GLOBALS._dayNumber = 1; + + // Load the scene data + loadScene(190); + BF_GLOBALS._scenePalette.loadPalette(2); + + _stripManager.addSpeaker(&_speaker); + BF_GLOBALS._player.postInit(); + BF_GLOBALS._player.disableControl(); + + // Initialise objects + _object2.postInit(); + _object2.setVisage(190); + _object2.setStrip(1); + _object2.setPosition(Common::Point(179, 88)); + + _object3.postInit(); + _object3.setVisage(190); + _object3.setStrip(2); + _object3.fixPriority(200); + _object3.setPosition(Common::Point(170, 31)); + _object3.animate(ANIM_MODE_7, 0, NULL); + _object3.setDetails(190, 8, 26, 19, 1, NULL); + + if (BF_GLOBALS.getFlag(fWithLyle)) { + BF_GLOBALS._player.setVisage(303); + BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); + BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); + BF_GLOBALS._player._moveDiff = Common::Point(3, 1); + + _object4.postInit(); + _object4.setVisage(444); + _object4.setFrame(2); + _object4.setPosition(Common::Point(54, 114)); + _object4.setDetails(190, -1, -1, -1, 1, NULL); + + switch (BF_GLOBALS._sceneManager._previousScene) { + case 300: { + _sceneMode = 12; + BF_GLOBALS._player.setPosition(Common::Point(316, 91)); + ADD_MOVER(BF_GLOBALS._player, 305, 91); + break; + } + case 315: + _sceneMode = 1901; + setAction(&_sequenceManager, this, 1901, &BF_GLOBALS._player, &_object2, NULL); + break; + case 50: + case 60: + default: + _fieldB52 = false; + BF_GLOBALS._player.setPosition(Common::Point(62, 96)); + BF_GLOBALS._player._strip = 3; + BF_GLOBALS._player.enableControl(); + break; + } + } else { + BF_GLOBALS._player.setVisage(BF_GLOBALS._player._visage); + BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); + BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + switch (BF_GLOBALS._sceneManager._previousScene) { + case 300: { + if (!BF_GLOBALS.getFlag(onBike)) { + BF_GLOBALS._player._moveDiff = Common::Point(3, 1); + _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 11 : 12; + BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1304 : 303); + BF_GLOBALS._player.setPosition(Common::Point(316, 91)); + ADD_MOVER(BF_GLOBALS._player, 305, 91); + } else { + BF_GLOBALS._player.disableControl(); + _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 193 : 191; + setAction(&_sequenceManager, this, 193, &BF_GLOBALS._player, NULL); + } + break; + } + case 315: + BF_GLOBALS._player._moveDiff = Common::Point(3, 1); + _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 1900 : 1901; + setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_object2, NULL); + break; + case 50: + case 60: + default: + BF_GLOBALS.setFlag(onBike); + BF_GLOBALS._player.disableControl(); + _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 192 : 190; + setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL); + break; + } + } + + if (BF_GLOBALS.getFlag(onBike)) { + BF_GLOBALS._sound1.play(BF_GLOBALS.getFlag(onDuty) ? 37 : 29); + } else if (BF_GLOBALS._sceneManager._previousScene != 300) { + BF_GLOBALS._sound1.play(33); + } + + _exit.setDetails(Rect(310, 50, 320, 125), 190, -1, -1, -1, 1, NULL); + _item2.setDetails(Rect(108, 1, 111, 94), 190, 7, 11, 18, 1, NULL); + _item4.setDetails(2, 190, 5, 10, 16, 1); + _item3.setDetails(1, 190, 4, 10, 15, 1); + _item8.setDetails(6, 190, 20, 21, 22, 1); + _item1.setDetails(7, 190, 1, 10, -1, 1); + _item7.setDetails(5, 190, 0, 10, 12, 1); + _item6.setDetails(4, 190, 2, 10, 13, 1); + _item5.setDetails(3, 190, 3, 10, 14, 1); + _item9.setDetails(Rect(0, 0, 89, 68), 190, 6, 10, 17, 1, NULL); + _item10.setDetails(Rect(0, 0, SCREEN_WIDTH, BF_INTERFACE_Y), 190, 23, -1, -1, 1, NULL); +} + +void Scene190::signal() { + switch (_sceneMode) { + case 10: + if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne)) + BF_GLOBALS._sound1.changeSound(49); + BF_GLOBALS._sceneManager.changeScene(300); + break; + case 11: + case 12: + case 1900: + case 1901: + BF_GLOBALS._player.enableControl(); + _fieldB52 = false; + break; + case 13: + case 191: + case 193: + BF_GLOBALS._sceneManager.changeScene(60); + break; + case 190: + case 192: + BF_GLOBALS._sceneManager.changeScene(300); + break; + case 0: + default: + BF_GLOBALS._player.enableControl(); + break; + } +} + +void Scene190::process(Event &event) { + SceneExt::process(event); + + if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) { + // Check if the cursor is on an exit + if (_exit.contains(event.mousePos)) { + GfxSurface surface = _cursorVisage.getFrame(3); + BF_GLOBALS._events.setCursor(surface); + } else { + // In case an exit cursor was being shown, restore the previously selected cursor + CursorType cursorId = BF_GLOBALS._events.getCursor(); + BF_GLOBALS._events.setCursor(cursorId); + } + } +} + +void Scene190::dispatch() { + SceneExt::dispatch(); + + if (!_action && !_fieldB52 && (BF_GLOBALS._player._position.x >= 310) + && !BF_GLOBALS.getFlag(onBike)) { + // Handle walking off to the right side of the screen + BF_GLOBALS._player.disableControl(); + _fieldB52 = true; + _sceneMode = 10; + + ADD_MOVER(BF_GLOBALS._player, 330, BF_GLOBALS._player._position.y); + } +} + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 0769c6e3c6..3028dcc9f9 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -71,7 +71,7 @@ public: Action1 _action1; Action2 _action2; ScenePalette _scenePalette; - SceneObjectExt2 _object1, _object2, _object3, _object4, _object5; + NamedObject _object1, _object2, _object3, _object4, _object5; int _index; Scene100(); @@ -79,7 +79,7 @@ public: virtual void signal(); }; -class Scene109: public GameScene { +class Scene109: public GroupedScene { /* Actions */ class Action1: public Action { public: @@ -115,7 +115,6 @@ public: SceneObject _object1, _object2, _protaginist2, _protaginist1, _object5; SceneObject _drunk, _object7, _bartender, _object9, _object10; Text _text; - BlueAnimatedSpeaker _speaker; Action1 _action1; Action _action2, _action3; public: @@ -125,6 +124,58 @@ public: virtual void signal(); }; +class Scene190: public SceneExt { + /* Objects */ + class Object4: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Items */ + class Item1: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item2: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Exit: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; +public: + SequenceManager _sequenceManager; + FollowerObject _object1; + NamedObject _object2, _object3; + Object4 _object4; + Item1 _item1; + Item2 _item2; + NamedHotspot _item3, _item4, _item5, _item6; + NamedHotspot _item7, _item8, _item9, _item10; + Exit _exit; + Action1 _action1; + ASoundExt _sound; + SpeakerGameText _speaker; + bool _fieldB52; + + Scene190(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void synchronize(Serializer &s) { + SceneExt::synchronize(s); + s.syncAsSint16LE(_fieldB52); + } +}; + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp new file mode 100644 index 0000000000..cfed3fab11 --- /dev/null +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -0,0 +1,1445 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/config-manager.h" +#include "tsage/blue_force/blueforce_scenes3.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" +#include "tsage/globals.h" + +namespace TsAGE { + +namespace BlueForce { + +/*-------------------------------------------------------------------------- + * Scene 300 - Outside Police Station + * + *--------------------------------------------------------------------------*/ + +bool Scene300::Object::startAction(CursorType action, Event &event) { + if (action == CURSOR_TALK) { + Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; + scene->_stripManager.start(_stripNumber, scene); + return true; + } else { + return NamedObject::startAction(action, event); + } +} + +bool Scene300::Object19::startAction(CursorType action, Event &event) { + if ((action != CURSOR_USE) || !BF_GLOBALS.getFlag(onDuty)) { + return NamedObject::startAction(action, event); + } else if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark >= bEndDayOne)) { + Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; + setAction(&scene->_action4); + } else { + SceneItem::display2(300, 33); + } + + return true; +} + +bool Scene300::Item1::startAction(CursorType action, Event &event) { + if (action == CURSOR_USE) { + Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 305; + scene->setAction(&scene->_sequenceManager1, scene, 305, &BF_GLOBALS._player, + &scene->_object8, NULL); + return true; + } else { + return NamedHotspot::startAction(action, event); + } +} + +bool Scene300::Item2::startAction(CursorType action, Event &event) { + if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) { + Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; + scene->setAction(&scene->_sequenceManager1, scene, 304, &scene->_object11, NULL); + return true; + } else { + return NamedHotspot::startAction(action, event); + } +} + +bool Scene300::Item14::startAction(CursorType action, Event &event) { + ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 151, 54); + return true; +} + +bool Scene300::Item15::startAction(CursorType action, Event &event) { + ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 316, 90); + return true; +} + +/*--------------------------------------------------------------------------*/ + +void Scene300::Action1::signal() { + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + setDelay(1); + break; + case 1: + if (BF_GLOBALS.getFlag(fWithLyle)) + SceneItem::display2(666, 27); + else + SceneItem::display2(300, 0); + setDelay(1); + break; + case 2: { + ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 8, + BF_GLOBALS._player._position.y); + break; + } + case 3: + BF_GLOBALS._player.enableControl(); + remove(); + break; + default: + break; + } +} + +void Scene300::Action2::signal() { + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + setDelay(1); + break; + case 1: + SceneItem::display2(300, 28); + setDelay(1); + break; + case 2: { + ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 8, + BF_GLOBALS._player._position.y); + break; + } + case 3: + BF_GLOBALS._player.enableControl(); + remove(); + break; + default: + break; + } +} + +void Scene300::Action3::signal() { + Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + setDelay(1); + break; + case 1: + BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 306, &BF_GLOBALS._player, + &scene->_object8, NULL); + break; + case 2: + SceneItem::display2(300, 35); + setDelay(1); + break; + case 3: + BF_GLOBALS._player.enableControl(); + remove(); + break; + default: + break; + } +} + +void Scene300::Action4::signal() { + Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + setDelay(1); + break; + case 1: + setAction(&scene->_sequenceManager1, this, 316, &BF_GLOBALS._player, &scene->_object19, NULL); + break; + case 2: + BF_GLOBALS._sceneManager.changeScene(60); + break; + case 3: + setAction(&scene->_sequenceManager1, this, 319, &scene->_object19, NULL); + break; + case 4: + BF_GLOBALS.setFlag(2); + BF_GLOBALS._sceneManager.changeScene(190); + break; + default: + break; + } +} + +void Scene300::Action5::signal() { + Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + scene->_field2760 = 1; + setDelay(1); + break; + case 1: + setAction(&scene->_sequenceManager1, this, 1306, &scene->_object1, &scene->_object8, NULL); + break; + case 2: + scene->_stripManager.start(3004, this); + break; + case 3: { + ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 186, 140); + break; + } + case 4: + remove(); + break; + default: + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene300::Scene300(): SceneExt(), _object13(3000), _object14(3001), _object15(3002), + _object16(3003) { + _field2760 = _field2762 = 0; +} + +void Scene300::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(300); + + // Add the speakers + _stripManager.addSpeaker(&_gameTextSpeaker); + _stripManager.addSpeaker(&_sutterSpeaker); + _stripManager.addSpeaker(&_dougSpeaker); + _stripManager.addSpeaker(&_jakeSpeaker); + + _field2762 = 0; + _item14.setDetails(Rect(144, 27, 160, 60), 300, -1, -1, -1, 1, NULL); + _item15.setDetails(Rect(310, 76, SCREEN_WIDTH, 105), 300, -1, -1, -1, 1, NULL); + + // Setup the player + int playerVisage = BF_GLOBALS._player._visage; + BF_GLOBALS._player.postInit(); + BF_GLOBALS._player.setVisage(playerVisage); + BF_GLOBALS._player.setStrip(3); + BF_GLOBALS._player.setPosition(Common::Point(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)); + BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); + BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); + BF_GLOBALS._player._moveDiff = Common::Point(3, 1); + BF_GLOBALS._player.disableControl(); + + _object8.postInit(); + _object8.setVisage(301); + _object8.setStrip(2); + _object8.setPosition(Common::Point(300, 77)); + + if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark < bEndDayOne)) { + _object17.postInit(); + _object17.setVisage(301); + _object17.setStrip(1); + _object17.setPosition(Common::Point(87, 88)); + _object17.setDetails(300, 11, 13, 2, 1, NULL); + + _object18.postInit(); + _object18.setVisage(301); + _object18.setStrip(1); + _object18.setPosition(Common::Point(137, 92)); + _object18.setDetails(300, 11, 13, 3, 1, NULL); + } + + _object19.postInit(); + _object19.setVisage(301); + _object19.setStrip(1); + _object19.setPosition(Common::Point(175, 99)); + _object19.setDetails(300, 11, 13, 34, 1, NULL); + + _object11.postInit(); + _object11.setVisage(301); + _object11.setStrip(8); + _object11.setPosition(Common::Point(265, 91)); + _object11.hide(); + + switch (BF_GLOBALS._sceneManager._previousScene) { + case 50: + case 60: + BF_GLOBALS.clearFlag(onBike); + if (BF_GLOBALS.getFlag(onDuty)) { + BF_GLOBALS._player.disableControl(); + _sceneMode = 318; + setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL); + } else { + BF_GLOBALS._player.disableControl(); + _sceneMode = 300; + setAction(&_sequenceManager1, this, 1300, &BF_GLOBALS._player, NULL); + } + break; + case 190: + _sceneMode = 0; + if (!BF_GLOBALS.getFlag(2)) { + _sceneMode = 7308; + BF_GLOBALS._player.setPosition(Common::Point(175, 50)); + ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 123, 71); + + if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne)) + setup(); + } else if (!BF_GLOBALS.getFlag(3)) { + BF_GLOBALS._player.disableControl(); + _sceneMode = 300; + setAction(&_sequenceManager1, this, 300, &BF_GLOBALS._player, NULL); + } else { + BF_GLOBALS._player.disableControl(); + _sceneMode = 318; + setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL); + } + break; + case 315: + BF_GLOBALS._player.setPosition(Common::Point(305, 66)); + if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark >= bEndDayOne)) { + BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1304 : 303); + BF_GLOBALS._player.disableControl(); + _sceneMode = 0; + setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL); + } else { + BF_GLOBALS._player.setVisage(1304); + setup(); + BF_GLOBALS._player.disableControl(); + _sceneMode = 0; + setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL); + } + break; + default: + _sceneMode = 0; + BF_GLOBALS._player.setVisage(1304); + BF_GLOBALS._player.disableControl(); + setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL); + break; + } + + _item10.setDetails(4, 300, 7, 13, 16, 1); + _item11.setDetails(2, 300, 9, 13, 18, 1); + _item12.setDetails(5, 300, 10, 13, 19, 1); + _item13.setDetails(3, 300, 25, 26, 27, 1); + _item2.setDetails(Rect(266, 54, 272, 59), 300, -1, -1, -1, 1, NULL); + _item1.setDetails(Rect(262, 47, 299, 76), 300, 1, 13, -1, 1, NULL); + _item4.setDetails(Rect(0, 85, SCREEN_WIDTH - 1, BF_INTERFACE_Y - 1), 300, 6, 13, 15, 1, NULL); + _item7.setDetails(Rect(219, 46, 251, 74), 300, 22, 23, 24, 1, NULL); + _item8.setDetails(Rect(301, 53, 319, 78), 300, 22, 23, 24, 1, NULL); + _item5.setDetails(Rect(179, 44, 200, 55), 300, 8, 13, 17, 1, NULL); + _item6.setDetails(Rect(210, 46, 231, 55), 300, 8, 13, 17, 1, NULL); + _item3.setDetails(Rect(160, 0, SCREEN_WIDTH - 1, 75), 300, 4, 13, 14, 1, NULL); + _item9.setDetails(Rect(0, 0, SCREEN_WIDTH, BF_INTERFACE_Y), 300, 29, 30, 31, 1, NULL); +} + +void Scene300::signal() { + switch (_sceneMode) { + case 300: + BF_GLOBALS._sound1.fadeSound(33); + BF_GLOBALS.clearFlag(onBike); + _sceneMode = 0; + + if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark != bNone)) { + signal(); + } else { + _stripManager.start(3005, this); + } + break; + case 301: + if (_field2760) { + _sceneMode = 1302; + signal(); + } else { + BF_GLOBALS._player.disableControl(); + _sceneMode = 1302; + setAction(&_sequenceManager1, this, 306, &_object1, &_object8, NULL); + } + + _object12.show(); + _object5.dispatch(); + BF_GLOBALS._player.hide(); + break; + case 303: + BF_GLOBALS._player.disableControl(); + _sceneMode = 2307; + setAction(&_sequenceManager1, this, 303, &_object13, &_object1, NULL); + break; + case 305: + if ((BF_GLOBALS._dayNumber == 4) || (BF_GLOBALS._dayNumber == 5)) { + _sceneMode = 0; + setAction(&_action3); + } else { + BF_GLOBALS._sound1.fadeOut2(NULL); + BF_GLOBALS._sceneManager.changeScene(315); + } + break; + case 309: + BF_GLOBALS._player.disableControl(); + _sceneMode = 3307; + setAction(&_sequenceManager1, this, 309, &_object14, &_object1, NULL); + break; + case 310: + BF_GLOBALS._player.disableControl(); + _sceneMode = 4307; + setAction(&_sequenceManager1, this, 310, &_object12, &_object1, NULL); + break; + case 311: + BF_GLOBALS._player.disableControl(); + _sceneMode = 5307; + setAction(&_sequenceManager1, this, 311, &_object15, &_object1, NULL); + break; + case 312: + case 5307: + BF_GLOBALS._player.disableControl(); + _sceneMode = 1305; + setAction(&_sequenceManager1, this, 312, &_object1, &_object16, NULL); + break; + case 317: + BF_GLOBALS.setFlag(2); + BF_GLOBALS._sceneManager.changeScene(60); + break; + case 318: + BF_GLOBALS.clearFlag(onBike); + _sceneMode = 0; + signal(); + break; + case 1302: + _field2762 = 0; + BF_GLOBALS._player.disableControl(); + _sceneMode = 1308; + setAction(&_sequenceManager1, this, 302, &_object1, NULL); + break; + case 1305: + BF_GLOBALS._player.disableControl(); + _sceneMode = 1313; + setAction(&_sequenceManager1, this, 305, &_object1, &_object8, NULL); + BF_GLOBALS._player.show(); + _object12.hide(); + break; + case 1307: + case 2308: + BF_GLOBALS._player.disableControl(); + _sceneMode = 303; + setAction(&_sequenceManager1, this, 308, &_object14, NULL); + break; + case 1308: + BF_GLOBALS._player.disableControl(); + _sceneMode = 1307; + setAction(&_sequenceManager1, this, 308, &_object13, NULL); + break; + case 1313: + BF_GLOBALS._player.disableControl(); + _sceneMode = 0; + _object15.setAction(&_sequenceManager4, NULL, 315, &_object15, &_object16, NULL); + _object13.setAction(&_sequenceManager2, NULL, 313, &_object13, &_object17, NULL); + _object14.setAction(&_sequenceManager3, this, 314, &_object14, &_object18, NULL); + + BF_GLOBALS._bookmark = bEndDayOne; + BF_GLOBALS._sound1.changeSound(33); + break; + case 2307: + case 3308: + BF_GLOBALS._player.disableControl(); + _sceneMode = 309; + setAction(&_sequenceManager1, this, 308, &_object12, NULL); + break; + case 3307: + _object9.postInit(); + _object9.hide(); + _object10.postInit(); + _object10.hide(); + + if (BF_GLOBALS.getFlag(1)) { + BF_GLOBALS._player.disableControl(); + _sceneMode = 4308; + setAction(&_sequenceManager1, this, 6307, &_object2, &_object1, &_object9, &_object10, NULL); + } else { + BF_GLOBALS._player.disableControl(); + _sceneMode = 4308; + setAction(&_sequenceManager1, this, 7307, &_object12, &_object1, &_object9, &_object10, NULL); + } + break; + case 4307: + case 5308: + BF_GLOBALS._player.disableControl(); + _sceneMode = 311; + setAction(&_sequenceManager1, this, 308, &_object16, NULL); + break; + case 4308: + BF_GLOBALS._player.disableControl(); + _sceneMode = 310; + setAction(&_sequenceManager1, this, 308, &_object15, NULL); + break; + case 6308: + BF_GLOBALS._sceneManager.changeScene(190); + break; + case 7308: + if (_field2762) { + BF_GLOBALS._player.disableControl(); + _sceneMode = 301; + setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL); + } else { + BF_GLOBALS._player.enableControl(); + } + break; + case 0: + default: + if (_field2762) { + BF_GLOBALS._player.disableControl(); + _sceneMode = 301; + setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL); + } else { + BF_GLOBALS._player.enableControl(); + } + break; + } +} + +void Scene300::process(Event &event) { + SceneExt::process(event); + + if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) { + // Check if the cursor is on an exit + if (_item14.contains(event.mousePos)) { + GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NE); + BF_GLOBALS._events.setCursor(surface); + } else if (_item15.contains(event.mousePos)) { + GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_E); + BF_GLOBALS._events.setCursor(surface); + } else { + // In case an exit cursor was being shown, restore the previously selected cursor + CursorType cursorId = BF_GLOBALS._events.getCursor(); + BF_GLOBALS._events.setCursor(cursorId); + } + } +} + +void Scene300::dispatch() { + SceneExt::dispatch(); + + if (!_action) { + int regionIndex = BF_GLOBALS._player.getRegionIndex(); + if ((regionIndex == 1) && (_field2762 == 1)) { + BF_GLOBALS._player.disableControl(); + _sceneMode = 301; + setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL); + } + + if ((BF_GLOBALS._player._position.y < 59) && (BF_GLOBALS._player._position.x > 137) && + (_sceneMode != 6308) && (_sceneMode != 7308)) { + BF_GLOBALS._v4CEA4 = 3; + _sceneMode = 6308; + BF_GLOBALS._player.disableControl(); + ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 20, + BF_GLOBALS._player._position.y - 5); + } + + if (BF_GLOBALS._player._position.x <= 5) + setAction(&_action2); + + if (BF_GLOBALS._player._position.x >= 315) { + if (BF_GLOBALS.getFlag(onDuty) || (BF_GLOBALS._bookmark == bNone) || !BF_GLOBALS.getFlag(fWithLyle)) { + setAction(&_action1); + } else { + BF_GLOBALS._player.disableControl(); + _sceneMode = 317; + setAction(&_sequenceManager1, this, 1301, &BF_GLOBALS._player, NULL); + } + } + } +} + +void Scene300::setup() { + _object13.postInit(); + _object13.setVisage(307); + _object13.setStrip(6); + _object13.setPosition(Common::Point(156, 134)); + _object13._moveDiff = Common::Point(3, 1); + _object3.setup(&_object13, 306, 1, 29); + + _object14.postInit(); + _object14.setVisage(307); + _object14.setStrip(6); + _object14.setPosition(Common::Point(171, 137)); + _object14._moveDiff = Common::Point(3, 1); + _object4.setup(&_object14, 306, 2, 29); + + _object12.postInit(); + _object12.setVisage(307); + _object12.setStrip(6); + _object12.setPosition(Common::Point(186, 140)); + _object12._moveDiff = Common::Point(3, 1); + _object5.setup(&_object12, 306, 2, 29); + _object12.hide(); + + _object15.postInit(); + _object15.setVisage(307); + _object15.setStrip(6); + _object15.setPosition(Common::Point(201, 142)); + _object15._moveDiff = Common::Point(3, 1); + _object6.setup(&_object15, 306, 3, 29); + + _object16.postInit(); + _object16.setVisage(307); + _object16.setStrip(6); + _object16.setPosition(Common::Point(216, 145)); + _object16._moveDiff = Common::Point(3, 1); + _object7.setup(&_object16, 306, 1, 29); + + _object1.postInit(); + _object1.setVisage(307); + _object1.setStrip(6); + _object1.setPosition(Common::Point(305, 66)); + _object1._moveDiff = Common::Point(3, 1); + _object1.setObjectWrapper(new SceneObjectWrapper()); + _object1.animate(ANIM_MODE_1, NULL); + _object2.setup(&_object1, 306, 4, 9); + + BF_GLOBALS._sceneItems.addItems(&_object13, &_object14, &_object15, &_object16, NULL); + _timer.set(3600, this, &_action5); + + _field2760 = 0; + _field2762 = 1; +} + +/*-------------------------------------------------------------------------- + * Scene 315 - Inside Police Station + * + *--------------------------------------------------------------------------*/ + +bool Scene315::Item1::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + scene->_currentCursor = action; + + switch (action) { + case CURSOR_USE: + if (scene->_field1B60 || scene->_field1B64) + SceneItem::display2(320, 51); + else + NamedHotspot::startAction(action, event); + break; + case CURSOR_TALK: + if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._sceneManager._previousScene == 325)) + NamedHotspot::startAction(action, event); + else { + if (!BF_GLOBALS.getFlag(onDuty)) + scene->_stripNumber = 3172; + else if (BF_GLOBALS.getFlag(fTalkedToBarry)) + scene->_stripNumber = 3166; + else if (BF_GLOBALS.getFlag(fTalkedToLarry)) + scene->_stripNumber = 3164; + else + scene->_stripNumber = 3165; + + scene->setAction(&scene->_action1); + BF_GLOBALS.setFlag(fTalkedToBarry); + } + break; + case INV_GREENS_GUN: + case INV_GREENS_KNIFE: + BF_GLOBALS._player.disableControl(); + if (BF_INVENTORY._bookingGreen._sceneNumber != 390) { + scene->_stripNumber = 3174; + scene->setAction(&scene->_action1); + } else { + ++scene->_field1B62; + scene->_stripNumber = (action == INV_GREENS_GUN) ? 3168 : 0; + scene->_sceneMode = 3152; + scene->setAction(&scene->_sequenceManager, scene, 3153, 1888, NULL); + } + break; + case INV_FOREST_RAP: + BF_GLOBALS._player.disableControl(); + scene->_stripNumber = BF_GLOBALS.getFlag(onDuty) ? 3178 : 3173; + scene->setAction(&scene->_action1); + break; + case INV_GREEN_ID: + case INV_FRANKIE_ID: + case INV_TYRONE_ID: + BF_GLOBALS._player.disableControl(); + scene->_stripNumber = 3175; + scene->setAction(&scene->_action1); + break; + case INV_BOOKING_GREEN: + case INV_BOOKING_FRANKIE: + case INV_BOOKING_GANG: + BF_GLOBALS._player.disableControl(); + scene->_stripNumber = 3167; + scene->setAction(&scene->_action1); + break; + case INV_COBB_RAP: + if (BF_INVENTORY._mugshot._sceneNumber == 1) + NamedHotspot::startAction(action, event); + else { + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 3169; + if (BF_GLOBALS._dayNumber > 2) + scene->_stripNumber = 3176; + else if (BF_GLOBALS.getFlag(onDuty)) + scene->_stripNumber = 3177; + else + scene->_stripNumber = 3170; + scene->setAction(&scene->_action1); + } + break; + case INV_22_BULLET: + case INV_AUTO_RIFLE: + case INV_WIG: + case INV_22_SNUB: + BF_GLOBALS._player.disableControl(); + if ((BF_GLOBALS.getFlag(fCuffedFrankie) && (BF_INVENTORY._bookingFrankie._sceneNumber == 0)) || + (!BF_GLOBALS.getFlag(fCuffedFrankie) && (BF_INVENTORY._bookingGang._sceneNumber == 0))) { + scene->_stripNumber = 3174; + scene->setAction(&scene->_action1); + } else { + if (!scene->_field1B6C & (scene->_field1B66 == 1)) { + scene->_field1B6C = 1; + scene->_stripNumber = 3169; + } else { + scene->_stripNumber = 0; + } + + scene->_sceneMode = 3153; + scene->setAction(&scene->_sequenceManager, scene, 3153, &BF_GLOBALS._player, NULL); + } + break; + default: + return NamedHotspot::startAction(action, event); + } + + return true; +} + +bool Scene315::Item2::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case INV_GREENS_GUN: + case INV_22_BULLET: + case INV_AUTO_RIFLE: + case INV_WIG: + case INV_22_SNUB: + SceneItem::display2(315, 30); + break; + case INV_GREEN_ID: + case INV_FRANKIE_ID: + case INV_TYRONE_ID: + BF_GLOBALS._player.disableControl(); + scene->_stripNumber = 3175; + scene->setAction(&scene->_action1); + break; + case INV_BOOKING_GREEN: + case INV_BOOKING_FRANKIE: + case INV_BOOKING_GANG: + if (action == INV_BOOKING_GREEN) + ++scene->_field1B62; + else + ++scene->_field1B66; + + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 12; + scene->setAction(&scene->_sequenceManager, scene, 3154, &BF_GLOBALS._player, NULL); + break; + default: + return NamedHotspot::startAction(action, event); + } + + return true; +} + +bool Scene315::Item4::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + if (action == CURSOR_LOOK) { + BF_GLOBALS._player.disableControl(); + BF_GLOBALS._player.addMover(NULL); + scene->_object9.postInit(); + scene->_object9.hide(); + scene->_sceneMode = 3167; + scene->setAction(&scene->_sequenceManager, scene, 3167, &scene->_object9, this, NULL); + return true; + } else { + return NamedHotspot::startAction(action, event); + } +} + +bool Scene315::Item5::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + if (action == CURSOR_LOOK) { + BF_GLOBALS._player.addMover(NULL); + scene->_stripManager.start(3154, &BF_GLOBALS._stripProxy); + return true; + } else { + return NamedHotspot::startAction(action, event); + } +} + +bool Scene315::Item14::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + if ((action == INV_COLT45) && BF_GLOBALS.getFlag(onDuty)) { + if (!BF_GLOBALS.getFlag(onDuty)) + SceneItem::display2(315, 27); + else if (BF_GLOBALS.getHasBullets()) { + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 3162; + scene->setAction(&scene->_sequenceManager, scene, 3162, &BF_GLOBALS._player, NULL); + } else if (BF_GLOBALS.getFlag(fGunLoaded)) + SceneItem::display2(315, 46); + else { + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 3159; + scene->setAction(&scene->_sequenceManager, scene, 3159, &BF_GLOBALS._player, NULL); + } + return true; + } else { + return NamedHotspot::startAction(action, event); + } +} + +bool Scene315::Item15::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return NamedHotspot::startAction(action, event); + else if (BF_INVENTORY._forestRap._sceneNumber == 1) { + SceneItem::display2(315, 37); + return true; + } else { + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 3158; + scene->setAction(&scene->_sequenceManager, scene, 3158, &BF_GLOBALS._player, NULL); + return true; + } +} + +bool Scene315::Item16::startAction(CursorType action, Event &event) { + ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 190, 75); + return true; +} + +bool Scene315::Item17::startAction(CursorType action, Event &event) { + ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, event.mousePos.x, event.mousePos.y); + return true; +} + +/*--------------------------------------------------------------------------*/ + +bool Scene315::Object1::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + scene->_stripManager.start(3157, &BF_GLOBALS._stripProxy); + return true; + case CURSOR_USE: + if (!BF_GLOBALS.getFlag(fGotPointsForCleaningGun)) { + BF_GLOBALS._uiElements.addScore(10); + BF_GLOBALS.setFlag(fGotPointsForCleaningGun); + } + BF_GLOBALS._player.addMover(NULL); + scene->_stripManager.start(3159, &BF_GLOBALS._stripProxy); + return true; + default: + return NamedObject::startAction(action, event); + break; + } +} + +bool Scene315::Object2::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + BF_GLOBALS._player.disableControl(); + scene->_object9.postInit(); + scene->_object9.hide(); + scene->_sceneMode = 3157; + scene->setAction(&scene->_sequenceManager, scene, 3157, &BF_GLOBALS._player, &scene->_object9, NULL); + return true; + case CURSOR_USE: + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 3156; + scene->setAction(&scene->_sequenceManager, scene, BF_GLOBALS.getFlag(onDuty) ? 3156 : 3168, + &BF_GLOBALS._player, this, NULL); + return true; + default: + return NamedObject::startAction(action, event); + } +} + +bool Scene315::Object3::startAction(CursorType action, Event &event) { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + BF_GLOBALS._player.addMover(NULL); + scene->_stripManager.start(3156, &BF_GLOBALS._stripProxy); + return true; + case CURSOR_USE: + if (!BF_GLOBALS.getFlag(fGotPointsForMemo)) { + BF_GLOBALS._uiElements.addScore(30); + BF_GLOBALS.setFlag(fGotPointsForMemo); + } + + BF_GLOBALS._player.addMover(NULL); + scene->_stripManager.start(3158, &BF_GLOBALS._stripProxy); + return true; + default: + return NamedObject::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene315::Action1::signal() { + Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.disableControl(); + ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 128, 128); + break; + case 1: + BF_GLOBALS._player.changeAngle(315); + setDelay(2); + break; + case 2: + scene->_stripManager.start(scene->_stripNumber, this); + break; + case 3: + if (scene->_sceneMode == 3169) { + BF_GLOBALS._uiElements.addScore(30); + BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1); + } + + remove(); + BF_GLOBALS._player.enableControl(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene315::Scene315() { + BF_GLOBALS._v51C44 = 1; + _field1B6C = _field139C = 0; + if (BF_GLOBALS._dayNumber == 0) + BF_GLOBALS._dayNumber = 1; + + BF_GLOBALS.clearFlag(fCanDrawGun); + _field1B68 = true; + _field1B6A = false; + _field1B60 = _field1B62 = 0; + _field1B64 = _field1B66 = 0; +} + +void Scene315::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field1390); + s.syncAsSint16LE(_stripNumber); + s.syncAsSint16LE(_field1398); + s.syncAsSint16LE(_field1B60); + s.syncAsSint16LE(_field1B62); + s.syncAsSint16LE(_field1B64); + s.syncAsSint16LE(_field1B66); + s.syncAsSint16LE(_field1B6C); + s.syncAsSint16LE(_field139C); + s.syncAsByte(_field1B68); + s.syncAsByte(_field1B6A); + s.syncAsSint16LE(_currentCursor); +} + +void Scene315::postInit(SceneObjectList *OwnerList) { + loadScene(315); + + if (BF_GLOBALS._sceneManager._previousScene != 325) + BF_GLOBALS._sound1.fadeSound(11); + + setZoomPercents(67, 72, 124, 100); + + _stripManager.addSpeaker(&_gameTextSpeaker); + _stripManager.addSpeaker(&_sutterSpeaker); + _stripManager.addSpeaker(&_harrisonSpeaker); + _stripManager.addSpeaker(&_jakeJacketSpeaker); + _stripManager.addSpeaker(&_jakeUniformSpeaker); + _stripManager.addSpeaker(&_jailerSpeaker); + + _object8.postInit(); + _object8.setVisage(315); + _object8.setPosition(Common::Point(272, 69)); + + if (BF_GLOBALS._bookmark >= bLauraToParamedics) { + _object3.postInit(); + _object3.setVisage(315); + _object3.setPosition(Common::Point(167, 53)); + _object3.setStrip(4); + _object3.setFrame(4); + _object3.fixPriority(82); + _object3.setDetails(315, -1, -1, -1, 1, NULL); + } + + if (BF_GLOBALS._dayNumber == 1) { + if (BF_GLOBALS._bookmark >= bLauraToParamedics) { + _object1.postInit(); + _object1.setVisage(315); + _object1.setPosition(Common::Point(156, 51)); + _object1.setStrip(4); + _object1.setFrame(2); + _object1.fixPriority(82); + _object1.setDetails(315, -1, -1, -1, 1, NULL); + } + } else if ((BF_INVENTORY._daNote._sceneNumber != 1) && (BF_GLOBALS._dayNumber < 3)) { + _object2.postInit(); + _object2.setVisage(315); + _object2.setStrip(3); + _object2.setFrame(2); + _object2.setPosition(Common::Point(304, 31)); + _object2.fixPriority(70); + _object2.setDetails(315, 3, 4, -1, 1, NULL); + } + + _item2.setDetails(12, 315, 35, -1, 36, 1); + _item5.setDetails(3, 315, -1, -1, -1, 1); + _item1.setDetails(4, 315, 10, 11, 12, 1); + _item3.setDetails(2, 315, 0, 1, 2, 1); + _item4.setDetails(Rect(190, 17, 208, 30), 315, -1, -1, -1, 1, NULL); + _item16.setDetails(Rect(184, 31, 211, 80), 315, -1, -1, -1, 1, NULL); + _item17.setDetails(Rect(0, 157, 190, 167), 315, -1, -1, -1, 1, NULL); + + if (!BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._bookmark == bNone) || (BF_GLOBALS._bookmark == bLyleStoppedBy))) { + _field1398 = 1; + BF_GLOBALS.setFlag(onDuty); + } else { + _field1398 = 0; + } + + BF_GLOBALS._player.postInit(); + BF_GLOBALS._player.changeZoom(-1); + BF_GLOBALS._player.disableControl(); + + if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._sceneManager._previousScene != 325)) { + _object4.postInit(); + _object4.setVisage(316); + _object4.setPosition(Common::Point(99, 82)); + _object4.fixPriority(95); + + _object5.postInit(); + _object5.setVisage(395); + _object5.setStrip(2); + _object5.setPosition(Common::Point(96, 86)); + } + + // Set up evidence objects in inventory + if (BF_INVENTORY._bookingGreen.inInventory()) + ++_field1B60; + if (BF_INVENTORY._greensGun.inInventory()) + ++_field1B60; + if (BF_INVENTORY._greensKnife.inInventory()) + ++_field1B60; + + if (BF_INVENTORY._bullet22.inInventory()) + ++_field1B64; + if (BF_INVENTORY._autoRifle.inInventory()) + ++_field1B64; + if (BF_INVENTORY._wig.inInventory()) + ++_field1B64; + if (BF_INVENTORY._bookingFrankie.inInventory()) + ++_field1B64; + if (BF_INVENTORY._bookingGang.inInventory()) + ++_field1B64; + if (BF_INVENTORY._snub22.inInventory()) + ++_field1B64; + + switch (BF_GLOBALS._sceneManager._previousScene) { + case 190: + if (_field1398) + _field1B6A = true; + _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 3150 : 3165; + setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL); + break; + case 325: + BF_GLOBALS._uiElements._active = false; + _object6.postInit(); + _object7.postInit(); + _object8.setFrame(8); + _sceneMode = (BF_GLOBALS._dayNumber == 1) ? 3152 : 3155; + setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_object6, + &_object7, &_object8, NULL); + break; + case 300: + default: + if (_field1398) + _field1B6A = true; + if (!BF_GLOBALS.getFlag(onDuty)) + _sceneMode = 3166; + else if (!_field1398) + _sceneMode = 3164; + else + _sceneMode = 3163; + + setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL); + break; + } + + if (_field1B6A) { + _object8.setFrame(8); + } else { + BF_GLOBALS._walkRegions.proc1(4); + } + + _item15.setDetails(24, 315, 38, 39, 40, 1); + _item14.setDetails(14, 315, 24, 25, 26, 1); + _item7.setDetails(5, 315, 8, 9, -1, 1); + _item6.setDetails(6, 315, 5, 6, 7, 1); + _item10.setDetails(8, 315, 13, -1, -1, 1); + _item11.setDetails(9, 315, 14, -1, -1, 1); + _item8.setDetails(7, 315, 15, 16, 17, 1); + _item9.setDetails(10, 315, 18, 19, 20, 1); +} + +void Scene315::signal() { + int ctr = 0; + + switch (_sceneMode) { + case 0: + BF_GLOBALS._player.enableControl(); + break; + case 10: + if (_field1B62) { + if (_field1B62 >= _field1B60) + BF_GLOBALS.setFlag(fLeftTraceIn910); + else + ++ctr; + } + + if (_field1B66) { + if (_field1B66 < _field1B64) + ++ctr; + else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence) + BF_GLOBALS._bookmark = bBookedFrankieEvidence; + } + + if (ctr) { + BF_GLOBALS._deathReason = 20; + BF_GLOBALS._sceneManager.changeScene(666); + } else { + BF_GLOBALS._sceneManager.changeScene(300); + } + BF_GLOBALS._sound1.fadeOut2(NULL); + break; + case 11: + if (_field1B62) { + if (_field1B62 >= _field1B60) + BF_GLOBALS.setFlag(fLeftTraceIn910); + else + ++ctr; + } + + if (_field1B66) { + if (_field1B66 < _field1B64) + ++ctr; + else if (BF_GLOBALS._bookmark < bBookedFrankie) + BF_GLOBALS._bookmark = bBookedFrankie; + else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence) + BF_GLOBALS._bookmark = bBookedFrankie; + } + + if (ctr == 1) { + BF_GLOBALS._deathReason = 20; + BF_GLOBALS._sound1.fadeOut2(NULL); + } else if ((BF_GLOBALS._bookmark != bBookedFrankie) || !BF_GLOBALS.getFlag(onDuty)) { + BF_GLOBALS._sound1.fadeOut2(NULL); + BF_GLOBALS._sceneManager.changeScene(190); + } else { + BF_GLOBALS._bookmark = bBookedFrankieEvidence; + _field139C = 0; + BF_GLOBALS.clearFlag(onDuty); + BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60); + BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60); + _sceneMode = 3165; + setAction(&_sequenceManager, this, 3165, &BF_GLOBALS._player, NULL); + } + break; + case 12: + BF_GLOBALS._uiElements.addScore(30); + BF_INVENTORY.setObjectScene((int)_currentCursor, 315); + + if (!_field1B64 || (_field1B66 != _field1B64)) + BF_GLOBALS._player.enableControl(); + else { + _field139C = 1; + _stripNumber = 3171; + setAction(&_action1); + } + break; + case 3150: + case 3164: + case 3165: + case 3166: + BF_GLOBALS._player.enableControl(); + _field1B68 = false; + break; + case 3151: + BF_GLOBALS._sceneManager.changeScene(325); + break; + case 3152: + BF_GLOBALS._walkRegions.proc1(4); + _object7.remove(); + _object6.remove(); + + BF_GLOBALS._player.enableControl(); + _field1B68 = false; + BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._uiElements._active = true; + BF_GLOBALS._uiElements.show(); + break; + case 3153: + BF_GLOBALS._uiElements.addScore(30); + BF_INVENTORY.setObjectScene((int)_currentCursor, 315); + + if (_stripNumber != 0) + setAction(&_action1); + else if (!_field1B64 || (_field1B66 != _field1B64)) + BF_GLOBALS._player.enableControl(); + else { + _stripNumber = 3171; + setAction(&_action1); + _field139C = 1; + } + break; + case 3155: + BF_GLOBALS._player.enableControl(); + _field1B68 = false; + BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._uiElements._active = true; + BF_GLOBALS._uiElements.show(); + break; + case 3156: + BF_GLOBALS._uiElements.addScore(10); + BF_INVENTORY.setObjectScene(INV_DA_NOTE, 1); + _object2.remove(); + BF_GLOBALS._player.enableControl(); + break; + case 3157: + BF_GLOBALS._player.enableControl(); + _object9.remove(); + break; + case 3158: + BF_GLOBALS._player.enableControl(); + BF_GLOBALS._uiElements.addScore(10); + BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 1); + break; + case 3159: + if (!BF_GLOBALS.getFlag(fBookedGreenEvidence)) { + BF_GLOBALS._uiElements.addScore(30); + BF_GLOBALS.setFlag(fBookedGreenEvidence); + } + BF_GLOBALS.setFlag(gunClean); + BF_GLOBALS._player.enableControl(); + break; + case 3161: + BF_GLOBALS._deathReason = 21; + BF_GLOBALS._sound1.fadeOut2(NULL); + BF_GLOBALS._sceneManager.changeScene(666); + break; + case 3162: + BF_GLOBALS._player.disableControl(); + _sceneMode = 3161; + setAction(&_sequenceManager, this, 3161, &BF_GLOBALS._player, NULL); + BF_GLOBALS.setFlag(fShotSuttersDesk); + break; + case 3163: + _sceneMode = 3150; + setAction(&_sequenceManager, this, 3150, &BF_GLOBALS._player, NULL); + break; + case 3167: + BF_GLOBALS._player.enableControl(); + _object9.remove(); + break; + case 3154: + default: + break; + } +} + +void Scene315::process(Event &event) { + SceneExt::process(event); + + if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) { + // Check if the cursor is on an exit + if (_item17.contains(event.mousePos)) { + GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW); + BF_GLOBALS._events.setCursor(surface); + } else if ((BF_GLOBALS._bookmark != bBookedFrankie) && _item16.contains(event.mousePos)) { + GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W); + BF_GLOBALS._events.setCursor(surface); + } else { + // In case an exit cursor was being shown, restore the previously selected cursor + CursorType cursorId = BF_GLOBALS._events.getCursor(); + BF_GLOBALS._events.setCursor(cursorId); + } + } +} + +void Scene315::dispatch() { + SceneExt::dispatch(); + + if (_field1B68) + return; + + if (_field1B6A) { + if (BF_GLOBALS._player._position.y < 69) { + BF_GLOBALS._player.disableControl(); + _field1B68 = true; + _sceneMode = 3151; + setAction(&_sequenceManager, this, 3151, &BF_GLOBALS._player, NULL); + } else if (BF_GLOBALS._player.getRegionIndex() == 1) { + BF_GLOBALS._player.disableControl(); + _field1B68 = true; + SceneItem::display2(315, 28); + _sceneMode = 3150; + ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 30, + BF_GLOBALS._player._position.y + 15); + } else if (BF_GLOBALS._player._position.y > 156) { + BF_GLOBALS._player.disableControl(); + _field1B68 = true; + SceneItem::display2(315, 28); + _sceneMode = 3150; + ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 30, + BF_GLOBALS._player._position.y - 24); + } + } else if (BF_GLOBALS._player.getRegionIndex() == 1) { + BF_GLOBALS._player.disableControl(); + _field1B68 = true; + _sceneMode = 11; + ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 30, + BF_GLOBALS._player._position.y - 5); + } else if (BF_GLOBALS._player._position.y > 156) { + BF_GLOBALS._player.disableControl(); + _field1B68 = true; + + if (_field139C) { + SceneItem::display2(315, 45); + _sceneMode = 3150; + ADD_MOVER(BF_GLOBALS._player, 112, 152); + } else { + _sceneMode = 10; + ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 150, + BF_GLOBALS._player._position.y + 120); + } + } +} + +/*-------------------------------------------------------------------------- + * Scene 325 - Police Station Conference Room + * + *--------------------------------------------------------------------------*/ + +bool Scene325::Item1::startAction(CursorType action, Event &event) { + if (action == CURSOR_EXIT) { + BF_GLOBALS._events.setCursor(CURSOR_WALK); + BF_GLOBALS._player.disableControl(); + BF_GLOBALS._sceneManager.changeScene(315); + return true; + } else { + return false; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene325::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(325); + BF_GLOBALS._interfaceY = 200; + BF_GLOBALS.clearFlag(fCanDrawGun); + + if (BF_GLOBALS._dayNumber == 0) + BF_GLOBALS._dayNumber = 1; + + // Add the speakers + _stripManager.addSpeaker(&_gameTextSpeaker); + _stripManager.addSpeaker(&_PSutterSpeaker); + + BF_GLOBALS._player.postInit(); + BF_GLOBALS._player.hide(); + + if (BF_GLOBALS._dayNumber == 1) { + _object1.postInit(); + _object1.setVisage(325); + _object1.setStrip(8); + _object1.setPosition(Common::Point(128, 44)); + } else { + _object1.postInit(); + _object1.setVisage(325); + _object1.setStrip(8); + _object1.setFrame(2); + _object1.setPosition(Common::Point(132, 28)); + + _object2.postInit(); + _object2.setVisage(325); + _object2.setStrip(8); + _object2.setFrame(3); + _object2.setPosition(Common::Point(270, 24)); + } + + _object3.postInit(); + _object3.setVisage(335); + _object3.setStrip(4); + _object3.setPosition(Common::Point(202, 122)); + + _object4.postInit(); + _object4.setVisage(335); + _object4.setStrip(2); + _object4.setPosition(Common::Point(283, 102)); + + _object5.postInit(); + _object5.setVisage(335); + _object5.setStrip(1); + _object5.setPosition(Common::Point(135, 167)); + + _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 560, -1, -1, -1, 1, NULL); + BF_GLOBALS._player.disableControl(); + + _sceneMode = (BF_GLOBALS._dayNumber == 1) ? 3250 : 3251; + setAction(&_sequenceManager, this, _sceneMode, &_object3, &_object4, &_object5, NULL); +} + +void Scene325::signal() { + BF_GLOBALS._player._uiEnabled = 0; + BF_GLOBALS._player._canWalk = true; + BF_GLOBALS._player._enabled = true; + BF_GLOBALS._events.setCursor(CURSOR_EXIT); +} + +} // End of namespace BlueForce + +} // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h new file mode 100644 index 0000000000..18911d58fb --- /dev/null +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -0,0 +1,250 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_SCENES3_H +#define TSAGE_BLUEFORCE_SCENES3_H + +#include "common/scummsys.h" +#include "tsage/blue_force/blueforce_logic.h" +#include "tsage/blue_force/blueforce_speakers.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" + +namespace TsAGE { + +namespace BlueForce { + +using namespace TsAGE; + +class Scene300: public SceneExt { + /* Objects */ + class Object: public NamedObject { + public: + int _stripNumber; + public: + Object(int stripNumber) { _stripNumber = stripNumber; } + + virtual bool startAction(CursorType action, Event &event); + }; + class Object19: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Items */ + class Item1: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item2: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item14: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item15: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + class Action3: public Action { + public: + virtual void signal(); + }; + class Action4: public Action { + public: + virtual void signal(); + }; + class Action5: public Action { + public: + virtual void signal(); + }; +private: + void setup(); +public: + SequenceManager _sequenceManager1, _sequenceManager2; + SequenceManager _sequenceManager3, _sequenceManager4; + NamedObject _object1; + FollowerObject _object2, _object3, _object4, _object5, _object6, _object7; + SceneObject _object8, _object9, _object10; + NamedObject _object11, _object12; + Object _object13, _object14, _object15, _object16; + NamedObject _object17, _object18; + Object19 _object19; + Item1 _item1; + Item2 _item2; + NamedHotspot _item3, _item4, _item5, _item6, _item7; + NamedHotspot _item8, _item9, _item10, _item11; + NamedHotspot _item12, _item13; + Item14 _item14; + Item15 _item15; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + SpeakerGameText _gameTextSpeaker; + SpeakerSutter _sutterSpeaker; + SpeakerDoug _dougSpeaker; + SpeakerJakeNoHead _jakeSpeaker; + TimerExt _timer; + int _field2760, _field2762; + + Scene300(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + +class Scene315: public SceneExt { + /* Objects */ + class Object1: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Object2: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Object3: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Items */ + class Item1: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item2: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item4: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item5: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item14: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item15: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item16: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item17: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; +public: + SequenceManager _sequenceManager; + SpeakerGameText _gameTextSpeaker; + SpeakerSutter _sutterSpeaker; + SpeakerHarrison _harrisonSpeaker; + SpeakerJakeJacket _jakeJacketSpeaker; + SpeakerJakeUniform _jakeUniformSpeaker; + SpeakerJailer _jailerSpeaker; + Item1 _item1; + Item2 _item2; + NamedHotspot _item3; + Item4 _item4; + Item5 _item5; + Object1 _object1; + Object2 _object2; + Object3 _object3; + SceneObject _object4, _object5, _object6; + SceneObject _object7, _object8, _object9; + NamedHotspot _item6, _item7, _item8, _item9; + NamedHotspot _item10, _item11, _item12, _item13; + Item14 _item14; + Item15 _item15; + Item16 _item16; + Item17 _item17; + Action1 _action1; + int _field1390; + int _stripNumber; + int _field1398; + int _field1B60, _field1B62, _field1B64; + int _field1B66, _field1B6C, _field139C; + bool _field1B68, _field1B6A; + CursorType _currentCursor; + + Scene315(); + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + +class Scene325: public SceneExt { + /* Items */ + class Item1: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + SequenceManager _sequenceManager; + SpeakerGameText _gameTextSpeaker; + SpeakerPSutter _PSutterSpeaker; + Item1 _item1; + NamedObject _object1, _object2, _object3, _object4, _object5; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + +} // End of namespace BlueForce + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp new file mode 100644 index 0000000000..e150a6e5b7 --- /dev/null +++ b/engines/tsage/blue_force/blueforce_scenes6.cpp @@ -0,0 +1,168 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/blue_force/blueforce_scenes6.h" +#include "tsage/blue_force/blueforce_dialogs.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace TsAGE { + +namespace BlueForce { + +/*-------------------------------------------------------------------------- + * Scene 666 - Death Scene + * + *--------------------------------------------------------------------------*/ + +void Scene666::Action1::signal() { + switch (_actionIndex++) { + case 0: + BF_GLOBALS._player.hide(); + setDelay(6); + break; + case 1: + BF_GLOBALS._game->restartGame(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +bool Scene666::Item1::startAction(CursorType action, Event &event) { + return true; +} + +/*--------------------------------------------------------------------------*/ + +void Scene666::postInit(SceneObjectList *OwnerList) { + BF_GLOBALS._sound1.play(27); + SceneExt::postInit(); + BF_GLOBALS._interfaceY = 200; + loadScene(999); + BF_GLOBALS._screenSurface.fillRect(BF_GLOBALS._screenSurface.getBounds(), 0); + + if (BF_GLOBALS._dayNumber == 0) { + BF_GLOBALS._dayNumber = 1; + BF_GLOBALS._deathReason = BF_GLOBALS._randomSource.getRandomNumber(23); + } + + BF_GLOBALS._scenePalette.loadPalette(BF_GLOBALS._sceneManager._previousScene); + BF_GLOBALS._uiElements._active = false; + + _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 666, -1, -1, -1, 1, NULL); + BF_GLOBALS._player.postInit(); + BF_GLOBALS._events.setCursor(CURSOR_WALK); + + if (BF_GLOBALS._sceneManager._previousScene == 271) { + setAction(&_action1); + } else { + switch (BF_GLOBALS._deathReason) { + case 4: + case 18: + case 19: + case 20: + BF_GLOBALS._scenePalette.loadPalette(668); + BF_GLOBALS._player.setVisage(668); + BF_GLOBALS._player.setStrip2(1); + BF_GLOBALS._player.setPosition(Common::Point(77, 155)); + BF_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 5: + BF_GLOBALS._scenePalette.loadPalette(900); + BF_GLOBALS._scenePalette.refresh(); + BF_GLOBALS._player.setVisage(666); + BF_GLOBALS._player.setPosition(Common::Point(60, 160)); + signal(); + break; + case 7: + case 11: + case 12: + case 22: + BF_GLOBALS._scenePalette.loadPalette(667); + BF_GLOBALS._scenePalette.refresh(); + + _object1.postInit(); + _object2.postInit(); + _object3.postInit(); + setAction(&_sequenceManager, this, 6660, &BF_GLOBALS._player, &_object1, &_object2, + &_object3, NULL); + break; + case 13: + case 14: + BF_GLOBALS._scenePalette.loadPalette(665); + BF_GLOBALS._scenePalette.refresh(); + BF_GLOBALS._player.setVisage(665); + BF_GLOBALS._player.setPosition(Common::Point(80, 140)); + signal(); + break; + case 24: + BF_GLOBALS._player.setVisage(664); + BF_GLOBALS._player.setPosition(Common::Point(70, 160)); + signal(); + break; + default: + BF_GLOBALS._scenePalette.loadPalette(669); + BF_GLOBALS._scenePalette.refresh(); + BF_GLOBALS._player.setVisage(669); + BF_GLOBALS._player.setStrip(1); + BF_GLOBALS._player.setPosition(Common::Point(27, 27)); + BF_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + } + } +} + +void Scene666::remove() { + BF_GLOBALS._sound1.fadeOut2(NULL); + BF_GLOBALS._scrollFollower = &BF_GLOBALS._player; + SceneExt::remove(); + BF_GLOBALS._uiElements._active = true; +} + +void Scene666::signal() { + BF_GLOBALS._player.enableControl(); + Rect textRect, sceneBounds; + + _text._color1 = 19; + _text._color2 = 9; + _text._color3 = 13; + _text._fontNumber = 4; + _text._width = 150; + + Common::String msg = _resourceManager->getMessage(666, BF_GLOBALS._deathReason); + sceneBounds = BF_GLOBALS._sceneManager._scene->_sceneBounds; + sceneBounds.collapse(4, 2); + BF_GLOBALS.gfxManager()._font.getStringBounds(msg.c_str(), textRect, _text._width); + textRect.moveTo(160, 10); + textRect.contain(sceneBounds); + + _text.setup(msg); + _text.setPosition(Common::Point(textRect.left, textRect.top)); + _text.setPriority(255); + _text.show(); +} + +} // End of namespace BlueForce + +} // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes6.h b/engines/tsage/blue_force/blueforce_scenes6.h new file mode 100644 index 0000000000..b7449c5e30 --- /dev/null +++ b/engines/tsage/blue_force/blueforce_scenes6.h @@ -0,0 +1,70 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_SCENES6_H +#define TSAGE_BLUEFORCE_SCENES6_H + +#include "common/scummsys.h" +#include "tsage/blue_force/blueforce_logic.h" +#include "tsage/blue_force/blueforce_speakers.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" + +namespace TsAGE { + +namespace BlueForce { + +using namespace TsAGE; + +class Scene666 : public SceneExt { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + + /* Items */ + class Item1: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + Action1 _action1; + SequenceManager _sequenceManager; + NamedObject _object1, _object2, _object3; + Item1 _item1; + SceneText _text; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; + +} // End of namespace BlueForce + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/blue_force/blueforce_speakers.cpp b/engines/tsage/blue_force/blueforce_speakers.cpp new file mode 100644 index 0000000000..dc2511dedb --- /dev/null +++ b/engines/tsage/blue_force/blueforce_speakers.cpp @@ -0,0 +1,320 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/blue_force/blueforce_speakers.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/graphics.h" +#include "tsage/staticres.h" + +namespace TsAGE { + +namespace BlueForce { + +VisualSpeaker::VisualSpeaker(): Speaker() { + _textWidth = 312; + _color1 = 19; + _hideObjects = false; + _removeObject1 = false; + _removeObject2 = false; + _xp = 160; + _fontNumber = 4; + _color2 = 82; + _offsetPos = Common::Point(4, 170); + _numFrames = 0; +} + +void VisualSpeaker::remove() { + if (_removeObject2) + _object2.remove(); + if (_removeObject1) + _object1.remove(); + + Speaker::remove(); +} + +void VisualSpeaker::synchronize(Serializer &s) { + Speaker::synchronize(s); + + s.syncAsByte(_removeObject1); + s.syncAsByte(_removeObject2); + s.syncAsSint16LE(_xp); + s.syncAsSint16LE(_numFrames); + s.syncAsSint16LE(_offsetPos.x); + s.syncAsSint16LE(_offsetPos.y); +} + +void VisualSpeaker::proc12(Action *action) { + Speaker::proc12(action); + _textPos = Common::Point(_offsetPos.x + BF_GLOBALS._sceneManager._scene->_sceneBounds.left, + _offsetPos.y + BF_GLOBALS._sceneManager._scene->_sceneBounds.top); + _numFrames = 0; +} + +void VisualSpeaker::setText(const Common::String &msg) { + _objectList.draw(); + BF_GLOBALS._sceneObjects->draw(); + + _sceneText._color1 = _color1; + _sceneText._color2 = _color2; + _sceneText._color3 = _color3; + _sceneText._width = _textWidth; + _sceneText._fontNumber = _fontNumber; + _sceneText._textMode = _textMode; + _sceneText.setup(msg); + + // Get the string bounds + GfxFont f; + f.setFontNumber(_fontNumber); + Rect bounds; + f.getStringBounds(msg.c_str(), bounds, _textWidth); + + // Set the position for the text + switch (_textMode) { + case ALIGN_LEFT: + case ALIGN_JUSTIFIED: + _sceneText.setPosition(_textPos); + break; + case ALIGN_CENTER: + _sceneText.setPosition(Common::Point(_textPos.x + (_textWidth - bounds.width()) / 2, _textPos.y)); + break; + case ALIGN_RIGHT: + _sceneText.setPosition(Common::Point(_textPos.x + _textWidth - bounds.width(), _textPos.y)); + break; + default: + break; + } + + // Ensure the text is in the foreground + _sceneText.fixPriority(256); + + // Count the number of words (by spaces) in the string + const char *s = msg.c_str(); + int spaceCount = 0; + while (*s) { + if (*s++ == ' ') + ++spaceCount; + } + + _numFrames = spaceCount * 3 + 2; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerGameText::SpeakerGameText(): VisualSpeaker() { + _speakerName = "GAMETEXT"; + _color1 = 8; + _color2 = 19; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSutter::SpeakerSutter() { + _speakerName = "SUTTER"; + _color1 = 20; + _color2 = 22; + _textMode = ALIGN_CENTER; +} + +void SpeakerSutter::setText(const Common::String &msg) { + _removeObject1 = _removeObject2 = true; + + _object1.postInit(); + _object1.setVisage(329); + _object1.setStrip2(2); + _object1.fixPriority(254); + _object1.changeZoom(100); + _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + _object2.postInit(); + _object2.setVisage(329); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + VisualSpeaker::setText(msg); + _object2.fixCountdown(8, _numFrames); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerDoug::SpeakerDoug(): VisualSpeaker() { + _color1 = 32; + _speakerName = "DOUG"; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerJakeNoHead::SpeakerJakeNoHead(): VisualSpeaker() { + _color1 = 13; + _speakerName = "JAKE_NO_HEAD"; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerHarrison::SpeakerHarrison(): VisualSpeaker() { + _color1 = 32; + _speakerName = "HARRISON"; +} + +void SpeakerHarrison::setText(const Common::String &msg) { + _removeObject1 = _removeObject2 = true; + + _object1.postInit(); + _object1.setVisage(325); + _object1.setStrip2(7); + _object1.fixPriority(254); + _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 277, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + _object2.postInit(); + _object2.fixPriority(255); + _object2.setVisage(325); + _object2.setStrip2(6); + _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 277, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + VisualSpeaker::setText(msg); + _object2.fixCountdown(8, _numFrames); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerJakeJacket::SpeakerJakeJacket(): VisualSpeaker() { + _color1 = 13; + _color2 = 7; + _speakerName = "JAKEJACKET"; +} + +void SpeakerJakeJacket::setText(const Common::String &msg) { + _removeObject1 = _removeObject2 = true; + + _object1.postInit(); + _object1.setVisage(1001); + _object1.setStrip2(4); + _object1.fixPriority(254); + _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + _xp, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + _object2.postInit(); + _object2.setVisage(1001); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + _xp, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + VisualSpeaker::setText(msg); + _object2.fixCountdown(8, _numFrames); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerJakeUniform::SpeakerJakeUniform(): VisualSpeaker() { + _color1 = 13; + _color2 = 7; + _speakerName = "JAKEUNIFORM"; +} + +void SpeakerJakeUniform::setText(const Common::String &msg) { + _removeObject1 = _removeObject2 = true; + + _object1.postInit(); + _object1.setVisage(1001); + _object1.setStrip2(3); + _object1.fixPriority(254); + _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + _object2.postInit(); + _object2.setVisage(1001); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + VisualSpeaker::setText(msg); + _object2.fixCountdown(8, _numFrames); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerJailer::SpeakerJailer(): VisualSpeaker() { + _color1 = 13; + _color2 = 7; + _speakerName = "JAILER"; +} + +void SpeakerJailer::setText(const Common::String &msg) { + _removeObject1 = _removeObject2 = true; + + _object1.postInit(); + _object1.setVisage(395); + _object1.setStrip(6); + _object1.fixPriority(254); + _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + _object2.postInit(); + _object2.setVisage(395); + _object2.setStrip(5); + _object2.fixPriority(255); + _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40, + BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166)); + + VisualSpeaker::setText(msg); + _object2.fixCountdown(8, _numFrames); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPSutter::SpeakerPSutter(): VisualSpeaker() { + _color1 = 20; + _color2 = 22; + _speakerName = "PSUTTER"; +} + +void SpeakerPSutter::setText(const Common::String &msg) { + _removeObject2 = true; + + _object2.postInit(); + _object2.setVisage(335); + _object2.setStrip2(3); + _object2.fixPriority(200); + _object2.setPosition(Common::Point(202, 48)); + + VisualSpeaker::setText(msg); + _object2.fixCountdown(8, _numFrames); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerJakeRadio::SpeakerJakeRadio(): VisualSpeaker() { + _color1 = 13; + _color2 = 7; + _speakerName = "JAKE_RADIO"; +} + +} // End of namespace BlueForce + +} // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_speakers.h b/engines/tsage/blue_force/blueforce_speakers.h new file mode 100644 index 0000000000..c05938506a --- /dev/null +++ b/engines/tsage/blue_force/blueforce_speakers.h @@ -0,0 +1,139 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_SPEAKERS_H +#define TSAGE_BLUEFORCE_SPEAKERS_H + +#include "common/scummsys.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/blue_force/blueforce_logic.h" + +namespace TsAGE { + +namespace BlueForce { + +using namespace TsAGE; + +class VisualSpeaker: public Speaker { +public: + NamedObject _object1; + CountdownObject _object2; + bool _removeObject1, _removeObject2; + int _xp; + int _numFrames; + Common::Point _offsetPos; +public: + VisualSpeaker(); + + virtual Common::String getClassName() { return "VisualSpeaker"; } + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void proc12(Action *action); + virtual void setText(const Common::String &msg); +}; + +class SpeakerGameText: public VisualSpeaker { +public: + SpeakerGameText(); + + virtual Common::String getClassName() { return "SpeakerGameText"; } +}; + +class SpeakerSutter: public VisualSpeaker { +public: + SpeakerSutter(); + + virtual Common::String getClassName() { return "SpeakerSutter"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerDoug: public VisualSpeaker { +public: + SpeakerDoug(); + + virtual Common::String getClassName() { return "SpeakerDoug"; } +}; + +class SpeakerJakeNoHead: public VisualSpeaker { +public: + SpeakerJakeNoHead(); + + virtual Common::String getClassName() { return "SpeakerJakeNoHead"; } +}; + +class SpeakerHarrison: public VisualSpeaker { +public: + SpeakerHarrison(); + + virtual Common::String getClassName() { return "SpeakerHarrison"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerJakeJacket: public VisualSpeaker { +public: + SpeakerJakeJacket(); + + virtual Common::String getClassName() { return "SpeakerJakeJacket"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerJakeUniform: public VisualSpeaker { +public: + SpeakerJakeUniform(); + + virtual Common::String getClassName() { return "SpeakerJakeUniform"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerJailer: public VisualSpeaker { +public: + SpeakerJailer(); + + virtual Common::String getClassName() { return "SpeakerJailer"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerPSutter: public VisualSpeaker { +public: + SpeakerPSutter(); + + virtual Common::String getClassName() { return "SpeakerPSutter"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerJakeRadio: public VisualSpeaker { +public: + SpeakerJakeRadio(); + + virtual Common::String getClassName() { return "SpeakerJakeRadio"; } +}; + + +} // End of namespace BlueForce + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/blue_force/blueforce_ui.cpp b/engines/tsage/blue_force/blueforce_ui.cpp new file mode 100644 index 0000000000..8f40d2b565 --- /dev/null +++ b/engines/tsage/blue_force/blueforce_ui.cpp @@ -0,0 +1,476 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/blue_force/blueforce_ui.h" +#include "tsage/blue_force/blueforce_dialogs.h" +#include "tsage/blue_force/blueforce_logic.h" +#include "tsage/tsage.h" +#include "tsage/core.h" + +namespace TsAGE { + +namespace BlueForce { + +void StripProxy::process(Event &event) { + if (_action) + _action->process(event); +} + +/*--------------------------------------------------------------------------*/ + +void UIElement::synchronize(Serializer &s) { + AltSceneObject::synchronize(s); + s.syncAsSint16LE(_field88); + s.syncAsSint16LE(_enabled); + s.syncAsSint16LE(_frameNum); +} + +void UIElement::setup(int visage, int stripNum, int frameNum, int posX, int posY, int priority) { + _field88 = 0; + _frameNum = frameNum; + _enabled = true; + + SceneObject::setup(visage, stripNum, frameNum, posX, posY, priority); +} + +void UIElement::setEnabled(bool flag) { + if (_enabled != flag) { + _enabled = flag; + setFrame(_enabled ? _frameNum : _frameNum + 2); + } +} + +/*--------------------------------------------------------------------------*/ + +void UIQuestion::process(Event &event) { + if (event.eventType == EVENT_BUTTON_DOWN) { + CursorType currentCursor = GLOBALS._events.getCursor(); + GLOBALS._events.hideCursor(); + showDescription(currentCursor); + + event.handled = true; + } +} + +void UIQuestion::showDescription(CursorType cursor) { + if (cursor == INV_FOREST_RAP) { + // Forest rap item has a graphical display + showItem(5, 1, 1); + } else { + // Display object description + SceneItem::display2(9001, (int)cursor); + } +} + +void UIQuestion::setEnabled(bool flag) { + if (_enabled != flag) { + UIElement::setEnabled(flag); + BF_GLOBALS._uiElements.draw(); + } +} + +void UIQuestion::showItem(int resNum, int rlbNum, int frameNum) { + GfxDialog::setPalette(); + + // Get the item to display + GfxSurface objImage = surfaceFromRes(resNum, rlbNum, frameNum); + Rect imgRect; + imgRect.resize(objImage, 0, 0, 100); + imgRect.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2); + + // Save the area behind where the image will be displayed + GfxSurface *savedArea = Surface_getArea(BF_GLOBALS.gfxManager().getSurface(), imgRect); + + // Draw the image + BF_GLOBALS.gfxManager().copyFrom(objImage, imgRect); + + // Wait for a press + BF_GLOBALS._events.waitForPress(); + + // Restore the old area + BF_GLOBALS.gfxManager().copyFrom(*savedArea, imgRect); + delete savedArea; +} + +/*--------------------------------------------------------------------------*/ + +void UIScore::postInit(SceneObjectList *OwnerList) { + int xp = 266; + _digit3.setup(1, 6, 1, xp, 180, 255); + _digit3.reposition(); + xp += 7; + _digit2.setup(1, 6, 1, xp, 180, 255); + _digit2.reposition(); + xp += 7; + _digit1.setup(1, 6, 1, xp, 180, 255); + _digit1.reposition(); + xp += 7; + _digit0.setup(1, 6, 1, xp, 180, 255); + _digit0.reposition(); +} + +void UIScore::draw() { + _digit3.draw(); + _digit2.draw(); + _digit1.draw(); + _digit0.draw(); +} + +void UIScore::updateScore() { + int score = BF_GLOBALS._uiElements._scoreValue; + + _digit3.setFrame(score / 1000 + 1); score %= 1000; + _digit2.setFrame(score / 100 + 1); score %= 100; + _digit1.setFrame(score / 10 + 1); score %= 10; + _digit0.setFrame(score + 1); +} + +/*--------------------------------------------------------------------------*/ + +UIInventorySlot::UIInventorySlot(): UIElement() { + _objIndex = 0; + _object = NULL; +} + +void UIInventorySlot::synchronize(Serializer &s) { + UIElement::synchronize(s); + s.syncAsSint16LE(_objIndex); + SYNC_POINTER(_object); +} + +void UIInventorySlot::process(Event &event) { + if (event.eventType == EVENT_BUTTON_DOWN) { + event.handled = true; + + if (_objIndex == INV_AMMO_BELT) { + // Handle showing ammo belt + showAmmoBelt(); + + } else if (_objIndex != INV_NONE) { + _object->setCursor(); + } + } +} + +void UIInventorySlot::showAmmoBelt() { + AmmoBeltDialog *dlg = new AmmoBeltDialog(); + dlg->execute(); + delete dlg; +} + +/*--------------------------------------------------------------------------*/ + +UIInventoryScroll::UIInventoryScroll() { + _isLeft = false; +} + +void UIInventoryScroll::synchronize(Serializer &s) { + UIElement::synchronize(s); + s.syncAsSint16LE(_isLeft); +} + +void UIInventoryScroll::process(Event &event) { + switch (event.eventType) { + case EVENT_BUTTON_DOWN: + // Draw the button as selected + toggle(true); + + event.handled = true; + break; + case EVENT_BUTTON_UP: + // Restore unselected version + toggle(false); + + // Scroll the inventory as necessary + BF_GLOBALS._uiElements.scrollInventory(_isLeft); + event.handled = true; + break; + } +} + +void UIInventoryScroll::toggle(bool pressed) { + if (_enabled) { + setFrame(pressed ? (_frameNum + 1) : _frameNum); + BF_GLOBALS._uiElements.draw(); + } +} + +/*--------------------------------------------------------------------------*/ + +UICollection::UICollection(): EventHandler() { + _clearScreen = false; + _visible = false; + _cursorChanged = false; +} + +void UICollection::setup(const Common::Point &pt) { + _position = pt; + _bounds.left = _bounds.right = pt.x; + _bounds.top = _bounds.bottom = pt.y; +} + +void UICollection::hide() { + erase(); + _visible = false; +} + +void UICollection::show() { + _visible = true; + draw(); +} + +void UICollection::erase() { + if (_clearScreen) { + Rect tempRect(0, BF_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT); + GLOBALS._screenSurface.fillRect(tempRect, 0); + _clearScreen = false; + } +} + +void UICollection::resetClear() { + _clearScreen = false; +} + +void UICollection::draw() { + if (_visible) { + // Draw the elements + for (uint idx = 0; idx < _objList.size(); ++idx) + _objList[idx]->draw(); + + _clearScreen = 1; + } +} + +/*--------------------------------------------------------------------------*/ + +UIElements::UIElements(): UICollection() { + _cursorVisage.setVisage(1, 5); +} + +void UIElements::process(Event &event) { + if (_clearScreen && BF_GLOBALS._player._enabled && (BF_GLOBALS._sceneManager._sceneNumber != 50)) { + if (_bounds.contains(event.mousePos)) { + // Cursor inside UI area + if (!_cursorChanged) { + if (BF_GLOBALS._events.isInventoryIcon()) { + // Inventory icon being displayed, so leave alone + } else { + // Change to the inventory use cursor + GfxSurface surface = _cursorVisage.getFrame(6); + BF_GLOBALS._events.setCursor(surface); + } + _cursorChanged = true; + } + + // Pass event to any element that the cursor falls on + for (int idx = (int)_objList.size() - 1; idx >= 0; --idx) { + if (_objList[idx]->_bounds.contains(event.mousePos) && _objList[idx]->_enabled) { + _objList[idx]->process(event); + if (event.handled) + break; + } + } + + if (event.eventType == EVENT_BUTTON_DOWN) + event.handled = true; + + } else if (_cursorChanged) { + // Cursor outside UI area, so reset as necessary + BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor()); + _cursorChanged = false; + + SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene; + if (scene->_eventHandler) { + GfxSurface surface = _cursorVisage.getFrame(7); + BF_GLOBALS._events.setCursor(surface); + } + } + } +} + +void UIElements::setup(const Common::Point &pt) { + _slotStart = 0; + _itemList.clear(); + _scoreValue = 0; + _active = true; + UICollection::setup(pt); + hide(); + + _object1.setup(1, 3, 1, 0, 0, 255); + add(&_object1); + + // Set up the inventory slots + int xp = 0; + for (int idx = 0; idx < 4; ++idx) { + UIElement *item = NULL; + switch (idx) { + case 0: + item = &_slot1; + break; + case 1: + item = &_slot2; + break; + case 2: + item = &_slot3; + break; + case 3: + item = &_slot4; + break; + } + + xp = idx * 63 + 2; + item->setup(9, 1, idx, xp, 4, 255); + add(item); + } + + // Setup bottom-right hand buttons + xp += 62; + _question.setup(1, 4, 7, xp, 16, 255); + _question.setEnabled(false); + add(&_question); + + xp += 21; + _scrollLeft.setup(1, 4, 1, xp, 16, 255); + add(&_scrollLeft); + _scrollLeft._isLeft = true; + + xp += 22; + _scrollRight.setup(1, 4, 4, xp, 16, 255); + add(&_scrollRight); + _scrollRight._isLeft = false; + + // Set up the score + _score.postInit(); + add(&_score); + + // Set interface area + _bounds = Rect(0, BF_INTERFACE_Y - 1, SCREEN_WIDTH, SCREEN_HEIGHT); + + updateInventory(); +} + +void UIElements::add(UIElement *obj) { + // Add object + assert(_objList.size() < 12); + _objList.push_back(obj); + + obj->setPosition(Common::Point(_bounds.left + obj->_position.x, _bounds.top + obj->_position.y)); + obj->reposition(); + + GfxSurface s = obj->getFrame(); + s.draw(obj->_position); +} + +/** + * Handles updating the visual inventory in the user interface + */ +void UIElements::updateInventory() { + _score.updateScore(); + updateInvList(); + + // Enable scroll buttons if the player has more than four items + if (_itemList.size() > 4) { + _scrollLeft.setEnabled(true); + _scrollRight.setEnabled(true); + } else { + _scrollLeft.setEnabled(false); + _scrollRight.setEnabled(false); + } + + // Handle cropping the slots start within inventory + int lastPage = (_itemList.size() - 1) / 4 + 1; + if (_slotStart < 0) + _slotStart = lastPage - 1; + else if (_slotStart > (lastPage - 1)) + _slotStart = 0; + + // Handle refreshing slot graphics + UIInventorySlot *slotList[4] = { &_slot1, &_slot2, &_slot3, &_slot4 }; + + // Loop through the inventory objects + SynchronizedList<InvObject *>::iterator i; + int objIndex = 0; + for (i = BF_INVENTORY._itemList.begin(); i != BF_INVENTORY._itemList.end(); ++i, ++objIndex) { + InvObject *obj = *i; + + // Check whether the object is in any of the four inventory slots + for (int slotIndex = 0; slotIndex < 4; ++slotIndex) { + int idx = _slotStart * 4 + slotIndex; + int objectIdx = (idx < (int)_itemList.size()) ? _itemList[idx] : 0; + + if (objectIdx == objIndex) { + UIInventorySlot *slot = slotList[slotIndex]; + + slot->_objIndex = objIndex; + slot->_object = obj; + slot->setVisage(obj->_visage); + slot->setStrip(obj->_strip); + slot->setFrame(obj->_frame); + } + } + } + + // Refresh the display if necessary + if (_active) + draw(); +} + +/** + * Update the list of the indexes of items in the player's inventory + */ +void UIElements::updateInvList() { + // Update the index list of items in the player's inventory + _itemList.clear(); + + SynchronizedList<InvObject *>::iterator i; + int itemIndex = 0; + for (i = BF_GLOBALS._inventory->_itemList.begin(); i != BF_GLOBALS._inventory->_itemList.end(); ++i, ++itemIndex) { + InvObject *invObject = *i; + if (invObject->inInventory()) + _itemList.push_back(itemIndex); + } +} + +/** + * Set the game score + */ +void UIElements::addScore(int amount) { + _scoreValue += amount; + BF_GLOBALS._sound2.play(0); + updateInventory(); +} + +/* + * Scroll the inventory slots + */ +void UIElements::scrollInventory(bool isLeft) { + if (isLeft) + --_slotStart; + else + ++_slotStart; + + updateInventory(); +} + +} // End of namespace BlueForce + +} // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_ui.h b/engines/tsage/blue_force/blueforce_ui.h new file mode 100644 index 0000000000..927e667cff --- /dev/null +++ b/engines/tsage/blue_force/blueforce_ui.h @@ -0,0 +1,152 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_UI_H +#define TSAGE_BLUEFORCE_UI_H + +#include "common/scummsys.h" +#include "tsage/core.h" +#include "tsage/graphics.h" +#include "tsage/sound.h" + +namespace TsAGE { + +namespace BlueForce { + +using namespace TsAGE; + +class StripProxy: public EventHandler { +public: + virtual void process(Event &event); +}; + +class UIElement: public AltSceneObject { +public: + int _field88; + bool _enabled; + int _frameNum; + + virtual Common::String getClassName() { return "UIElement"; } + virtual void synchronize(Serializer &s); + + void setup(int visage, int stripNum, int frameNum, int posX, int posY, int priority); + void setEnabled(bool flag); +}; + +// This class implements the Question mark button +class UIQuestion: public UIElement { +private: + void showDescription(CursorType item); + void showItem(int resNum, int rlbNum, int frameNum); +public: + virtual void process(Event &event); + void setEnabled(bool flag); +}; + +// This class implements the score counter +class UIScore: public UIElement { +private: + void showDescription(int lineNum); +public: + UIElement _digit3, _digit2, _digit1, _digit0; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void draw(); + + void updateScore(); +}; + +class UIInventorySlot: public UIElement { +private: + void showAmmoBelt(); +public: + int _objIndex; + InvObject *_object; + + UIInventorySlot(); + virtual Common::String getClassName() { return "UIInventorySlot"; } + virtual void synchronize(Serializer &s); + virtual void process(Event &event); +}; + +class UIInventoryScroll: public UIElement { +private: + void toggle(bool pressed); +public: + bool _isLeft; + + UIInventoryScroll(); + virtual Common::String getClassName() { return "UIInventoryScroll"; } + virtual void synchronize(Serializer &s); + virtual void process(Event &event); +}; + +class UICollection: public EventHandler { +protected: + void erase(); +public: + Common::Point _position; + Rect _bounds; + bool _visible; + bool _clearScreen; + bool _cursorChanged; + Common::Array<UIElement *> _objList; + + UICollection(); + void setup(const Common::Point &pt); + void hide(); + void show(); + void resetClear(); + void draw(); +}; + +class UIElements: public UICollection { +private: + void add(UIElement *obj); + void updateInvList(); +public: + UIElement _object1; + UIQuestion _question; + UIScore _score; + UIInventorySlot _slot1, _slot2, _slot3, _slot4; + UIInventoryScroll _scrollLeft, _scrollRight; + ASound _sound; + int _slotStart, _scoreValue; + bool _active; + Common::Array<int> _itemList; + Visage _cursorVisage; + + UIElements(); + virtual void postInit(SceneObjectList *OwnerList = NULL) { error("Wrong init() called"); } + virtual void process(Event &event); + + void setup(const Common::Point &pt); + void updateInventory(); + void addScore(int amount); + void scrollInventory(bool isLeft); +}; + +} // End of namespace BlueForce + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 615b1c36fd..32a4861036 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -40,6 +40,7 @@ SequenceManager::SequenceManager() : Action() { _field26 = 0; _objectIndex = 0; _keepActive = false; + _onCallback = NULL; setup(); } @@ -287,7 +288,7 @@ void SequenceManager::signal() { /* Following indexes were introduced for Blue Force */ case 35: v1 = getNextValue(); - _sceneObject->updateAngle(_objectList[v1]); + _sceneObject->updateAngle(_objectList[v1]->_position); break; case 36: _sceneObject->animate(ANIM_MODE_9, NULL); @@ -295,7 +296,8 @@ void SequenceManager::signal() { case 37: v1 = getNextValue(); v2 = getNextValue(); - warning("TODO: dword_53030(%d,%d)", v1, v2); + if (_onCallback) + _onCallback(v1, v2); break; case 38: { int resNum = getNextValue(); @@ -558,6 +560,8 @@ void Obj44::synchronize(Serializer &s) { StripManager::StripManager() { _callbackObject = NULL; _activeSpeaker = NULL; + _onBegin = NULL; + _onEnd = NULL; reset(); } @@ -565,6 +569,8 @@ StripManager::~StripManager() { } void StripManager::start(int stripNum, EventHandler *owner, StripCallback *callback) { + if (_onBegin) + _onBegin(); reset(); _stripNum = stripNum; @@ -678,6 +684,9 @@ void StripManager::remove() { _globals->_sceneManager._scene->loadScene(_sceneNumber); } + if (_onEnd) + _onEnd(); + Action::remove(); } diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h index e263a12d12..f82c07a7dd 100644 --- a/engines/tsage/converse.h +++ b/engines/tsage/converse.h @@ -34,6 +34,8 @@ public: virtual void stripCallback(int v) = 0; }; +typedef void (*SequenceCallback)(int v1, int v2); + class SequenceManager : public Action { private: void setup(); @@ -54,6 +56,7 @@ public: SceneObject *_sceneObject; SceneObject *_objectList[6]; ASound _soundHandler; + SequenceCallback _onCallback; public: SequenceManager(); @@ -187,6 +190,8 @@ public: virtual void synchronize(Serializer &s); }; +typedef void (*StripProc)(); + class StripManager : public Action { private: void reset(); @@ -208,6 +213,8 @@ public: int _field2E8; Common::Array<Obj44> _obj44List; Common::Array<byte> _script; + StripProc _onBegin; + StripProc _onEnd; public: StripManager(); virtual ~StripManager(); diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 42cb1d039f..0de400fe5d 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -22,6 +22,7 @@ #include "common/system.h" #include "common/config-manager.h" +#include "common/util.h" #include "engines/engine.h" #include "graphics/palette.h" #include "tsage/tsage.h" @@ -55,14 +56,30 @@ InvObject::InvObject(int sceneNumber, int rlbNum, int cursorNum, CursorType curs DEALLOCATE(imgData); } +InvObject::InvObject(int visage, int strip, int frame) { + assert(_vm->getGameID() == GType_BlueForce); + _visage = visage; + _strip = strip; + _frame = frame; + _sceneNumber = 0; + _iconResNum = 10; +} + void InvObject::setCursor() { - _globals->_events._currentCursor = _cursorId; + if (_vm->getGameID() == GType_BlueForce) { + // Blue Force cursor handling + _cursorId = (CursorType)BF_GLOBALS._inventory->indexOf(this); + _globals->_events.setCursor(_cursorId); + } else { + // Ringworld cursor handling + _globals->_events._currentCursor = _cursorId; - if (_iconResNum != -1) { - GfxSurface s = surfaceFromRes(_iconResNum, _rlbNum, _cursorNum); + if (_iconResNum != -1) { + GfxSurface s = surfaceFromRes(_iconResNum, _rlbNum, _cursorNum); - Graphics::Surface src = s.lockSurface(); - _globals->_events.setCursor(src, s._transColor, s._centroid, _cursorId); + Graphics::Surface src = s.lockSurface(); + _globals->_events.setCursor(src, s._transColor, s._centroid, _cursorId); + } } } @@ -77,6 +94,31 @@ void InvObjectList::synchronize(Serializer &s) { SYNC_POINTER(_selectedItem); } +int InvObjectList::indexOf(InvObject *obj) const { + int idx = 0; + SynchronizedList<InvObject *>::const_iterator i; + + for (i = _itemList.begin(); i != _itemList.end(); ++i, ++idx) { + if ((*i) == obj) + return idx; + } + + return -1; +} + +InvObject *InvObjectList::getItem(int objectNum) { + SynchronizedList<InvObject *>::const_iterator i = _itemList.begin(); + while (objectNum-- > 0) + ++i; + + return *i; +} + +int InvObjectList::getObjectScene(int objectNum) { + InvObject *obj = getItem(objectNum); + return obj->_sceneNumber; +} + /*--------------------------------------------------------------------------*/ void EventHandler::dispatch() { @@ -279,8 +321,12 @@ void ObjectMover::dispatch() { void ObjectMover::setup(const Common::Point &destPos) { _sceneObject->calcAngle(destPos); - if ((_sceneObject->_objectWrapper) && !(_sceneObject->_flags & OBJFLAG_SUPPRESS_DISPATCH)) - _sceneObject->_objectWrapper->dispatch(); + if ((_sceneObject->_objectWrapper) && !(_sceneObject->_flags & OBJFLAG_SUPPRESS_DISPATCH)) { + if (_vm->getGameID() == GType_Ringworld) + _sceneObject->_objectWrapper->dispatch(); + else + _sceneObject->updateAngle(destPos); + } // Get the difference int diffX = destPos.x - _sceneObject->_position.x; @@ -1238,6 +1284,15 @@ void ScenePalette::setPalette(int index, int count) { } /** + * Set a palette entry + */ +void ScenePalette::setEntry(int index, uint r, uint g, uint b) { + _palette[index * 3] = r; + _palette[index * 3 + 1] = g; + _palette[index * 3 + 2] = b; +} + +/** * Returns the palette index with the closest matching color to that specified * @param r R component * @param g G component @@ -1412,6 +1467,19 @@ void SceneItem::remove() { _globals->_sceneItems.remove(this); } +bool SceneItem::startAction(CursorType action, Event &event) { + if (_vm->getGameID() == GType_Ringworld) { + doAction(action); + return true; + } else if ((action == CURSOR_LOOK) || (action == CURSOR_USE) || (action == CURSOR_TALK) || + (action < CURSOR_LOOK)) { + doAction(action); + return true; + } else { + return false; + } +} + void SceneItem::doAction(int action) { const char *msg = NULL; @@ -1447,7 +1515,11 @@ bool SceneItem::contains(const Common::Point &pt) { } void SceneItem::display(int resNum, int lineNum, ...) { - Common::String msg = !resNum ? Common::String() : _resourceManager->getMessage(resNum, lineNum); + Common::String msg = (!resNum || (resNum == -1)) ? Common::String() : + _resourceManager->getMessage(resNum, lineNum); + + if ((_vm->getGameID() == GType_BlueForce) && BF_GLOBALS._uiElements._active) + BF_GLOBALS._uiElements.hide(); if (_globals->_sceneObjects->contains(&_globals->_sceneText)) { _globals->_sceneText.remove(); @@ -1459,12 +1531,15 @@ void SceneItem::display(int resNum, int lineNum, ...) { Rect textRect; int maxWidth = 120; bool keepOnscreen = false; - bool centerText = true; + bool centerText = _vm->getGameID() == GType_Ringworld; - if (resNum) { + if (resNum != 0) { va_list va; va_start(va, lineNum); + if (resNum == -1) + msg = Common::String(va_arg(va, const char *)); + int mode; do { // Get next instruction @@ -1574,6 +1649,36 @@ void SceneItem::display(int resNum, int lineNum, ...) { _globals->_sceneText.remove(); } + + if ((_vm->getGameID() == GType_BlueForce) && BF_GLOBALS._uiElements._active) { + // Show user interface + BF_GLOBALS._uiElements.show(); + + // Re-show the cursor + BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor()); + } +} + +void SceneItem::display2(int resNum, int lineNum) { + if (_vm->getGameID() == GType_BlueForce) + display(resNum, lineNum, SET_WIDTH, 312, + SET_X, 4 + GLOBALS._sceneManager._scene->_sceneBounds.left, + SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, + SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, + SET_EXT_FGCOLOR, 13, LIST_END); + else + display(resNum, lineNum, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); +} + +void SceneItem::display(const Common::String &msg) { + assert(_vm->getGameID() == GType_BlueForce); + + display(-1, -1, msg.c_str(), + SET_WIDTH, 312, + SET_X, 4 + GLOBALS._sceneManager._scene->_sceneBounds.left, + SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + BF_INTERFACE_Y + 2, + SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, + SET_EXT_FGCOLOR, 13, LIST_END); } /*--------------------------------------------------------------------------*/ @@ -1581,24 +1686,41 @@ void SceneItem::display(int resNum, int lineNum, ...) { void SceneHotspot::doAction(int action) { switch ((int)action) { case CURSOR_LOOK: - display(1, 0, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + if (_vm->getGameID() == GType_BlueForce) + SceneItem::display(LOOK_SCENE_HOTSPOT); + else + display(1, 0, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); break; case CURSOR_USE: - display(1, 5, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + if (_vm->getGameID() == GType_BlueForce) + SceneItem::display(USE_SCENE_HOTSPOT); + else + display(1, 5, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); break; case CURSOR_TALK: - display(1, 15, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + if (_vm->getGameID() == GType_BlueForce) + SceneItem::display(TALK_SCENE_HOTSPOT); + else + display(1, 15, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); break; case CURSOR_WALK: break; default: - display(2, action, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + if (_vm->getGameID() == GType_BlueForce) + SceneItem::display(DEFAULT_SCENE_HOTSPOT); + else + display(2, action, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); break; } } /*--------------------------------------------------------------------------*/ +NamedHotspot::NamedHotspot() : SceneHotspot() { + _resNum = 0; + _lookLineNum = _useLineNum = _talkLineNum = -1; +} + void NamedHotspot::doAction(int action) { switch (action) { case CURSOR_WALK: @@ -1607,14 +1729,26 @@ void NamedHotspot::doAction(int action) { case CURSOR_LOOK: if (_lookLineNum == -1) SceneHotspot::doAction(action); + else if (_vm->getGameID() == GType_BlueForce) + SceneItem::display2(_resNum, _lookLineNum); else - SceneItem::display(_resnum, _lookLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + SceneItem::display(_resNum, _lookLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); break; case CURSOR_USE: if (_useLineNum == -1) SceneHotspot::doAction(action); + else if (_vm->getGameID() == GType_BlueForce) + SceneItem::display2(_resNum, _useLineNum); + else + SceneItem::display(_resNum, _useLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + break; + case CURSOR_TALK: + if (_talkLineNum == -1) + SceneHotspot::doAction(action); + else if (_vm->getGameID() == GType_BlueForce) + SceneItem::display2(_resNum, _talkLineNum); else - SceneItem::display(_resnum, _useLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + SceneItem::display2(_resNum, _talkLineNum); break; default: SceneHotspot::doAction(action); @@ -1622,19 +1756,66 @@ void NamedHotspot::doAction(int action) { } } -void NamedHotspot::setup(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) { +void NamedHotspot::setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) { setBounds(ys, xe, ye, xs); - _resnum = resnum; + _resNum = resnum; _lookLineNum = lookLineNum; _useLineNum = useLineNum; + _talkLineNum = -1; _globals->_sceneItems.addItems(this, NULL); } +void NamedHotspot::setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) { + setBounds(bounds); + _resNum = resNum; + _lookLineNum = lookLineNum; + _talkLineNum = talkLineNum; + _useLineNum = useLineNum; + + switch (mode) { + case 2: + _globals->_sceneItems.push_front(this); + break; + case 4: + _globals->_sceneItems.addBefore(item, this); + break; + case 5: + _globals->_sceneItems.addAfter(item, this); + break; + default: + _globals->_sceneItems.push_back(this); + break; + } +} + +void NamedHotspot::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) { + _sceneRegionId = sceneRegionId; + _resNum = resNum; + _lookLineNum = lookLineNum; + _talkLineNum = talkLineNum; + _useLineNum = useLineNum; + + // Handle adding hotspot to scene items list as necessary + switch (mode) { + case 2: + GLOBALS._sceneItems.push_front(this); + break; + case 3: + break; + default: + GLOBALS._sceneItems.push_back(this); + break; + } +} + void NamedHotspot::synchronize(Serializer &s) { SceneHotspot::synchronize(s); - s.syncAsSint16LE(_resnum); + s.syncAsSint16LE(_resNum); s.syncAsSint16LE(_lookLineNum); s.syncAsSint16LE(_useLineNum); + + if (_vm->getGameID() == GType_BlueForce) + s.syncAsSint16LE(_talkLineNum); } /*--------------------------------------------------------------------------*/ @@ -1661,11 +1842,11 @@ void SceneObjectWrapper::dispatch() { void SceneObjectWrapper::check() { _visageImages.setVisage(_sceneObject->_visage); - int frameCount = _visageImages.getFrameCount(); + int visageCount = _visageImages.getFrameCount(); int angle = _sceneObject->_angle; int strip = _sceneObject->_strip; - if (frameCount == 4) { + if (visageCount == 4) { if ((angle > 314) || (angle < 45)) strip = 4; if ((angle > 44) && (angle < 135)) @@ -1674,7 +1855,7 @@ void SceneObjectWrapper::check() { strip = 3; if ((angle >= 225) && (angle < 315)) strip = 2; - } else if (frameCount == 8) { + } else if (visageCount == 8) { if ((angle > 330) || (angle < 30)) strip = 4; if ((angle >= 30) && (angle < 70)) @@ -1693,8 +1874,8 @@ void SceneObjectWrapper::check() { strip = 8; } - if (strip > frameCount) - strip = frameCount; + if (strip > visageCount) + strip = visageCount; _sceneObject->setStrip(strip); } @@ -1722,6 +1903,8 @@ SceneObject::SceneObject() : SceneHotspot() { _frameChange = 0; _visage = 0; + _strip = 0; + _frame = 0; } SceneObject::SceneObject(const SceneObject &so) : SceneHotspot() { @@ -2008,6 +2191,7 @@ void SceneObject::animate(AnimateMode animMode, ...) { break; case ANIM_MODE_8: + case ANIM_MODE_9: _field68 = va_arg(va, int); _endAction = va_arg(va, Action *); _frameChange = 1; @@ -2024,9 +2208,16 @@ SceneObject *SceneObject::clone() const { } void SceneObject::checkAngle(const SceneObject *obj) { - _angle = GfxManager::getAngle(_position, obj->_position); + checkAngle(obj->_position); +} - if (_objectWrapper) +void SceneObject::checkAngle(const Common::Point &pt) { + int angleAmount = GfxManager::getAngle(_position, pt); + if ((_vm->getGameID() == GType_Ringworld) || + ((angleAmount != -1) && (_animateMode == ANIM_MODE_9))) + _angle = angleAmount; + + if (_objectWrapper && (_vm->getGameID() == GType_Ringworld)) _objectWrapper->dispatch(); } @@ -2194,7 +2385,25 @@ void SceneObject::dispatch() { } else { setFrame(changeFrame()); } + break; + + case ANIM_MODE_9: + if (_frame == _endFrame) { + if (_frameChange != -1) { + _frameChange = -1; + _strip = ((_strip - 1) ^ 1) + 1; + _endFrame = 1; + } else if ((_field68 == 0) || (--_field68 != 0)) { + _frameChange = 1; + _endFrame = getFrameCount(); + setFrame(changeFrame()); + } else { + animEnded(); + } + } else { + setFrame(changeFrame()); + } break; default: @@ -2222,10 +2431,6 @@ void SceneObject::removeObject() { _globals->_sceneItems.remove(this); _globals->_sceneObjects->remove(this); - if (_visage) { - _visage = 0; - } - if (_objectWrapper) { _objectWrapper->remove(); _objectWrapper = NULL; @@ -2283,8 +2488,8 @@ void SceneObject::updateScreen() { } } -void SceneObject::updateAngle(SceneObject *sceneObj) { - checkAngle(sceneObj); +void SceneObject::updateAngle(const Common::Point &pt) { + checkAngle(pt); if (_objectWrapper) _objectWrapper->check(); } @@ -2306,18 +2511,17 @@ void SceneObject::setup(int visage, int stripFrameNum, int frameNum, int posX, i /*--------------------------------------------------------------------------*/ -void SceneObjectExt2::postInit(SceneObjectList *OwnerList) { - _v8A = -1; - _v8C = -1; - _v8E = -1; - SceneObject::postInit(); +void AltSceneObject::postInit(SceneObjectList *OwnerList) { + SceneObject::postInit(&_globals->_sceneManager._altSceneObjects); } -void SceneObjectExt2::synchronize(Serializer &s) { - SceneObject::synchronize(s); - s.syncAsSint16LE(_v8A); - s.syncAsSint16LE(_v8C); - s.syncAsSint16LE(_v8E); +void AltSceneObject::draw() { + Rect destRect = _bounds; + destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left, + -_globals->_sceneManager._scene->_sceneBounds.top); + Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(_priority); + GfxSurface frame = getFrame(); + _globals->_gfxManagerInstance.copyFrom(frame, destRect, priorityRegion); } /*--------------------------------------------------------------------------*/ @@ -2630,12 +2834,21 @@ void SceneText::synchronize(Serializer &s) { _textSurface.synchronize(s); } +void SceneText::updateScreen() { + // FIXME: Hack for Blue Force to handle not refreshing the screen if the user interface + // has been re-activated after showing some scene text + if ((_vm->getGameID() != GType_BlueForce) || (_bounds.top < BF_INTERFACE_Y) || + !BF_GLOBALS._uiElements._visible) + SceneObject::updateScreen(); +} + /*--------------------------------------------------------------------------*/ Visage::Visage() { - _resNum = 0; - _rlbNum = 0; + _resNum = -1; + _rlbNum = -1; _data = NULL; + _flipHoriz = false; } Visage::Visage(const Visage &v) { @@ -2661,7 +2874,32 @@ void Visage::setVisage(int resNum, int rlbNum) { _resNum = resNum; _rlbNum = rlbNum; DEALLOCATE(_data); - _data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum); + + if (_vm->getGameID() == GType_Ringworld) { + // In Ringworld, we immediately get the data + _data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum); + } else { + // Blue Force has an extra indirection via the visage index file + byte *indexData = _resourceManager->getResource(RES_VISAGE, resNum, 9999); + if (rlbNum == 9999) { + _data = indexData; + } else { + if (rlbNum == 0) + rlbNum = 1; + + // Get the flags/rlbNum to use + uint32 v = READ_LE_UINT32(indexData + (rlbNum - 1) * 4 + 2); + int flags = v >> 30; + + if (flags & 3) { + rlbNum = (int)(v & 0xff); + } + _flipHoriz = flags & 1; + + _data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum); + } + } + assert(_data); } } @@ -2680,13 +2918,28 @@ GfxSurface Visage::getFrame(int frameNum) { int offset = READ_LE_UINT32(_data + 2 + frameNum * 4); byte *frameData = _data + offset; - return surfaceFromRes(frameData); + GfxSurface result = surfaceFromRes(frameData); + if (_flipHoriz) flip(result); + return result; } int Visage::getFrameCount() const { return READ_LE_UINT16(_data); } +void Visage::flip(GfxSurface &gfxSurface) { + Graphics::Surface s = gfxSurface.lockSurface(); + + for (int y = 0; y < s.h; ++y) { + // Flip the line + byte *lineP = (byte *)s.getBasePtr(0, y); + for (int x = 0; x < (s.w / 2); ++x) + SWAP(lineP[x], lineP[s.w - x - 1]); + } + + gfxSurface.unlockSurface(); +} + /*--------------------------------------------------------------------------*/ Player::Player(): SceneObject() { @@ -2710,11 +2963,16 @@ void Player::disableControl() { _canWalk = false; _uiEnabled = false; _globals->_events.setCursor(CURSOR_NONE); + _enabled = false; + + if ((_vm->getGameID() == GType_BlueForce) && BF_GLOBALS._uiElements._active) + BF_GLOBALS._uiElements.hide(); } void Player::enableControl() { _canWalk = true; _uiEnabled = true; + _enabled = true; _globals->_events.setCursor(CURSOR_WALK); switch (_globals->_events.getCursor()) { @@ -2728,6 +2986,9 @@ void Player::enableControl() { _globals->_events.setCursor(CURSOR_WALK); break; } + + if ((_vm->getGameID() == GType_BlueForce) && BF_GLOBALS._uiElements._active) + BF_GLOBALS._uiElements.show(); } void Player::process(Event &event) { @@ -2735,6 +2996,9 @@ void Player::process(Event &event) { (_globals->_events.getCursor() == CURSOR_WALK) && _globals->_player._canWalk && (_position != event.mousePos) && _globals->_sceneObjects->contains(this)) { + if ((_vm->getGameID() == GType_BlueForce) && !BF_GLOBALS._player._enabled) + return; + PlayerMover *newMover = new PlayerMover(); Common::Point destPos(event.mousePos.x + _globals->_sceneManager._scene->_sceneBounds.left, event.mousePos.y + _globals->_sceneManager._scene->_sceneBounds.top); @@ -2750,6 +3014,9 @@ void Player::synchronize(Serializer &s) { s.syncAsByte(_canWalk); s.syncAsByte(_uiEnabled); s.syncAsSint16LE(_field8C); + + if (_vm->getGameID() == GType_BlueForce) + s.syncAsByte(_enabled); } /*--------------------------------------------------------------------------*/ @@ -3394,8 +3661,11 @@ void ScenePriorities::load(int resNum) { Region *ScenePriorities::find(int priority) { // If no priority regions are loaded, then return the placeholder region - if (empty()) - return &_defaultPriorityRegion; + if (empty()) { + if (_vm->getGameID() == GType_Ringworld) + return &_defaultPriorityRegion; + return NULL; + } if (priority > 255) priority = 255; @@ -3511,9 +3781,7 @@ void SceneHandler::process(Event &event) { // Check for displaying right-click dialog if ((event.eventType == EVENT_BUTTON_DOWN) && (event.btnState == BTNSHIFT_RIGHT) && _globals->_player._uiEnabled) { - RightClickDialog *dlg = new RightClickDialog(); - dlg->execute(); - delete dlg; + _globals->_game->rightClick(); event.handled = true; return; @@ -3541,8 +3809,16 @@ void SceneHandler::process(Event &event) { } // Mouse press handling - if (_globals->_player._uiEnabled && (event.eventType == EVENT_BUTTON_DOWN) && - !_globals->_sceneItems.empty()) { + bool enabled = (_vm->getGameID() == GType_BlueForce) ? _globals->_player._enabled : + _globals->_player._uiEnabled; + if (enabled && (event.eventType == EVENT_BUTTON_DOWN) && !_globals->_sceneItems.empty()) { + // Check if the mouse is on the player + if (_globals->_player.contains(event.mousePos)) { + playerAction(event); + if (event.handled) + return; + } + // Scan the item list to find one the mouse is within SynchronizedList<SceneItem *>::iterator i = _globals->_sceneItems.begin(); while ((i != _globals->_sceneItems.end()) && !(*i)->contains(event.mousePos)) @@ -3550,7 +3826,8 @@ void SceneHandler::process(Event &event) { if (i != _globals->_sceneItems.end()) { // Pass the action to the item - (*i)->doAction(_globals->_events.getCursor()); + (*i)->startAction(_globals->_events.getCursor(), event); + event.handled = _globals->_events.getCursor() != CURSOR_WALK; if (_globals->_player._uiEnabled && _globals->_player._canWalk && @@ -3561,8 +3838,14 @@ void SceneHandler::process(Event &event) { } else if (_globals->_player._uiEnabled && (_globals->_events.getCursor() != CURSOR_LOOK)) { _globals->_events.setCursor(CURSOR_USE); } + + if (_vm->getGameID() == GType_BlueForce) + event.handled = true; } + // Handle any fallback text display + processEnd(event); + // Handle player processing _globals->_player.process(event); } diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 19987ed399..ccb3817b16 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -55,8 +55,13 @@ public: CursorType _cursorId; Common::String _description; int _iconResNum; + + int _visage; + int _strip; + int _frame; public: InvObject(int sceneNumber, int rlbNum, int cursorNum, CursorType cursorId, const Common::String description); + InvObject(int visage, int strip, int frame); bool inInventory() const { return _sceneNumber == 1; } void setCursor(); @@ -73,6 +78,9 @@ public: InvObject *_selectedItem; InvObjectList(); + int indexOf(InvObject *obj) const; + InvObject *getItem(int objectNum); + int getObjectScene(int objectNum); virtual Common::String getClassName() { return "InvObjectList"; } virtual void synchronize(Serializer &s); @@ -157,6 +165,18 @@ public: int _state; }; +#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ + _globals->_player.addMover(mover, &pt, this); } +#define ADD_PLAYER_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ + OBJ.addMover(mover, &pt, NULL); } +#define ADD_PLAYER_MOVER_THIS(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ + OBJ.addMover(mover, &pt, this); } + +#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \ + OBJ.addMover(mover, &pt, this); } +#define ADD_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \ + OBJ.addMover(mover, &pt, NULL); } + class ObjectMover : public EventHandler { public: Common::Point _destPosition; @@ -351,6 +371,7 @@ public: bool loadPalette(int paletteNum); void refresh(); void setPalette(int index, int count); + void setEntry(int index, uint r, uint g, uint b); uint8 indexOf(uint r, uint g, uint b, int threshold = 0xffff); void getPalette(int start = 0, int count = 256); void signalListeners(); @@ -394,16 +415,15 @@ public: virtual Common::String getClassName() { return "SceneItem"; } virtual void remove(); virtual void destroy() {} - virtual void startMover(CursorType action) { doAction(action); } + virtual bool startAction(CursorType action, Event &event); virtual void doAction(int action); bool contains(const Common::Point &pt); void setBounds(const Rect &newBounds) { _bounds = newBounds; } void setBounds(const int ys, const int xe, const int ye, const int xs) { _bounds = Rect(MIN(xs, xe), MIN(ys, ye), MAX(xs, xe), MAX(ys, ye)); } static void display(int resNum, int lineNum, ...); - static void display2(int resNum, int lineNum) { - display(resNum, lineNum, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } + static void display2(int resNum, int lineNum); + static void display(const Common::String &msg); }; class SceneItemExt : public SceneItem { @@ -427,13 +447,15 @@ public: class NamedHotspot : public SceneHotspot { public: - int _resnum, _lookLineNum, _useLineNum; - NamedHotspot() : SceneHotspot() {} + int _resNum, _lookLineNum, _useLineNum, _talkLineNum; + NamedHotspot(); - void setup(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum); virtual void doAction(int action); virtual Common::String getClassName() { return "NamedHotspot"; } virtual void synchronize(Serializer &s); + virtual void setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum); + virtual void setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item); + virtual void setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode); }; enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3, @@ -447,9 +469,12 @@ class SceneObject; class Visage { private: byte *_data; + + void flip(GfxSurface &s); public: int _resNum; int _rlbNum; + bool _flipHoriz; public: Visage(); Visage(const Visage &v); @@ -458,7 +483,7 @@ public: void setVisage(int resNum, int rlbNum = 9999); GfxSurface getFrame(int frameNum); int getFrameCount() const; - Visage &operator=(const Visage &s); + Visage &operator=(const Visage &gfxSurface); }; class SceneObjectWrapper : public EventHandler { @@ -542,6 +567,7 @@ public: void animate(AnimateMode animMode, ...); SceneObject *clone() const; void checkAngle(const SceneObject *obj); + void checkAngle(const Common::Point &pt); void hide(); void show(); int getSpliceArea(const SceneObject *obj); @@ -560,34 +586,20 @@ public: virtual void draw(); virtual void proc19() {} virtual void updateScreen(); - // New methods introduced by Blue FOrce - virtual void updateAngle(SceneObject *sceneObj); + // New methods introduced by Blue Force + virtual void updateAngle(const Common::Point &pt); virtual void changeAngle(int angle); void setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority); }; -class SceneObjectExt : public SceneObject { -public: - int _state; - - virtual void synchronize(Serializer &s) { - SceneObject::synchronize(s); - s.syncAsSint16LE(_state); - } - virtual Common::String getClassName() { return "SceneObjectExt"; } -}; - -class SceneObjectExt2: public SceneObject { +class AltSceneObject: public SceneObject { public: - int _v88, _v8A, _v8C, _v8E; - - virtual Common::String getClassName() { return "BF100Object"; } - virtual void synchronize(Serializer &s); + virtual Common::String getClassName() { return "AltObjectExt"; } virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void draw(); }; - class SceneText : public SceneObject { public: int _fontNumber; @@ -606,6 +618,7 @@ public: virtual void synchronize(Serializer &s); virtual Common::String getClassName() { return "SceneText"; } virtual GfxSurface getFrame() { return _textSurface; } + virtual void updateScreen(); }; class Player : public SceneObject { @@ -613,6 +626,7 @@ public: bool _canWalk; bool _uiEnabled; int _field8C; + bool _enabled; public: Player(); @@ -721,6 +735,7 @@ public: _objList.remove(sceneObj); _listAltered = true; } + void clear() { _objList.clear(); } }; class ScenePriorities : public Common::List<Region> { @@ -807,6 +822,7 @@ public: assert((idx >= 1) && (idx <= (int)_regionList.size())); return _regionList[idx - 1]; } + void proc1(int v) { warning("TODO: WalkRegions::proc1"); } }; /*--------------------------------------------------------------------------*/ @@ -847,6 +863,9 @@ public: int _delayTicks; Common::String _saveName; uint32 _prevFrameNumber; +protected: + virtual void playerAction(Event &event) {} + virtual void processEnd(Event &event) {} public: SceneHandler(); void registerHandler(); diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index e3c4569dd2..2a6b4eb66b 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -32,6 +32,7 @@ Debugger::Debugger() : GUI::Debugger() { DCmd_Register("scene", WRAP_METHOD(Debugger, Cmd_Scene)); DCmd_Register("walk_regions", WRAP_METHOD(Debugger, Cmd_WalkRegions)); DCmd_Register("priority_regions", WRAP_METHOD(Debugger, Cmd_PriorityRegions)); + DCmd_Register("scene_regions", WRAP_METHOD(Debugger, Cmd_SceneRegions)); DCmd_Register("setflag", WRAP_METHOD(Debugger, Cmd_SetFlag)); DCmd_Register("getflag", WRAP_METHOD(Debugger, Cmd_GetFlag)); DCmd_Register("clearflag", WRAP_METHOD(Debugger, Cmd_ClearFlag)); @@ -171,6 +172,59 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) { } /* + * This command draws the scene regions onto the screen. These are the regions + * used by hotspots that have non-rectangular areas. + */ +bool Debugger::Cmd_SceneRegions(int argc, const char **argv) { + int regionNum = 0; + + // Check for an optional specific region to display + if (argc == 2) + regionNum = strToInt(argv[1]); + + // Color index to use for the first priority region + int color = 16; + int count = 0; + + // Lock the background surface for access + Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface(); + + Common::List<Region>::iterator i = _globals->_sceneRegions.begin(); + Common::String regionsDesc; + + for (; i != _globals->_sceneRegions.end(); ++i, ++color, ++count) { + Region &r = *i; + + if ((regionNum == 0) || (regionNum == (count + 1))) { + for (int y = 0; y < destSurface.h; ++y) { + byte *destP = (byte *)destSurface.getBasePtr(0, y); + + for (int x = 0; x < destSurface.w; ++x) { + if (r.contains(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + x, + _globals->_sceneManager._scene->_sceneBounds.top + y))) + *destP = color; + ++destP; + } + } + } + + regionsDesc += Common::String::format("Region id = %d bounds=%d,%d,%d,%d\n", + r._regionId, r._bounds.left, r._bounds.top, r._bounds.right, r._bounds.bottom); + } + + // Release the surface + _globals->_sceneManager._scene->_backSurface.unlockSurface(); + + // Mark the scene as requiring a full redraw + _globals->_paneRefreshFlag[0] = 2; + + DebugPrintf("Total regions = %d\n", count); + DebugPrintf("%s", regionsDesc.c_str()); + + return true; +} + +/* * This command sets a flag */ bool Debugger::Cmd_SetFlag(int argc, const char **argv) { @@ -414,7 +468,7 @@ bool Debugger::Cmd_Hotspots(int argc, const char **argv) { if (ri != _globals->_sceneRegions.end()) { // Fill out the areas defined by the region Region &r = *ri; - + for (int y = r._bounds.top; y < r._bounds.bottom; ++y) { LineSliceSet set = r.getLineSlices(y); diff --git a/engines/tsage/debugger.h b/engines/tsage/debugger.h index 8bc1b06336..fcdbc2d243 100644 --- a/engines/tsage/debugger.h +++ b/engines/tsage/debugger.h @@ -37,6 +37,7 @@ protected: bool Cmd_Scene(int argc, const char **argv); bool Cmd_WalkRegions(int argc, const char **argv); bool Cmd_PriorityRegions(int argc, const char **argv); + bool Cmd_SceneRegions(int argc, const char **argv); bool Cmd_SetFlag(int argc, const char **argv); bool Cmd_GetFlag(int argc, const char **argv); bool Cmd_ClearFlag(int argc, const char **argv); diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index ae385b8c15..841a7b776d 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -109,186 +109,6 @@ ConfigDialog::ConfigDialog() : GUI::OptionsDialog("", "GlobalConfig") { /*--------------------------------------------------------------------------*/ -#define BUTTON_WIDTH 28 -#define BUTTON_HEIGHT 29 - -RightClickButton::RightClickButton(int buttonIndex, int xp, int yp) : GfxButton() { - _buttonIndex = buttonIndex; - this->_bounds.left = xp; - this->_bounds.top = yp; - this->_bounds.setWidth(BUTTON_WIDTH); - this->_bounds.setHeight(BUTTON_HEIGHT); - _savedButton = NULL; -} - -void RightClickButton::highlight() { - if (_savedButton) { - // Button was previously highlighted, so de-highlight by restoring saved area - _globals->gfxManager().copyFrom(*_savedButton, _bounds.left, _bounds.top); - delete _savedButton; - _savedButton = NULL; - } else { - // Highlight button by getting the needed highlighted image resource - _savedButton = Surface_getArea(_globals->gfxManager().getSurface(), _bounds); - - uint size; - byte *imgData = _resourceManager->getSubResource(7, 2, _buttonIndex, &size); - - GfxSurface btnSelected = surfaceFromRes(imgData); - _globals->gfxManager().copyFrom(btnSelected, _bounds.left, _bounds.top); - - DEALLOCATE(imgData); - } -} - -/*--------------------------------------------------------------------------*/ - -/** - * This dialog implements the right-click dialog - */ -RightClickDialog::RightClickDialog() : GfxDialog(), - _walkButton(1, 48, 12), _lookButton(2, 31, 29), _useButton(3, 65, 29), - _talkButton(4, 14, 47), _inventoryButton(5, 48, 47), _optionsButton(6, 83, 47) { - Rect rectArea, dialogRect; - - // Set the palette and change the cursor - _gfxManager.setDialogPalette(); - _globals->_events.setCursor(CURSOR_ARROW); - - // Get the dialog image - _surface = surfaceFromRes(7, 1, 1); - - // Set the dialog position - dialogRect.resize(_surface, 0, 0, 100); - dialogRect.center(_globals->_events._mousePos.x, _globals->_events._mousePos.y); - - // Ensure the dialog will be entirely on-screen - Rect screenRect = _globals->gfxManager()._bounds; - screenRect.collapse(4, 4); - dialogRect.contain(screenRect); - - _bounds = dialogRect; - _gfxManager._bounds = _bounds; - - _highlightedButton = NULL; - _selectedAction = -1; -} - -RightClickDialog::~RightClickDialog() { -} - -RightClickButton *RightClickDialog::findButton(const Common::Point &pt) { - RightClickButton *btnList[] = { &_walkButton, &_lookButton, &_useButton, &_talkButton, &_inventoryButton, &_optionsButton }; - - for (int i = 0; i < 6; ++i) { - btnList[i]->_owner = this; - - if (btnList[i]->_bounds.contains(pt)) - return btnList[i]; - } - - return NULL; -} - -void RightClickDialog::draw() { - // Save the covered background area - _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); - - // Draw the dialog image - _globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top); -} - -bool RightClickDialog::process(Event &event) { - switch (event.eventType) { - case EVENT_MOUSE_MOVE: { - // Check whether a button is highlighted - RightClickButton *btn = findButton(event.mousePos); - - if (btn != _highlightedButton) { - // De-highlight any previously selected button - if (_highlightedButton) { - _highlightedButton->highlight(); - _highlightedButton = NULL; - } - if (btn) { - // Highlight the new button - btn->highlight(); - _highlightedButton = btn; - } - } - event.handled = true; - return true; - } - - case EVENT_BUTTON_DOWN: - // If a button is highlighted, then flag the selected button index - if (_highlightedButton) - _selectedAction = _highlightedButton->_buttonIndex; - else - _selectedAction = _lookButton._buttonIndex; - event.handled = true; - return true; - - default: - break; - } - - return false; -} - -void RightClickDialog::execute() { - // Draw the dialog - draw(); - - // Dialog event handler loop - _gfxManager.activate(); - - while (!_vm->shouldQuit() && (_selectedAction == -1)) { - Event evt; - while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) { - evt.mousePos.x -= _bounds.left; - evt.mousePos.y -= _bounds.top; - - process(evt); - } - - g_system->delayMillis(10); - g_system->updateScreen(); - } - - // Execute the specified action - switch (_selectedAction) { - case 1: - // Look action - _globals->_events.setCursor(CURSOR_LOOK); - break; - case 2: - // Walk action - _globals->_events.setCursor(CURSOR_WALK); - break; - case 3: - // Use cursor - _globals->_events.setCursor(CURSOR_USE); - break; - case 4: - // Talk cursor - _globals->_events.setCursor(CURSOR_TALK); - break; - case 5: - // Inventory dialog - InventoryDialog::show(); - break; - case 6: - // Dialog options - OptionsDialog::show(); - break; - } - - _gfxManager.deactivate(); -} - -/*--------------------------------------------------------------------------*/ - void ModalDialog::draw() { // Set the palette for use in the dialog setPalette(); @@ -547,6 +367,7 @@ void OptionsDialog::show() { _globals->_game->restartGame(); } else if (btn == &dlg->_btnSound) { // Sound dialog + SoundDialog::execute(); } else if (btn == &dlg->_btnSave) { // Save button _globals->_game->saveGame(); @@ -594,5 +415,14 @@ OptionsDialog::OptionsDialog() { setCenter(160, 100); } +/*--------------------------------------------------------------------------*/ + +void SoundDialog::execute() { + ConfigDialog *dlg = new ConfigDialog(); + dlg->runModal(); + delete dlg; + _globals->_soundManager.syncSounds(); + _globals->_events.setCursorFromFlag(); +} } // End of namespace TsAGE diff --git a/engines/tsage/dialogs.h b/engines/tsage/dialogs.h index 55adb6c813..35ed60ba1a 100644 --- a/engines/tsage/dialogs.h +++ b/engines/tsage/dialogs.h @@ -49,35 +49,6 @@ public: ConfigDialog(); }; -class RightClickButton : public GfxButton { -private: - GfxSurface *_savedButton; -public: - int _buttonIndex; - - RightClickButton(int buttonIndex, int xp, int yp); - ~RightClickButton() { delete _savedButton; } - - virtual void highlight(); -}; - -class RightClickDialog : public GfxDialog { -private: - GfxSurface _surface; - RightClickButton *_highlightedButton; - int _selectedAction; - RightClickButton _walkButton, _lookButton, _useButton, _talkButton, _inventoryButton, _optionsButton; - - RightClickButton *findButton(const Common::Point &pt); -public: - RightClickDialog(); - ~RightClickDialog(); - - virtual void draw(); - virtual bool process(Event &event); - void execute(); -}; - /*--------------------------------------------------------------------------*/ class ModalDialog : public GfxDialog { @@ -128,6 +99,13 @@ public: static void show(); }; +/*--------------------------------------------------------------------------*/ + +class SoundDialog { +public: + static void execute(); +}; + } // End of namespace TsAGE #endif diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 44c79bd2fe..d2ade971fa 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -149,6 +149,7 @@ void EventsClass::setCursor(CursorType cursorType) { const byte *cursor; bool delFlag = true; uint size; + bool questionEnabled = false; switch (cursorType) { case CURSOR_NONE: @@ -164,22 +165,40 @@ void EventsClass::setCursor(CursorType cursorType) { case CURSOR_LOOK: // Look cursor - cursor = _resourceManager->getSubResource(4, 1, 5, &size); + if (_vm->getGameID() == GType_BlueForce) + cursor = _resourceManager->getSubResource(1, 5, 3, &size); + else + cursor = _resourceManager->getSubResource(4, 1, 5, &size); _currentCursor = CURSOR_LOOK; break; case CURSOR_USE: // Use cursor - cursor = _resourceManager->getSubResource(4, 1, 4, &size); + if (_vm->getGameID() == GType_BlueForce) { + cursor = _resourceManager->getSubResource(1, 5, 2, &size); + } else { + cursor = _resourceManager->getSubResource(4, 1, 4, &size); + } _currentCursor = CURSOR_USE; break; case CURSOR_TALK: // Talk cursor - cursor = _resourceManager->getSubResource(4, 1, 3, &size); + if (_vm->getGameID() == GType_BlueForce) { + cursor = _resourceManager->getSubResource(1, 5, 4, &size); + } else { + cursor = _resourceManager->getSubResource(4, 1, 3, &size); + } _currentCursor = CURSOR_TALK; break; + case CURSOR_EXIT: + // Exit cursor (Blue Force) + assert(_vm->getGameID() == GType_BlueForce); + cursor = _resourceManager->getSubResource(1, 5, 7, &size); + _currentCursor = CURSOR_EXIT; + break; + case CURSOR_ARROW: // Arrow cursor cursor = CURSOR_ARROW_DATA; @@ -188,10 +207,22 @@ void EventsClass::setCursor(CursorType cursorType) { case CURSOR_WALK: default: - // Walk cursor - cursor = CURSOR_WALK_DATA; - _currentCursor = CURSOR_WALK; - delFlag = false; + if (_vm->getGameID() == GType_BlueForce) { + if (cursorType == CURSOR_WALK) { + cursor = _resourceManager->getSubResource(1, 5, 1, &size); + } else { + // Inventory icon + cursor = _resourceManager->getSubResource(10, ((int)cursorType - 1) / 20 + 1, + ((int)cursorType - 1) % 20 + 1, &size); + questionEnabled = true; + } + _currentCursor = cursorType; + } else { + // For Ringworld, always treat as the walk cursor + cursor = CURSOR_WALK_DATA; + _currentCursor = CURSOR_WALK; + delFlag = false; + } break; } @@ -205,6 +236,10 @@ void EventsClass::setCursor(CursorType cursorType) { if (delFlag) DEALLOCATE(cursor); + + // For Blue Force, enable the question button when an inventory icon is selected + if (_vm->getGameID() == GType_BlueForce) + BF_GLOBALS._uiElements._question.setEnabled(questionEnabled); } void EventsClass::pushCursor(CursorType cursorType) { @@ -270,6 +305,17 @@ void EventsClass::setCursor(Graphics::Surface &cursor, int transColor, const Com _currentCursor = cursorId; } +void EventsClass::setCursor(GfxSurface &cursor) { + // TODO: Find proper parameters for this form in Blue Force + Graphics::Surface s = cursor.lockSurface(); + + const byte *cursorData = (const byte *)s.getBasePtr(0, 0); + CursorMan.replaceCursor(cursorData, cursor.getBounds().width(), cursor.getBounds().height(), + cursor._centroid.x, cursor._centroid.y, cursor._transColor); + + _lastCursor = CURSOR_NONE; +} + void EventsClass::setCursorFromFlag() { setCursor(isCursorVisible() ? _currentCursor : CURSOR_NONE); } @@ -278,8 +324,10 @@ void EventsClass::showCursor() { setCursor(_currentCursor); } -void EventsClass::hideCursor() { +CursorType EventsClass::hideCursor() { + CursorType oldCursor = _currentCursor; setCursor(CURSOR_NONE); + return oldCursor; } bool EventsClass::isCursorVisible() const { diff --git a/engines/tsage/events.h b/engines/tsage/events.h index c36db59270..3680250ee9 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -54,6 +54,7 @@ public: }; enum CursorType { + // Ringworld objects OBJECT_STUNNER = 0, OBJECT_SCANNER = 1, OBJECT_STASIS_BOX = 2, OBJECT_INFODISK = 3, OBJECT_STASIS_NEGATOR = 4, OBJECT_KEY_DEVICE = 5, OBJECT_MEDKIT = 6, OBJECT_LADDER = 7, OBJECT_ROPE = 8, OBJECT_KEY = 9, OBJECT_TRANSLATOR = 10, OBJECT_ALE = 11, @@ -63,10 +64,32 @@ enum CursorType { OBJECT_NULLIFIER = 25, OBJECT_PEG = 26, OBJECT_VIAL = 27, OBJECT_JACKET = 28, OBJECT_TUNIC2 = 29, OBJECT_BONE = 30, OBJECT_EMPTY_JAR = 31, OBJECT_JAR = 32, + // Blue Force objects + INV_NONE = 0, INV_COLT45 = 1, INV_AMMO_CLIP = 2, INV_SPARE_CLIP = 3, INV_HANDCUFFS = 4, + INV_GREENS_GUN = 5, INV_TICKET_BOOK = 6, INV_MIRANDA_CARD = 7, INV_FOREST_RAP = 8, + INV_GREEN_ID = 9, INV_BASEBALL_CARD = 10, INV_BOOKING_GREEN = 11, INV_FLARE = 12, + INV_COBB_RAP = 13, INV_22_BULLET = 14, INV_AUTO_RIFLE = 15, INV_WIG = 16, INV_FRANKIE_ID = 17, + INV_TYRONE_ID = 18, INV_22_SNUB = 19, INV_BOOKING_FRANKIE = 21, INV_BOOKING_GANG = 22, + INV_FBI_TELETYPE = 23, INV_DA_NOTE = 24, INV_PRINT_OUT = 25, INV_WHAREHOUSE_KEYS = 26, + INV_CENTER_PUNCH = 27, INV_TRANQ_GUN = 28, INV_HOOK = 29, INV_RAGS = 30, INV_JAR = 31, + INV_SCREWDRIVER = 32, INV_D_FLOPPY = 33, INV_BLANK_DISK = 34, INV_STICK = 35, + INV_CRATE1 = 36, INV_CRATE2 = 37, INV_SHOEBOX = 38, INV_BADGE = 39, INV_RENTAL_COUPON = 41, + INV_NICKEL = 42, INV_LYLE_CARD = 43, INV_CARTER_NOTE = 44, INV_MUG_SHOT = 45, + INV_CLIPPING = 46, INV_MICROFILM = 47, INV_WAVE_KEYS = 48, INV_RENTAL_KEYS = 49, + INV_NAPKIN = 50, INV_DMV_PRINTOUT = 51, INV_FISHING_NET = 52, INV_ID = 53, + INV_9MM_BULLETS = 54, INV_SCHEDULE = 55, INV_GRENADES = 56, INV_YELLOW_CORD = 57, + INV_HALF_YELLOW_CORD = 58, INV_BLACK_CORD = 59, INV_HALF_BLACK_CORD = 61, INV_WARRANT = 62, + INV_JACKET = 63, INV_GREENS_KNIFE = 64, INV_DOG_WHISTLE = 65, INV_AMMO_BELT = 66, + BF_LAST_INVENT = 67, + + // Cursors CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800, + CURSOR_1000 = 0x1000, CURSOR_EXIT = 0x7004, CURSOR_NONE = -1, CURSOR_CROSSHAIRS = -2, CURSOR_ARROW = -3 }; +class GfxSurface; + class EventsClass : public SaveListener { private: Common::Event _event; @@ -84,10 +107,11 @@ public: void pushCursor(CursorType cursorType); void popCursor(); void setCursor(Graphics::Surface &cursor, int transColor, const Common::Point &hotspot, CursorType cursorId); + void setCursor(GfxSurface &cursor); void setCursorFromFlag(); CursorType getCursor() const { return _currentCursor; } void showCursor(); - void hideCursor(); + CursorType hideCursor(); bool isCursorVisible() const; bool pollEvent(); @@ -98,6 +122,7 @@ public: Common::EventType type() { return _event.type; } uint32 getFrameNumber() const { return _frameNumber; } void delay(int numFrames); + bool isInventoryIcon() const { return _currentCursor < 256; } virtual void listenerSynchronize(Serializer &s); static void loadNotifierProc(bool postFlag); diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 27067c7d1c..1895fbc2d2 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -74,7 +74,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _gfxColors.foreground = 83; _fontColors.background = 88; _fontColors.foreground = 92; - _dialogCenter.y = 165; + _dialogCenter.y = 140; } else if ((_vm->getGameID() == GType_Ringworld) && (_vm->getFeatures() & GF_CD)) { _gfxFontNumber = 50; _gfxColors.background = 53; @@ -121,6 +121,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface case GType_BlueForce: _game = new BlueForce::BlueForceGame(); + _inventory = new BlueForce::BlueForceInvObjectList(); _sceneHandler = new BlueForce::SceneHandlerExt(); break; } @@ -183,32 +184,79 @@ void Globals::dispatchSounds() { namespace BlueForce { BlueForceGlobals::BlueForceGlobals(): Globals() { +} + +void BlueForceGlobals::synchronize(Serializer &s) { + Globals::synchronize(s); + + s.syncAsSint16LE(_dayNumber); + s.syncAsSint16LE(_v4CEA4); + s.syncAsSint16LE(_deathReason); + s.syncAsSint16LE(_driveFromScene); + s.syncAsSint16LE(_driveToScene); + s.syncAsSint16LE(_v4CF9E); + s.syncAsSint16LE(_v4E238); + s.syncAsSint16LE(_v501FC); + s.syncAsSint16LE(_v50696); + s.syncAsSint16LE(_v51C42); + s.syncAsSint16LE(_v51C44); + s.syncAsSint16LE(_interfaceY); + s.syncAsSint16LE(_bookmark); + s.syncAsSint16LE(_mapLocationId); + s.syncAsSint16LE(_clip1Bullets); + s.syncAsSint16LE(_clip2Bullets); + +} + +void BlueForceGlobals::reset() { + Globals::reset(); + _scenePalette.clearListeners(); + + _scrollFollower = &_player; + _bookmark = bNone; + + // Reset the inventory + ((BlueForceInvObjectList *)_inventory)->reset(); + BF_GLOBALS._uiElements.updateInventory(); + BF_GLOBALS._uiElements._scoreValue = 0; + + _mapLocationId = 1; + _driveFromScene = 300; + _driveToScene = 0; + _interfaceY = 0; _v51C44 = 1; - _v4CEA2 = 0; - _v4CEA8 = 0; - _v4CEF2 = 0; - _v4CEF4 = 0; + _dayNumber = 0; + _v4CEA4 = 0; + _deathReason = 0; _v4CF9E = 0; _v4E238 = 0; + _v50696 = 0; _v501FC = 0; + _v5098C = 0; + _v5098D = 0; _v51C42 = 0; - _bikiniHutState = 0; - _mapLocationId = 1; - Common::set_to(&_globalFlags[0], &_globalFlags[12], 0); + _clip1Bullets = 8; + _clip2Bullets = 8; } -void BlueForceGlobals::synchronize(Serializer &s) { - Globals::synchronize(s); - error("Sync variables"); +bool BlueForceGlobals::getHasBullets() { + if (!getFlag(fGunLoaded)) + return false; + return BF_GLOBALS.getFlag(fLoadedSpare) ? (_clip2Bullets > 0) : (_clip1Bullets > 0); } -bool BlueForceGlobals::getFlag(int v) { - return _globalFlags[v / 16] & (1 << (v % 8)); +void BlueForceGlobals::set2Flags(int flagNum) { + if (!getFlag(flagNum + 1)) { + setFlag(flagNum + 1); + setFlag(flagNum); + } } -void BlueForceGlobals::setFlag(int v) { - _globalFlags[v / 16] |= 1 << (v % 8); +bool BlueForceGlobals::removeFlag(int flagNum) { + bool result = getFlag(flagNum); + clearFlag(flagNum); + return result; } } // end of namespace BlueForce diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 2d409b6343..651a0c8893 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -30,6 +30,7 @@ #include "tsage/events.h" #include "tsage/sound.h" #include "tsage/saveload.h" +#include "tsage/blue_force/blueforce_ui.h" namespace TsAGE { @@ -110,29 +111,88 @@ namespace BlueForce { using namespace TsAGE; +enum Bookmark { + bNone, + bStartOfGame, bCalledToDomesticViolence, bArrestedGreen, bLauraToParamedics, + bBookedGreen, bStoppedFrankie, bBookedFrankie, bBookedFrankieEvidence, + bEndOfWorkDayOne, bTalkedToGrannyAboutSkipsCard, bLyleStoppedBy, bEndDayOne, + bInspectionDone, bCalledToDrunkStop, bArrestedDrunk, bEndDayTwo, + bFlashBackOne, bFlashBackTwo, bFlashBackThree, bDroppedOffLyle, bEndDayThree, + bDoneWithIsland, bDoneAtLyles, bEndDayFour, bInvestigateBoat, bFinishedWGreen, + bAmbushed, bAmbushOver, bEndOfGame +}; + +enum Flag { + JAKE_FILE_COPIED, gunClean, onBike, onDuty, fShowedIdToKate, fLateToMarina, + fCalledBackup, fWithLyle, gunDrawn, fBackupArrived340, fBriefedBackup, + fGotAllSkip340, fToldToLeave340, fBackupIn350, fNetInBoat, fForbesWaiting, + fWithCarter, fTalkedToTony, fMugOnKate, takenWeasel, gotTrailer450, + showEugeneNapkin, showRapEugene, fMgrCallsWeasel, fCarterMetLyle, + fGunLoaded, fLoadedSpare, showEugeneID, fRandomShot350, examinedFile810, + shownLyleCrate1, shownLyleRapsheet, shownLyleDisk, shownLylePO, + fCanDrawGun, fGotAutoWeapon, fGotBulletsFromDash, fShotSuttersDesk, + greenTaken, fLateToDrunkStop, didDrunk, fSearchedTruck, seenFolder, + showMugAround, frankInJail, fTalkedCarterDay3, fDecryptedBluePrints, + fTalkedToDrunkInCar, fToldLyleOfSchedule, fTalkedShooterNoBkup, + fTalkedDriverNoBkup, fDriverOutOfTruck, readGreenRights, readFrankRights, + talkedToHarrisAboutDrunk, unlockBoat, fShootGoon, fBlowUpGoon, + fTalkedToBarry, fTalkedToLarry, fLeftTraceIn920, fLeftTraceIn900, + fBackupAt340, fShotNicoIn910, fGotPointsForTktBook, fGotPointsForMCard, + fShowedBluePrint, fGotPointsForPunch, fGotPointsForBox, fGotPointsForBank, + fGotPointsForCombo, fGotPointsForCoin, fGotPointsForCPU, fGotPointsForBoots, + fGotPointsForCrate, fGotPointsForBlackCord, fGotPointsForGeneratorPlug, + fGotPointsForFuseBoxPlug, fGotPointsForStartGenerator, fGotPointsForLightsOn, + fGotPointsForOpeningDoor, fGotPointsForClosingDoor, fGotPointsForLightsOff, + fGotPointsForGeneratorOff, fGotPointsForCordOnForklift, fGotPointsForCuffingNico, + fGotPointsForCuffingDA, fGotPointsForSearchingNico, fGotPointsForSearchingDA, + fLeftTraceIn910, fBookedGreenEvidence, fGotPointsForCleaningGun, + fGotPointsForMemo, fGotPointsForFBI, fTookTrailerAmmo, fAlertedGreen355, + fGotGreen355fTalkedToGrannyDay3, shownFax, beenToJRDay2, shownLyleCrate1Day1, + fLyleOnIsland, iWasAmbushed, fGangInCar, fArrivedAtGangStop, ticketVW, + f1015Marina, fCan1015Marina, f1015Frankie, fCan1015Frankie, f1015Drunk, + fCan1015Drunk, f1027Marina, fCan1027Marina, f1027Frankie, fCan1027Frankie, + f1027Drunk, fCan1027Drunk, f1035Marina, fCan1035Marina, f1035Frankie, + fCan1035Frankie, f1035Drunk, fCan1035Drunk, f1097Marina, fCan1097Marina, + f1097Frankie, fCan1097Frankie, f1097Drunk, fCan1097Drunk, f1098Marina, + fCan1098Marina, f1098Frankie, fCan1098Frankie, f1098Drunk, fCan1098Drunk, + fCuffedFrankie, fGotPointsForTrapDog, fGotPointsForUnlockGate, + fGotPointsForUnlockWarehouse, fGotPointsForLockWarehouse, fGotPointsForLockGate, + fGotPointsForFreeDog, fGotPointsForWhistleDog, fGivenNapkin, fCan1004Marina, + fCan1004Drunk, fHasLeftDrunk, fHasDrivenFromDrunk, fCrateOpen, fSawGuns, + hookPoints +}; + class BlueForceGlobals: public Globals { public: ASoundExt _sound1, _sound2, _sound3; - int _v4CEA2; - int _v4CEA8; - int _v4CEF2; - int _v4CEF4; + UIElements _uiElements; + StripProxy _stripProxy; + int _dayNumber; + int _v4CEA4; + int _deathReason; + int _driveFromScene; + int _driveToScene; int _v4CF9E; int _v4E238; int _v501FC; + int _v50696; + uint8 _v5098C; + uint8 _v5098D; int _v51C42; int _v51C44; int _interfaceY; - int _bikiniHutState; + Bookmark _bookmark; int _mapLocationId; - uint8 _globalFlags[12]; + int _clip1Bullets, _clip2Bullets; BlueForceGlobals(); + void reset(); + bool getHasBullets(); + virtual Common::String getClassName() { return "BFGlobals"; } virtual void synchronize(Serializer &s); - - void setFlag(int v); - bool getFlag(int v); + void set2Flags(int flagNum); + bool removeFlag(int flagNum); }; } // End of namespace BlueForce diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 1884bfb4f5..69c9995b93 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -1069,12 +1069,23 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) { } void GfxDialog::setPalette() { - _globals->_scenePalette.loadPalette(0); - _globals->_scenePalette.setPalette(0, 1); - _globals->_scenePalette.setPalette(_globals->_scenePalette._colors.foreground, 1); - _globals->_scenePalette.setPalette(_globals->_fontColors.background, 1); - _globals->_scenePalette.setPalette(_globals->_fontColors.foreground, 1); - _globals->_scenePalette.setPalette(255, 1); + if (_vm->getGameID() == GType_BlueForce) { + _globals->_scenePalette.loadPalette(2); + _globals->_scenePalette.setPalette(0, 1); + _globals->_scenePalette.setPalette(_globals->_gfxColors.background, 1); + _globals->_scenePalette.setPalette(_globals->_gfxColors.foreground, 1); + _globals->_scenePalette.setPalette(_globals->_fontColors.background, 1); + _globals->_scenePalette.setPalette(_globals->_fontColors.foreground, 1); + _globals->_scenePalette.setEntry(255, 0xff, 0xff, 0xff); + _globals->_scenePalette.setPalette(255, 1); + } else { + _globals->_scenePalette.loadPalette(0); + _globals->_scenePalette.setPalette(0, 1); + _globals->_scenePalette.setPalette(_globals->_scenePalette._colors.foreground, 1); + _globals->_scenePalette.setPalette(_globals->_fontColors.background, 1); + _globals->_scenePalette.setPalette(_globals->_fontColors.foreground, 1); + _globals->_scenePalette.setPalette(255, 1); + } } /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 5c7104936e..b0279c0260 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -1,9 +1,14 @@ MODULE := engines/tsage MODULE_OBJS := \ + blue_force/blueforce_dialogs.o \ blue_force/blueforce_logic.o \ blue_force/blueforce_scenes0.o \ blue_force/blueforce_scenes1.o \ + blue_force/blueforce_scenes3.o \ + blue_force/blueforce_scenes6.o \ + blue_force/blueforce_speakers.o \ + blue_force/blueforce_ui.o \ converse.o \ core.o \ debugger.o \ @@ -14,6 +19,7 @@ MODULE_OBJS := \ graphics.o \ resources.o \ ringworld/ringworld_demo.o \ + ringworld/ringworld_dialogs.o \ ringworld/ringworld_logic.o \ ringworld/ringworld_scenes1.o \ ringworld/ringworld_scenes2.o \ @@ -23,6 +29,7 @@ MODULE_OBJS := \ ringworld/ringworld_scenes6.o \ ringworld/ringworld_scenes8.o \ ringworld/ringworld_scenes10.o \ + ringworld/ringworld_speakers.o \ saveload.o \ scenes.o \ sound.o \ diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp new file mode 100644 index 0000000000..ca4ccbc7c5 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_dialogs.cpp @@ -0,0 +1,222 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/translation.h" + +#include "gui/dialog.h" +#include "gui/widget.h" + +#include "tsage/tsage.h" +#include "tsage/core.h" +#include "tsage/dialogs.h" +#include "tsage/staticres.h" +#include "tsage/globals.h" +#include "tsage/ringworld/ringworld_dialogs.h" +#include "tsage/ringworld/ringworld_logic.h" + +namespace TsAGE { + +namespace Ringworld { + +/*--------------------------------------------------------------------------*/ + +#define BUTTON_WIDTH 28 +#define BUTTON_HEIGHT 29 + +RightClickButton::RightClickButton(int buttonIndex, int xp, int yp) : GfxButton() { + _buttonIndex = buttonIndex; + this->_bounds.left = xp; + this->_bounds.top = yp; + this->_bounds.setWidth(BUTTON_WIDTH); + this->_bounds.setHeight(BUTTON_HEIGHT); + _savedButton = NULL; +} + +void RightClickButton::highlight() { + if (_savedButton) { + // Button was previously highlighted, so de-highlight by restoring saved area + _globals->gfxManager().copyFrom(*_savedButton, _bounds.left, _bounds.top); + delete _savedButton; + _savedButton = NULL; + } else { + // Highlight button by getting the needed highlighted image resource + _savedButton = Surface_getArea(_globals->gfxManager().getSurface(), _bounds); + + uint size; + byte *imgData = _resourceManager->getSubResource(7, 2, _buttonIndex, &size); + + GfxSurface btnSelected = surfaceFromRes(imgData); + _globals->gfxManager().copyFrom(btnSelected, _bounds.left, _bounds.top); + + DEALLOCATE(imgData); + } +} + +/*--------------------------------------------------------------------------*/ + +/** + * This dialog implements the right-click dialog + */ +RightClickDialog::RightClickDialog() : GfxDialog(), + _walkButton(1, 48, 12), _lookButton(2, 31, 29), _useButton(3, 65, 29), + _talkButton(4, 14, 47), _inventoryButton(5, 48, 47), _optionsButton(6, 83, 47) { + Rect rectArea, dialogRect; + + // Set the palette and change the cursor + _gfxManager.setDialogPalette(); + _globals->_events.setCursor(CURSOR_ARROW); + + // Get the dialog image + _surface = surfaceFromRes(7, 1, 1); + + // Set the dialog position + dialogRect.resize(_surface, 0, 0, 100); + dialogRect.center(_globals->_events._mousePos.x, _globals->_events._mousePos.y); + + // Ensure the dialog will be entirely on-screen + Rect screenRect = _globals->gfxManager()._bounds; + screenRect.collapse(4, 4); + dialogRect.contain(screenRect); + + _bounds = dialogRect; + _gfxManager._bounds = _bounds; + + _highlightedButton = NULL; + _selectedAction = -1; +} + +RightClickDialog::~RightClickDialog() { +} + +RightClickButton *RightClickDialog::findButton(const Common::Point &pt) { + RightClickButton *btnList[] = { &_walkButton, &_lookButton, &_useButton, &_talkButton, &_inventoryButton, &_optionsButton }; + + for (int i = 0; i < 6; ++i) { + btnList[i]->_owner = this; + + if (btnList[i]->_bounds.contains(pt)) + return btnList[i]; + } + + return NULL; +} + +void RightClickDialog::draw() { + // Save the covered background area + _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); + + // Draw the dialog image + _globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top); +} + +bool RightClickDialog::process(Event &event) { + switch (event.eventType) { + case EVENT_MOUSE_MOVE: { + // Check whether a button is highlighted + RightClickButton *btn = findButton(event.mousePos); + + if (btn != _highlightedButton) { + // De-highlight any previously selected button + if (_highlightedButton) { + _highlightedButton->highlight(); + _highlightedButton = NULL; + } + if (btn) { + // Highlight the new button + btn->highlight(); + _highlightedButton = btn; + } + } + event.handled = true; + return true; + } + + case EVENT_BUTTON_DOWN: + // If a button is highlighted, then flag the selected button index + if (_highlightedButton) + _selectedAction = _highlightedButton->_buttonIndex; + else + _selectedAction = _lookButton._buttonIndex; + event.handled = true; + return true; + + default: + break; + } + + return false; +} + +void RightClickDialog::execute() { + // Draw the dialog + draw(); + + // Dialog event handler loop + _gfxManager.activate(); + + while (!_vm->shouldQuit() && (_selectedAction == -1)) { + Event evt; + while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) { + evt.mousePos.x -= _bounds.left; + evt.mousePos.y -= _bounds.top; + + process(evt); + } + + g_system->delayMillis(10); + g_system->updateScreen(); + } + + // Execute the specified action + switch (_selectedAction) { + case 1: + // Look action + _globals->_events.setCursor(CURSOR_LOOK); + break; + case 2: + // Walk action + _globals->_events.setCursor(CURSOR_WALK); + break; + case 3: + // Use cursor + _globals->_events.setCursor(CURSOR_USE); + break; + case 4: + // Talk cursor + _globals->_events.setCursor(CURSOR_TALK); + break; + case 5: + // Inventory dialog + InventoryDialog::show(); + break; + case 6: + // Dialog options + OptionsDialog::show(); + break; + } + + _gfxManager.deactivate(); +} + +} // End of namespace Ringworld + +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_dialogs.h b/engines/tsage/ringworld/ringworld_dialogs.h new file mode 100644 index 0000000000..11a8f10e70 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_dialogs.h @@ -0,0 +1,70 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_DIALOGS_H +#define TSAGE_RINGWORLD_DIALOGS_H + +#include "gui/options.h" +#include "tsage/events.h" +#include "tsage/graphics.h" +#include "common/list.h" +#include "common/rect.h" +#include "common/system.h" + +namespace TsAGE { + +namespace Ringworld { + +class RightClickButton : public GfxButton { +private: + GfxSurface *_savedButton; +public: + int _buttonIndex; + + RightClickButton(int buttonIndex, int xp, int yp); + ~RightClickButton() { delete _savedButton; } + + virtual void highlight(); +}; + +class RightClickDialog : public GfxDialog { +private: + GfxSurface _surface; + RightClickButton *_highlightedButton; + int _selectedAction; + RightClickButton _walkButton, _lookButton, _useButton, _talkButton, _inventoryButton, _optionsButton; + + RightClickButton *findButton(const Common::Point &pt); +public: + RightClickDialog(); + ~RightClickDialog(); + + virtual void draw(); + virtual bool process(Event &event); + void execute(); +}; + +} // End of namespace Ringworld + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index 2a34e49b39..a131969633 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -21,13 +21,12 @@ */ #include "common/config-manager.h" -#include "common/translation.h" -#include "gui/saveload.h" #include "tsage/ringworld/ringworld_logic.h" #include "tsage/scenes.h" #include "tsage/tsage.h" #include "tsage/staticres.h" #include "tsage/ringworld/ringworld_demo.h" +#include "tsage/ringworld/ringworld_dialogs.h" #include "tsage/ringworld/ringworld_scenes1.h" #include "tsage/ringworld/ringworld_scenes2.h" #include "tsage/ringworld/ringworld_scenes3.h" @@ -330,878 +329,6 @@ void SceneArea::synchronize(Serializer &s) { /*--------------------------------------------------------------------------*/ -SpeakerGText::SpeakerGText() { - _speakerName = "GTEXT"; - _textWidth = 160; - _textPos = Common::Point(130, 10); - _color1 = 42; - _hideObjects = false; -} - -void SpeakerGText::setText(const Common::String &msg) { - // Set the animation properties - _sceneObject.postInit(); - _sceneObject.setVisage(9405); - _sceneObject.setStrip2(3); - _sceneObject.fixPriority(255); - _sceneObject.changeZoom(100); - _sceneObject._frame = 1; - _sceneObject.setPosition(Common::Point(183, 71)); - _sceneObject.animate(ANIM_MODE_7, 0, NULL); - - // Set the text - Rect textRect; - _globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth); - textRect.center(_sceneObject._position.x, _sceneObject._position.y); - _textPos.x = textRect.left; - Speaker::setText(msg); -} - -void SpeakerGText::removeText() { - _sceneObject.remove(); - Speaker::removeText(); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPOR::SpeakerPOR() { - _speakerName = "POR"; - _newSceneNumber = 7221; - _textPos = Common::Point(10, 30); - _color1 = 41; -} - -void SpeakerPOR::SpeakerAction1::signal(){ - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(60) + 60); - break; - case 1: - static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_5, this, NULL); - break; - case 2: - setDelay(_globals->_randomSource.getRandomNumber(10)); - _actionIndex = 0; - break; - default: - break; - } -} - -void SpeakerPOR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(7223); - _object1.setStrip2(2); - _object1.setPosition(Common::Point(191, 166)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(7223); - _object2.setPosition(Common::Point(159, 86)); - _object2.setAction(&_speakerAction, NULL); - - _object3.postInit(&_objectList); - _object3.setVisage(7223); - _object3.setStrip(3); - _object3.setPosition(Common::Point(119, 107)); - _object3.fixPriority(199); - _object3.setAction(&_action2); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerOR::SpeakerOR() { - _speakerName = "OR"; - _newSceneNumber = 9430; - _textPos = Common::Point(8, 36); - _color1 = 42; - _textWidth = 136; -} - -void SpeakerOR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(9431); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(202, 147)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(9431); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.setZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(199, 85)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerOText::SpeakerOText() : SpeakerGText() { - _speakerName = "OTEXT"; - _textWidth = 240; - _textPos = Common::Point(130, 10); - _color1 = 42; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQText::SpeakerQText() : ScreenSpeaker() { - _speakerName = "QTEXT"; - _textPos = Common::Point(160, 40); - _color1 = 35; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSText::SpeakerSText() : ScreenSpeaker() { - _speakerName = "STEXT"; - _color1 = 13; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPOText::SpeakerPOText() : ScreenSpeaker() { - _speakerName = "POTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 41; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerMText::SpeakerMText() { - _speakerName = "MTEXT"; - _color1 = 22; - _textWidth = 230; - _textMode = ALIGN_CENTER; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCText::SpeakerCText() { - _speakerName = "CTEXT"; - _color1 = 4; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerEText::SpeakerEText() { - _speakerName = "ETEXT"; - _textPos = Common::Point(20, 20); - _color1 = 22; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerGR::SpeakerGR() : AnimatedSpeaker() { - _speakerName = "GR"; - _newSceneNumber = 9220; - _textWidth = 136; - _textPos = Common::Point(168, 36); - _color1 = 14; -} - -void SpeakerGR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(9221); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(101, 70)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerHText::SpeakerHText() { - _speakerName = "HTEXT"; - _textPos = Common::Point(160, 40); - _color1 = 52; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSKText::SpeakerSKText() : ScreenSpeaker() { - _speakerName = "SKTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 9; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPText::SpeakerPText() { - _speakerName = "PTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 5; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCHFText::SpeakerCHFText() { - _speakerName = "CHFTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 56; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCDRText::SpeakerCDRText() { - _speakerName = "CDRTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 52; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerFLText::SpeakerFLText() { - _speakerName = "FLTEXT"; - _textPos = Common::Point(10, 40); - _color1 = 17; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerBatText::SpeakerBatText() { - _speakerName = "BATTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 3; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSKL::SpeakerSKL() : AnimatedSpeaker() { - _speakerName = "SKL"; - _newSceneNumber = 7011; - _textPos = Common::Point(10, 30); - _color1 = 9; -} - -void SpeakerSKL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(7013); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(203, 120)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(7013); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(197, 80)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQL::SpeakerQL() : AnimatedSpeaker() { - _speakerName = "QL"; - _newSceneNumber = 2610; - _textPos = Common::Point(160, 30); - _color1 = 35; - _textMode = ALIGN_CENTER; -} - -void SpeakerQL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2612); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(128, 146)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2612); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(122, 84)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSR::SpeakerSR() { - _speakerName = "SR"; - _newSceneNumber = 2811; - _textPos = Common::Point(10, 30); - _color1 = 13; - _textMode = ALIGN_CENTER; -} - -void SpeakerSR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2813); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(224, 198)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2813); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(203, 96)); - _object2.setAction(&_speakerAction, NULL); - - _object3.postInit(&_objectList); - _object3.setVisage(2813); - _object3.setStrip(3); - _object3.setPosition(Common::Point(204, 91)); - _object3.fixPriority(199); - _object3._numFrames = 3; - _object3.animate(ANIM_MODE_7, 0, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSL::SpeakerSL() { - _speakerName = "SL"; - _newSceneNumber = 2810; - _textPos = Common::Point(140, 30); - _textWidth = 160; - _color1 = 13; - _textMode = ALIGN_CENTER; -} - -void SpeakerSL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2812); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(95, 198)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2812); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(116, 96)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQR::SpeakerQR() { - _speakerName = "QR"; - _newSceneNumber = 2611; - _textPos = Common::Point(10, 30); - _color1 = 35; - _textMode = ALIGN_CENTER; -} - -void SpeakerQR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2613); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(191, 146)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2613); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(197, 84)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQU::SpeakerQU() { - _speakerName = "QU"; - _newSceneNumber = 7020; - _textPos = Common::Point(160, 30); - _color1 = 35; - _textMode = ALIGN_CENTER; -} - -void SpeakerQU::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(7021); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(116, 120)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(7021); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(111, 84)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCR::SpeakerCR() { - _speakerName = "CR"; - _newSceneNumber = 9010; - _textPos = Common::Point(20, 40); - _color1 = 4; -} - -void SpeakerCR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(9011); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.setPosition(Common::Point(219, 168)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(9011); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.setPosition(Common::Point(232, 81)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerMR::SpeakerMR() { - _speakerName = "MR"; - _newSceneNumber = 2711; - _textPos = Common::Point(10, 40); - _color1 = 22; -} - -void SpeakerMR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2713); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(220, 143)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2713); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(215, 99)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSAL::SpeakerSAL() { - _speakerName = "SAL"; - _newSceneNumber = 2851; - _textPos = Common::Point(10, 30); - _color1 = 13; - _textMode = ALIGN_CENTER; -} - -void SpeakerSAL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2853); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(185, 200)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2853); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(170, 92)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerML::SpeakerML() { - _speakerName = "ML"; - _newSceneNumber = 2710; - _textPos = Common::Point(160, 40); - _color1 = 22; -} - -void SpeakerML::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2712); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(99, 143)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2712); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(105, 99)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCHFL::SpeakerCHFL() { - _speakerName = "CHFL"; - _newSceneNumber = 4111; - _textPos = Common::Point(10, 40); - _color1 = 56; -} - -void SpeakerCHFL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4113); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(205, 116)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4113); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(202, 71)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCHFR::SpeakerCHFR() { - _speakerName = "CHFR"; - _newSceneNumber = 4110; - _textPos = Common::Point(160, 40); - _color1 = 56; -} - -void SpeakerCHFR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4112); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(103, 116)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4112); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(106, 71)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPL::SpeakerPL() { - _speakerName = "PL"; - _newSceneNumber = 4060; - _textPos = Common::Point(160, 40); - _color1 = 5; -} - -void SpeakerPL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4062); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(107, 117)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4062); - _object2.setStrip2(1); - _object2.fixPriority(200); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(105, 62)); - _object2.setAction(&_speakerAction, NULL); - - _object3.postInit(&_objectList); - _object3.setVisage(4062); - _object3.setStrip2(3); - _object3.fixPriority(255); - _object3.changeZoom(100); - _object3._frame = 1; - _object3.setPosition(Common::Point(105, 59)); - _object3.setAction(&_speakerAction2, NULL); - - Speaker::setText(msg); -} - -void SpeakerPL::removeText() { - _object3.remove(); - AnimatedSpeaker::removeText(); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPR::SpeakerPR() { - _speakerName = "PR"; - _newSceneNumber = 4061; - _textPos = Common::Point(10, 40); - _color1 = 5; -} - -void SpeakerPR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4063); - _object1.setStrip2(1); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(212, 117)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4063); - _object2.setStrip2(2); - _object2.fixPriority(200); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(214, 62)); - _object2.setAction(&_speakerAction, NULL); - - _object3.postInit(&_objectList); - _object3.setVisage(4063); - _object3.setStrip2(3); - _object3.fixPriority(255); - _object3.changeZoom(100); - _object3._frame = 1; - _object3.setPosition(Common::Point(214, 59)); - _object3.setAction(&_speakerAction2, NULL); - - Speaker::setText(msg); -} - -void SpeakerPR::removeText() { - _object3.remove(); - AnimatedSpeaker::removeText(); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCDR::SpeakerCDR() { - _speakerName = "CDR"; - _newSceneNumber = 4161; - _textPos = Common::Point(10, 40); - _color1 = 52; -} - -void SpeakerCDR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4163); - _object1.setStrip2(1); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(208, 97)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4163); - _object2.setStrip2(2); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(200, 57)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCDL::SpeakerCDL() { - _speakerName = "CDL"; - _newSceneNumber = 4160; - _textPos = Common::Point(160, 40); - _color1 = 52; -} - -void SpeakerCDL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4162); - _object1.setStrip2(1); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(112, 97)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4162); - _object2.setStrip2(2); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(115, 57)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerFLL::SpeakerFLL() { - _speakerName = "FLL"; - _newSceneNumber = 5221; - _textPos = Common::Point(10, 40); - _color1 = 17; -} - -void SpeakerFLL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(5223); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(216, 129)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(5223); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(210, 67)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerBatR::SpeakerBatR() { - _speakerName = "BATR"; - _newSceneNumber = 5360; - _textPos = Common::Point(140, 40); - _color1 = 3; -} - -void SpeakerBatR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(5361); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(137, 122)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(5361); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(137, 104)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - RingworldInvObjectList::RingworldInvObjectList() : _stunner(2280, 1, 2, OBJECT_STUNNER, "This is your stunner."), _scanner(1, 1, 3, OBJECT_SCANNER, "A combination scanner comm unit."), @@ -1277,51 +404,6 @@ RingworldInvObjectList::RingworldInvObjectList() : /*--------------------------------------------------------------------------*/ -void RingworldGame::restartGame() { - if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1) - _globals->_game->restart(); -} - -void RingworldGame::saveGame() { - if (!_vm->canSaveGameStateCurrently()) - MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING); - else { - // Show the save dialog - handleSaveLoad(true, _globals->_sceneHandler->_saveGameSlot, _globals->_sceneHandler->_saveName); - } -} - -void RingworldGame::restoreGame() { - if (!_vm->canLoadGameStateCurrently()) - MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING); - else { - // Show the load dialog - handleSaveLoad(false, _globals->_sceneHandler->_loadGameSlot, _globals->_sceneHandler->_saveName); - } -} - -void RingworldGame::quitGame() { - if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) - _vm->quitGame(); -} - -void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) { - const EnginePlugin *plugin = 0; - EngineMan.findGame(_vm->getGameId(), &plugin); - GUI::SaveLoadChooser *dialog; - if (saveFlag) - dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save")); - else - dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load")); - - dialog->setSaveMode(saveFlag); - - saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName()); - saveName = dialog->getResultString(); - - delete dialog; -} - void RingworldGame::start() { // Set some default flags _globals->setFlag(12); @@ -1448,15 +530,10 @@ void RingworldGame::processEvent(Event &event) { MessageDialog::show(HELP_MSG, OK_BTN_STRING); break; - case Common::KEYCODE_F2: { + case Common::KEYCODE_F2: // F2 - Sound Options - ConfigDialog *dlg = new ConfigDialog(); - dlg->runModal(); - delete dlg; - _globals->_soundManager.syncSounds(); - _globals->_events.setCursorFromFlag(); + SoundDialog::execute(); break; - } case Common::KEYCODE_F3: // F3 - Quit @@ -1489,6 +566,12 @@ void RingworldGame::processEvent(Event &event) { } } +void RingworldGame::rightClick() { + RightClickDialog *dlg = new RightClickDialog(); + dlg->execute(); + delete dlg; +} + } // End of namespace Ringworld } // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h index 73ecc9722b..40b202bd7f 100644 --- a/engines/tsage/ringworld/ringworld_logic.h +++ b/engines/tsage/ringworld/ringworld_logic.h @@ -35,19 +35,6 @@ namespace Ringworld { using namespace TsAGE; -#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ - _globals->_player.addMover(mover, &pt, this); } -#define ADD_PLAYER_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ - OBJ.addMover(mover, &pt, NULL); } -#define ADD_PLAYER_MOVER_THIS(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ - OBJ.addMover(mover, &pt, this); } - -#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \ - OBJ.addMover(mover, &pt, this); } -#define ADD_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \ - OBJ.addMover(mover, &pt, NULL); } - - class SceneFactory { public: static Scene *createScene(int sceneNumber); @@ -79,6 +66,17 @@ public: } }; +class SceneObjectExt : public SceneObject { +public: + int _state; + + virtual void synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsSint16LE(_state); + } + virtual Common::String getClassName() { return "SceneObjectExt"; } +}; + class SceneArea : public SavedObject { public: GfxSurface _surface; @@ -104,302 +102,6 @@ public: }; /*--------------------------------------------------------------------------*/ -// Ringworld specific game speakers - -class SpeakerGText : public Speaker { -public: - SceneObject _sceneObject; -public: - SpeakerGText(); - - virtual Common::String getClassName() { return "SpeakerGText"; } - virtual void setText(const Common::String &msg); - virtual void removeText(); -}; - -class SpeakerPOR : public AnimatedSpeaker { - class SpeakerAction1 : public SpeakerAction { - public: - virtual void signal(); - }; - -public: - SceneObject _object3; - SpeakerAction1 _action2; -public: - SpeakerPOR(); - virtual Common::String getClassName() { return "SpeakerPOR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerOR : public AnimatedSpeaker { -public: - SpeakerOR(); - virtual Common::String getClassName() { return "SpeakerOR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerOText : public SpeakerGText { -public: - SpeakerOText(); - - virtual Common::String getClassName() { return "SpeakerOText"; } -}; - -class SpeakerPOText : public ScreenSpeaker { -public: - SpeakerPOText(); - - virtual Common::String getClassName() { return "SpeakerPOText"; } -}; - -class SpeakerSText : public ScreenSpeaker { -public: - SpeakerSText(); - - virtual Common::String getClassName() { return "SpeakerSText"; } -}; - -class SpeakerQText : public ScreenSpeaker { -public: - SpeakerQText(); - - virtual Common::String getClassName() { return "SpeakerQText"; } -}; - -class SpeakerMText : public ScreenSpeaker { -public: - SpeakerMText(); - - virtual Common::String getClassName() { return "SpeakerMText"; } -}; - -class SpeakerCText : public ScreenSpeaker { -public: - SpeakerCText(); - - virtual Common::String getClassName() { return "SpeakerCText"; } -}; - -class SpeakerEText : public ScreenSpeaker { -public: - SpeakerEText(); - - virtual Common::String getClassName() { return "SpeakerEText"; } -}; - -class SpeakerGR : public AnimatedSpeaker { -public: - SpeakerGR(); - - virtual Common::String getClassName() { return "SpeakerGR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerHText : public ScreenSpeaker { -public: - SpeakerHText(); - - virtual Common::String getClassName() { return "SpeakerHText"; } -}; - -class SpeakerPText : public ScreenSpeaker { -public: - SpeakerPText(); - - virtual Common::String getClassName() { return "SpeakerPText"; } -}; - -class SpeakerCHFText : public ScreenSpeaker { -public: - SpeakerCHFText(); - - virtual Common::String getClassName() { return "SpeakerCHFText"; } -}; - -class SpeakerSKText : public ScreenSpeaker { -public: - SpeakerSKText(); - - virtual Common::String getClassName() { return "SpeakerSKText"; } -}; - -class SpeakerCDRText : public ScreenSpeaker { -public: - SpeakerCDRText(); - - virtual Common::String getClassName() { return "SpeakerCDRText"; } -}; - -class SpeakerFLText : public ScreenSpeaker { -public: - SpeakerFLText(); - - virtual Common::String getClassName() { return "SpeakerFLText"; } -}; - -class SpeakerBatText : public ScreenSpeaker { -public: - SpeakerBatText(); - - virtual Common::String getClassName() { return "SpeakerFLText"; } -}; - -class SpeakerQR : public AnimatedSpeaker { -public: - SpeakerQR(); - - virtual Common::String getClassName() { return "SpeakerQR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerQU : public AnimatedSpeaker { -public: - SpeakerQU(); - - virtual Common::String getClassName() { return "SpeakerQU"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerSKL : public AnimatedSpeaker { -public: - SpeakerSKL(); - - virtual Common::String getClassName() { return "SpeakerQL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerQL : public AnimatedSpeaker { -public: - SpeakerQL(); - - virtual Common::String getClassName() { return "SpeakerQL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerSR : public AnimatedSpeaker { -public: - SceneObject _object3; -public: - SpeakerSR(); - - virtual Common::String getClassName() { return "SpeakerSR"; } - void setText(const Common::String &msg); -}; - -class SpeakerSL : public AnimatedSpeaker { -public: - SpeakerSL(); - - virtual Common::String getClassName() { return "SpeakerSL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerCR : public AnimatedSpeaker { -public: - SpeakerCR(); - - virtual Common::String getClassName() { return "SpeakerCR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerMR : public AnimatedSpeaker { -public: - SpeakerMR(); - - virtual Common::String getClassName() { return "SpeakerMR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerSAL : public AnimatedSpeaker { -public: - SpeakerSAL(); - - virtual Common::String getClassName() { return "SpeakerSAL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerML : public AnimatedSpeaker { -public: - SpeakerML(); - - virtual Common::String getClassName() { return "SpeakerML"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerCHFL : public AnimatedSpeaker { -public: - SpeakerCHFL(); - - virtual Common::String getClassName() { return "SpeakerCHFL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerCHFR : public AnimatedSpeaker { -public: - SpeakerCHFR(); - - virtual Common::String getClassName() { return "SpeakerCHFR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerPL : public AnimatedSpeaker { -public: - SceneObject _object3; - SpeakerAction _speakerAction2; - - SpeakerPL(); - - virtual Common::String getClassName() { return "SpeakerPL"; } - virtual void setText(const Common::String &msg); - virtual void removeText(); -}; - -class SpeakerPR : public AnimatedSpeaker { -public: - SceneObject _object3; - SpeakerAction _speakerAction2; - - SpeakerPR(); - - virtual Common::String getClassName() { return "SpeakerPR"; } - virtual void setText(const Common::String &msg); - virtual void removeText(); -}; - -class SpeakerCDR : public AnimatedSpeaker { -public: - SpeakerCDR(); - - virtual Common::String getClassName() { return "SpeakerCDR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerCDL : public AnimatedSpeaker { -public: - SpeakerCDL(); - - virtual Common::String getClassName() { return "SpeakerCDL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerFLL : public AnimatedSpeaker { -public: - SpeakerFLL(); - - virtual Common::String getClassName() { return "SpeakerFLL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerBatR : public AnimatedSpeaker { -public: - SpeakerBatR(); - - virtual Common::String getClassName() { return "SpeakerBatR"; } - virtual void setText(const Common::String &msg); -}; - -/*--------------------------------------------------------------------------*/ class RingworldInvObjectList : public InvObjectList { public: @@ -445,19 +147,14 @@ public: #define RING_INVENTORY (*((::TsAGE::Ringworld::RingworldInvObjectList *)_globals->_inventory)) class RingworldGame: public Game { -protected: - virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName); public: virtual void start(); virtual void restart(); - virtual void restartGame(); - virtual void saveGame(); - virtual void restoreGame(); - virtual void quitGame(); virtual void endGame(int resNum, int lineNum); virtual Scene *createScene(int sceneNumber); virtual void processEvent(Event &event); + virtual void rightClick(); }; } // End of namespace Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes1.h b/engines/tsage/ringworld/ringworld_scenes1.h index 49ea65eb3a..bb98c89a8c 100644 --- a/engines/tsage/ringworld/ringworld_scenes1.h +++ b/engines/tsage/ringworld/ringworld_scenes1.h @@ -25,6 +25,7 @@ #include "common/scummsys.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/ringworld/ringworld_speakers.h" #include "tsage/converse.h" #include "tsage/events.h" #include "tsage/core.h" diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp index df25c324ab..1d310c6f8f 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld/ringworld_scenes10.cpp @@ -145,13 +145,13 @@ void Scene9100::postInit(SceneObjectList *OwnerList) { _object6.setStrip(6); _object6.setFrame(1); _object6.setPosition(Common::Point(138, 166)); - _sceneHotspot3.setup(145, 125, 166, 156, 9100, 40, 43); + _sceneHotspot3.setDetails(145, 125, 166, 156, 9100, 40, 43); } - _sceneHotspot1.setup(140, 176, 185, 215, 9100, 36, 37); - _sceneHotspot2.setup(161, 138, 182, 175, 9100, 38, 39); - _sceneHotspot4.setup(37, 196, 47, 320, 9100, 44, -1); - _sceneHotspot5.setup(69, 36, 121, 272, 9100, 45, 46); - _sceneHotspot6.setup(127, 0, 200, 52, 9100, 47, 48); + _sceneHotspot1.setDetails(140, 176, 185, 215, 9100, 36, 37); + _sceneHotspot2.setDetails(161, 138, 182, 175, 9100, 38, 39); + _sceneHotspot4.setDetails(37, 196, 47, 320, 9100, 44, -1); + _sceneHotspot5.setDetails(69, 36, 121, 272, 9100, 45, 46); + _sceneHotspot6.setDetails(127, 0, 200, 52, 9100, 47, 48); _globals->_soundHandler.play(251); if (_globals->_sceneManager._previousScene == 9150) { @@ -261,16 +261,16 @@ void Scene9150::postInit(SceneObjectList *OwnerList) { _object3.setPosition(Common::Point(312, 95)); _object3.signal(); - _sceneHotspot1.setup(0, 0, 200, 94, 9150, 46, -1); - _sceneHotspot2.setup(51, 90, 118, 230, 9150, 47, -1); - _sceneHotspot3.setup(182, 104, 200, 320, 9150, 48, 49); - _sceneHotspot4.setup(103, 292, 152, 314, 9150, 50, 51); - _sceneHotspot5.setup(115, 350, 160, 374, 9150, 52, 53); - _sceneHotspot6.setup(0, 471, 200, 531, 9150, 54, 55); - _sceneHotspot7.setup(170, 320, 185, 640, 9150, 56, -1); - _sceneHotspot9.setup(157, 107, 186, 320, 9150, 56, -1); - _sceneHotspot8.setup(133, 584, 142, 640, 9150, 57, -1); - _sceneHotspot10.setup(83, 304, 103, 323, 9150, 58, 59); + _sceneHotspot1.setDetails(0, 0, 200, 94, 9150, 46, -1); + _sceneHotspot2.setDetails(51, 90, 118, 230, 9150, 47, -1); + _sceneHotspot3.setDetails(182, 104, 200, 320, 9150, 48, 49); + _sceneHotspot4.setDetails(103, 292, 152, 314, 9150, 50, 51); + _sceneHotspot5.setDetails(115, 350, 160, 374, 9150, 52, 53); + _sceneHotspot6.setDetails(0, 471, 200, 531, 9150, 54, 55); + _sceneHotspot7.setDetails(170, 320, 185, 640, 9150, 56, -1); + _sceneHotspot9.setDetails(157, 107, 186, 320, 9150, 56, -1); + _sceneHotspot8.setDetails(133, 584, 142, 640, 9150, 57, -1); + _sceneHotspot10.setDetails(83, 304, 103, 323, 9150, 58, 59); _globals->_soundHandler.play(285); _globals->_player.disableControl(); @@ -412,15 +412,15 @@ void Scene9200::postInit(SceneObjectList *OwnerList) { if (!_globals->getFlag(86)) { _object2.postInit(); - _hotspot1.setup(96, 194, 160, 234, 9200, 29, 31); + _hotspot1.setDetails(96, 194, 160, 234, 9200, 29, 31); } - _hotspot2.setup(164, 0, 200, 282, 9200, 0, 1); - _hotspot3.setup(140, 39, 165, 153, 9200, 2, 3); - _hotspot4.setup(92, 122, 139, 152, 9200, 4, 5); - _hotspot5.setup(33, 20, 142, 115, 9200, 6, 7); - _hotspot6.setup(104, 235, 153, 265, 9200, 8, 9); - _hotspot7.setup(107, 262, 153, 286, 9200, 10, 11); - _hotspot8.setup(69, 276, 164, 320, 9200, 12, 13); + _hotspot2.setDetails(164, 0, 200, 282, 9200, 0, 1); + _hotspot3.setDetails(140, 39, 165, 153, 9200, 2, 3); + _hotspot4.setDetails(92, 122, 139, 152, 9200, 4, 5); + _hotspot5.setDetails(33, 20, 142, 115, 9200, 6, 7); + _hotspot6.setDetails(104, 235, 153, 265, 9200, 8, 9); + _hotspot7.setDetails(107, 262, 153, 286, 9200, 10, 11); + _hotspot8.setDetails(69, 276, 164, 320, 9200, 12, 13); _globals->_events.setCursor(CURSOR_WALK); _globals->_player.disableControl(); @@ -514,19 +514,19 @@ void Scene9300::postInit(SceneObjectList *OwnerList) { _object2.postInit(); _globals->_soundHandler.play(289); - _hotspot1.setup(35, 142, 76, 212, 9300, 0, 1); - _hotspot2.setup(28, 90, 81, 143, 9300, 2, 3); - _hotspot3.setup(78, 142, 146, 216, 9300, 4, 5); - _hotspot4.setup(3, 43, 91, 74, 9300, 6, 7); - _hotspot5.setup(82, 19, 157, 65, 9300, 8, 9); - _hotspot6.setup(5, 218, 84, 274, 9300, 10, 11); - _hotspot7.setup(86, 233, 168, 293, 9300, 12, 13); - _hotspot8.setup(157, 0, 200, 230, 9300, 14, 15); - _hotspot9.setup(169, 227, 200, 320, 9300, 16, 17); - _hotspot10.setup(145, 97, 166, 225, 9300, 18, 19); - _hotspot11.setup(81, 75, 145, 145, 9300, 20, 21); - _hotspot12.setup(0, 0, 94, 35, 9300, 22, 23); - _hotspot13.setup(12, 268, 149, 320, 9300, 24, 25); + _hotspot1.setDetails(35, 142, 76, 212, 9300, 0, 1); + _hotspot2.setDetails(28, 90, 81, 143, 9300, 2, 3); + _hotspot3.setDetails(78, 142, 146, 216, 9300, 4, 5); + _hotspot4.setDetails(3, 43, 91, 74, 9300, 6, 7); + _hotspot5.setDetails(82, 19, 157, 65, 9300, 8, 9); + _hotspot6.setDetails(5, 218, 84, 274, 9300, 10, 11); + _hotspot7.setDetails(86, 233, 168, 293, 9300, 12, 13); + _hotspot8.setDetails(157, 0, 200, 230, 9300, 14, 15); + _hotspot9.setDetails(169, 227, 200, 320, 9300, 16, 17); + _hotspot10.setDetails(145, 97, 166, 225, 9300, 18, 19); + _hotspot11.setDetails(81, 75, 145, 145, 9300, 20, 21); + _hotspot12.setDetails(0, 0, 94, 35, 9300, 22, 23); + _hotspot13.setDetails(12, 268, 149, 320, 9300, 24, 25); if (_globals->_sceneManager._previousScene == 9350) { _globals->_player.disableControl(); @@ -593,11 +593,11 @@ void Scene9350::postInit(SceneObjectList *OwnerList) { _globals->_player.postInit(); _object1.setup(9351, 1, 3, 139, 97, 0); - _sceneHotspot1.setup(42, 0, 97, 60, 9350, 0, -1); - _sceneHotspot2.setup(37, 205, 82, 256, 9350, 0, -1); - _sceneHotspot3.setup(29, 93, 92, 174, 9350, 1, -1); - _sceneHotspot4.setup(0, 308, 109, 320, 9350, 2, -1); - _sceneHotspot5.setup(0, 0, 200, 320, 9350, 3, -1); + _sceneHotspot1.setDetails(42, 0, 97, 60, 9350, 0, -1); + _sceneHotspot2.setDetails(37, 205, 82, 256, 9350, 0, -1); + _sceneHotspot3.setDetails(29, 93, 92, 174, 9350, 1, -1); + _sceneHotspot4.setDetails(0, 308, 109, 320, 9350, 2, -1); + _sceneHotspot5.setDetails(0, 0, 200, 320, 9350, 3, -1); _globals->_events.setCursor(CURSOR_WALK); _globals->_player.disableControl(); @@ -677,14 +677,14 @@ void Scene9360::postInit(SceneObjectList *OwnerList) { setZoomPercents(95, 80, 200, 100); _globals->_player.postInit(); - _hotspot1.setup(37, 92, 93, 173, 9360, 0, 1); - _hotspot2.setup(42, 0, 100, 63, 9360, 2, -1); - _hotspot3.setup(36, 205, 82, 260, 9360, 3, -1); - _hotspot4.setup(103, 2, 200, 320, 9360, 4, -1); - _hotspot5.setup(0, 0, 37, 320, 9360, 4, -1); - _hotspot6.setup(35, 61, 103, 92, 9360, 4, -1); - _hotspot7.setup(33, 174, 93, 207, 9360, 4, -1); - _hotspot8.setup(28, 257, 149, 320, 9360, 4, -1); + _hotspot1.setDetails(37, 92, 93, 173, 9360, 0, 1); + _hotspot2.setDetails(42, 0, 100, 63, 9360, 2, -1); + _hotspot3.setDetails(36, 205, 82, 260, 9360, 3, -1); + _hotspot4.setDetails(103, 2, 200, 320, 9360, 4, -1); + _hotspot5.setDetails(0, 0, 37, 320, 9360, 4, -1); + _hotspot6.setDetails(35, 61, 103, 92, 9360, 4, -1); + _hotspot7.setDetails(33, 174, 93, 207, 9360, 4, -1); + _hotspot8.setDetails(28, 257, 149, 320, 9360, 4, -1); _globals->_events.setCursor(CURSOR_WALK); _globals->_player.disableControl(); if (_globals->_sceneManager._previousScene == 9350) { @@ -796,14 +796,14 @@ void Scene9400::postInit(SceneObjectList *OwnerList) { _object3.postInit(); _speakerQText._textPos.x = 20; - _hotspot7.setup(157, 66, 180, 110, 9400, 21, 23); - _hotspot5.setup(130, 133, 152, 198, 9400, 22, -1); - _hotspot1.setup(33, 280, 69, 297, 9400, 1, 2); - _hotspot2.setup(73, 96, 87, 159, 9400, 3, 4); - _hotspot3.setup(89, 253, 111, 305, 9400, 5, 6); - _hotspot4.setup(46, 0, 116, 35, 9400, 7, 8); - _hotspot8.setup(58, 169, 122, 200, 9400, 9, 10); - _hotspot6.setup(0, 0, 199, 319, 9400, 16, 0); + _hotspot7.setDetails(157, 66, 180, 110, 9400, 21, 23); + _hotspot5.setDetails(130, 133, 152, 198, 9400, 22, -1); + _hotspot1.setDetails(33, 280, 69, 297, 9400, 1, 2); + _hotspot2.setDetails(73, 96, 87, 159, 9400, 3, 4); + _hotspot3.setDetails(89, 253, 111, 305, 9400, 5, 6); + _hotspot4.setDetails(46, 0, 116, 35, 9400, 7, 8); + _hotspot8.setDetails(58, 169, 122, 200, 9400, 9, 10); + _hotspot6.setDetails(0, 0, 199, 319, 9400, 16, 0); _stripManager.addSpeaker(&_speakerQText); _stripManager.addSpeaker(&_speakerOR); @@ -992,23 +992,23 @@ void Scene9450::postInit(SceneObjectList *OwnerList) { } if (RING_INVENTORY._tunic._sceneNumber != 1) - _hotspot1.setup(123, 139, 138, 170, 9450, 37, -1); - - _hotspot2.setup(153, 102, 176, 141, 9450, 39, 40); - _hotspot3.setup(97, 198, 130, 229, 9450, 41, 42); - _hotspot15.setup(131, 190, 145, 212, 9450, 43, 44); - _hotspot4.setup(33, 144, 105, 192, 9450, 0, 1); - _hotspot5.setup(20, 236, 106, 287, 9450, 2, 3); - _hotspot6.setup(137, 119, 195, 320, 9450, 4, 5); - _hotspot7.setup(20, 59, 99, 111, 9450, 6, -1); - _hotspot8.setup(110, 0, 199, 117, 9450, 7, 8); - _hotspot9.setup(101, 104, 130, 174, 9450, 9, 10); - _hotspot10.setup(110, 246, 149, 319, 9450, 11, 12); - _hotspot11.setup(16, 34, 74, 62, 6450, 13, 14); - _hotspot12.setup(19, 108, 72, 134, 9450, 15, 16); - _hotspot13.setup(18, 215, 71, 237, 9450, 17, 18); - _hotspot14.setup(15, 288, 76, 314, 9450, 19, 20); - _hotspot16.setup(0, 0, 200, 320, 9450, 46, -1); + _hotspot1.setDetails(123, 139, 138, 170, 9450, 37, -1); + + _hotspot2.setDetails(153, 102, 176, 141, 9450, 39, 40); + _hotspot3.setDetails(97, 198, 130, 229, 9450, 41, 42); + _hotspot15.setDetails(131, 190, 145, 212, 9450, 43, 44); + _hotspot4.setDetails(33, 144, 105, 192, 9450, 0, 1); + _hotspot5.setDetails(20, 236, 106, 287, 9450, 2, 3); + _hotspot6.setDetails(137, 119, 195, 320, 9450, 4, 5); + _hotspot7.setDetails(20, 59, 99, 111, 9450, 6, -1); + _hotspot8.setDetails(110, 0, 199, 117, 9450, 7, 8); + _hotspot9.setDetails(101, 104, 130, 174, 9450, 9, 10); + _hotspot10.setDetails(110, 246, 149, 319, 9450, 11, 12); + _hotspot11.setDetails(16, 34, 74, 62, 6450, 13, 14); + _hotspot12.setDetails(19, 108, 72, 134, 9450, 15, 16); + _hotspot13.setDetails(18, 215, 71, 237, 9450, 17, 18); + _hotspot14.setDetails(15, 288, 76, 314, 9450, 19, 20); + _hotspot16.setDetails(0, 0, 200, 320, 9450, 46, -1); } /*-------------------------------------------------------------------------- @@ -1024,7 +1024,7 @@ void Scene9500::Hotspot1::doAction(int action) { RING_INVENTORY._sword._sceneNumber = 9500; _globals->_player.disableControl(); _globals->_sceneItems.remove(this); - scene->_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); + scene->_hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1); scene->setAction(&scene->_sequenceManager, scene, 9510, &_globals->_player, &scene->_object2, NULL); } else { NamedHotspot::doAction(action); @@ -1182,37 +1182,37 @@ void Scene9500::postInit(SceneObjectList *OwnerList) { _object2.setPosition(Common::Point(303, 130)); _object2.fixPriority(132); if (RING_INVENTORY._helmet._sceneNumber == 1) { - _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); + _hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1); } else { _object2.setStrip(2); _object2.setFrame(1); } } else { - _hotspot1.setup(105, 295, 134, 313, 9500, 9, 10); + _hotspot1.setDetails(105, 295, 134, 313, 9500, 9, 10); } - _hotspot17.setup(101, 293, 135, 315, 9500, 9, 10); - _hotspot3.setup(84, 12, 107, 47, 9500, 15, 15); - _hotspot6.setup(93, 11, 167, 46, 9500, 0, 1); - _hotspot7.setup(100, 70, 125, 139, 9500, 2, 3); + _hotspot17.setDetails(101, 293, 135, 315, 9500, 9, 10); + _hotspot3.setDetails(84, 12, 107, 47, 9500, 15, 15); + _hotspot6.setDetails(93, 11, 167, 46, 9500, 0, 1); + _hotspot7.setDetails(100, 70, 125, 139, 9500, 2, 3); if (!_globals->getFlag(85)) { - _hotspot5.setup(111, 68, 155, 244, 9500, 17, -1); - _hotspot4.setup(57, 71, 120, 126, 9500, 16, -1); - } - - _hotspot8.setup(60, 24, 90, 53, 9500, 4, 5); - _hotspot9.setup(72, 143, 93, 163, 9500, 4, 5); - _hotspot10.setup(70, 205, 92, 228, 9500, 4, 5); - _hotspot11.setup(66, 291, 90, 317, 9500, 4, 5); - _hotspot12.setup(22, 58, 101, 145, 9500, 6, 7); - _hotspot13.setup(121, 57, 163, 249, 9500, 6, 7); - _hotspot14.setup(115, 133, 135, 252, 9500, 6, 7); - _hotspot15.setup(55, 240, 125, 254, 9500, 6, 7); - _hotspot16.setup(53, 251, 132, 288, 9500, 8, -1); - _hotspot19.setup(101, 207, 120, 225, 9500, 9, 10); - _hotspot18.setup(98, 144, 117, 162, 9500, 9, 10); - _hotspot20.setup(102, 27, 132, 50, 9500, 9, 10); + _hotspot5.setDetails(111, 68, 155, 244, 9500, 17, -1); + _hotspot4.setDetails(57, 71, 120, 126, 9500, 16, -1); + } + + _hotspot8.setDetails(60, 24, 90, 53, 9500, 4, 5); + _hotspot9.setDetails(72, 143, 93, 163, 9500, 4, 5); + _hotspot10.setDetails(70, 205, 92, 228, 9500, 4, 5); + _hotspot11.setDetails(66, 291, 90, 317, 9500, 4, 5); + _hotspot12.setDetails(22, 58, 101, 145, 9500, 6, 7); + _hotspot13.setDetails(121, 57, 163, 249, 9500, 6, 7); + _hotspot14.setDetails(115, 133, 135, 252, 9500, 6, 7); + _hotspot15.setDetails(55, 240, 125, 254, 9500, 6, 7); + _hotspot16.setDetails(53, 251, 132, 288, 9500, 8, -1); + _hotspot19.setDetails(101, 207, 120, 225, 9500, 9, 10); + _hotspot18.setDetails(98, 144, 117, 162, 9500, 9, 10); + _hotspot20.setDetails(102, 27, 132, 50, 9500, 9, 10); _globals->_events.setCursor(CURSOR_WALK); _globals->_player.disableControl(); @@ -1223,7 +1223,7 @@ void Scene9500::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager, this, 9501, &_globals->_player, &_candle, NULL); } else { RING_INVENTORY._helmet._sceneNumber = 9500; - _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); + _hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1); setAction(&_sequenceManager, this, 9513, &_globals->_player, &_object2, NULL); } } else { @@ -1282,12 +1282,12 @@ void Scene9700::postInit(SceneObjectList *OwnerList) { Scene::postInit(); setZoomPercents(0, 100, 200, 100); - _sceneHotspot1.setup(84, 218, 151, 278, 9700, 14, -1); - _sceneHotspot2.setup(89, 11, 151, 121, 9700, 14, -1); - _sceneHotspot3.setup(69, 119, 138, 216, 9700, 15, 16); - _sceneHotspot4.setup(34, 13, 88, 116, 9700, 17, -1); - _sceneHotspot5.setup(52, 119, 68, 204, 9700, 17, -1); - _sceneHotspot6.setup(0, 22, 56, 275, 9700, 18, -1); + _sceneHotspot1.setDetails(84, 218, 151, 278, 9700, 14, -1); + _sceneHotspot2.setDetails(89, 11, 151, 121, 9700, 14, -1); + _sceneHotspot3.setDetails(69, 119, 138, 216, 9700, 15, 16); + _sceneHotspot4.setDetails(34, 13, 88, 116, 9700, 17, -1); + _sceneHotspot5.setDetails(52, 119, 68, 204, 9700, 17, -1); + _sceneHotspot6.setDetails(0, 22, 56, 275, 9700, 18, -1); _object1.postInit(); _object1.hide(); @@ -1617,26 +1617,26 @@ void Scene9850::postInit(SceneObjectList *OwnerList) { _objSword.hide(); } - _spotLever.setup(30, 251, 45, 270, 9850, 26, -1); - _hotspot1.setup(123, 0, 200, 320, 9850, 0, 1); - _hotspot2.setup(107, 87, 133, 308, 9850, 0, 1); - _hotspot3.setup(2, 28, 53, 80, 9850, 2, 3); - _hotspot4.setup(13, 0, 55, 27, 9850, 2, 3); - _hotspot5.setup(8, 74, 27, 91, 9850, 4, 5); - _hotspot17.setup(61, 0, 125, 28, 9850, 6, 7); - _hotspot18.setup(51, 95, 105, 145, 9850, 6, 7); - _hotspot19.setup(56, 28, 115, 97, 9850, 6, 8); - _hotspot6.setup(0, 223, 115, 257, 9850, 9, 10); - _hotspot7.setup(15, 254, 33, 268, 9850, 9, -1); - _hotspot8.setup(17, 218, 37, 233, 9850, 9, 10); - _hotspot9.setup(8, 113, 26, 221, 9850, 11, 12); - _hotspot10.setup(14, 94, 53, 112, 9850, 13, 14); - _hotspot11.setup(5, 269, 29, 303, 9850, 15, 16); - _hotspot12.setup(43, 278, 91, 317, 9850, 17, 18); - _hotspot13.setup(47, 263, 112, 282, 9850, 19, 20); - _hotspot14.setup(43, 188, 86, 224, 9850, 21, 22); - _hotspot15.setup(43, 162, 92, 191, 9850, 23, 24); - _hotspot16.setup(40, 146, 90, 169, 9850, 25, -1); + _spotLever.setDetails(30, 251, 45, 270, 9850, 26, -1); + _hotspot1.setDetails(123, 0, 200, 320, 9850, 0, 1); + _hotspot2.setDetails(107, 87, 133, 308, 9850, 0, 1); + _hotspot3.setDetails(2, 28, 53, 80, 9850, 2, 3); + _hotspot4.setDetails(13, 0, 55, 27, 9850, 2, 3); + _hotspot5.setDetails(8, 74, 27, 91, 9850, 4, 5); + _hotspot17.setDetails(61, 0, 125, 28, 9850, 6, 7); + _hotspot18.setDetails(51, 95, 105, 145, 9850, 6, 7); + _hotspot19.setDetails(56, 28, 115, 97, 9850, 6, 8); + _hotspot6.setDetails(0, 223, 115, 257, 9850, 9, 10); + _hotspot7.setDetails(15, 254, 33, 268, 9850, 9, -1); + _hotspot8.setDetails(17, 218, 37, 233, 9850, 9, 10); + _hotspot9.setDetails(8, 113, 26, 221, 9850, 11, 12); + _hotspot10.setDetails(14, 94, 53, 112, 9850, 13, 14); + _hotspot11.setDetails(5, 269, 29, 303, 9850, 15, 16); + _hotspot12.setDetails(43, 278, 91, 317, 9850, 17, 18); + _hotspot13.setDetails(47, 263, 112, 282, 9850, 19, 20); + _hotspot14.setDetails(43, 188, 86, 224, 9850, 21, 22); + _hotspot15.setDetails(43, 162, 92, 191, 9850, 23, 24); + _hotspot16.setDetails(40, 146, 90, 169, 9850, 25, -1); _globals->_player.postInit(); _globals->_player.disableControl(); diff --git a/engines/tsage/ringworld/ringworld_scenes10.h b/engines/tsage/ringworld/ringworld_scenes10.h index 02c42f3d01..6bca48776b 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.h +++ b/engines/tsage/ringworld/ringworld_scenes10.h @@ -25,6 +25,7 @@ #include "common/scummsys.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/ringworld/ringworld_speakers.h" #include "tsage/events.h" #include "tsage/core.h" #include "tsage/scenes.h" diff --git a/engines/tsage/ringworld/ringworld_scenes2.h b/engines/tsage/ringworld/ringworld_scenes2.h index 3502aea15b..382d9d4157 100644 --- a/engines/tsage/ringworld/ringworld_scenes2.h +++ b/engines/tsage/ringworld/ringworld_scenes2.h @@ -25,6 +25,7 @@ #include "common/scummsys.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/ringworld/ringworld_speakers.h" #include "tsage/events.h" #include "tsage/core.h" #include "tsage/scenes.h" diff --git a/engines/tsage/ringworld/ringworld_scenes3.h b/engines/tsage/ringworld/ringworld_scenes3.h index 2dbdc27211..682ef44fc6 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.h +++ b/engines/tsage/ringworld/ringworld_scenes3.h @@ -27,6 +27,7 @@ #include "tsage/core.h" #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/ringworld/ringworld_speakers.h" namespace TsAGE { diff --git a/engines/tsage/ringworld/ringworld_scenes4.h b/engines/tsage/ringworld/ringworld_scenes4.h index af31de84b9..64706805bc 100644 --- a/engines/tsage/ringworld/ringworld_scenes4.h +++ b/engines/tsage/ringworld/ringworld_scenes4.h @@ -27,6 +27,7 @@ #include "tsage/core.h" #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/ringworld/ringworld_speakers.h" namespace TsAGE { diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index 58f47d7f82..30093b7855 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -4033,7 +4033,7 @@ void Scene4300::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_speakerMText); _stripManager.addSpeaker(&_speakerFLText); - _hotspot11.setup(76, 97, 102, 127, 4300, 5, 6); + _hotspot11.setDetails(76, 97, 102, 127, 4300, 5, 6); _hotspot7.postInit(); _hotspot7.setPosition(Common::Point(90, 128)); @@ -4041,7 +4041,7 @@ void Scene4300::postInit(SceneObjectList *OwnerList) { _hotspot7.fixPriority(250); _globals->_sceneItems.push_back(&_hotspot7); - _hotspot9.setup(120, 49, 174, 91, 4300, -1, -1); + _hotspot9.setDetails(120, 49, 174, 91, 4300, -1, -1); _hotspot15.postInit(); _hotspot15.setVisage(4300); @@ -4414,7 +4414,7 @@ void Scene4301::postInit(SceneObjectList *OwnerList) { _field68E = false; RING_INVENTORY._stasisBox2._sceneNumber = 1; - _hotspot4.setup(97, 76, 127, 102, 4300, 5, 6); + _hotspot4.setDetails(97, 76, 127, 102, 4300, 5, 6); _hotspot1.postInit(); _hotspot1.setPosition(Common::Point(90, 128)); diff --git a/engines/tsage/ringworld/ringworld_scenes5.h b/engines/tsage/ringworld/ringworld_scenes5.h index 6c6b6b6f32..80e67755bd 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.h +++ b/engines/tsage/ringworld/ringworld_scenes5.h @@ -27,6 +27,7 @@ #include "tsage/core.h" #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/ringworld/ringworld_speakers.h" namespace TsAGE { diff --git a/engines/tsage/ringworld/ringworld_scenes6.h b/engines/tsage/ringworld/ringworld_scenes6.h index 79e604a177..bf353de415 100644 --- a/engines/tsage/ringworld/ringworld_scenes6.h +++ b/engines/tsage/ringworld/ringworld_scenes6.h @@ -25,6 +25,7 @@ #include "common/scummsys.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/ringworld/ringworld_speakers.h" #include "tsage/events.h" #include "tsage/core.h" #include "tsage/scenes.h" diff --git a/engines/tsage/ringworld/ringworld_scenes8.h b/engines/tsage/ringworld/ringworld_scenes8.h index 4878db5cc8..84178c36f9 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.h +++ b/engines/tsage/ringworld/ringworld_scenes8.h @@ -25,6 +25,7 @@ #include "common/scummsys.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/ringworld/ringworld_speakers.h" #include "tsage/events.h" #include "tsage/core.h" #include "tsage/scenes.h" diff --git a/engines/tsage/ringworld/ringworld_speakers.cpp b/engines/tsage/ringworld/ringworld_speakers.cpp new file mode 100644 index 0000000000..c56639a5b2 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_speakers.cpp @@ -0,0 +1,905 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/ringworld/ringworld_speakers.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/graphics.h" +#include "tsage/staticres.h" + +namespace TsAGE { + +namespace Ringworld { + +SpeakerGText::SpeakerGText() { + _speakerName = "GTEXT"; + _textWidth = 160; + _textPos = Common::Point(130, 10); + _color1 = 42; + _hideObjects = false; +} + +void SpeakerGText::setText(const Common::String &msg) { + // Set the animation properties + _sceneObject.postInit(); + _sceneObject.setVisage(9405); + _sceneObject.setStrip2(3); + _sceneObject.fixPriority(255); + _sceneObject.changeZoom(100); + _sceneObject._frame = 1; + _sceneObject.setPosition(Common::Point(183, 71)); + _sceneObject.animate(ANIM_MODE_7, 0, NULL); + + // Set the text + Rect textRect; + _globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth); + textRect.center(_sceneObject._position.x, _sceneObject._position.y); + _textPos.x = textRect.left; + Speaker::setText(msg); +} + +void SpeakerGText::removeText() { + _sceneObject.remove(); + Speaker::removeText(); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPOR::SpeakerPOR() { + _speakerName = "POR"; + _newSceneNumber = 7221; + _textPos = Common::Point(10, 30); + _color1 = 41; +} + +void SpeakerPOR::SpeakerAction1::signal(){ + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(60) + 60); + break; + case 1: + static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_5, this, NULL); + break; + case 2: + setDelay(_globals->_randomSource.getRandomNumber(10)); + _actionIndex = 0; + break; + default: + break; + } +} + +void SpeakerPOR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7223); + _object1.setStrip2(2); + _object1.setPosition(Common::Point(191, 166)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(7223); + _object2.setPosition(Common::Point(159, 86)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(7223); + _object3.setStrip(3); + _object3.setPosition(Common::Point(119, 107)); + _object3.fixPriority(199); + _object3.setAction(&_action2); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerOR::SpeakerOR() { + _speakerName = "OR"; + _newSceneNumber = 9430; + _textPos = Common::Point(8, 36); + _color1 = 42; + _textWidth = 136; +} + +void SpeakerOR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(9431); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(202, 147)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(9431); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.setZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(199, 85)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerOText::SpeakerOText() : SpeakerGText() { + _speakerName = "OTEXT"; + _textWidth = 240; + _textPos = Common::Point(130, 10); + _color1 = 42; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerQText::SpeakerQText() : ScreenSpeaker() { + _speakerName = "QTEXT"; + _textPos = Common::Point(160, 40); + _color1 = 35; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSText::SpeakerSText() : ScreenSpeaker() { + _speakerName = "STEXT"; + _color1 = 13; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPOText::SpeakerPOText() : ScreenSpeaker() { + _speakerName = "POTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 41; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerMText::SpeakerMText() { + _speakerName = "MTEXT"; + _color1 = 22; + _textWidth = 230; + _textMode = ALIGN_CENTER; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCText::SpeakerCText() { + _speakerName = "CTEXT"; + _color1 = 4; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerEText::SpeakerEText() { + _speakerName = "ETEXT"; + _textPos = Common::Point(20, 20); + _color1 = 22; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerGR::SpeakerGR() : AnimatedSpeaker() { + _speakerName = "GR"; + _newSceneNumber = 9220; + _textWidth = 136; + _textPos = Common::Point(168, 36); + _color1 = 14; +} + +void SpeakerGR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(9221); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(101, 70)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerHText::SpeakerHText() { + _speakerName = "HTEXT"; + _textPos = Common::Point(160, 40); + _color1 = 52; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSKText::SpeakerSKText() : ScreenSpeaker() { + _speakerName = "SKTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 9; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPText::SpeakerPText() { + _speakerName = "PTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 5; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCHFText::SpeakerCHFText() { + _speakerName = "CHFTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 56; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCDRText::SpeakerCDRText() { + _speakerName = "CDRTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 52; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerFLText::SpeakerFLText() { + _speakerName = "FLTEXT"; + _textPos = Common::Point(10, 40); + _color1 = 17; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerBatText::SpeakerBatText() { + _speakerName = "BATTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 3; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSKL::SpeakerSKL() : AnimatedSpeaker() { + _speakerName = "SKL"; + _newSceneNumber = 7011; + _textPos = Common::Point(10, 30); + _color1 = 9; +} + +void SpeakerSKL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7013); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(203, 120)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(7013); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(197, 80)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerQL::SpeakerQL() : AnimatedSpeaker() { + _speakerName = "QL"; + _newSceneNumber = 2610; + _textPos = Common::Point(160, 30); + _color1 = 35; + _textMode = ALIGN_CENTER; +} + +void SpeakerQL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2612); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(128, 146)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2612); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(122, 84)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSR::SpeakerSR() { + _speakerName = "SR"; + _newSceneNumber = 2811; + _textPos = Common::Point(10, 30); + _color1 = 13; + _textMode = ALIGN_CENTER; +} + +void SpeakerSR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2813); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(224, 198)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2813); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(203, 96)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(2813); + _object3.setStrip(3); + _object3.setPosition(Common::Point(204, 91)); + _object3.fixPriority(199); + _object3._numFrames = 3; + _object3.animate(ANIM_MODE_7, 0, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSL::SpeakerSL() { + _speakerName = "SL"; + _newSceneNumber = 2810; + _textPos = Common::Point(140, 30); + _textWidth = 160; + _color1 = 13; + _textMode = ALIGN_CENTER; +} + +void SpeakerSL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2812); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(95, 198)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2812); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(116, 96)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerQR::SpeakerQR() { + _speakerName = "QR"; + _newSceneNumber = 2611; + _textPos = Common::Point(10, 30); + _color1 = 35; + _textMode = ALIGN_CENTER; +} + +void SpeakerQR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2613); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(191, 146)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2613); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(197, 84)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerQU::SpeakerQU() { + _speakerName = "QU"; + _newSceneNumber = 7020; + _textPos = Common::Point(160, 30); + _color1 = 35; + _textMode = ALIGN_CENTER; +} + +void SpeakerQU::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7021); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(116, 120)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(7021); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(111, 84)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCR::SpeakerCR() { + _speakerName = "CR"; + _newSceneNumber = 9010; + _textPos = Common::Point(20, 40); + _color1 = 4; +} + +void SpeakerCR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(9011); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.setPosition(Common::Point(219, 168)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(9011); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.setPosition(Common::Point(232, 81)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerMR::SpeakerMR() { + _speakerName = "MR"; + _newSceneNumber = 2711; + _textPos = Common::Point(10, 40); + _color1 = 22; +} + +void SpeakerMR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2713); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(220, 143)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2713); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(215, 99)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSAL::SpeakerSAL() { + _speakerName = "SAL"; + _newSceneNumber = 2851; + _textPos = Common::Point(10, 30); + _color1 = 13; + _textMode = ALIGN_CENTER; +} + +void SpeakerSAL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2853); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(185, 200)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2853); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(170, 92)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerML::SpeakerML() { + _speakerName = "ML"; + _newSceneNumber = 2710; + _textPos = Common::Point(160, 40); + _color1 = 22; +} + +void SpeakerML::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2712); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(99, 143)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2712); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(105, 99)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCHFL::SpeakerCHFL() { + _speakerName = "CHFL"; + _newSceneNumber = 4111; + _textPos = Common::Point(10, 40); + _color1 = 56; +} + +void SpeakerCHFL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4113); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(205, 116)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4113); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(202, 71)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCHFR::SpeakerCHFR() { + _speakerName = "CHFR"; + _newSceneNumber = 4110; + _textPos = Common::Point(160, 40); + _color1 = 56; +} + +void SpeakerCHFR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4112); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(103, 116)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4112); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(106, 71)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPL::SpeakerPL() { + _speakerName = "PL"; + _newSceneNumber = 4060; + _textPos = Common::Point(160, 40); + _color1 = 5; +} + +void SpeakerPL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4062); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(107, 117)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4062); + _object2.setStrip2(1); + _object2.fixPriority(200); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(105, 62)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(4062); + _object3.setStrip2(3); + _object3.fixPriority(255); + _object3.changeZoom(100); + _object3._frame = 1; + _object3.setPosition(Common::Point(105, 59)); + _object3.setAction(&_speakerAction2, NULL); + + Speaker::setText(msg); +} + +void SpeakerPL::removeText() { + _object3.remove(); + AnimatedSpeaker::removeText(); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPR::SpeakerPR() { + _speakerName = "PR"; + _newSceneNumber = 4061; + _textPos = Common::Point(10, 40); + _color1 = 5; +} + +void SpeakerPR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4063); + _object1.setStrip2(1); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(212, 117)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4063); + _object2.setStrip2(2); + _object2.fixPriority(200); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(214, 62)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(4063); + _object3.setStrip2(3); + _object3.fixPriority(255); + _object3.changeZoom(100); + _object3._frame = 1; + _object3.setPosition(Common::Point(214, 59)); + _object3.setAction(&_speakerAction2, NULL); + + Speaker::setText(msg); +} + +void SpeakerPR::removeText() { + _object3.remove(); + AnimatedSpeaker::removeText(); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCDR::SpeakerCDR() { + _speakerName = "CDR"; + _newSceneNumber = 4161; + _textPos = Common::Point(10, 40); + _color1 = 52; +} + +void SpeakerCDR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4163); + _object1.setStrip2(1); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(208, 97)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4163); + _object2.setStrip2(2); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(200, 57)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCDL::SpeakerCDL() { + _speakerName = "CDL"; + _newSceneNumber = 4160; + _textPos = Common::Point(160, 40); + _color1 = 52; +} + +void SpeakerCDL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4162); + _object1.setStrip2(1); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(112, 97)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4162); + _object2.setStrip2(2); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(115, 57)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerFLL::SpeakerFLL() { + _speakerName = "FLL"; + _newSceneNumber = 5221; + _textPos = Common::Point(10, 40); + _color1 = 17; +} + +void SpeakerFLL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(5223); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(216, 129)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(5223); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(210, 67)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerBatR::SpeakerBatR() { + _speakerName = "BATR"; + _newSceneNumber = 5360; + _textPos = Common::Point(140, 40); + _color1 = 3; +} + +void SpeakerBatR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(5361); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(137, 122)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(5361); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(137, 104)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +} // End of namespace Ringworld + +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_speakers.h b/engines/tsage/ringworld/ringworld_speakers.h new file mode 100644 index 0000000000..305984a184 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_speakers.h @@ -0,0 +1,337 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SPEAKERS_H +#define TSAGE_RINGWORLD_SPEAKERS_H + +#include "common/scummsys.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/ringworld/ringworld_logic.h" + +namespace TsAGE { + +namespace Ringworld { + +using namespace TsAGE; + +class SpeakerGText : public Speaker { +public: + SceneObject _sceneObject; +public: + SpeakerGText(); + + virtual Common::String getClassName() { return "SpeakerGText"; } + virtual void setText(const Common::String &msg); + virtual void removeText(); +}; + +class SpeakerPOR : public AnimatedSpeaker { + class SpeakerAction1 : public SpeakerAction { + public: + virtual void signal(); + }; + +public: + SceneObject _object3; + SpeakerAction1 _action2; +public: + SpeakerPOR(); + virtual Common::String getClassName() { return "SpeakerPOR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerOR : public AnimatedSpeaker { +public: + SpeakerOR(); + virtual Common::String getClassName() { return "SpeakerOR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerOText : public SpeakerGText { +public: + SpeakerOText(); + + virtual Common::String getClassName() { return "SpeakerOText"; } +}; + +class SpeakerPOText : public ScreenSpeaker { +public: + SpeakerPOText(); + + virtual Common::String getClassName() { return "SpeakerPOText"; } +}; + +class SpeakerSText : public ScreenSpeaker { +public: + SpeakerSText(); + + virtual Common::String getClassName() { return "SpeakerSText"; } +}; + +class SpeakerQText : public ScreenSpeaker { +public: + SpeakerQText(); + + virtual Common::String getClassName() { return "SpeakerQText"; } +}; + +class SpeakerMText : public ScreenSpeaker { +public: + SpeakerMText(); + + virtual Common::String getClassName() { return "SpeakerMText"; } +}; + +class SpeakerCText : public ScreenSpeaker { +public: + SpeakerCText(); + + virtual Common::String getClassName() { return "SpeakerCText"; } +}; + +class SpeakerEText : public ScreenSpeaker { +public: + SpeakerEText(); + + virtual Common::String getClassName() { return "SpeakerEText"; } +}; + +class SpeakerGR : public AnimatedSpeaker { +public: + SpeakerGR(); + + virtual Common::String getClassName() { return "SpeakerGR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerHText : public ScreenSpeaker { +public: + SpeakerHText(); + + virtual Common::String getClassName() { return "SpeakerHText"; } +}; + +class SpeakerPText : public ScreenSpeaker { +public: + SpeakerPText(); + + virtual Common::String getClassName() { return "SpeakerPText"; } +}; + +class SpeakerCHFText : public ScreenSpeaker { +public: + SpeakerCHFText(); + + virtual Common::String getClassName() { return "SpeakerCHFText"; } +}; + +class SpeakerSKText : public ScreenSpeaker { +public: + SpeakerSKText(); + + virtual Common::String getClassName() { return "SpeakerSKText"; } +}; + +class SpeakerCDRText : public ScreenSpeaker { +public: + SpeakerCDRText(); + + virtual Common::String getClassName() { return "SpeakerCDRText"; } +}; + +class SpeakerFLText : public ScreenSpeaker { +public: + SpeakerFLText(); + + virtual Common::String getClassName() { return "SpeakerFLText"; } +}; + +class SpeakerBatText : public ScreenSpeaker { +public: + SpeakerBatText(); + + virtual Common::String getClassName() { return "SpeakerFLText"; } +}; + +class SpeakerQR : public AnimatedSpeaker { +public: + SpeakerQR(); + + virtual Common::String getClassName() { return "SpeakerQR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerQU : public AnimatedSpeaker { +public: + SpeakerQU(); + + virtual Common::String getClassName() { return "SpeakerQU"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerSKL : public AnimatedSpeaker { +public: + SpeakerSKL(); + + virtual Common::String getClassName() { return "SpeakerQL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerQL : public AnimatedSpeaker { +public: + SpeakerQL(); + + virtual Common::String getClassName() { return "SpeakerQL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerSR : public AnimatedSpeaker { +public: + SceneObject _object3; +public: + SpeakerSR(); + + virtual Common::String getClassName() { return "SpeakerSR"; } + void setText(const Common::String &msg); +}; + +class SpeakerSL : public AnimatedSpeaker { +public: + SpeakerSL(); + + virtual Common::String getClassName() { return "SpeakerSL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCR : public AnimatedSpeaker { +public: + SpeakerCR(); + + virtual Common::String getClassName() { return "SpeakerCR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerMR : public AnimatedSpeaker { +public: + SpeakerMR(); + + virtual Common::String getClassName() { return "SpeakerMR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerSAL : public AnimatedSpeaker { +public: + SpeakerSAL(); + + virtual Common::String getClassName() { return "SpeakerSAL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerML : public AnimatedSpeaker { +public: + SpeakerML(); + + virtual Common::String getClassName() { return "SpeakerML"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCHFL : public AnimatedSpeaker { +public: + SpeakerCHFL(); + + virtual Common::String getClassName() { return "SpeakerCHFL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCHFR : public AnimatedSpeaker { +public: + SpeakerCHFR(); + + virtual Common::String getClassName() { return "SpeakerCHFR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerPL : public AnimatedSpeaker { +public: + SceneObject _object3; + SpeakerAction _speakerAction2; + + SpeakerPL(); + + virtual Common::String getClassName() { return "SpeakerPL"; } + virtual void setText(const Common::String &msg); + virtual void removeText(); +}; + +class SpeakerPR : public AnimatedSpeaker { +public: + SceneObject _object3; + SpeakerAction _speakerAction2; + + SpeakerPR(); + + virtual Common::String getClassName() { return "SpeakerPR"; } + virtual void setText(const Common::String &msg); + virtual void removeText(); +}; + +class SpeakerCDR : public AnimatedSpeaker { +public: + SpeakerCDR(); + + virtual Common::String getClassName() { return "SpeakerCDR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCDL : public AnimatedSpeaker { +public: + SpeakerCDL(); + + virtual Common::String getClassName() { return "SpeakerCDL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerFLL : public AnimatedSpeaker { +public: + SpeakerFLL(); + + virtual Common::String getClassName() { return "SpeakerFLL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerBatR : public AnimatedSpeaker { +public: + SpeakerBatR(); + + virtual Common::String getClassName() { return "SpeakerBatR"; } + virtual void setText(const Common::String &msg); +}; + +} // End of namespace Ringworld + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index 03beafed7c..f81454d5e9 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -138,6 +138,18 @@ public: } } } + + void addBefore(T existingItem, T newItem) { + typename SynchronizedList<T>::iterator i = this->begin(); + while ((i != this->end()) && (*i != existingItem)) ++i; + this->insert(i, newItem); + } + void addAfter(T existingItem, T newItem) { + typename SynchronizedList<T>::iterator i = this->begin(); + while ((i != this->end()) && (*i != existingItem)) ++i; + if (i != this->end()) ++i; + this->insert(i, newItem); + } }; /** diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 5aeacda6fe..d68f5c2ee5 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -20,11 +20,15 @@ * */ +#include "common/config-manager.h" +#include "common/translation.h" +#include "gui/saveload.h" #include "tsage/scenes.h" #include "tsage/globals.h" #include "tsage/ringworld/ringworld_logic.h" #include "tsage/tsage.h" #include "tsage/saveload.h" +#include "tsage/staticres.h" namespace TsAGE { @@ -77,12 +81,7 @@ void SceneManager::sceneChange() { } // Clear the secondary scene object list - io = _globals->_sceneManager._altSceneObjects.begin(); - while (io != _globals->_sceneManager._altSceneObjects.end()) { - SceneObject *sceneObj = *io; - ++io; - sceneObj->removeObject(); - } + _altSceneObjects.clear(); // Clear the hotspot list SynchronizedList<SceneItem *>::iterator ii = _globals->_sceneItems.begin(); @@ -510,6 +509,51 @@ void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent /*--------------------------------------------------------------------------*/ +void Game::restartGame() { + if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1) + _globals->_game->restart(); +} + +void Game::saveGame() { + if (!_vm->canSaveGameStateCurrently()) + MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING); + else { + // Show the save dialog + handleSaveLoad(true, _globals->_sceneHandler->_saveGameSlot, _globals->_sceneHandler->_saveName); + } +} + +void Game::restoreGame() { + if (!_vm->canLoadGameStateCurrently()) + MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING); + else { + // Show the load dialog + handleSaveLoad(false, _globals->_sceneHandler->_loadGameSlot, _globals->_sceneHandler->_saveName); + } +} + +void Game::quitGame() { + if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) + _vm->quitGame(); +} + +void Game::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) { + const EnginePlugin *plugin = 0; + EngineMan.findGame(_vm->getGameId(), &plugin); + GUI::SaveLoadChooser *dialog; + if (saveFlag) + dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save")); + else + dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load")); + + dialog->setSaveMode(saveFlag); + + saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName()); + saveName = dialog->getResultString(); + + delete dialog; +} + void Game::execute() { // Main game loop bool activeFlag = false; diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h index 7e8c26f912..b03b8fa906 100644 --- a/engines/tsage/scenes.h +++ b/engines/tsage/scenes.h @@ -115,7 +115,7 @@ protected: SynchronizedList<GameHandler *> _handlers; static bool notLockedFn(GameHandler *g); - virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {} + virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName); public: virtual ~Game() {} @@ -125,13 +125,14 @@ public: void execute(); virtual void start() = 0; virtual void restart() {} - virtual void restartGame() {} - virtual void saveGame() {} - virtual void restoreGame() {} - virtual void quitGame() {} + virtual void restartGame(); + virtual void saveGame(); + virtual void restoreGame(); + virtual void quitGame(); virtual void endGame(int resNum, int lineNum) {} virtual Scene *createScene(int sceneNumber) = 0; virtual void processEvent(Event &event) {} + virtual void rightClick() {} }; } // End of namespace TsAGE diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 0b77628801..2139056770 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2456,7 +2456,7 @@ void ASound::unPrime() { _action = NULL; } -void ASound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, Action *action) { +void ASound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, EventHandler *action) { if (action) _action = action; @@ -2485,10 +2485,19 @@ void ASoundExt::signal() { } } -void ASoundExt::fadeOut2(Action *action) { +void ASoundExt::fadeOut2(EventHandler *action) { fade(0, 10, 10, true, action); } +void ASoundExt::changeSound(int soundNum) { + if (isPlaying()) { + _soundNum = soundNum; + fadeOut2(this); + } else { + fadeSound(soundNum); + } +} + /*--------------------------------------------------------------------------*/ SoundDriver::SoundDriver() { diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index afcc8f6377..a8ff348bc6 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -365,7 +365,7 @@ public: class ASound: public EventHandler { public: Sound _sound; - Action *_action; + EventHandler *_action; int _cueValue; ASound(); @@ -385,7 +385,7 @@ public: bool isMuted() const { return _sound.isMuted(); } void pause(bool flag) { _sound.pause(flag); } void mute(bool flag) { _sound.mute(flag); } - void fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, Action *action); + void fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, EventHandler *action); void fadeIn() { fade(127, 5, 10, false, NULL); } void fadeOut(Action *action) { fade(0, 5, 10, true, action); } void setTimeIndex(uint32 timeIndex) { _sound.setTimeIndex(timeIndex); } @@ -406,7 +406,8 @@ public: int _soundNum; ASoundExt(); - void fadeOut2(Action *action); + void fadeOut2(EventHandler *action); + void changeSound(int soundNum); virtual Common::String getClassName() { return "ASoundExt"; } virtual void synchronize(Serializer &s); diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 819cf56f31..6c0499cfb2 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -72,12 +72,8 @@ const char *DEFAULT_SCENE_HOTSPOT = "That accomplishes nothing."; const char *SAVE_ERROR_MSG = "Error occurred saving game. Please do not try to restore this game!"; const char *SAVING_NOT_ALLOWED_MSG = "Saving is not allowed at this time."; const char *RESTORING_NOT_ALLOWED_MSG = "Restoring is not allowed at this time."; -const char *RESTART_CONFIRM_MSG = "Do you want to restart your game?"; const char *INV_EMPTY_MSG = "You have nothing in your possesion."; -const char *HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\ -\x01 Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\ -F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game"; const char *QUIT_CONFIRM_MSG = "Do you want to quit playing this game?"; const char *RESTART_MSG = "Do you want to restart this game?"; const char *GAME_PAUSED_MSG = "Game is paused."; @@ -97,6 +93,9 @@ const char *PICK_BTN_STRING = "Pick"; namespace Ringworld { // Dialog resources +const char *HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\ +\x01 Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\ +F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game"; const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; const char *START_PLAY_BTN_STRING = " Start Play "; const char *INTRODUCTION_BTN_STRING = "Introduction"; @@ -129,6 +128,9 @@ const char *DEMO_RESUME_BTN_STRING = "Resume"; namespace BlueForce { // Dialog resources +const char *HELP_MSG = "Blue Force\x14\rScummVM Version\r\r\ +Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\ +F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game"; const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; const char *START_PLAY_BTN_STRING = " Play "; const char *INTRODUCTION_BTN_STRING = " Watch "; @@ -155,6 +157,9 @@ const char *CITY_HALL_JAIL = "City Hall & Jail"; const char *JAMISON_RYAN = "Jamison & Ryan"; const char *BIKINI_HUT = "Bikini Hut"; +// Scene 60 radio messages +const char *RADIO_BTN_LIST[8] = { "10-2 ", "10-4 ", "10-13", "10-15", "10-27", "10-35", "10-97", "10-98" }; + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index b08e92def2..172adc218e 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -39,10 +39,8 @@ extern const char *DEFAULT_SCENE_HOTSPOT; extern const char *SAVE_ERROR_MSG; extern const char *SAVING_NOT_ALLOWED_MSG; extern const char *RESTORING_NOT_ALLOWED_MSG; -extern const char *RESTART_CONFIRM_MSG; // Dialogs -extern const char *HELP_MSG; extern const char *QUIT_CONFIRM_MSG; extern const char *RESTART_MSG; extern const char *GAME_PAUSED_MSG; @@ -62,6 +60,7 @@ extern const char *INV_EMPTY_MSG; namespace Ringworld { // Dialog resources +extern const char *HELP_MSG; extern const char *WATCH_INTRO_MSG; extern const char *START_PLAY_BTN_STRING; extern const char *INTRODUCTION_BTN_STRING; @@ -95,6 +94,7 @@ extern const char *DEMO_RESUME_BTN_STRING; namespace BlueForce { // Dialog resources +extern const char *HELP_MSG; extern const char *WATCH_INTRO_MSG; extern const char *START_PLAY_BTN_STRING; extern const char *INTRODUCTION_BTN_STRING; @@ -121,6 +121,9 @@ extern const char *CITY_HALL_JAIL; extern const char *JAMISON_RYAN; extern const char *BIKINI_HUT; +// Scene 60 radio dispatch buttons +extern const char *RADIO_BTN_LIST[8]; + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 2fcabff16c..ca63c4c3e0 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -82,6 +82,12 @@ void TSageEngine::initialize() { _resourceManager->addLib("TSAGE.RLB"); } _globals = new BlueForce::BlueForceGlobals(); + + // Setup the user interface + BF_GLOBALS._uiElements.setup(Common::Point(0, BF_INTERFACE_Y - 2)); + + // Reset all global variables + BF_GLOBALS.reset(); } _globals->gfxManager().setDefaults(); diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h index 88175f92ce..7bb3c7a989 100644 --- a/engines/tsage/tsage.h +++ b/engines/tsage/tsage.h @@ -62,6 +62,7 @@ struct tSageGameDescription; #define SCREEN_HEIGHT 200 #define SCREEN_CENTER_X 160 #define SCREEN_CENTER_Y 100 +#define BF_INTERFACE_Y 168 class TSageEngine : public Engine { private: diff --git a/engines/tucker/staticres.cpp b/engines/tucker/staticres.cpp index ef778b6f54..388f5ba05c 100644 --- a/engines/tucker/staticres.cpp +++ b/engines/tucker/staticres.cpp @@ -340,7 +340,7 @@ const SoundSequenceDataList AnimationSequencePlayer::_soundSeqDataList[] = { { 0, 0, 4, 0, 7, _soundDataSeq19_20 } }; -const char *AnimationSequencePlayer::_audioFileNamesTable[] = { +const char *const AnimationSequencePlayer::_audioFileNamesTable[] = { "demomenu.raw", "demorolc.raw", "fx101.wav", diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h index e676369427..3daf75d44a 100644 --- a/engines/tucker/tucker.h +++ b/engines/tucker/tucker.h @@ -989,7 +989,7 @@ private: Audio::SoundHandle _musicHandle; static const SoundSequenceDataList _soundSeqDataList[]; - static const char *_audioFileNamesTable[]; + static const char *const _audioFileNamesTable[]; }; } // namespace Tucker diff --git a/graphics/dither.cpp b/graphics/dither.cpp deleted file mode 100644 index 3876db152b..0000000000 --- a/graphics/dither.cpp +++ /dev/null @@ -1,313 +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. - */ - -#include "graphics/dither.h" - -#include "common/endian.h" -#include "common/stream.h" - -namespace Graphics { - -PaletteLUT::PaletteLUT(byte depth, PaletteFormat format) { - assert((depth > 1) && (depth < 9)); - - // For adjusting depth - _depth1 = depth; - _depth2 = 2 * _depth1; - _shift = 8 - _depth1; - - // The table's dimensions - _dim1 = (1 << _depth1); - _dim2 = _dim1 * _dim1; - _dim3 = _dim1 * _dim1 * _dim1; - - _format = format; - - // What's already built - _got = _dim1; - _gots = new byte[_dim1]; - - // The lookup table - _lut = new byte[_dim3]; - - memset(_lutPal, 0, 768); - memset(_realPal, 0, 768); - memset(_gots, 1, _dim1); -} - -void PaletteLUT::setPalette(const byte *palette, PaletteFormat format, - byte depth, int transp) { - - assert((depth > 1) && (depth < 9)); - - _transp = transp; - - int shift = 8 - depth; - - // Checking for the table's and the palette's pixel format - if ((_format == kPaletteRGB) && (format == kPaletteYUV)) { - byte *newPal = _realPal; - const byte *oldPal = palette; - for (int i = 0; i < 256; i++, newPal += 3, oldPal += 3) - YUV2RGB(oldPal[0] << shift, oldPal[1] << shift, oldPal[2] << shift, - newPal[0], newPal[1], newPal[2]); - } else if ((_format == kPaletteYUV) && (format == kPaletteRGB)) { - byte *newPal = _realPal; - const byte *oldPal = palette; - for (int i = 0; i < 256; i++, newPal += 3, oldPal += 3) - RGB2YUV(oldPal[0] << shift, oldPal[1] << shift, oldPal[2] << shift, - newPal[0], newPal[1], newPal[2]); - } else - memcpy(_realPal, palette, 768); - - // Using the specified depth for the lookup - byte *newPal = _lutPal, *oldPal = _realPal; - for (int i = 0; i < 768; i++) - *newPal++ = (*oldPal++) >> _shift; - - // Everything has to be rebuilt - _got = 0; - memset(_gots, 0, _dim1); -} - -PaletteLUT::~PaletteLUT() { - delete[] _lut; - delete[] _gots; -} - -void PaletteLUT::buildNext() { - if (_got >= _dim1) - return; - - build(_got++); -} - -#define SQR(x) ((x) * (x)) -// Building one "slice" -void PaletteLUT::build(int d1) { - // First dimension - byte *lut = _lut + d1 * _dim2; - - // Second dimension - for (uint32 j = 0; j < _dim1; j++) { - // Third dimension - for (uint32 k = 0; k < _dim1; k++) { - const byte *p = _lutPal; - uint32 d = 0xFFFFFFFF; - byte n = 0; - - // Going over every palette entry, searching for the closest - for (int c = 0; c < 256; c++, p += 3) { - // Ignore the transparent color - if (c == _transp) - continue; - - uint32 di = SQR(d1 - p[0]) + SQR(j - p[1]) + SQR(k - p[2]); - if (di < d) { - d = di; - n = c; - if (d == 0) - break; - } - } - - *lut++ = n; - } - } - - // Got this slice now - _gots[d1] = 1; -} - -inline int PaletteLUT::getIndex(byte c1, byte c2, byte c3) const { - return ((c1 >> _shift) << _depth2) | ((c2 >> _shift) << _depth1) | (c3 >> _shift); -} - -void PaletteLUT::getEntry(byte index, byte &c1, byte &c2, byte &c3) const { - c1 = _realPal[index * 3 + 0]; - c2 = _realPal[index * 3 + 1]; - c3 = _realPal[index * 3 + 2]; -} - -byte PaletteLUT::findNearest(byte c1, byte c2, byte c3) { - return _lut[getIndex(c1, c2, c3)]; -} - -byte PaletteLUT::findNearest(byte c1, byte c2, byte c3, byte &nC1, byte &nC2, byte &nC3) { - // If we don't have the required "slice" yet, build it - if (!_gots[c1 >> _shift]) - build(c1 >> _shift); - - int palIndex = _lut[getIndex(c1, c2, c3)]; - int i = palIndex * 3; - - nC1 = _realPal[i + 0]; - nC2 = _realPal[i + 1]; - nC3 = _realPal[i + 2]; - - return palIndex; -} - -bool PaletteLUT::save(Common::WriteStream &stream) { - // The table has to be completely built before we can save - while (_got < _dim1) - buildNext(); - - stream.writeUint32BE(MKTAG('P','L','U','T')); // Magic - stream.writeUint32BE(kVersion); - stream.writeByte(_depth1); - if (stream.write(_realPal, 768) != 768) - return false; - if (stream.write(_lutPal, 768) != 768) - return false; - if (stream.write(_lut, _dim3) != _dim3) - return false; - if (!stream.flush()) - return false; - - if (stream.err()) - return false; - - return true; -} - -bool PaletteLUT::load(Common::SeekableReadStream &stream) { - // _realPal + _lutPal + _lut + _depth1 + magic + version - int32 needSize = 768 + 768 + _dim3 + 1 + 4 + 4; - - if ((stream.size() - stream.pos()) < needSize) - return false; - - // Magic - if (stream.readUint32BE() != MKTAG('P','L','U','T')) - return false; - - if (stream.readUint32BE() != kVersion) - return false; - - byte depth1 = stream.readByte(); - - if (depth1 != _depth1) - return false; - - if (stream.read(_realPal, 768) != 768) - return false; - if (stream.read(_lutPal, 768) != 768) - return false; - if (stream.read(_lut, _dim3) != _dim3) - return false; - - _got = _dim1; - memset(_gots, 1, _dim1); - - return true; -} - -SierraLight::SierraLight(int16 width, PaletteLUT *palLUT) { - assert(width > 0); - - _width = width; - _palLUT = palLUT; - - // Big buffer for the errors of the current and next line - _errorBuf = new int32[3 * (2 * (_width + 2*1))]; - memset(_errorBuf, 0, (3 * (2 * (_width + 2*1))) * sizeof(int32)); - - _curLine = 0; - _errors[0] = _errorBuf + 3; - _errors[1] = _errors[0] + 3 * (_width + 2*1); -} - -SierraLight::~SierraLight() { - delete[] _errorBuf; -} - -void SierraLight::newFrame() { - _curLine = 0; - memset(_errors[0], 0, 3 * _width * sizeof(int32)); - memset(_errors[1], 0, 3 * _width * sizeof(int32)); -} - -void SierraLight::nextLine() { - // Clear the finished line, it will become the last line in the buffer - memset(_errors[_curLine], 0, 3 * _width * sizeof(int32)); - - _curLine = (_curLine + 1) % 2; -} - -byte SierraLight::dither(byte c1, byte c2, byte c3, uint32 x) { - assert(_palLUT); - assert(x < (uint32)_width); - - int32 eC1, eC2, eC3; - - getErrors(x, eC1, eC2, eC3); - - // Apply error on values - c1 = CLIP<int>(c1 + eC1, 0, 255); - c2 = CLIP<int>(c2 + eC2, 0, 255); - c3 = CLIP<int>(c3 + eC3, 0, 255); - - // Find color - byte newC1, newC2, newC3; - byte newPixel = _palLUT->findNearest(c1, c2, c3, newC1, newC2, newC3); - - // Calculate new error - eC1 = c1 - newC1; - eC2 = c2 - newC2; - eC3 = c3 - newC3; - - // Add them - addErrors(x, eC1, eC2, eC3); - - return newPixel; -} - -inline void SierraLight::getErrors(uint32 x, int32 &eC1, int32 &eC2, int32 &eC3) { - int32 *errCur = _errors[_curLine]; - - x *= 3; - eC1 = errCur[x + 0] >> 2; - eC2 = errCur[x + 1] >> 2; - eC3 = errCur[x + 2] >> 2; -} - -inline void SierraLight::addErrors(uint32 x, int32 eC1, int32 eC2, int32 eC3) { - int32 *errCur = _errors[_curLine]; - int32 *errNext = _errors[(_curLine + 1) % 2]; - - // Indices for current error - int x0 = 3 * (x + 1); - int x1 = 3 * (x + 0); - int x2 = 3 * (x - 1); - - errCur [x0 + 0] += eC1 << 1; - errCur [x0 + 1] += eC2 << 1; - errCur [x0 + 2] += eC3 << 1; - errNext[x1 + 0] += eC1; - errNext[x1 + 1] += eC2; - errNext[x1 + 2] += eC3; - errNext[x2 + 0] += eC1; - errNext[x2 + 1] += eC2; - errNext[x2 + 2] += eC3; -} - -} // End of namespace Graphics diff --git a/graphics/dither.h b/graphics/dither.h deleted file mode 100644 index dbde03df82..0000000000 --- a/graphics/dither.h +++ /dev/null @@ -1,195 +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. - */ - -#ifndef GRAPHICS_DITHER_H -#define GRAPHICS_DITHER_H - -#include "common/util.h" - -namespace Common { -class SeekableReadStream; -class WriteStream; -} - -namespace Graphics { - -/** A palette lookup table to find the nearest matching entry of a fixed palette to a true color. - * - * The table can be build up in slices, one slice consisting of all entries for - * one value of the first color component. - */ -class PaletteLUT { -public: - /** Palette format. */ - enum PaletteFormat { - kPaletteRGB, ///< Palette in RGB colorspace - kPaletteYUV ///< Palette in YUV colorspace - }; - - /** Converting a color from YUV to RGB colorspace. */ - inline static void YUV2RGB(byte y, byte u, byte v, byte &r, byte &g, byte &b) { - r = CLIP<int>(y + ((1357 * (v - 128)) >> 10), 0, 255); - g = CLIP<int>(y - (( 691 * (v - 128)) >> 10) - ((333 * (u - 128)) >> 10), 0, 255); - b = CLIP<int>(y + ((1715 * (u - 128)) >> 10), 0, 255); - } - /** Converting a color from RGB to YUV colorspace. */ - inline static void RGB2YUV(byte r, byte g, byte b, byte &y, byte &u, byte &v) { - y = CLIP<int>( ((r * 306) >> 10) + ((g * 601) >> 10) + ((b * 117) >> 10) , 0, 255); - u = CLIP<int>(-((r * 172) >> 10) - ((g * 340) >> 10) + ((b * 512) >> 10) + 128, 0, 255); - v = CLIP<int>( ((r * 512) >> 10) - ((g * 429) >> 10) - ((b * 83) >> 10) + 128, 0, 255); - } - - /** Create a lookup table of a given depth and palette format. - * - * @param depth How many bits of each color component to consider. - * @param format The format the palette should be in. - */ - PaletteLUT(byte depth, PaletteFormat format); - ~PaletteLUT(); - - /** Setting a palette. - * - * Any already built slices will be purged. - * - * @param palette The palette, plain 256 * 3 color components. - * @param format The format the palette is in. - * @param depth The number of significant bits in each color component. - * @param transp An index that's seen as transparent and therefore ignored. - */ - void setPalette(const byte *palette, PaletteFormat format, byte depth, int transp = -1); - - /** Build the next slice. - * - * This will build the next slice, if any. - */ - void buildNext(); - - /** Querying the color components to a given palette entry index. */ - void getEntry(byte index, byte &c1, byte &c2, byte &c3) const; - /** Finding the nearest matching entry. - * - * @param c1 The first component of the wanted color. - * @param c2 The second component of the wanted color. - * @param c3 The third component of the wanted color. - * @return The palette entry matching the wanted color best. - */ - byte findNearest(byte c1, byte c2, byte c3); - /** Finding the nearest matching entry, together with its color components. - * - * @param c1 The first component of the wanted color. - * @param c2 The second component of the wanted color. - * @param c3 The third component of the wanted color. - * @paran nC1 The first component of the found color. - * @paran nC2 The second component of the found color. - * @paran nC3 The third component of the found color. - * @return The palette entry matching the wanted color best. - */ - byte findNearest(byte c1, byte c2, byte c3, byte &nC1, byte &nC2, byte &nC3); - - /** Save the table to a stream. - * - * This will build the whole table first. - */ - bool save(Common::WriteStream &stream); - /** Load the table from a stream. */ - bool load(Common::SeekableReadStream &stream); - -private: - static const uint32 kVersion = 1; - - byte _depth1; ///< The table's depth for one dimension. - byte _depth2; ///< The table's depth for two dimensions. - byte _shift; ///< Amount to shift to adjust for the table's depth. - - uint32 _dim1; ///< The table's entry offset for one dimension. - uint32 _dim2; ///< The table's entry offset for two dimensions. - uint32 _dim3; ///< The table's entry offset for three dimensions. - - int _transp; ///< The transparent palette index. - - PaletteFormat _format; ///< The table's palette format. - byte _lutPal[768]; ///< The palette used for looking up a color. - byte _realPal[768]; ///< The original palette. - - uint32 _got; ///< Number of slices generated. - byte *_gots; ///< Map of generated slices. - byte *_lut; ///< The lookup table. - - /** Building a specified slice. */ - void build(int d1); - /** Calculates the index into the lookup table for a given color. */ - inline int getIndex(byte c1, byte c2, byte c3) const; -}; - -/** The Sierra-2-4A ("Filter Light") error distribution dithering algorithm. - * - * The image will be dithered line by line and pixel by pixel, without earlier - * values having to be changed. -*/ -class SierraLight { -public: - /** Constructor. - * - * @param width The width of the image to dither. - * @param palLUT The palette to which to dither. - */ - SierraLight(int16 width, PaletteLUT *palLUT); - ~SierraLight(); - - /** Signals that a new frame or image is about to be dithered. - * - * This clears all collected errors, so that a new image (of the same - * height and with the same palette) can be dithered. - */ - void newFrame(); - /** Signals that a new line is about the begin. - * - * The current line's errors will be forgotten and values collected for the - * next line will now count as the current line's. - */ - void nextLine(); - /** Dither a pixel. - * - * @param c1 The first color component of the pixel. - * @param c2 The second color component of the pixel. - * @param c3 The third color component of the pixel. - * @param x The pixel's x coordinate within the image. - */ - byte dither(byte c1, byte c2, byte c3, uint32 x); - -protected: - int16 _width; ///< The image's width. - - PaletteLUT *_palLUT; ///< The palette against which to dither. - - int32 *_errorBuf; ///< Big buffer for all collected errors. - int32 *_errors[2]; ///< Pointers into the error buffer for two lines. - int _curLine; ///< Which one is the current line? - - /** Querying a pixel's errors. */ - inline void getErrors(uint32 x, int32 &eC1, int32 &eC2, int32 &eC3); - /** Adding a pixel's errors. */ - inline void addErrors(uint32 x, int32 eC1, int32 eC2, int32 eC3); -}; - -} // End of namespace Graphics - -#endif diff --git a/graphics/module.mk b/graphics/module.mk index 469ee42047..02c88d98ba 100644 --- a/graphics/module.mk +++ b/graphics/module.mk @@ -3,7 +3,6 @@ MODULE := graphics MODULE_OBJS := \ conversion.o \ cursorman.o \ - dither.o \ font.o \ fontman.o \ fonts/bdf.o \ diff --git a/graphics/sjis.cpp b/graphics/sjis.cpp index 4dd24d9dcc..33f0e562cb 100644 --- a/graphics/sjis.cpp +++ b/graphics/sjis.cpp @@ -53,7 +53,7 @@ FontSJIS *FontSJIS::createFont(const Common::Platform platform) { } delete ret; } // TODO: PC98 font rom support - /* else if (platform == Common::kPlatformPC98) { + /* else if (platform == Common::kPlatformPC98) { ret = new FontPC98(); if (ret) { if (ret->loadData()) @@ -90,7 +90,7 @@ void FontSJISBase::toggleFlippedMode(bool enable) { if (hasFeature(kFeatFlipped)) _flippedMode = enable; else - warning("Flipped mode unsupported by this font"); + warning("Flipped mode unsupported by this font"); } uint FontSJISBase::getFontHeight() const { @@ -265,10 +265,10 @@ void FontSJISBase::drawChar(void *dst, uint16 ch, int pitch, int bpp, uint32 c1, blitCharacter<uint8>(glyphSource, width - outlineXOffset, height - outlineYOffset, (uint8 *)dst + pitch + 1, pitch, c1); } else { if (_drawMode != kDefaultMode) { - blitCharacter<uint8>(glyphSource, width - outlineXOffset, height, ((uint8*)dst) + 1, pitch, c2); - blitCharacter<uint8>(glyphSource, width, height - outlineYOffset, ((uint8*)dst) + pitch, pitch, c2); + blitCharacter<uint8>(glyphSource, width - outlineXOffset, height, ((uint8 *)dst) + 1, pitch, c2); + blitCharacter<uint8>(glyphSource, width, height - outlineYOffset, ((uint8 *)dst) + pitch, pitch, c2); if (_drawMode == kShadowMode) - blitCharacter<uint8>(glyphSource, width - outlineXOffset, height - outlineYOffset, ((uint8*)dst) + pitch + 1, pitch, c2); + blitCharacter<uint8>(glyphSource, width - outlineXOffset, height - outlineYOffset, ((uint8 *)dst) + pitch + 1, pitch, c2); } blitCharacter<uint8>(glyphSource, width, height, (uint8 *)dst, pitch, c1); @@ -279,10 +279,10 @@ void FontSJISBase::drawChar(void *dst, uint16 ch, int pitch, int bpp, uint32 c1, blitCharacter<uint16>(glyphSource, width - outlineXOffset, height - outlineYOffset, (uint8 *)dst + pitch + 2, pitch, c1); } else { if (_drawMode != kDefaultMode) { - blitCharacter<uint16>(glyphSource, width - outlineXOffset, height, ((uint8*)dst) + 2, pitch, c2); - blitCharacter<uint16>(glyphSource, width, height - outlineYOffset, ((uint8*)dst) + pitch, pitch, c2); + blitCharacter<uint16>(glyphSource, width - outlineXOffset, height, ((uint8 *)dst) + 2, pitch, c2); + blitCharacter<uint16>(glyphSource, width, height - outlineYOffset, ((uint8 *)dst) + pitch, pitch, c2); if (_drawMode == kShadowMode) - blitCharacter<uint16>(glyphSource, width - outlineXOffset, height - outlineYOffset, ((uint8*)dst) + pitch + 2, pitch, c2); + blitCharacter<uint16>(glyphSource, width - outlineXOffset, height - outlineYOffset, ((uint8 *)dst) + pitch + 2, pitch, c2); } blitCharacter<uint16>(glyphSource, width, height, (uint8 *)dst, pitch, c1); @@ -424,10 +424,10 @@ bool FontPCEngine::loadData() { Common::SeekableReadStream *data = SearchMan.createReadStreamForMember("pce.cdbios"); if (!data) return false; - + data->seek((data->size() & 0x200) ? 0x30200 : 0x30000); data->read(_fontData12x12, kFont12x12Chars * 18); - + _fontWidth = _fontHeight = 12; _bitPosNewLineMask = _fontWidth & 7; @@ -444,41 +444,41 @@ const uint8 *FontPCEngine::getCharData(uint16 ch) const { const int rangeCnt = 45; static const uint16 rangeTbl[rangeCnt][2] = { // Symbols - {0x8140,0x817E},{0x8180,0x81AC}, + { 0x8140, 0x817E }, { 0x8180, 0x81AC }, // 0-9 - {0x824F,0x8258}, + { 0x824F, 0x8258 }, // Latin upper - {0x8260,0x8279}, + { 0x8260, 0x8279 }, // Latin lower - {0x8281,0x829A}, + { 0x8281, 0x829A }, // Kana - {0x829F,0x82F1},{0x8340,0x837E},{0x8380,0x8396}, + { 0x829F, 0x82F1 }, { 0x8340, 0x837E }, { 0x8380, 0x8396}, // Greek upper - {0x839F,0x83B6}, + { 0x839F, 0x83B6 }, // Greek lower - {0x83BF,0x83D6}, + { 0x83BF, 0x83D6 }, // Cyrillic upper - {0x8440,0x8460}, + { 0x8440, 0x8460 }, // Cyrillic lower - {0x8470,0x847E},{0x8480,0x8491}, + { 0x8470, 0x847E }, { 0x8480, 0x8491}, // Kanji - {0x889F,0x88FC}, - {0x8940,0x897E},{0x8980,0x89FC}, - {0x8A40,0x8A7E},{0x8A80,0x8AFC}, - {0x8B40,0x8B7E},{0x8B80,0x8BFC}, - {0x8C40,0x8C7E},{0x8C80,0x8CFC}, - {0x8D40,0x8D7E},{0x8D80,0x8DFC}, - {0x8E40,0x8E7E},{0x8E80,0x8EFC}, - {0x8F40,0x8F7E},{0x8F80,0x8FFC}, - {0x9040,0x907E},{0x9080,0x90FC}, - {0x9140,0x917E},{0x9180,0x91FC}, - {0x9240,0x927E},{0x9280,0x92FC}, - {0x9340,0x937E},{0x9380,0x93FC}, - {0x9440,0x947E},{0x9480,0x94FC}, - {0x9540,0x957E},{0x9580,0x95FC}, - {0x9640,0x967E},{0x9680,0x96FC}, - {0x9740,0x977E},{0x9780,0x97FC}, - {0x9840,0x9872} + { 0x889F, 0x88FC }, + { 0x8940, 0x897E }, { 0x8980, 0x89FC }, + { 0x8A40, 0x8A7E }, { 0x8A80, 0x8AFC }, + { 0x8B40, 0x8B7E }, { 0x8B80, 0x8BFC }, + { 0x8C40, 0x8C7E }, { 0x8C80, 0x8CFC }, + { 0x8D40, 0x8D7E }, { 0x8D80, 0x8DFC }, + { 0x8E40, 0x8E7E }, { 0x8E80, 0x8EFC }, + { 0x8F40, 0x8F7E }, { 0x8F80, 0x8FFC }, + { 0x9040, 0x907E }, { 0x9080, 0x90FC }, + { 0x9140, 0x917E }, { 0x9180, 0x91FC }, + { 0x9240, 0x927E }, { 0x9280, 0x92FC }, + { 0x9340, 0x937E }, { 0x9380, 0x93FC }, + { 0x9440, 0x947E }, { 0x9480, 0x94FC }, + { 0x9540, 0x957E }, { 0x9580, 0x95FC }, + { 0x9640, 0x967E }, { 0x9680, 0x96FC }, + { 0x9740, 0x977E }, { 0x9780, 0x97FC }, + { 0x9840, 0x9872 } }; ch = (ch << 8) | (ch >> 8); @@ -490,7 +490,7 @@ const uint8 *FontPCEngine::getCharData(uint16 ch) const { } offset += rangeTbl[i][1] - rangeTbl[i][0] + 1; } - + debug(4, "Invalid Char: 0x%x", ch); return 0; } @@ -531,13 +531,14 @@ bool FontSjisSVM::loadData() { uint32 magic1 = data->readUint32BE(); uint32 magic2 = data->readUint32BE(); - if (magic1 != MKTAG('S','C','V','M') || magic2 != MKTAG('S','J','I','S')) { + if (magic1 != MKTAG('S', 'C', 'V', 'M') || magic2 != MKTAG('S', 'J', 'I', 'S')) { delete data; return false; } uint32 version = data->readUint32BE(); - if (version != 3) { + if (version != kSjisFontVersion) { + warning("SJIS font version mismatch, expected: %d found: %u", kSjisFontVersion, version); delete data; return false; } diff --git a/graphics/sjis.h b/graphics/sjis.h index 185b6cc593..f96eef6ad1 100644 --- a/graphics/sjis.h +++ b/graphics/sjis.h @@ -263,6 +263,10 @@ private: const uint8 *getCharDataDefault(uint16 c) const; void mapKANJIChar(const uint8 fB, const uint8 sB, int &base, int &index) const; + + enum { + kSjisFontVersion = 3 + }; }; // TODO: Consider adding support for PC98 ROM diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat Binary files differindex a9f51c6ddd..c5ae3d49bc 100644 --- a/gui/themes/translations.dat +++ b/gui/themes/translations.dat diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 07bcad74a0..5c4dbb8cd0 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -1,2797 +1,2787 @@ -# Czech translation for ScummVM.
-# Copyright (C) 2001-2011 ScummVM Team
-# This file is distributed under the same license as the ScummVM package.
-# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
-"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2011-08-20 15:12+0100\n"
-"PO-Revision-Date: 2011-06-24 06:44+0100\n"
-"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-2\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: Cesky\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-"X-Poedit-Language: Czech\n"
-"X-Poedit-Country: CZECH REPUBLIC\n"
-"X-Poedit-SourceCharset: iso-8859-1\n"
-
-#: gui/about.cpp:91
-#, c-format
-msgid "(built on %s)"
-msgstr "(sestaveno na %s)"
-
-#: gui/about.cpp:98
-msgid "Features compiled in:"
-msgstr "Zakompilované Funkce:"
-
-#: gui/about.cpp:107
-msgid "Available engines:"
-msgstr "Dostupná jádra:"
-
-#: gui/browser.cpp:66
-msgid "Go up"
-msgstr "Jít nahoru"
-
-#: gui/browser.cpp:66 gui/browser.cpp:68
-msgid "Go to previous directory level"
-msgstr "Jít na předchozí úroveň adresáře"
-
-#: gui/browser.cpp:68
-msgctxt "lowres"
-msgid "Go up"
-msgstr "Jít nahoru"
-
-#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
-#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
-#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
-#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:48
-#: backends/events/default/default-events.cpp:222
-#: backends/events/default/default-events.cpp:244
-msgid "Cancel"
-msgstr "Zrušit"
-
-#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
-msgid "Choose"
-msgstr "Zvolit"
-
-#: gui/gui-manager.cpp:116 engines/scumm/help.cpp:125
-#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165
-#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:209
-#: backends/keymapper/remap-dialog.cpp:52
-msgid "Close"
-msgstr "Zavřít"
-
-#: gui/gui-manager.cpp:119
-msgid "Mouse click"
-msgstr "Kliknutí myší"
-
-#: gui/gui-manager.cpp:122 base/main.cpp:286
-msgid "Display keyboard"
-msgstr "Zobrazit klávesnici"
-
-#: gui/gui-manager.cpp:125 base/main.cpp:289
-msgid "Remap keys"
-msgstr "Přemapovat klávesy"
-
-#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
-msgid "Choose an action to map"
-msgstr "Zvolte činnost k mapování"
-
-#: gui/KeysDialog.cpp:41
-msgid "Map"
-msgstr "Mapovat"
-
-#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
-#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
-#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
-#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
-#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
-#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
-#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
-#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
-#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
-#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:47
-#: backends/platform/wince/CELauncherDialog.cpp:54
-msgid "OK"
-msgstr "OK"
-
-#: gui/KeysDialog.cpp:49
-msgid "Select an action and click 'Map'"
-msgstr "Zvolte činnost a klikněte 'Mapovat'"
-
-#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
-#, c-format
-msgid "Associated key : %s"
-msgstr "Přiřazená klávesa: %s"
-
-#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
-#, c-format
-msgid "Associated key : none"
-msgstr "Přiřazená klávesa: žádná"
-
-#: gui/KeysDialog.cpp:90
-msgid "Please select an action"
-msgstr "Prosím vyberte činnost"
-
-#: gui/KeysDialog.cpp:106
-msgid "Press the key to associate"
-msgstr "Zmáčkněte klávesu pro přiřazení"
-
-#: gui/launcher.cpp:165
-msgid "Game"
-msgstr "Hra"
-
-#: gui/launcher.cpp:169
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
-msgid ""
-"Short game identifier used for referring to savegames and running the game "
-"from the command line"
-msgstr ""
-"Krátký identifikátor her, používaný jako odkaz k uloženým hrám a spuštění "
-"hry z příkazového řádku"
-
-#: gui/launcher.cpp:171
-msgctxt "lowres"
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:176
-msgid "Name:"
-msgstr "Jméno"
-
-#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
-msgid "Full title of the game"
-msgstr "Úplný název hry"
-
-#: gui/launcher.cpp:178
-msgctxt "lowres"
-msgid "Name:"
-msgstr "Jméno:"
-
-#: gui/launcher.cpp:182
-msgid "Language:"
-msgstr "Jazyk:"
-
-#: gui/launcher.cpp:182 gui/launcher.cpp:183
-msgid ""
-"Language of the game. This will not turn your Spanish game version into "
-"English"
-msgstr "Jazyk hry. Toto z Vaší Španělské verze neudělá Anglickou"
-
-#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
-#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
-#: audio/null.cpp:40
-msgid "<default>"
-msgstr "<výchozí>"
-
-#: gui/launcher.cpp:194
-msgid "Platform:"
-msgstr "Platforma:"
-
-#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
-msgid "Platform the game was originally designed for"
-msgstr "Platforma, pro kterou byla hra původně vytvořena"
-
-#: gui/launcher.cpp:196
-msgctxt "lowres"
-msgid "Platform:"
-msgstr "Platforma:"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "Graphics"
-msgstr "Obraz"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "GFX"
-msgstr "GFX"
-
-#: gui/launcher.cpp:211
-msgid "Override global graphic settings"
-msgstr "Potlačit globální nastavení obrazu"
-
-#: gui/launcher.cpp:213
-msgctxt "lowres"
-msgid "Override global graphic settings"
-msgstr "Potlačit globální nastavení obrazu"
-
-#: gui/launcher.cpp:220 gui/options.cpp:1041
-msgid "Audio"
-msgstr "Zvuk"
-
-#: gui/launcher.cpp:223
-msgid "Override global audio settings"
-msgstr "Potlačit globální nastavení zvuku"
-
-#: gui/launcher.cpp:225
-msgctxt "lowres"
-msgid "Override global audio settings"
-msgstr "Potlačit globální nastavení zvuku"
-
-#: gui/launcher.cpp:234 gui/options.cpp:1046
-msgid "Volume"
-msgstr "Hlasitost"
-
-#: gui/launcher.cpp:236 gui/options.cpp:1048
-msgctxt "lowres"
-msgid "Volume"
-msgstr "Hlasitost"
-
-#: gui/launcher.cpp:239
-msgid "Override global volume settings"
-msgstr "Potlačit globální nastavení hlasitosti"
-
-#: gui/launcher.cpp:241
-msgctxt "lowres"
-msgid "Override global volume settings"
-msgstr "Potlačit globální nastavení hlasitosti"
-
-#: gui/launcher.cpp:248 gui/options.cpp:1056
-msgid "MIDI"
-msgstr "MIDI"
-
-#: gui/launcher.cpp:251
-msgid "Override global MIDI settings"
-msgstr "Potlačit globální nastavení MIDI"
-
-#: gui/launcher.cpp:253
-msgctxt "lowres"
-msgid "Override global MIDI settings"
-msgstr "Potlačit globální nastavení MIDI"
-
-#: gui/launcher.cpp:263 gui/options.cpp:1062
-msgid "MT-32"
-msgstr "MT-32"
-
-#: gui/launcher.cpp:266
-msgid "Override global MT-32 settings"
-msgstr "Potlačit globální nastavení MT-32"
-
-#: gui/launcher.cpp:268
-msgctxt "lowres"
-msgid "Override global MT-32 settings"
-msgstr "Potlačit globální nastavení MT-32"
-
-#: gui/launcher.cpp:279 gui/options.cpp:1069
-msgid "Paths"
-msgstr "Cesty"
-
-#: gui/launcher.cpp:281 gui/options.cpp:1071
-msgctxt "lowres"
-msgid "Paths"
-msgstr "Cesty"
-
-#: gui/launcher.cpp:288
-msgid "Game Path:"
-msgstr "Cesta Hry:"
-
-#: gui/launcher.cpp:290
-msgctxt "lowres"
-msgid "Game Path:"
-msgstr "Cesta Hry:"
-
-#: gui/launcher.cpp:295 gui/options.cpp:1091
-msgid "Extra Path:"
-msgstr "Dodatečná Cesta:"
-
-#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
-msgid "Specifies path to additional data used the game"
-msgstr "Stanoví cestu pro dodatečná data použitá ve hře"
-
-#: gui/launcher.cpp:297 gui/options.cpp:1093
-msgctxt "lowres"
-msgid "Extra Path:"
-msgstr "Dodatečná Cesta:"
-
-#: gui/launcher.cpp:302 gui/options.cpp:1079
-msgid "Save Path:"
-msgstr "Cesta pro uložení:"
-
-#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
-#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
-msgid "Specifies where your savegames are put"
-msgstr "Stanovuje, kam jsou umístěny Vaše uložené hry"
-
-#: gui/launcher.cpp:304 gui/options.cpp:1081
-msgctxt "lowres"
-msgid "Save Path:"
-msgstr "Cesta pro uložení:"
-
-#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
-#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
-#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
-#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
-#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
-msgctxt "path"
-msgid "None"
-msgstr "Žádné"
-
-#: gui/launcher.cpp:326 gui/launcher.cpp:408
-#: backends/platform/wii/options.cpp:56
-msgid "Default"
-msgstr "Výchozí"
-
-#: gui/launcher.cpp:446 gui/options.cpp:1356
-msgid "Select SoundFont"
-msgstr "Vybrat SoundFont"
-
-#: gui/launcher.cpp:465 gui/launcher.cpp:612
-msgid "Select directory with game data"
-msgstr "Vyberte adresář s daty hry"
-
-#: gui/launcher.cpp:483
-msgid "Select additional game directory"
-msgstr "Vyberte dodatečný adresář hry"
-
-#: gui/launcher.cpp:495
-msgid "Select directory for saved games"
-msgstr "Vyberte adresář pro uložené hry"
-
-#: gui/launcher.cpp:514
-msgid "This game ID is already taken. Please choose another one."
-msgstr "Toto ID hry je už zabrané. Vyberte si, prosím, jiné."
-
-#: gui/launcher.cpp:555 engines/dialogs.cpp:110
-msgid "~Q~uit"
-msgstr "~U~končit"
-
-#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
-msgid "Quit ScummVM"
-msgstr "Ukončit ScummVM"
-
-#: gui/launcher.cpp:556
-msgid "A~b~out..."
-msgstr "~O~ Programu..."
-
-#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
-msgid "About ScummVM"
-msgstr "O ScummVM"
-
-#: gui/launcher.cpp:557
-msgid "~O~ptions..."
-msgstr "~V~olby..."
-
-#: gui/launcher.cpp:557
-msgid "Change global ScummVM options"
-msgstr "Změnit globální volby ScummVM"
-
-#: gui/launcher.cpp:559
-msgid "~S~tart"
-msgstr "~S~pustit"
-
-#: gui/launcher.cpp:559
-msgid "Start selected game"
-msgstr "Spustit zvolenou hru"
-
-#: gui/launcher.cpp:562
-msgid "~L~oad..."
-msgstr "~N~ahrát..."
-
-#: gui/launcher.cpp:562
-msgid "Load savegame for selected game"
-msgstr "Nahrát uloženou pozici pro zvolenou hru"
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:1055
-msgid "~A~dd Game..."
-msgstr "~P~řidat hru..."
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:574
-msgid "Hold Shift for Mass Add"
-msgstr "Podržte Shift pro Hromadné Přidání"
-
-#: gui/launcher.cpp:569
-msgid "~E~dit Game..."
-msgstr "~U~pravit Hru..."
-
-#: gui/launcher.cpp:569 gui/launcher.cpp:576
-msgid "Change game options"
-msgstr "Změnit volby hry"
-
-#: gui/launcher.cpp:571
-msgid "~R~emove Game"
-msgstr "~O~dstranit Hru"
-
-#: gui/launcher.cpp:571 gui/launcher.cpp:578
-msgid "Remove game from the list. The game data files stay intact"
-msgstr "Odstranit hru ze seznamu. Herní data zůstanou zachována"
-
-#: gui/launcher.cpp:574 gui/launcher.cpp:1055
-msgctxt "lowres"
-msgid "~A~dd Game..."
-msgstr "~P~řidat hru..."
-
-#: gui/launcher.cpp:576
-msgctxt "lowres"
-msgid "~E~dit Game..."
-msgstr "~U~pravit hru..."
-
-#: gui/launcher.cpp:578
-msgctxt "lowres"
-msgid "~R~emove Game"
-msgstr "~O~dstranit hru"
-
-#: gui/launcher.cpp:586
-msgid "Search in game list"
-msgstr "Hledat v seznamu her"
-
-#: gui/launcher.cpp:590 gui/launcher.cpp:1102
-msgid "Search:"
-msgstr "Hledat:"
-
-#: gui/launcher.cpp:593 gui/options.cpp:826
-msgid "Clear value"
-msgstr "Vyčistit hodnotu"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
-#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
-msgid "Load game:"
-msgstr "Nahrát hru:"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
-#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
-#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Load"
-msgstr "Nahrát"
-
-#: gui/launcher.cpp:723
-msgid ""
-"Do you really want to run the mass game detector? This could potentially add "
-"a huge number of games."
-msgstr ""
-"Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciálně "
-"přidat velkou spoustu her. "
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Yes"
-msgstr "Ano"
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "No"
-msgstr "Ne"
-
-#: gui/launcher.cpp:772
-msgid "ScummVM couldn't open the specified directory!"
-msgstr "ScummVM nemohl tento adresář otevřít!"
-
-#: gui/launcher.cpp:784
-msgid "ScummVM could not find any game in the specified directory!"
-msgstr "ScummVM nemohl v zadaném adresáři najít žádnou hru!"
-
-#: gui/launcher.cpp:798
-msgid "Pick the game:"
-msgstr "Vybrat hru:"
-
-#: gui/launcher.cpp:872
-msgid "Do you really want to remove this game configuration?"
-msgstr "Opravdu chcete odstranit nastavení této hry?"
-
-#: gui/launcher.cpp:936
-msgid "This game does not support loading games from the launcher."
-msgstr "Tato hra nepodporuje spouštění her ze spouštěče"
-
-#: gui/launcher.cpp:940
-msgid "ScummVM could not find any engine capable of running the selected game!"
-msgstr "ScummVM nemohl najít žádné jádro schopné vybranou hru spustit!"
-
-#: gui/launcher.cpp:1054
-msgctxt "lowres"
-msgid "Mass Add..."
-msgstr "Hromadné Přidání..."
-
-#: gui/launcher.cpp:1054
-msgid "Mass Add..."
-msgstr "Hromadné Přidání..."
-
-#: gui/massadd.cpp:78 gui/massadd.cpp:81
-msgid "... progress ..."
-msgstr "... průběh ..."
-
-#: gui/massadd.cpp:258
-msgid "Scan complete!"
-msgstr "Hledání dokončeno!"
-
-#: gui/massadd.cpp:261
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games."
-msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her."
-
-#: gui/massadd.cpp:265
-#, c-format
-msgid "Scanned %d directories ..."
-msgstr "Prohledáno %d adresářů..."
-
-#: gui/massadd.cpp:268
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her ..."
-
-#: gui/options.cpp:72
-msgid "Never"
-msgstr "Nikdy"
-
-#: gui/options.cpp:72
-msgid "every 5 mins"
-msgstr "Každých 5 min"
-
-#: gui/options.cpp:72
-msgid "every 10 mins"
-msgstr "Každých 10 min"
-
-#: gui/options.cpp:72
-msgid "every 15 mins"
-msgstr "Každých 15 min"
-
-#: gui/options.cpp:72
-msgid "every 30 mins"
-msgstr "Každých 30 min"
-
-#: gui/options.cpp:74
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: gui/options.cpp:74
-msgid "11kHz"
-msgstr "11kHz"
-
-#: gui/options.cpp:74
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: gui/options.cpp:74
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: gui/options.cpp:74
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
-#: gui/options.cpp:625 gui/options.cpp:825
-msgctxt "soundfont"
-msgid "None"
-msgstr "Žádné"
-
-#: gui/options.cpp:372
-msgid "Failed to apply some of the graphic options changes:"
-msgstr "Nelze použít některé změny možností grafiky:"
-
-#: gui/options.cpp:384
-msgid "the video mode could not be changed."
-msgstr "režim obrazu nemohl být změněn."
-
-#: gui/options.cpp:390
-msgid "the fullscreen setting could not be changed"
-msgstr "nastavení celé obrazovky nemohlo být změněno"
-
-#: gui/options.cpp:396
-msgid "the aspect ratio setting could not be changed"
-msgstr "nastavení poměru stran nemohlo být změněno"
-
-#: gui/options.cpp:705
-msgid "Graphics mode:"
-msgstr "Režim obrazu:"
-
-#: gui/options.cpp:716
-msgid "Render mode:"
-msgstr "Režim vykreslení:"
-
-#: gui/options.cpp:716 gui/options.cpp:717
-msgid "Special dithering modes supported by some games"
-msgstr "Speciální režimy chvění podporované některými hrami"
-
-#: gui/options.cpp:726
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
-msgid "Fullscreen mode"
-msgstr "Režim celé obrazovky"
-
-#: gui/options.cpp:729
-msgid "Aspect ratio correction"
-msgstr "Korekce poměru stran"
-
-#: gui/options.cpp:729
-msgid "Correct aspect ratio for 320x200 games"
-msgstr "Korigovat poměr stran pro hry 320x200"
-
-#: gui/options.cpp:730
-msgid "EGA undithering"
-msgstr "Nerozkládání EGA"
-
-#: gui/options.cpp:730
-msgid "Enable undithering in EGA games that support it"
-msgstr "Povolit nerozkládání v EGA hrách, které to podporují"
-
-#: gui/options.cpp:738
-msgid "Preferred Device:"
-msgstr "Prioritní Zařízení:"
-
-#: gui/options.cpp:738
-msgid "Music Device:"
-msgstr "Hudební zařízení"
-
-#: gui/options.cpp:738 gui/options.cpp:740
-msgid "Specifies preferred sound device or sound card emulator"
-msgstr "Stanoví prioritní zvukové zařízení nebo emulátor zvukové karty"
-
-#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
-msgid "Specifies output sound device or sound card emulator"
-msgstr "Stanoví výstupní zvukové zařízení nebo emulátor zvukové karty"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Preferred Dev.:"
-msgstr "Prioritní Zař.:"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Music Device:"
-msgstr "Hudební zařízení"
-
-#: gui/options.cpp:766
-msgid "AdLib emulator:"
-msgstr "AdLib emulátor"
-
-#: gui/options.cpp:766 gui/options.cpp:767
-msgid "AdLib is used for music in many games"
-msgstr "AdLib se používá pro hudbu v mnoha hrách"
-
-#: gui/options.cpp:777
-msgid "Output rate:"
-msgstr "Výstup. frekvence:"
-
-#: gui/options.cpp:777 gui/options.cpp:778
-msgid ""
-"Higher value specifies better sound quality but may be not supported by your "
-"soundcard"
-msgstr ""
-"Vyšší hodnota způsobí lepší kvalitu zvuku, ale nemusí být podporována Vaši "
-"zvukovou kartou"
-
-#: gui/options.cpp:788
-msgid "GM Device:"
-msgstr "GM Zařízení:"
-
-#: gui/options.cpp:788
-msgid "Specifies default sound device for General MIDI output"
-msgstr "Stanoví výchozí zvukové zařízení pro výstup General MIDI"
-
-#: gui/options.cpp:799
-msgid "Don't use General MIDI music"
-msgstr "Nepoužívat hudbu General MIDI"
-
-#: gui/options.cpp:810 gui/options.cpp:871
-msgid "Use first available device"
-msgstr "Použít první dostupné zařízení"
-
-#: gui/options.cpp:822
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
-msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
-msgstr ""
-"SoundFont je podporován některými zvukovými kartami, Fluidsynth a Timidity"
-
-#: gui/options.cpp:824
-msgctxt "lowres"
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:829
-msgid "Mixed AdLib/MIDI mode"
-msgstr "Smíšený režim AdLib/MIDI"
-
-#: gui/options.cpp:829
-msgid "Use both MIDI and AdLib sound generation"
-msgstr "Použít obě zvukové generace MIDI a AdLib"
-
-#: gui/options.cpp:832
-msgid "MIDI gain:"
-msgstr "Zesílení MIDI:"
-
-#: gui/options.cpp:842
-msgid "MT-32 Device:"
-msgstr "Zařízení MT-32:"
-
-#: gui/options.cpp:842
-msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
-msgstr ""
-"Stanoví výchozí zvukové výstupní zařízení pro Roland MT-32/LAPC1/CM32l/CM64"
-
-#: gui/options.cpp:847
-msgid "True Roland MT-32 (disable GM emulation)"
-msgstr "Opravdový Roland MT-32 (vypne GM emulaci)"
-
-#: gui/options.cpp:847 gui/options.cpp:849
-msgid ""
-"Check if you want to use your real hardware Roland-compatible sound device "
-"connected to your computer"
-msgstr ""
-"Zaškrtněte, pokud chcete použít pravé hardwarové zařízení kompatibilní s "
-"Roland, připojené k Vašemu počítači"
-
-#: gui/options.cpp:849
-msgctxt "lowres"
-msgid "True Roland MT-32 (no GM emulation)"
-msgstr "Opravdový Roland MT-32 (žádná GM emulace)"
-
-#: gui/options.cpp:852
-msgid "Enable Roland GS Mode"
-msgstr "Zapnout režim Roland GS"
-
-#: gui/options.cpp:852
-msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
-msgstr "Vypne mapování General MIDI pro hry s Roland MT-32 zvukovým doprovodem"
-
-#: gui/options.cpp:861
-msgid "Don't use Roland MT-32 music"
-msgstr "Nepoužívat hudbu Roland MT-32"
-
-#: gui/options.cpp:888
-msgid "Text and Speech:"
-msgstr "Text a Řeč"
-
-#: gui/options.cpp:892 gui/options.cpp:902
-msgid "Speech"
-msgstr "Řeč"
-
-#: gui/options.cpp:893 gui/options.cpp:903
-msgid "Subtitles"
-msgstr "Titulky"
-
-#: gui/options.cpp:894
-msgid "Both"
-msgstr "Oba"
-
-#: gui/options.cpp:896
-msgid "Subtitle speed:"
-msgstr "Rychlost titulků:"
-
-#: gui/options.cpp:898
-msgctxt "lowres"
-msgid "Text and Speech:"
-msgstr "Text a Řeč:"
-
-#: gui/options.cpp:902
-msgid "Spch"
-msgstr "Řeč"
-
-#: gui/options.cpp:903
-msgid "Subs"
-msgstr "Titl"
-
-#: gui/options.cpp:904
-msgctxt "lowres"
-msgid "Both"
-msgstr "Oba"
-
-#: gui/options.cpp:904
-msgid "Show subtitles and play speech"
-msgstr "Zobrazit titulky a přehrávat řeč"
-
-#: gui/options.cpp:906
-msgctxt "lowres"
-msgid "Subtitle speed:"
-msgstr "Rychlost titulků"
-
-#: gui/options.cpp:922
-msgid "Music volume:"
-msgstr "Hlasitost hudby"
-
-#: gui/options.cpp:924
-msgctxt "lowres"
-msgid "Music volume:"
-msgstr "Hlasitost hudby"
-
-#: gui/options.cpp:931
-msgid "Mute All"
-msgstr "Ztlumit Vše"
-
-#: gui/options.cpp:934
-msgid "SFX volume:"
-msgstr "Hlasitost zvuků"
-
-#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
-msgid "Special sound effects volume"
-msgstr "Hlasitost speciálních zvukových efektů"
-
-#: gui/options.cpp:936
-msgctxt "lowres"
-msgid "SFX volume:"
-msgstr "Hlasitost zvuků"
-
-#: gui/options.cpp:944
-msgid "Speech volume:"
-msgstr "Hlasitost řeči"
-
-#: gui/options.cpp:946
-msgctxt "lowres"
-msgid "Speech volume:"
-msgstr "Hlasitost řeči"
-
-#: gui/options.cpp:1085
-msgid "Theme Path:"
-msgstr "Cesta ke Vzhledu:"
-
-#: gui/options.cpp:1087
-msgctxt "lowres"
-msgid "Theme Path:"
-msgstr "Cesta ke Vzhledu:"
-
-#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
-msgid "Specifies path to additional data used by all games or ScummVM"
-msgstr "Stanoví cestu k dodatečným datům používaná všemi hrami nebo ScummVM"
-
-#: gui/options.cpp:1098
-msgid "Plugins Path:"
-msgstr "Cesta k Pluginům:"
-
-#: gui/options.cpp:1100
-msgctxt "lowres"
-msgid "Plugins Path:"
-msgstr "Cesta k Pluginům:"
-
-#: gui/options.cpp:1109
-msgid "Misc"
-msgstr "Různé"
-
-#: gui/options.cpp:1111
-msgctxt "lowres"
-msgid "Misc"
-msgstr "Různé"
-
-#: gui/options.cpp:1113
-msgid "Theme:"
-msgstr "Vzhled:"
-
-#: gui/options.cpp:1117
-msgid "GUI Renderer:"
-msgstr "GUI Vykreslovač:"
-
-#: gui/options.cpp:1129
-msgid "Autosave:"
-msgstr "Autoukládání:"
-
-#: gui/options.cpp:1131
-msgctxt "lowres"
-msgid "Autosave:"
-msgstr "Autoukládání:"
-
-#: gui/options.cpp:1139
-msgid "Keys"
-msgstr "Klávesy"
-
-#: gui/options.cpp:1146
-msgid "GUI Language:"
-msgstr "Jazyk GUI"
-
-#: gui/options.cpp:1146
-msgid "Language of ScummVM GUI"
-msgstr "Jazyk GUI ScummVM"
-
-#: gui/options.cpp:1295
-msgid "You have to restart ScummVM before your changes will take effect."
-msgstr "Pro použití těchto nastavení musíte restartovat ScummVM."
-
-#: gui/options.cpp:1308
-msgid "Select directory for savegames"
-msgstr "Vybrat adresář pro uložené hry"
-
-#: gui/options.cpp:1315
-msgid "The chosen directory cannot be written to. Please select another one."
-msgstr "Do zvoleného adresáře nelze zapisovat. Vyberte, prosím, jiný."
-
-#: gui/options.cpp:1324
-msgid "Select directory for GUI themes"
-msgstr "Vyberte adresář pro vhledy GUI"
-
-#: gui/options.cpp:1334
-msgid "Select directory for extra files"
-msgstr "Vyberte adresář pro dodatečné soubory"
-
-#: gui/options.cpp:1345
-msgid "Select directory for plugins"
-msgstr "Vyberte adresář pro zásuvné moduly"
-
-#: gui/options.cpp:1389
-msgid ""
-"The theme you selected does not support your current language. If you want "
-"to use this theme you need to switch to another language first."
-msgstr ""
-"Vzhled, který jste zvolili, nepodporuje Váš současný jazyk. Pokud chcete "
-"tento vzhled použít, musíte nejdříve přepnout na jiný jazyk."
-
-#: gui/saveload.cpp:58 gui/saveload.cpp:239
-msgid "No date saved"
-msgstr "Neuložena žádná data"
-
-#: gui/saveload.cpp:59 gui/saveload.cpp:240
-msgid "No time saved"
-msgstr "Žádný uložený čas"
-
-#: gui/saveload.cpp:60 gui/saveload.cpp:241
-msgid "No playtime saved"
-msgstr "Žádná uložená doba hraní"
-
-#: gui/saveload.cpp:67 gui/saveload.cpp:155
-msgid "Delete"
-msgstr "Smazat"
-
-#: gui/saveload.cpp:154
-msgid "Do you really want to delete this savegame?"
-msgstr "Opravdu chcete tuto uloženou hru vymazat"
-
-#: gui/saveload.cpp:264
-msgid "Date: "
-msgstr "Datum:"
-
-#: gui/saveload.cpp:268
-msgid "Time: "
-msgstr "Čas:"
-
-#: gui/saveload.cpp:274
-msgid "Playtime: "
-msgstr "Doba hraní:"
-
-#: gui/saveload.cpp:287 gui/saveload.cpp:354
-msgid "Untitled savestate"
-msgstr "Bezejmenný uložený stav"
-
-#: gui/themebrowser.cpp:44
-msgid "Select a Theme"
-msgstr "Vyberte Vzhled"
-
-#: gui/ThemeEngine.cpp:328
-msgid "Disabled GFX"
-msgstr "GFX zakázáno"
-
-#: gui/ThemeEngine.cpp:328
-msgctxt "lowres"
-msgid "Disabled GFX"
-msgstr "GFX zakázáno"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard Renderer (16bpp)"
-msgstr "Standardní Vykreslovač (16bpp)"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard (16bpp)"
-msgstr "Standardní (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased Renderer (16bpp)"
-msgstr "Vykreslovač s vyhlazenými hranami (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased (16bpp)"
-msgstr "S vyhlazenými hranami (16bpp)"
-
-#: base/main.cpp:206
-#, c-format
-msgid "Engine does not support debug level '%s'"
-msgstr "Jádro nepodporuje úroveň ladění '%s'"
-
-#: base/main.cpp:274
-msgid "Menu"
-msgstr "Menu"
-
-#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
-#: backends/platform/wince/CEActionsPocket.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:46
-msgid "Skip"
-msgstr "Přeskočit"
-
-#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
-#: backends/platform/wince/CEActionsPocket.cpp:42
-msgid "Pause"
-msgstr "Pauza"
-
-#: base/main.cpp:283
-msgid "Skip line"
-msgstr "Přeskočit řádek"
-
-#: base/main.cpp:442
-msgid "Error running game:"
-msgstr "Chyba při spuštění hry:"
-
-#: base/main.cpp:466
-msgid "Could not find any engine capable of running the selected game"
-msgstr "Nelze nalézt žádné jádro schopné vybranou hru spustit"
-
-#: common/error.cpp:38
-msgid "No error"
-msgstr "Žádná chyba"
-
-#: common/error.cpp:40
-msgid "Game data not found"
-msgstr "Data hry nenalezena"
-
-#: common/error.cpp:42
-msgid "Game id not supported"
-msgstr "Id hry není podporováno"
-
-#: common/error.cpp:44
-msgid "Unsupported color mode"
-msgstr "Nepodporovaný barevný režim"
-
-#: common/error.cpp:47
-msgid "Read permission denied"
-msgstr "Oprávnění ke čtení zamítnuto"
-
-#: common/error.cpp:49
-msgid "Write permission denied"
-msgstr "Oprávnění k zápisu zamítnuto"
-
-#: common/error.cpp:52
-msgid "Path does not exist"
-msgstr "Cesta neexistuje"
-
-#: common/error.cpp:54
-msgid "Path not a directory"
-msgstr "Cesta není adresář"
-
-#: common/error.cpp:56
-msgid "Path not a file"
-msgstr "Cesta není soubor"
-
-#: common/error.cpp:59
-msgid "Cannot create file"
-msgstr "Nelze vytvořit soubor"
-
-#: common/error.cpp:61
-msgid "Reading data failed"
-msgstr "Čtení dat selhalo"
-
-#: common/error.cpp:63
-msgid "Writing data failed"
-msgstr "Zápis dat selhal"
-
-#: common/error.cpp:66
-msgid "Could not find suitable engine plugin"
-msgstr "Nelze nalézt vhodný zás. modul jádra"
-
-#: common/error.cpp:68
-msgid "Engine plugin does not support save states"
-msgstr "Zás. modul jádra nepodporuje uložené stavy"
-
-#: common/error.cpp:71
-msgid "User canceled"
-msgstr "Zrušeno uživatelem"
-
-#: common/error.cpp:75
-msgid "Unknown error"
-msgstr "Neznámá chyba"
-
-#. I18N: Hercules is graphics card name
-#: common/util.cpp:275
-msgid "Hercules Green"
-msgstr "Hercules Zelená"
-
-#: common/util.cpp:276
-msgid "Hercules Amber"
-msgstr "Hercules Jantarová"
-
-#: common/util.cpp:283
-msgctxt "lowres"
-msgid "Hercules Green"
-msgstr "Hercules Zelená"
-
-#: common/util.cpp:284
-msgctxt "lowres"
-msgid "Hercules Amber"
-msgstr "Hercules Jantarová"
-
-#: engines/advancedDetector.cpp:296
-#, c-format
-msgid "The game in '%s' seems to be unknown."
-msgstr "Hra v '%s' se zdá být neznámá."
-
-#: engines/advancedDetector.cpp:297
-msgid "Please, report the following data to the ScummVM team along with name"
-msgstr "Prosím nahlaste následující data týmu ScummVM spolu se jménem"
-
-#: engines/advancedDetector.cpp:299
-msgid "of the game you tried to add and its version/language/etc.:"
-msgstr "hry, kterou jste se pokusili přidat a její verzi/jazyk/atd.:"
-
-#: engines/dialogs.cpp:84
-msgid "~R~esume"
-msgstr "~P~okračovat"
-
-#: engines/dialogs.cpp:86
-msgid "~L~oad"
-msgstr "~N~ahrát"
-
-#: engines/dialogs.cpp:90
-msgid "~S~ave"
-msgstr "~U~ložit"
-
-#: engines/dialogs.cpp:94
-msgid "~O~ptions"
-msgstr "~V~olby"
-
-#: engines/dialogs.cpp:99
-msgid "~H~elp"
-msgstr "~N~ápověda"
-
-#: engines/dialogs.cpp:101
-msgid "~A~bout"
-msgstr "~O~ programu"
-
-#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
-msgid "~R~eturn to Launcher"
-msgstr "~N~ávrat do Spouštěče"
-
-#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
-msgctxt "lowres"
-msgid "~R~eturn to Launcher"
-msgstr "~N~ávrat do Spouštěče"
-
-#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
-#: engines/sci/engine/kfile.cpp:575
-msgid "Save game:"
-msgstr "Uložit hru:"
-
-#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
-#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
-#: backends/platform/symbian/src/SymbianActions.cpp:44
-#: backends/platform/wince/CEActionsPocket.cpp:43
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Save"
-msgstr "Uložit"
-
-#: engines/dialogs.cpp:146
-msgid ""
-"Sorry, this engine does not currently provide in-game help. Please consult "
-"the README for basic information, and for instructions on how to obtain "
-"further assistance."
-msgstr ""
-"Je nám líto, ale toto jádro v současnosti nepodporuje herní nápovědu. Prosím "
-"prohlédněte si README pro základní informace a pro instrukce jak získat "
-"další pomoc."
-
-#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
-#: engines/mohawk/dialogs.cpp:174
-msgid "~O~K"
-msgstr "~O~K"
-
-#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
-#: engines/mohawk/dialogs.cpp:175
-msgid "~C~ancel"
-msgstr "~Z~rušit"
-
-#: engines/dialogs.cpp:312
-msgid "~K~eys"
-msgstr "~K~lávesy"
-
-#: engines/engine.cpp:233
-msgid "Could not initialize color format."
-msgstr "Nelze zavést barevný formát."
-
-#: engines/engine.cpp:241
-msgid "Could not switch to video mode: '"
-msgstr "Nelze přepnout na režim obrazu: '"
-
-#: engines/engine.cpp:250
-msgid "Could not apply aspect ratio setting."
-msgstr "Nelze použít nastavení poměru stran."
-
-#: engines/engine.cpp:255
-msgid "Could not apply fullscreen setting."
-msgstr "Nelze použít nastavení celé obrazovky."
-
-#: engines/engine.cpp:355
-msgid ""
-"You appear to be playing this game directly\n"
-"from the CD. This is known to cause problems,\n"
-"and it is therefore recommended that you copy\n"
-"the data files to your hard disk instead.\n"
-"See the README file for details."
-msgstr ""
-"Vypadá to, že tuto hru hrajete přímo z\n"
-" CD. Je známo, že toto způsobuje problémy\n"
-" a je tedy doporučeno, ať místo toho zkopírujete\n"
-"datové soubory na Váš pevný disk.\n"
-"Pro podrobnosti si přečtěte README."
-
-#: engines/engine.cpp:366
-msgid ""
-"This game has audio tracks in its disk. These\n"
-"tracks need to be ripped from the disk using\n"
-"an appropriate CD audio extracting tool in\n"
-"order to listen to the game's music.\n"
-"See the README file for details."
-msgstr ""
-"Tato hra má na svém disku zvukové stopy. Tyto\n"
-"stopy musí být z disku zkopírovány použitím\n"
-"vhodného nástroje pro extrakci zvuku z CD,\n"
-"abyste mohli poslouchat hudbu ve hře.\n"
-"Pro podrobnosti si přečtěte README."
-
-#: engines/engine.cpp:433
-msgid ""
-"WARNING: The game you are about to start is not yet fully supported by "
-"ScummVM. As such, it is likely to be unstable, and any saves you make might "
-"not work in future versions of ScummVM."
-msgstr ""
-"VAROVÁNÍ: Hra, kterou se chystáte spustit, není ještě plně podporována "
-"ScummVM. Proto je možné, že bude nestabilní a jakékoli uložené hry nemusí "
-"fungovat v budoucích verzích ScummVM."
-
-#: engines/engine.cpp:436
-msgid "Start anyway"
-msgstr "Přesto spustit"
-
-#: engines/scumm/dialogs.cpp:175
-#, c-format
-msgid "Insert Disk %c and Press Button to Continue."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:176
-#, c-format
-msgid "Unable to Find %s, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:177
-#, c-format
-msgid "Error reading disk %c, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:178
-msgid "Game Paused. Press SPACE to Continue."
-msgstr ""
-
-#. I18N: You may specify 'Yes' symbol at the end of the line, like this:
-#. "Moechten Sie wirklich neu starten? (J/N)J"
-#. Will react to J as 'Yes'
-#: engines/scumm/dialogs.cpp:182
-#, fuzzy
-msgid "Are you sure you want to restart? (Y/N)"
-msgstr " Jste si jisti, že chcete odejít ? "
-
-#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
-#: engines/scumm/dialogs.cpp:184
-#, fuzzy
-msgid "Are you sure you want to quit? (Y/N)"
-msgstr " Jste si jisti, že chcete odejít ? "
-
-#: engines/scumm/dialogs.cpp:189
-msgid "Play"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82
-#: engines/scumm/help.cpp:84
-#: backends/platform/symbian/src/SymbianActions.cpp:52
-#: backends/platform/wince/CEActionsPocket.cpp:44
-#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:244
-msgid "Quit"
-msgstr "Ukončit"
-
-#: engines/scumm/dialogs.cpp:193
-msgid "Insert save/load game disk"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:194
-msgid "You must enter a name"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:195
-msgid "The game was NOT saved (disk full?)"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:196
-msgid "The game was NOT loaded"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:197
-#, c-format
-msgid "Saving '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:198
-#, c-format
-msgid "Loading '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:199
-msgid "Name your SAVE game"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:200
-#, fuzzy
-msgid "Select a game to LOAD"
-msgstr "Vyberte Vzhled"
-
-#: engines/scumm/dialogs.cpp:201
-msgid "Game title)"
-msgstr ""
-
-#. I18N: Previous page button
-#: engines/scumm/dialogs.cpp:287
-msgid "~P~revious"
-msgstr "~P~ředchozí"
-
-#. I18N: Next page button
-#: engines/scumm/dialogs.cpp:289
-msgid "~N~ext"
-msgstr "~D~alší"
-
-#: engines/scumm/dialogs.cpp:290
-#: backends/platform/ds/arm9/source/dsoptions.cpp:56
-msgid "~C~lose"
-msgstr "~Z~avřít"
-
-#: engines/scumm/dialogs.cpp:597
-#, fuzzy
-msgid "Speech Only"
-msgstr "Řeč"
-
-#: engines/scumm/dialogs.cpp:598
-#, fuzzy
-msgid "Speech and Subtitles"
-msgstr "Titulky"
-
-#: engines/scumm/dialogs.cpp:599
-#, fuzzy
-msgid "Subtitles Only"
-msgstr "Titulky"
-
-#: engines/scumm/dialogs.cpp:607
-#, fuzzy
-msgctxt "lowres"
-msgid "Speech & Subs"
-msgstr "Řeč"
-
-#: engines/scumm/help.cpp:73
-msgid "Common keyboard commands:"
-msgstr "Běžné klávesové příkazy"
-
-#: engines/scumm/help.cpp:74
-msgid "Save / Load dialog"
-msgstr "Dialog Nahrát / Uložit"
-
-#: engines/scumm/help.cpp:76
-msgid "Skip line of text"
-msgstr "Přeskočit řádek textu"
-
-#: engines/scumm/help.cpp:77
-msgid "Esc"
-msgstr "Mezerník"
-
-#: engines/scumm/help.cpp:77
-msgid "Skip cutscene"
-msgstr "Přeskočit video"
-
-#: engines/scumm/help.cpp:78
-msgid "Space"
-msgstr "Mezerník"
-
-#: engines/scumm/help.cpp:78
-msgid "Pause game"
-msgstr "Pozastavit hru"
-
-#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84
-#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96
-#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98
-#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100
-#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: engines/scumm/help.cpp:79
-msgid "Load game state 1-10"
-msgstr "Nahrát stav hry 1-10"
-
-#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100
-#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102
-msgid "Alt"
-msgstr "Alt"
-
-#: engines/scumm/help.cpp:80
-msgid "Save game state 1-10"
-msgstr "Uložit stav hry 1-10"
-
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
-msgid "Enter"
-msgstr "Enter"
-
-#: engines/scumm/help.cpp:86
-msgid "Toggle fullscreen"
-msgstr "Zapnout celou obrazovku"
-
-#: engines/scumm/help.cpp:87
-msgid "Music volume up / down"
-msgstr "Hlasitost hudby nahoru / dolů"
-
-#: engines/scumm/help.cpp:88
-msgid "Text speed slower / faster"
-msgstr "Zvýšit / Snížit rychlost textu"
-
-#: engines/scumm/help.cpp:89
-msgid "Simulate left mouse button"
-msgstr "Napodobit levé tlačítko myši"
-
-#: engines/scumm/help.cpp:90
-msgid "Tab"
-msgstr "Tab"
-
-#: engines/scumm/help.cpp:90
-msgid "Simulate right mouse button"
-msgstr "Napodobit pravé tlačítko myši"
-
-#: engines/scumm/help.cpp:93
-msgid "Special keyboard commands:"
-msgstr "Speciální klávesové příkazy"
-
-#: engines/scumm/help.cpp:94
-msgid "Show / Hide console"
-msgstr "Ukázat / Skrýt konzoli"
-
-#: engines/scumm/help.cpp:95
-msgid "Start the debugger"
-msgstr "Spustit ladící program"
-
-#: engines/scumm/help.cpp:96
-msgid "Show memory consumption"
-msgstr "Zobrazit spotřebu paměti"
-
-#: engines/scumm/help.cpp:97
-msgid "Run in fast mode (*)"
-msgstr "Spustit v rychlém režimu (*)"
-
-#: engines/scumm/help.cpp:98
-msgid "Run in really fast mode (*)"
-msgstr "Spustit ve velmi rychlém režimu (*)"
-
-#: engines/scumm/help.cpp:99
-msgid "Toggle mouse capture"
-msgstr "Povolit zachycování myši"
-
-#: engines/scumm/help.cpp:100
-msgid "Switch between graphics filters"
-msgstr "Přepínat mezi grafickými filtry"
-
-#: engines/scumm/help.cpp:101
-msgid "Increase / Decrease scale factor"
-msgstr "Zvětšit / Zmenšit faktor změny velikosti"
-
-#: engines/scumm/help.cpp:102
-msgid "Toggle aspect-ratio correction"
-msgstr "Povolit korekci poměru stran"
-
-#: engines/scumm/help.cpp:107
-msgid "* Note that using ctrl-f and"
-msgstr "Upozorňujeme, že používání ctrl-f a"
-
-#: engines/scumm/help.cpp:108
-msgid " ctrl-g are not recommended"
-msgstr " ctrl-g není doporučeno"
-
-#: engines/scumm/help.cpp:109
-msgid " since they may cause crashes"
-msgstr "jelikož můžou způsobit pád"
-
-#: engines/scumm/help.cpp:110
-msgid " or incorrect game behavior."
-msgstr " nebo nesprávné chování hry."
-
-#: engines/scumm/help.cpp:114
-msgid "Spinning drafts on the keyboard:"
-msgstr "Pletení náčrtků na klávesnici:"
-
-#: engines/scumm/help.cpp:116
-msgid "Main game controls:"
-msgstr "Hlavní ovládací prvky:"
-
-#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
-#: engines/scumm/help.cpp:161
-msgid "Push"
-msgstr "Tlačit"
-
-#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
-#: engines/scumm/help.cpp:162
-msgid "Pull"
-msgstr "Táhnout"
-
-#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138
-#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:197
-#: engines/scumm/help.cpp:207
-msgid "Give"
-msgstr "Dát"
-
-#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139
-#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:190
-#: engines/scumm/help.cpp:208
-msgid "Open"
-msgstr "Otevřít"
-
-#: engines/scumm/help.cpp:126
-msgid "Go to"
-msgstr "Jít do"
-
-#: engines/scumm/help.cpp:127
-msgid "Get"
-msgstr "Vzít"
-
-#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152
-#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:198
-#: engines/scumm/help.cpp:213 engines/scumm/help.cpp:224
-#: engines/scumm/help.cpp:250
-msgid "Use"
-msgstr "Použít"
-
-#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
-msgid "Read"
-msgstr "Přečíst"
-
-#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
-msgid "New kid"
-msgstr "Nové dítě"
-
-#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
-#: engines/scumm/help.cpp:171
-msgid "Turn on"
-msgstr "Zapnout"
-
-#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
-#: engines/scumm/help.cpp:172
-msgid "Turn off"
-msgstr "Vypnout"
-
-#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
-#: engines/scumm/help.cpp:194
-msgid "Walk to"
-msgstr "Přejít na"
-
-#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168
-#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:210
-#: engines/scumm/help.cpp:227
-msgid "Pick up"
-msgstr "Sebrat"
-
-#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
-msgid "What is"
-msgstr "Co je"
-
-#: engines/scumm/help.cpp:146
-msgid "Unlock"
-msgstr "Odemknout"
-
-#: engines/scumm/help.cpp:149
-msgid "Put on"
-msgstr "Obléct"
-
-#: engines/scumm/help.cpp:150
-msgid "Take off"
-msgstr "Svléct"
-
-#: engines/scumm/help.cpp:156
-msgid "Fix"
-msgstr "Spravit"
-
-#: engines/scumm/help.cpp:158
-msgid "Switch"
-msgstr "Přepnout"
-
-#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
-msgid "Look"
-msgstr "Dívat se"
-
-#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
-msgid "Talk"
-msgstr "Mluvit"
-
-#: engines/scumm/help.cpp:174
-msgid "Travel"
-msgstr "Cestovat"
-
-#: engines/scumm/help.cpp:175
-msgid "To Henry / To Indy"
-msgstr "Henrymu / Indymu"
-
-#. I18N: These are different musical notes
-#: engines/scumm/help.cpp:179
-msgid "play C minor on distaff"
-msgstr "zahrát c moll na přeslici"
-
-#: engines/scumm/help.cpp:180
-msgid "play D on distaff"
-msgstr "zahrát D na přeslici"
-
-#: engines/scumm/help.cpp:181
-msgid "play E on distaff"
-msgstr "zahrát E na přeslici"
-
-#: engines/scumm/help.cpp:182
-msgid "play F on distaff"
-msgstr "zahrát F na přeslici"
-
-#: engines/scumm/help.cpp:183
-msgid "play G on distaff"
-msgstr "zahrát G na přeslici"
-
-#: engines/scumm/help.cpp:184
-msgid "play A on distaff"
-msgstr "zahrát A na přeslici"
-
-#: engines/scumm/help.cpp:185
-msgid "play B on distaff"
-msgstr "zahrát B na přeslici"
-
-#: engines/scumm/help.cpp:186
-msgid "play C major on distaff"
-msgstr "zahrát C dur na přeslici"
-
-#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
-msgid "puSh"
-msgstr "tlačIt"
-
-#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
-msgid "pull (Yank)"
-msgstr "táhnout (Škubnout)"
-
-#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
-#: engines/scumm/help.cpp:248
-msgid "Talk to"
-msgstr "Mluvit s"
-
-#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
-msgid "Look at"
-msgstr "Dívat se na"
-
-#: engines/scumm/help.cpp:200
-msgid "turn oN"
-msgstr "zapnouT"
-
-#: engines/scumm/help.cpp:201
-msgid "turn oFf"
-msgstr "vypnoUt"
-
-#: engines/scumm/help.cpp:217
-msgid "KeyUp"
-msgstr "KlávesaNahoru"
-
-#: engines/scumm/help.cpp:217
-msgid "Highlight prev dialogue"
-msgstr "Zvýraznit předchozí dialog"
-
-#: engines/scumm/help.cpp:218
-msgid "KeyDown"
-msgstr "KlávesaDolů"
-
-#: engines/scumm/help.cpp:218
-msgid "Highlight next dialogue"
-msgstr "Zvýraznit následující dialog"
-
-#: engines/scumm/help.cpp:222
-msgid "Walk"
-msgstr "Jít"
-
-#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
-#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
-msgid "Inventory"
-msgstr "Inventář"
-
-#: engines/scumm/help.cpp:226
-msgid "Object"
-msgstr "Objekt"
-
-#: engines/scumm/help.cpp:229
-msgid "Black and White / Color"
-msgstr "Černobílé / Barva"
-
-#: engines/scumm/help.cpp:232
-msgid "Eyes"
-msgstr "Oči"
-
-#: engines/scumm/help.cpp:233
-msgid "Tongue"
-msgstr "Jazyk"
-
-#: engines/scumm/help.cpp:235
-msgid "Punch"
-msgstr "Udeřit"
-
-#: engines/scumm/help.cpp:236
-msgid "Kick"
-msgstr "Kopnout"
-
-#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
-msgid "Examine"
-msgstr "Prohlédnout"
-
-#: engines/scumm/help.cpp:240
-msgid "Regular cursor"
-msgstr "Obyčejný kurzor"
-
-#. I18N: Comm is a communication device
-#: engines/scumm/help.cpp:243
-msgid "Comm"
-msgstr "Komunikace"
-
-#: engines/scumm/help.cpp:246
-msgid "Save / Load / Options"
-msgstr "Uložit / Nahrát / Volby"
-
-#: engines/scumm/help.cpp:255
-msgid "Other game controls:"
-msgstr "Další ovládací prvky hry"
-
-#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
-msgid "Inventory:"
-msgstr "Inventář:"
-
-#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
-msgid "Scroll list up"
-msgstr "Posunout seznam nahoru"
-
-#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
-msgid "Scroll list down"
-msgstr "Posunout seznam dolu"
-
-#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
-msgid "Upper left item"
-msgstr "Položka vlevo nahoře"
-
-#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
-msgid "Lower left item"
-msgstr "Položka vlevo dole"
-
-#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
-msgid "Upper right item"
-msgstr "Položka vpravo nahoře"
-
-#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
-msgid "Lower right item"
-msgstr "Položka vpravo dole"
-
-#: engines/scumm/help.cpp:269
-msgid "Middle left item"
-msgstr "Položka vlevo uprostřed"
-
-#: engines/scumm/help.cpp:272
-msgid "Middle right item"
-msgstr "Položka vpravo uprostřed"
-
-#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
-msgid "Switching characters:"
-msgstr "Měnění postav:"
-
-#: engines/scumm/help.cpp:281
-msgid "Second kid"
-msgstr "Druhé dítě"
-
-#: engines/scumm/help.cpp:282
-msgid "Third kid"
-msgstr "Třetí dítě"
-
-#: engines/scumm/help.cpp:294
-msgid "Fighting controls (numpad):"
-msgstr "Ovládání boje (num. kláv.)"
-
-#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
-#: engines/scumm/help.cpp:297
-msgid "Step back"
-msgstr "Ustoupit"
-
-#: engines/scumm/help.cpp:298
-msgid "Block high"
-msgstr "Bránit nahoře"
-
-#: engines/scumm/help.cpp:299
-msgid "Block middle"
-msgstr "Bránit uprostřed"
-
-#: engines/scumm/help.cpp:300
-msgid "Block low"
-msgstr "Bránit dole"
-
-#: engines/scumm/help.cpp:301
-msgid "Punch high"
-msgstr "Udeřit nahoru"
-
-#: engines/scumm/help.cpp:302
-msgid "Punch middle"
-msgstr "Udeřit doprostřed"
-
-#: engines/scumm/help.cpp:303
-msgid "Punch low"
-msgstr "Udeřit dolů"
-
-#: engines/scumm/help.cpp:306
-msgid "These are for Indy on left."
-msgstr "Tyto jsou pro Indyho nalevo."
-
-#: engines/scumm/help.cpp:307
-msgid "When Indy is on the right,"
-msgstr "Když je Indy napravo,"
-
-#: engines/scumm/help.cpp:308
-msgid "7, 4, and 1 are switched with"
-msgstr "71 4 a 1 jsou zaměněny s"
-
-#: engines/scumm/help.cpp:309
-msgid "9, 6, and 3, respectively."
-msgstr "9, 6 a 3, v tomto pořadí."
-
-#: engines/scumm/help.cpp:316
-msgid "Biplane controls (numpad):"
-msgstr "Kontrola dvojplošníku (numerická klávesnice)"
-
-#: engines/scumm/help.cpp:317
-msgid "Fly to upper left"
-msgstr "Letět doprava nahoru"
-
-#: engines/scumm/help.cpp:318
-msgid "Fly to left"
-msgstr "Letět doleva"
-
-#: engines/scumm/help.cpp:319
-msgid "Fly to lower left"
-msgstr "Letět doleva dolů"
-
-#: engines/scumm/help.cpp:320
-msgid "Fly upwards"
-msgstr "Letět nahoru"
-
-#: engines/scumm/help.cpp:321
-msgid "Fly straight"
-msgstr "Letět rovně"
-
-#: engines/scumm/help.cpp:322
-msgid "Fly down"
-msgstr "Letět dolů"
-
-#: engines/scumm/help.cpp:323
-msgid "Fly to upper right"
-msgstr "Letět doprava nahoru"
-
-#: engines/scumm/help.cpp:324
-msgid "Fly to right"
-msgstr "Letět doprava"
-
-#: engines/scumm/help.cpp:325
-msgid "Fly to lower right"
-msgstr "Letět doprava dolů"
-
-#: engines/scumm/scumm.cpp:1768
-#, c-format
-msgid ""
-"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
-"but %s is missing. Using AdLib instead."
-msgstr ""
-"Přirozená podpora MIDI vyžaduje Aktualizaci Roland od LucasArts,\n"
-"ale %s chybí. Místo toho je použit AdLib."
-
-#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
-#, c-format
-msgid ""
-"Failed to save game state to file:\n"
-"\n"
-"%s"
-msgstr ""
-"Uložení stavu hry selhalo do souboru:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
-#, c-format
-msgid ""
-"Failed to load game state from file:\n"
-"\n"
-"%s"
-msgstr ""
-"Nahrání stavu hry selhalo ze souboru:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
-#, c-format
-msgid ""
-"Successfully saved game state in file:\n"
-"\n"
-"%s"
-msgstr ""
-"Stav hry úspěšně uložen do:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2492
-msgid ""
-"Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To "
-"play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' "
-"directory inside the Tentacle game directory."
-msgstr ""
-"Normálně by teď Maniac Mansion byl spuštěn. Ale ScummVM toto zatím nedělá. "
-"Abyste toto mohli hrát, přejděte do 'Přidat Hru' v počátečním menu ScummVM a "
-"vyberte adresář 'Maniac' uvnitř herního adresáře Tentacle."
-
-#. I18N: Option for fast scene switching
-#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
-msgid "~Z~ip Mode Activated"
-msgstr "~R~ežim Svištění Aktivován"
-
-#: engines/mohawk/dialogs.cpp:93
-msgid "~T~ransitions Enabled"
-msgstr "~P~řechody zapnuty"
-
-#. I18N: Drop book page
-#: engines/mohawk/dialogs.cpp:95
-msgid "~D~rop Page"
-msgstr "~Z~ahodit Stránku"
-
-#: engines/mohawk/dialogs.cpp:99
-msgid "~S~how Map"
-msgstr "~Z~obrazit Mapu"
-
-#: engines/mohawk/dialogs.cpp:105
-#, fuzzy
-msgid "~M~ain Menu"
-msgstr "Hlavní Menu ScummVM"
-
-#: engines/mohawk/dialogs.cpp:172
-msgid "~W~ater Effect Enabled"
-msgstr "~E~fekt Vody Zapnut"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore game:"
-msgstr "Obnovit hru"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore"
-msgstr "Obnovit"
-
-#: engines/agos/animation.cpp:544
-#, c-format
-msgid "Cutscene file '%s' not found!"
-msgstr "Soubor videa '%s' nenalezen'"
-
-#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
-#: engines/tinsel/saveload.cpp:475
-msgid "Failed to load game state from file."
-msgstr "Nelze načíst stav hry ze souboru."
-
-#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
-msgid "Failed to save game state to file."
-msgstr "Nelze uložit stav hry do souboru."
-
-#: engines/gob/inter_v5.cpp:107
-msgid "Failed to delete file."
-msgstr "Nelze smazat soubor."
-
-#: engines/groovie/script.cpp:420
-msgid "Failed to save game"
-msgstr "Nelze uložit hru."
-
-#: engines/kyra/sound_midi.cpp:475
-msgid ""
-"You appear to be using a General MIDI device,\n"
-"but your game only supports Roland MT32 MIDI.\n"
-"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
-msgstr ""
-"Zdá se, že používáte zařízení General MIDI,\n"
-"ale Vaše hra podporuje pouze Roland MT32 MIDI.\n"
-"Snažíme se mapovat nástroje Roland MT32 na\n"
-"ty od General MIDI. Po tomto se může stát,\n"
-"že pár stop nebude správně přehráno."
-
-#: engines/m4/m4_menus.cpp:138
-msgid "Save game failed!"
-msgstr "Ukládání hry selhalo!"
-
-#: engines/sky/compact.cpp:130
-msgid ""
-"Unable to find \"sky.cpt\" file!\n"
-"Please download it from www.scummvm.org"
-msgstr ""
-"Nelze nalézt soubor \"sky.cpt\"!\n"
-"Stáhněte si ho, prosím z www.scummvm.org"
-
-#: engines/sky/compact.cpp:141
-msgid ""
-"The \"sky.cpt\" file has an incorrect size.\n"
-"Please (re)download it from www.scummvm.org"
-msgstr ""
-"Soubor \"sky.cpt\" má nesprávnou velikost.\n"
-"Stáhněte si ho, prosím, (znovu) z www.scummvm.org"
-
-#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
-msgid "DXA cutscenes found but ScummVM has been built without zlib support"
-msgstr "Videa DXA nalezena, ale ScummVM byl sestaven bez podpory zlib"
-
-#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
-msgid "MPEG2 cutscenes are no longer supported"
-msgstr "Videa MPGE2 již nejsou podporována"
-
-#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
-#, c-format
-msgid "Cutscene '%s' not found"
-msgstr "Video '%s' nenalezeno"
-
-#: engines/sword1/control.cpp:863
-msgid ""
-"ScummVM found that you have old savefiles for Broken Sword 1 that should be "
-"converted.\n"
-"The old save game format is no longer supported, so you will not be able to "
-"load your games if you don't convert them.\n"
-"\n"
-"Press OK to convert them now, otherwise you will be asked again the next "
-"time you start the game.\n"
-msgstr ""
-"ScummVM zjistil, že máte staré uložené pozice pro Broken Sword 1, které by "
-"měly být převedeny.\n"
-"Starý formát uložených her již není podporován, takže pokud je nepřevedete, "
-"nebudete moci Vaše hry načíst.\n"
-"\n"
-"Stiskněte OK, abyste je převedli teď, jinak budete požádáni znovu, při "
-"spuštění této hry.\n"
-
-#: engines/sword1/control.cpp:1232
-#, c-format
-msgid ""
-"Target new save game already exists!\n"
-"Would you like to keep the old save game (%s) or the new one (%s)?\n"
-msgstr ""
-"Nová cílová uložená hra již existuje!\n"
-"Chtěli byste ponechat starou uloženou hru (%s), nebo novou (%s)?\n"
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the old one"
-msgstr "Ponechat starou"
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the new one"
-msgstr "Ponechat novou"
-
-#: engines/sword1/logic.cpp:1633
-msgid "This is the end of the Broken Sword 1 Demo"
-msgstr "Toto je konec Dema Broken Sword 1"
-
-#: engines/parallaction/saveload.cpp:133
-#, c-format
-msgid ""
-"Can't save game in slot %i\n"
-"\n"
-msgstr ""
-"Nelze uložit hru do pozice %i\n"
-"\n"
-
-#: engines/parallaction/saveload.cpp:211
-msgid "Loading game..."
-msgstr "Nahrávání hry..."
-
-#: engines/parallaction/saveload.cpp:226
-msgid "Saving game..."
-msgstr "Ukládání hry..."
-
-#: engines/parallaction/saveload.cpp:279
-msgid ""
-"ScummVM found that you have old savefiles for Nippon Safes that should be "
-"renamed.\n"
-"The old names are no longer supported, so you will not be able to load your "
-"games if you don't convert them.\n"
-"\n"
-"Press OK to convert them now, otherwise you will be asked next time.\n"
-msgstr ""
-"ScummVM zjistil, že máte staré uložené pozice pro Nippon Safes, které by "
-"měly být přejmenovány.\n"
-"Staré názvy již nejsou podporovány, takže pokud je nepřevedete, nebudete "
-"moci Vaše hry načíst.\n"
-"\n"
-"Stiskněte OK, abyste je převedli teď, jinak budete požádáni příště.\n"
-
-#: engines/parallaction/saveload.cpp:326
-msgid "ScummVM successfully converted all your savefiles."
-msgstr "ScummVM úspěšně převedl všechny Vaše uložené pozice. "
-
-#: engines/parallaction/saveload.cpp:328
-msgid ""
-"ScummVM printed some warnings in your console window and can't guarantee all "
-"your files have been converted.\n"
-"\n"
-"Please report to the team."
-msgstr ""
-"ScummVM vytiskl některá varování ve Vašem okně konzole a nemůže zaručit, že "
-"všechny Vaše soubory byly převedeny.\n"
-"\n"
-"Prosím nahlaste to týmu"
-
-#: audio/fmopl.cpp:49
-msgid "MAME OPL emulator"
-msgstr "MAME OPL Emulátor"
-
-#: audio/fmopl.cpp:51
-msgid "DOSBox OPL emulator"
-msgstr "DOSBox OPL Emulátor"
-
-#: audio/mididrv.cpp:205
-#, fuzzy, c-format
-msgid ""
-"The selected audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-"Zvolené zařízení '%s' nebylo nalezeno (např. může být vypnuto nebo "
-"odpojeno). Pokus o navrácení na nejbližší dostupné zařízení..."
-
-#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
-#: audio/mididrv.cpp:268
-msgid "Attempting to fall back to the next available device..."
-msgstr ""
-
-#: audio/mididrv.cpp:217
-#, fuzzy, c-format
-msgid ""
-"The selected audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-"Zvolené zařízení '%s' nelze použít.. Podívejte se na záznam pro více "
-"informací. Pokus o navrácení na nejbližší dostupné zařízení..."
-
-#: audio/mididrv.cpp:253
-#, fuzzy, c-format
-msgid ""
-"The preferred audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-"Upřednostňované zařízení '%s' nebylo nalezeno (např. může být vypnuto nebo "
-"odpojeno). Pokus o navrácení na nejbližší dostupné zařízení..."
-
-#: audio/mididrv.cpp:268
-#, fuzzy, c-format
-msgid ""
-"The preferred audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-"Upřednostňované zařízení '%s' nelze použít. Podívejte se na záznam pro více "
-"informací. Pokus o navrácení na nejbližší dostupné zařízení..."
-
-#: audio/null.h:43
-msgid "No music"
-msgstr "Bez hudby"
-
-#: audio/mods/paula.cpp:189
-msgid "Amiga Audio Emulator"
-msgstr "Emulátor zvuku Amiga"
-
-#: audio/softsynth/adlib.cpp:1594
-msgid "AdLib Emulator"
-msgstr "AdLib Emulátor"
-
-#: audio/softsynth/appleiigs.cpp:33
-msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
-msgstr "Apple II GS Emulátor (NENÍ ZAVEDEN)"
-
-#: audio/softsynth/sid.cpp:1430
-msgid "C64 Audio Emulator"
-msgstr "Emulátor zvuku C64"
-
-#: audio/softsynth/mt32.cpp:329
-msgid "Initializing MT-32 Emulator"
-msgstr "Zavádím MT-32 Emulátor"
-
-#: audio/softsynth/mt32.cpp:543
-msgid "MT-32 Emulator"
-msgstr "MT-32 Emulátor"
-
-#: audio/softsynth/pcspk.cpp:139
-msgid "PC Speaker Emulator"
-msgstr "PC Speaker Emulátor"
-
-#: audio/softsynth/pcspk.cpp:158
-msgid "IBM PCjr Emulator"
-msgstr "IBM PCjr Emulátor"
-
-#: backends/keymapper/remap-dialog.cpp:47
-msgid "Keymap:"
-msgstr "Mapa Kláves:"
-
-#: backends/keymapper/remap-dialog.cpp:64
-msgid " (Active)"
-msgstr "(Aktivní)"
-
-#: backends/keymapper/remap-dialog.cpp:98
-msgid " (Global)"
-msgstr "(Globální)"
-
-#: backends/keymapper/remap-dialog.cpp:108
-msgid " (Game)"
-msgstr "(Hra)"
-
-#: backends/midi/windows.cpp:164
-msgid "Windows MIDI"
-msgstr "Windows MIDI"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:57
-msgid "ScummVM Main Menu"
-msgstr "Hlavní Menu ScummVM"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:63
-msgid "~L~eft handed mode"
-msgstr "~R~ežim pro leváky"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:64
-msgid "~I~ndy fight controls"
-msgstr "~O~vládání Indyho boje"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:65
-msgid "Show mouse cursor"
-msgstr "Zobrazit kurzor myši"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:66
-msgid "Snap to edges"
-msgstr "Přichytit k okrajům"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:68
-msgid "Touch X Offset"
-msgstr "Dotykové vyrovnáni na ose X"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:75
-msgid "Touch Y Offset"
-msgstr "Dotykové vyrovnáni na ose Y"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:87
-msgid "Use laptop trackpad-style cursor control"
-msgstr "Použít styl kontroly kurzoru jako u ovládací podušky laptopu"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:88
-msgid "Tap for left click, double tap right click"
-msgstr "Ťukněte pro levé kliknutí, dvakrát pro pravé kliknutí"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:90
-msgid "Sensitivity"
-msgstr "Citlivost"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:99
-msgid "Initial top screen scale:"
-msgstr "Počáteční změna velikosti horní obrazovky:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:105
-msgid "Main screen scaling:"
-msgstr "Změna velikosti hlavní obrazovky:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:107
-msgid "Hardware scale (fast, but low quality)"
-msgstr "Hardwarová změna velikosti (rychlé, ale nízká kvalita)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:108
-msgid "Software scale (good quality, but slower)"
-msgstr "Softwarová změna velikosti (dobrá kvalita, ale pomalejší)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:109
-msgid "Unscaled (you must scroll left and right)"
-msgstr "Beze změny velikosti (musíte posunovat doleva a doprava)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:111
-msgid "Brightness:"
-msgstr "Jas:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:121
-msgid "High quality audio (slower) (reboot)"
-msgstr "Vysoká kvalita zvuku (pomalejší) (restart) "
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:122
-msgid "Disable power off"
-msgstr "Zakázat vypnutí"
-
-#: backends/platform/iphone/osys_events.cpp:338
-msgid "Mouse-click-and-drag mode enabled."
-msgstr "Režim přetáhnutí myši zapnut."
-
-#: backends/platform/iphone/osys_events.cpp:340
-msgid "Mouse-click-and-drag mode disabled."
-msgstr "Režim přetáhnutí myši vypnut."
-
-#: backends/platform/iphone/osys_events.cpp:351
-msgid "Touchpad mode enabled."
-msgstr "Touchpad režim zapnut"
-
-#: backends/platform/iphone/osys_events.cpp:353
-msgid "Touchpad mode disabled."
-msgstr "Touchpad režim vypnut"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:67
-#, fuzzy
-msgid "Hide ScummVM"
-msgstr "Ukončit ScummVM"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:70
-msgid "Hide Others"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:74
-msgid "Show All"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:92
-#: backends/platform/sdl/macosx/appmenu_osx.mm:99
-#, fuzzy
-msgid "Window"
-msgstr "Windows MIDI"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:95
-msgid "Minimize"
-msgstr ""
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
-msgid "Normal (no scaling)"
-msgstr "Normální (bez změny velikosti)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
-msgctxt "lowres"
-msgid "Normal (no scaling)"
-msgstr "Normální (bez změny velikosti)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
-msgid "Enabled aspect ratio correction"
-msgstr "Povolena korekce poměru stran"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
-msgid "Disabled aspect ratio correction"
-msgstr "Zakázána korekce poměru stran"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
-msgid "Active graphics filter:"
-msgstr "Aktivní grafický filtr:"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
-msgid "Windowed mode"
-msgstr "Režim do okna"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:130
-msgid "OpenGL Normal"
-msgstr "OpenGL Normální"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:131
-msgid "OpenGL Conserve"
-msgstr "OpenGL Zachovávající"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:132
-msgid "OpenGL Original"
-msgstr "OpenGL Původní"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
-msgid "Current display mode"
-msgstr "Současný režim obrazu"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
-msgid "Current scale"
-msgstr "Současná velikost"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
-msgid "Active filter mode: Linear"
-msgstr "Aktivní režim filtru: Lineární"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
-msgid "Active filter mode: Nearest"
-msgstr "Aktivní režim filtru: Nejbližší"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:38
-#: backends/platform/wince/CEActionsSmartphone.cpp:39
-msgid "Up"
-msgstr "Nahoru"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:39
-#: backends/platform/wince/CEActionsSmartphone.cpp:40
-msgid "Down"
-msgstr "Dolů"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:40
-#: backends/platform/wince/CEActionsSmartphone.cpp:41
-msgid "Left"
-msgstr "Doleva"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:41
-#: backends/platform/wince/CEActionsSmartphone.cpp:42
-msgid "Right"
-msgstr "Doprava"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:42
-#: backends/platform/wince/CEActionsPocket.cpp:60
-#: backends/platform/wince/CEActionsSmartphone.cpp:43
-msgid "Left Click"
-msgstr "Levé Kliknutí"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:43
-#: backends/platform/wince/CEActionsSmartphone.cpp:44
-msgid "Right Click"
-msgstr "Pravé kliknutí"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:46
-#: backends/platform/wince/CEActionsSmartphone.cpp:47
-msgid "Zone"
-msgstr "Oblast"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:47
-#: backends/platform/wince/CEActionsPocket.cpp:54
-#: backends/platform/wince/CEActionsSmartphone.cpp:48
-msgid "Multi Function"
-msgstr "Multi Funkce"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:48
-msgid "Swap character"
-msgstr "Zaměnit znaky"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:49
-msgid "Skip text"
-msgstr "Přeskočit text"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:51
-msgid "Fast mode"
-msgstr "Rychlý režim"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:53
-msgid "Debugger"
-msgstr "Ladící program"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:54
-msgid "Global menu"
-msgstr "Globální menu"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:55
-msgid "Virtual keyboard"
-msgstr "Virtuální klávesnice"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:56
-msgid "Key mapper"
-msgstr "Mapovač kláves"
-
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-msgid "Do you want to quit ?"
-msgstr "Chcete ukončit ?"
-
-#: backends/platform/wii/options.cpp:51
-msgid "Video"
-msgstr "Video"
-
-#: backends/platform/wii/options.cpp:54
-msgid "Current video mode:"
-msgstr "Současný režim obrazu:"
-
-#: backends/platform/wii/options.cpp:56
-msgid "Double-strike"
-msgstr "Dvojité přeškrtnutí"
-
-#: backends/platform/wii/options.cpp:60
-msgid "Horizontal underscan:"
-msgstr "Horizontální zmenšení"
-
-#: backends/platform/wii/options.cpp:66
-msgid "Vertical underscan:"
-msgstr "Vertikální zmenšení"
-
-#: backends/platform/wii/options.cpp:71
-msgid "Input"
-msgstr "Vstup"
-
-#: backends/platform/wii/options.cpp:74
-msgid "GC Pad sensitivity:"
-msgstr "Citlivost GC Padu"
-
-#: backends/platform/wii/options.cpp:80
-msgid "GC Pad acceleration:"
-msgstr "Zrychlení GC Padu"
-
-#: backends/platform/wii/options.cpp:86
-msgid "DVD"
-msgstr "DVD"
-
-#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
-msgid "Status:"
-msgstr "Stav:"
-
-#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
-msgid "Unknown"
-msgstr "Neznámé"
-
-#: backends/platform/wii/options.cpp:93
-msgid "Mount DVD"
-msgstr "Připojit DVD"
-
-#: backends/platform/wii/options.cpp:94
-msgid "Unmount DVD"
-msgstr "Odpojit DVD"
-
-#: backends/platform/wii/options.cpp:98
-msgid "SMB"
-msgstr "SMB"
-
-#: backends/platform/wii/options.cpp:106
-msgid "Server:"
-msgstr "Server:"
-
-#: backends/platform/wii/options.cpp:110
-msgid "Share:"
-msgstr "Sdílení:"
-
-#: backends/platform/wii/options.cpp:114
-msgid "Username:"
-msgstr "Uživatelské jméno"
-
-#: backends/platform/wii/options.cpp:118
-msgid "Password:"
-msgstr "Heslo"
-
-#: backends/platform/wii/options.cpp:121
-msgid "Init network"
-msgstr "Spustit síť"
-
-#: backends/platform/wii/options.cpp:123
-msgid "Mount SMB"
-msgstr "Připojit SMB"
-
-#: backends/platform/wii/options.cpp:124
-msgid "Unmount SMB"
-msgstr "Odpojit SMB"
-
-#: backends/platform/wii/options.cpp:143
-msgid "DVD Mounted successfully"
-msgstr "DVD úspěšně připojeno"
-
-#: backends/platform/wii/options.cpp:146
-msgid "Error while mounting the DVD"
-msgstr "Chyba při připojování DVD"
-
-#: backends/platform/wii/options.cpp:148
-msgid "DVD not mounted"
-msgstr "DVD nepřipojeno"
-
-#: backends/platform/wii/options.cpp:161
-msgid "Network up, share mounted"
-msgstr "Síť je zapnuta, sdílení připojeno"
-
-#: backends/platform/wii/options.cpp:163
-msgid "Network up"
-msgstr "Síť je zapnuta"
-
-#: backends/platform/wii/options.cpp:166
-msgid ", error while mounting the share"
-msgstr ", chyba při připojování sdílení"
-
-#: backends/platform/wii/options.cpp:168
-msgid ", share not mounted"
-msgstr ", sdílení není připojeno"
-
-#: backends/platform/wii/options.cpp:174
-msgid "Network down"
-msgstr "Síť je nedostupná"
-
-#: backends/platform/wii/options.cpp:178
-msgid "Initializing network"
-msgstr "Zavádím síť"
-
-#: backends/platform/wii/options.cpp:182
-msgid "Timeout while initializing network"
-msgstr "Při zavádění sítě vypršel limit"
-
-#: backends/platform/wii/options.cpp:186
-#, c-format
-msgid "Network not initialized (%d)"
-msgstr "Síť není zavedena (%d)"
-
-#: backends/platform/wince/CEActionsPocket.cpp:46
-msgid "Hide Toolbar"
-msgstr "Skrýt Panel nástrojů"
-
-#: backends/platform/wince/CEActionsPocket.cpp:47
-msgid "Show Keyboard"
-msgstr "Zobrazit klávesnici"
-
-#: backends/platform/wince/CEActionsPocket.cpp:48
-msgid "Sound on/off"
-msgstr "Zvuk zapnout/vypnout"
-
-#: backends/platform/wince/CEActionsPocket.cpp:49
-msgid "Right click"
-msgstr "Pravé kliknutí"
-
-#: backends/platform/wince/CEActionsPocket.cpp:50
-msgid "Show/Hide Cursor"
-msgstr "Ukázat/Skrýt Kurzor"
-
-#: backends/platform/wince/CEActionsPocket.cpp:51
-msgid "Free look"
-msgstr "Rozhlížení pomocí myši"
-
-#: backends/platform/wince/CEActionsPocket.cpp:52
-msgid "Zoom up"
-msgstr "Přiblížení nahoru"
-
-#: backends/platform/wince/CEActionsPocket.cpp:53
-msgid "Zoom down"
-msgstr "Přiblížení dolů"
-
-#: backends/platform/wince/CEActionsPocket.cpp:55
-#: backends/platform/wince/CEActionsSmartphone.cpp:49
-msgid "Bind Keys"
-msgstr "Přiřadit klávesy"
-
-#: backends/platform/wince/CEActionsPocket.cpp:56
-msgid "Cursor Up"
-msgstr "Šipka Nahoru"
-
-#: backends/platform/wince/CEActionsPocket.cpp:57
-msgid "Cursor Down"
-msgstr "Šipka Dolů"
-
-#: backends/platform/wince/CEActionsPocket.cpp:58
-msgid "Cursor Left"
-msgstr "Šipka Doleva"
-
-#: backends/platform/wince/CEActionsPocket.cpp:59
-msgid "Cursor Right"
-msgstr "Šipka Doprava"
-
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Do you want to load or save the game?"
-msgstr "Chcete hru nahrát nebo uložit?"
-
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-msgid " Are you sure you want to quit ? "
-msgstr " Jste si jisti, že chcete odejít ? "
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:50
-msgid "Keyboard"
-msgstr "Klávesnice"
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:51
-msgid "Rotate"
-msgstr "Otáčet"
-
-#: backends/platform/wince/CELauncherDialog.cpp:56
-msgid "Using SDL driver "
-msgstr "Používá ovladač SDL"
-
-#: backends/platform/wince/CELauncherDialog.cpp:60
-msgid "Display "
-msgstr "Displej"
-
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Do you want to perform an automatic scan ?"
-msgstr "Chcete provést automatické hledání ?"
-
-#: backends/platform/wince/wince-sdl.cpp:471
-msgid "Map right click action"
-msgstr "Mapovat činnost pravé kliknutí"
-
-#: backends/platform/wince/wince-sdl.cpp:475
-msgid "You must map a key to the 'Right Click' action to play this game"
-msgstr ""
-"Musíte namapovat klávesu pro činnost 'Pravé Kliknutí', abyste tuto hru mohli "
-"hrát"
-
-#: backends/platform/wince/wince-sdl.cpp:484
-msgid "Map hide toolbar action"
-msgstr "Mapovat činnost skrýt panel nástrojů"
-
-#: backends/platform/wince/wince-sdl.cpp:488
-msgid "You must map a key to the 'Hide toolbar' action to play this game"
-msgstr ""
-"Musíte namapovat klávesu pro činnost 'Skrýt Panel nástrojů', abyste tuto hru "
-"mohli hrát"
-
-#: backends/platform/wince/wince-sdl.cpp:497
-msgid "Map Zoom Up action (optional)"
-msgstr "Namapovat činnost Přiblížit Nahoru (nepovinné)"
-
-#: backends/platform/wince/wince-sdl.cpp:500
-msgid "Map Zoom Down action (optional)"
-msgstr "Namapovat činnost Přiblížit Dolů (nepovinné)"
-
-#: backends/platform/wince/wince-sdl.cpp:508
-msgid ""
-"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
-msgstr ""
-"Nezapomeňte namapovat klávesu k činnosti 'Skrýt Panel Nástrojů, abyste "
-"viděli celý inventář"
-
-#: backends/events/default/default-events.cpp:222
-msgid "Do you really want to return to the Launcher?"
-msgstr "Opravdu se chcete vrátit tuto do Spouštěče?"
-
-#: backends/events/default/default-events.cpp:222
-msgid "Launcher"
-msgstr "Spouštěč"
-
-#: backends/events/default/default-events.cpp:244
-msgid "Do you really want to quit?"
-msgstr "Opravdu chcete skončit?"
-
-#: backends/events/gph/gph-events.cpp:366
-#: backends/events/gph/gph-events.cpp:409
-#: backends/events/openpandora/op-events.cpp:141
-msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Levé Kliknutí"
-
-#: backends/events/gph/gph-events.cpp:368
-#: backends/events/gph/gph-events.cpp:411
-#: backends/events/openpandora/op-events.cpp:143
-msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Pravé Kliknutí"
-
-#: backends/events/gph/gph-events.cpp:370
-#: backends/events/gph/gph-events.cpp:413
-#: backends/events/openpandora/op-events.cpp:145
-msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Najetí (Bez Kliknutí)"
-
-#: backends/events/gph/gph-events.cpp:390
-msgid "Maximum Volume"
-msgstr "Maximální Hlasitost"
-
-#: backends/events/gph/gph-events.cpp:392
-msgid "Increasing Volume"
-msgstr "Zvyšuji Hlasitost"
-
-#: backends/events/gph/gph-events.cpp:398
-msgid "Minimal Volume"
-msgstr "Minimální Hlasitost"
-
-#: backends/events/gph/gph-events.cpp:400
-msgid "Decreasing Volume"
-msgstr "Snižuji Hlasitost"
-
-#: backends/updates/macosx/macosx-updates.mm:65
-msgid "Check for Updates..."
-msgstr ""
-
-#~ msgctxt "lowres"
-#~ msgid "Add Game..."
-#~ msgstr "Přidat Hru..."
-
-#~ msgid "Add Game..."
-#~ msgstr "Přidat Hru..."
-
-#~ msgid ""
-#~ "Your game version has been detected using filename matching as a variant "
-#~ "of %s."
-#~ msgstr ""
-#~ "Bylo zjištěno, že Vaše verze hry používá jméno souboru shodující se s "
-#~ "variantou %s."
-
-#~ msgid "If this is an original and unmodified version, please report any"
-#~ msgstr "Pokud je toto původní a nezměněná verze, ohlaste prosím jakékoli"
-
-#~ msgid "information previously printed by ScummVM to the team."
-#~ msgstr "předešle vypsané informace od ScummVM zpátky týmu."
-
-#~ msgid "Discovered %d new games."
-#~ msgstr "Objeveno %d nových her."
-
-#~ msgid "Command line argument not processed"
-#~ msgstr "Argument příkazové řádky nebyl zpracován"
-
-#~ msgid "FM Towns Emulator"
-#~ msgstr "FM Towns Emulátor"
-
-#~ msgid "Invalid Path"
-#~ msgstr "Neplatná Cesta"
+# Czech translation for ScummVM. +# Copyright (C) 2001-2011 ScummVM Team +# This file is distributed under the same license as the ScummVM package. +# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: ScummVM 1.4.0git\n" +"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" +"POT-Creation-Date: 2011-08-20 15:12+0100\n" +"PO-Revision-Date: 2011-08-23 12:36+0100\n" +"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n" +"Language-Team: \n" +"Language: Cesky\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" +"X-Poedit-Language: Czech\n" +"X-Poedit-Country: CZECH REPUBLIC\n" +"X-Poedit-SourceCharset: iso-8859-1\n" + +#: gui/about.cpp:91 +#, c-format +msgid "(built on %s)" +msgstr "(sestaveno %s)" + +#: gui/about.cpp:98 +msgid "Features compiled in:" +msgstr "Zakompilované Funkce:" + +#: gui/about.cpp:107 +msgid "Available engines:" +msgstr "Dostupná jádra:" + +#: gui/browser.cpp:66 +msgid "Go up" +msgstr "Jít nahoru" + +#: gui/browser.cpp:66 gui/browser.cpp:68 +msgid "Go to previous directory level" +msgstr "Jít na předchozí úroveň adresáře" + +#: gui/browser.cpp:68 +msgctxt "lowres" +msgid "Go up" +msgstr "Jít nahoru" + +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 +#: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 +msgid "Cancel" +msgstr "Zrušit" + +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 +msgid "Choose" +msgstr "Zvolit" + +#: gui/gui-manager.cpp:116 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:209 +#: backends/keymapper/remap-dialog.cpp:52 +msgid "Close" +msgstr "Zavřít" + +#: gui/gui-manager.cpp:119 +msgid "Mouse click" +msgstr "Kliknutí myší" + +#: gui/gui-manager.cpp:122 base/main.cpp:286 +msgid "Display keyboard" +msgstr "Zobrazit klávesnici" + +#: gui/gui-manager.cpp:125 base/main.cpp:289 +msgid "Remap keys" +msgstr "Přemapovat klávesy" + +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 +msgid "Choose an action to map" +msgstr "Zvolte činnost k mapování" + +#: gui/KeysDialog.cpp:41 +msgid "Map" +msgstr "Mapovat" + +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179 +#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192 +#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545 +#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131 +#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344 +#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360 +#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633 +#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389 +#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281 +#: backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:54 +msgid "OK" +msgstr "OK" + +#: gui/KeysDialog.cpp:49 +msgid "Select an action and click 'Map'" +msgstr "Zvolte činnost a klikněte 'Mapovat'" + +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 +#, c-format +msgid "Associated key : %s" +msgstr "Přiřazená klávesa: %s" + +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 +#, c-format +msgid "Associated key : none" +msgstr "Přiřazená klávesa: žádná" + +#: gui/KeysDialog.cpp:90 +msgid "Please select an action" +msgstr "Prosím vyberte činnost" + +#: gui/KeysDialog.cpp:106 +msgid "Press the key to associate" +msgstr "Zmáčkněte klávesu pro přiřazení" + +#: gui/launcher.cpp:165 +msgid "Game" +msgstr "Hra" + +#: gui/launcher.cpp:169 +msgid "ID:" +msgstr "ID:" + +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 +msgid "" +"Short game identifier used for referring to savegames and running the game " +"from the command line" +msgstr "" +"Krátký identifikátor her, používaný jako odkaz k uloženým hrám a spuštění " +"hry z příkazového řádku" + +#: gui/launcher.cpp:171 +msgctxt "lowres" +msgid "ID:" +msgstr "ID:" + +#: gui/launcher.cpp:176 +msgid "Name:" +msgstr "Jméno" + +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +msgid "Full title of the game" +msgstr "Úplný název hry" + +#: gui/launcher.cpp:178 +msgctxt "lowres" +msgid "Name:" +msgstr "Jméno:" + +#: gui/launcher.cpp:182 +msgid "Language:" +msgstr "Jazyk:" + +#: gui/launcher.cpp:182 gui/launcher.cpp:183 +msgid "" +"Language of the game. This will not turn your Spanish game version into " +"English" +msgstr "Jazyk hry. Toto z Vaší Španělské verze neudělá Anglickou" + +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 +msgid "<default>" +msgstr "<výchozí>" + +#: gui/launcher.cpp:194 +msgid "Platform:" +msgstr "Platforma:" + +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 +msgid "Platform the game was originally designed for" +msgstr "Platforma, pro kterou byla hra původně vytvořena" + +#: gui/launcher.cpp:196 +msgctxt "lowres" +msgid "Platform:" +msgstr "Platforma:" + +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 +msgid "Graphics" +msgstr "Obraz" + +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 +msgid "GFX" +msgstr "GFX" + +#: gui/launcher.cpp:211 +msgid "Override global graphic settings" +msgstr "Potlačit globální nastavení obrazu" + +#: gui/launcher.cpp:213 +msgctxt "lowres" +msgid "Override global graphic settings" +msgstr "Potlačit globální nastavení obrazu" + +#: gui/launcher.cpp:220 gui/options.cpp:1041 +msgid "Audio" +msgstr "Zvuk" + +#: gui/launcher.cpp:223 +msgid "Override global audio settings" +msgstr "Potlačit globální nastavení zvuku" + +#: gui/launcher.cpp:225 +msgctxt "lowres" +msgid "Override global audio settings" +msgstr "Potlačit globální nastavení zvuku" + +#: gui/launcher.cpp:234 gui/options.cpp:1046 +msgid "Volume" +msgstr "Hlasitost" + +#: gui/launcher.cpp:236 gui/options.cpp:1048 +msgctxt "lowres" +msgid "Volume" +msgstr "Hlasitost" + +#: gui/launcher.cpp:239 +msgid "Override global volume settings" +msgstr "Potlačit globální nastavení hlasitosti" + +#: gui/launcher.cpp:241 +msgctxt "lowres" +msgid "Override global volume settings" +msgstr "Potlačit globální nastavení hlasitosti" + +#: gui/launcher.cpp:248 gui/options.cpp:1056 +msgid "MIDI" +msgstr "MIDI" + +#: gui/launcher.cpp:251 +msgid "Override global MIDI settings" +msgstr "Potlačit globální nastavení MIDI" + +#: gui/launcher.cpp:253 +msgctxt "lowres" +msgid "Override global MIDI settings" +msgstr "Potlačit globální nastavení MIDI" + +#: gui/launcher.cpp:263 gui/options.cpp:1062 +msgid "MT-32" +msgstr "MT-32" + +#: gui/launcher.cpp:266 +msgid "Override global MT-32 settings" +msgstr "Potlačit globální nastavení MT-32" + +#: gui/launcher.cpp:268 +msgctxt "lowres" +msgid "Override global MT-32 settings" +msgstr "Potlačit globální nastavení MT-32" + +#: gui/launcher.cpp:279 gui/options.cpp:1069 +msgid "Paths" +msgstr "Cesty" + +#: gui/launcher.cpp:281 gui/options.cpp:1071 +msgctxt "lowres" +msgid "Paths" +msgstr "Cesty" + +#: gui/launcher.cpp:288 +msgid "Game Path:" +msgstr "Cesta Hry:" + +#: gui/launcher.cpp:290 +msgctxt "lowres" +msgid "Game Path:" +msgstr "Cesta Hry:" + +#: gui/launcher.cpp:295 gui/options.cpp:1091 +msgid "Extra Path:" +msgstr "Dodatečná Cesta:" + +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 +msgid "Specifies path to additional data used the game" +msgstr "Stanoví cestu pro dodatečná data použitá ve hře" + +#: gui/launcher.cpp:297 gui/options.cpp:1093 +msgctxt "lowres" +msgid "Extra Path:" +msgstr "Dodatečná Cesta:" + +#: gui/launcher.cpp:302 gui/options.cpp:1079 +msgid "Save Path:" +msgstr "Cesta pro uložení:" + +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 +msgid "Specifies where your savegames are put" +msgstr "Stanovuje, kam jsou umístěny Vaše uložené hry" + +#: gui/launcher.cpp:304 gui/options.cpp:1081 +msgctxt "lowres" +msgid "Save Path:" +msgstr "Cesta pro uložení:" + +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 +msgctxt "path" +msgid "None" +msgstr "Žádné" + +#: gui/launcher.cpp:326 gui/launcher.cpp:408 +#: backends/platform/wii/options.cpp:56 +msgid "Default" +msgstr "Výchozí" + +#: gui/launcher.cpp:446 gui/options.cpp:1356 +msgid "Select SoundFont" +msgstr "Vybrat SoundFont" + +#: gui/launcher.cpp:465 gui/launcher.cpp:612 +msgid "Select directory with game data" +msgstr "Vyberte adresář s daty hry" + +#: gui/launcher.cpp:483 +msgid "Select additional game directory" +msgstr "Vyberte dodatečný adresář hry" + +#: gui/launcher.cpp:495 +msgid "Select directory for saved games" +msgstr "Vyberte adresář pro uložené hry" + +#: gui/launcher.cpp:514 +msgid "This game ID is already taken. Please choose another one." +msgstr "Toto ID hry je už zabrané. Vyberte si, prosím, jiné." + +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 +msgid "~Q~uit" +msgstr "~U~končit" + +#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80 +msgid "Quit ScummVM" +msgstr "Ukončit ScummVM" + +#: gui/launcher.cpp:556 +msgid "A~b~out..." +msgstr "~O~ Programu..." + +#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61 +msgid "About ScummVM" +msgstr "O ScummVM" + +#: gui/launcher.cpp:557 +msgid "~O~ptions..." +msgstr "~V~olby..." + +#: gui/launcher.cpp:557 +msgid "Change global ScummVM options" +msgstr "Změnit globální volby ScummVM" + +#: gui/launcher.cpp:559 +msgid "~S~tart" +msgstr "~S~pustit" + +#: gui/launcher.cpp:559 +msgid "Start selected game" +msgstr "Spustit zvolenou hru" + +#: gui/launcher.cpp:562 +msgid "~L~oad..." +msgstr "~N~ahrát..." + +#: gui/launcher.cpp:562 +msgid "Load savegame for selected game" +msgstr "Nahrát uloženou pozici pro zvolenou hru" + +#: gui/launcher.cpp:567 gui/launcher.cpp:1055 +msgid "~A~dd Game..." +msgstr "~P~řidat hru..." + +#: gui/launcher.cpp:567 gui/launcher.cpp:574 +msgid "Hold Shift for Mass Add" +msgstr "Podržte Shift pro Hromadné Přidání" + +#: gui/launcher.cpp:569 +msgid "~E~dit Game..." +msgstr "~U~pravit Hru..." + +#: gui/launcher.cpp:569 gui/launcher.cpp:576 +msgid "Change game options" +msgstr "Změnit volby hry" + +#: gui/launcher.cpp:571 +msgid "~R~emove Game" +msgstr "~O~dstranit Hru" + +#: gui/launcher.cpp:571 gui/launcher.cpp:578 +msgid "Remove game from the list. The game data files stay intact" +msgstr "Odstranit hru ze seznamu. Herní data zůstanou zachována" + +#: gui/launcher.cpp:574 gui/launcher.cpp:1055 +msgctxt "lowres" +msgid "~A~dd Game..." +msgstr "~P~řidat hru..." + +#: gui/launcher.cpp:576 +msgctxt "lowres" +msgid "~E~dit Game..." +msgstr "~U~pravit hru..." + +#: gui/launcher.cpp:578 +msgctxt "lowres" +msgid "~R~emove Game" +msgstr "~O~dstranit hru" + +#: gui/launcher.cpp:586 +msgid "Search in game list" +msgstr "Hledat v seznamu her" + +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 +msgid "Search:" +msgstr "Hledat:" + +#: gui/launcher.cpp:593 gui/options.cpp:826 +msgid "Clear value" +msgstr "Vyčistit hodnotu" + +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216 +msgid "Load game:" +msgstr "Nahrát hru:" + +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188 +#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716 +#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Load" +msgstr "Nahrát" + +#: gui/launcher.cpp:723 +msgid "" +"Do you really want to run the mass game detector? This could potentially add " +"a huge number of games." +msgstr "" +"Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciálně " +"přidat velkou spoustu her. " + +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "Yes" +msgstr "Ano" + +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "No" +msgstr "Ne" + +#: gui/launcher.cpp:772 +msgid "ScummVM couldn't open the specified directory!" +msgstr "ScummVM nemohl tento adresář otevřít!" + +#: gui/launcher.cpp:784 +msgid "ScummVM could not find any game in the specified directory!" +msgstr "ScummVM nemohl v zadaném adresáři najít žádnou hru!" + +#: gui/launcher.cpp:798 +msgid "Pick the game:" +msgstr "Vybrat hru:" + +#: gui/launcher.cpp:872 +msgid "Do you really want to remove this game configuration?" +msgstr "Opravdu chcete odstranit nastavení této hry?" + +#: gui/launcher.cpp:936 +msgid "This game does not support loading games from the launcher." +msgstr "Tato hra nepodporuje spouštění her ze spouštěče" + +#: gui/launcher.cpp:940 +msgid "ScummVM could not find any engine capable of running the selected game!" +msgstr "ScummVM nemohl najít žádné jádro schopné vybranou hru spustit!" + +#: gui/launcher.cpp:1054 +msgctxt "lowres" +msgid "Mass Add..." +msgstr "Hromadné Přidání..." + +#: gui/launcher.cpp:1054 +msgid "Mass Add..." +msgstr "Hromadné Přidání..." + +#: gui/massadd.cpp:78 gui/massadd.cpp:81 +msgid "... progress ..." +msgstr "... průběh ..." + +#: gui/massadd.cpp:258 +msgid "Scan complete!" +msgstr "Hledání dokončeno!" + +#: gui/massadd.cpp:261 +#, c-format +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her." + +#: gui/massadd.cpp:265 +#, c-format +msgid "Scanned %d directories ..." +msgstr "Prohledáno %d adresářů..." + +#: gui/massadd.cpp:268 +#, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." +msgstr "Objeveno %d nových her, ignorováno %d dříve přidaných her ..." + +#: gui/options.cpp:72 +msgid "Never" +msgstr "Nikdy" + +#: gui/options.cpp:72 +msgid "every 5 mins" +msgstr "Každých 5 min" + +#: gui/options.cpp:72 +msgid "every 10 mins" +msgstr "Každých 10 min" + +#: gui/options.cpp:72 +msgid "every 15 mins" +msgstr "Každých 15 min" + +#: gui/options.cpp:72 +msgid "every 30 mins" +msgstr "Každých 30 min" + +#: gui/options.cpp:74 +msgid "8 kHz" +msgstr "8 kHz" + +#: gui/options.cpp:74 +msgid "11kHz" +msgstr "11kHz" + +#: gui/options.cpp:74 +msgid "22 kHz" +msgstr "22 kHz" + +#: gui/options.cpp:74 +msgid "44 kHz" +msgstr "44 kHz" + +#: gui/options.cpp:74 +msgid "48 kHz" +msgstr "48 kHz" + +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 +msgctxt "soundfont" +msgid "None" +msgstr "Žádné" + +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "Nelze použít některé změny možností grafiky:" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "režim obrazu nemohl být změněn." + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "nastavení celé obrazovky nemohlo být změněno" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "nastavení poměru stran nemohlo být změněno" + +#: gui/options.cpp:705 +msgid "Graphics mode:" +msgstr "Režim obrazu:" + +#: gui/options.cpp:716 +msgid "Render mode:" +msgstr "Režim vykreslení:" + +#: gui/options.cpp:716 gui/options.cpp:717 +msgid "Special dithering modes supported by some games" +msgstr "Speciální režimy chvění podporované některými hrami" + +#: gui/options.cpp:726 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472 +msgid "Fullscreen mode" +msgstr "Režim celé obrazovky" + +#: gui/options.cpp:729 +msgid "Aspect ratio correction" +msgstr "Korekce poměru stran" + +#: gui/options.cpp:729 +msgid "Correct aspect ratio for 320x200 games" +msgstr "Korigovat poměr stran pro hry 320x200" + +#: gui/options.cpp:730 +msgid "EGA undithering" +msgstr "Nerozkládání EGA" + +#: gui/options.cpp:730 +msgid "Enable undithering in EGA games that support it" +msgstr "Povolit nerozkládání v EGA hrách, které to podporují" + +#: gui/options.cpp:738 +msgid "Preferred Device:" +msgstr "Prioritní Zařízení:" + +#: gui/options.cpp:738 +msgid "Music Device:" +msgstr "Hudební zařízení" + +#: gui/options.cpp:738 gui/options.cpp:740 +msgid "Specifies preferred sound device or sound card emulator" +msgstr "Stanoví prioritní zvukové zařízení nebo emulátor zvukové karty" + +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 +msgid "Specifies output sound device or sound card emulator" +msgstr "Stanoví výstupní zvukové zařízení nebo emulátor zvukové karty" + +#: gui/options.cpp:740 +msgctxt "lowres" +msgid "Preferred Dev.:" +msgstr "Prioritní Zař.:" + +#: gui/options.cpp:740 +msgctxt "lowres" +msgid "Music Device:" +msgstr "Hudební zařízení" + +#: gui/options.cpp:766 +msgid "AdLib emulator:" +msgstr "AdLib emulátor" + +#: gui/options.cpp:766 gui/options.cpp:767 +msgid "AdLib is used for music in many games" +msgstr "AdLib se používá pro hudbu v mnoha hrách" + +#: gui/options.cpp:777 +msgid "Output rate:" +msgstr "Výstup. frekvence:" + +#: gui/options.cpp:777 gui/options.cpp:778 +msgid "" +"Higher value specifies better sound quality but may be not supported by your " +"soundcard" +msgstr "" +"Vyšší hodnota způsobí lepší kvalitu zvuku, ale nemusí být podporována Vaši " +"zvukovou kartou" + +#: gui/options.cpp:788 +msgid "GM Device:" +msgstr "GM Zařízení:" + +#: gui/options.cpp:788 +msgid "Specifies default sound device for General MIDI output" +msgstr "Stanoví výchozí zvukové zařízení pro výstup General MIDI" + +#: gui/options.cpp:799 +msgid "Don't use General MIDI music" +msgstr "Nepoužívat hudbu General MIDI" + +#: gui/options.cpp:810 gui/options.cpp:871 +msgid "Use first available device" +msgstr "Použít první dostupné zařízení" + +#: gui/options.cpp:822 +msgid "SoundFont:" +msgstr "SoundFont:" + +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 +msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" +msgstr "" +"SoundFont je podporován některými zvukovými kartami, Fluidsynth a Timidity" + +#: gui/options.cpp:824 +msgctxt "lowres" +msgid "SoundFont:" +msgstr "SoundFont:" + +#: gui/options.cpp:829 +msgid "Mixed AdLib/MIDI mode" +msgstr "Smíšený režim AdLib/MIDI" + +#: gui/options.cpp:829 +msgid "Use both MIDI and AdLib sound generation" +msgstr "Použít obě zvukové generace MIDI a AdLib" + +#: gui/options.cpp:832 +msgid "MIDI gain:" +msgstr "Zesílení MIDI:" + +#: gui/options.cpp:842 +msgid "MT-32 Device:" +msgstr "Zařízení MT-32:" + +#: gui/options.cpp:842 +msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" +msgstr "" +"Stanoví výchozí zvukové výstupní zařízení pro Roland MT-32/LAPC1/CM32l/CM64" + +#: gui/options.cpp:847 +msgid "True Roland MT-32 (disable GM emulation)" +msgstr "Opravdový Roland MT-32 (vypne GM emulaci)" + +#: gui/options.cpp:847 gui/options.cpp:849 +msgid "" +"Check if you want to use your real hardware Roland-compatible sound device " +"connected to your computer" +msgstr "" +"Zaškrtněte, pokud chcete použít pravé hardwarové zařízení kompatibilní s " +"Roland, připojené k Vašemu počítači" + +#: gui/options.cpp:849 +msgctxt "lowres" +msgid "True Roland MT-32 (no GM emulation)" +msgstr "Opravdový Roland MT-32 (žádná GM emulace)" + +#: gui/options.cpp:852 +msgid "Enable Roland GS Mode" +msgstr "Zapnout režim Roland GS" + +#: gui/options.cpp:852 +msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" +msgstr "Vypne mapování General MIDI pro hry s Roland MT-32 zvukovým doprovodem" + +#: gui/options.cpp:861 +msgid "Don't use Roland MT-32 music" +msgstr "Nepoužívat hudbu Roland MT-32" + +#: gui/options.cpp:888 +msgid "Text and Speech:" +msgstr "Text a Řeč" + +#: gui/options.cpp:892 gui/options.cpp:902 +msgid "Speech" +msgstr "Řeč" + +#: gui/options.cpp:893 gui/options.cpp:903 +msgid "Subtitles" +msgstr "Titulky" + +#: gui/options.cpp:894 +msgid "Both" +msgstr "Oba" + +#: gui/options.cpp:896 +msgid "Subtitle speed:" +msgstr "Rychlost titulků:" + +#: gui/options.cpp:898 +msgctxt "lowres" +msgid "Text and Speech:" +msgstr "Text a Řeč:" + +#: gui/options.cpp:902 +msgid "Spch" +msgstr "Řeč" + +#: gui/options.cpp:903 +msgid "Subs" +msgstr "Titl" + +#: gui/options.cpp:904 +msgctxt "lowres" +msgid "Both" +msgstr "Oba" + +#: gui/options.cpp:904 +msgid "Show subtitles and play speech" +msgstr "Zobrazit titulky a přehrávat řeč" + +#: gui/options.cpp:906 +msgctxt "lowres" +msgid "Subtitle speed:" +msgstr "Rychlost titulků" + +#: gui/options.cpp:922 +msgid "Music volume:" +msgstr "Hlasitost hudby" + +#: gui/options.cpp:924 +msgctxt "lowres" +msgid "Music volume:" +msgstr "Hlasitost hudby" + +#: gui/options.cpp:931 +msgid "Mute All" +msgstr "Ztlumit Vše" + +#: gui/options.cpp:934 +msgid "SFX volume:" +msgstr "Hlasitost zvuků" + +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 +msgid "Special sound effects volume" +msgstr "Hlasitost speciálních zvukových efektů" + +#: gui/options.cpp:936 +msgctxt "lowres" +msgid "SFX volume:" +msgstr "Hlasitost zvuků" + +#: gui/options.cpp:944 +msgid "Speech volume:" +msgstr "Hlasitost řeči" + +#: gui/options.cpp:946 +msgctxt "lowres" +msgid "Speech volume:" +msgstr "Hlasitost řeči" + +#: gui/options.cpp:1085 +msgid "Theme Path:" +msgstr "Cesta ke Vzhledu:" + +#: gui/options.cpp:1087 +msgctxt "lowres" +msgid "Theme Path:" +msgstr "Cesta ke Vzhledu:" + +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 +msgid "Specifies path to additional data used by all games or ScummVM" +msgstr "Stanoví cestu k dodatečným datům používaná všemi hrami nebo ScummVM" + +#: gui/options.cpp:1098 +msgid "Plugins Path:" +msgstr "Cesta k Pluginům:" + +#: gui/options.cpp:1100 +msgctxt "lowres" +msgid "Plugins Path:" +msgstr "Cesta k Pluginům:" + +#: gui/options.cpp:1109 +msgid "Misc" +msgstr "Různé" + +#: gui/options.cpp:1111 +msgctxt "lowres" +msgid "Misc" +msgstr "Různé" + +#: gui/options.cpp:1113 +msgid "Theme:" +msgstr "Vzhled:" + +#: gui/options.cpp:1117 +msgid "GUI Renderer:" +msgstr "GUI Vykreslovač:" + +#: gui/options.cpp:1129 +msgid "Autosave:" +msgstr "Autoukládání:" + +#: gui/options.cpp:1131 +msgctxt "lowres" +msgid "Autosave:" +msgstr "Autoukládání:" + +#: gui/options.cpp:1139 +msgid "Keys" +msgstr "Klávesy" + +#: gui/options.cpp:1146 +msgid "GUI Language:" +msgstr "Jazyk GUI" + +#: gui/options.cpp:1146 +msgid "Language of ScummVM GUI" +msgstr "Jazyk GUI ScummVM" + +#: gui/options.cpp:1295 +msgid "You have to restart ScummVM before your changes will take effect." +msgstr "Pro použití těchto nastavení musíte restartovat ScummVM." + +#: gui/options.cpp:1308 +msgid "Select directory for savegames" +msgstr "Vybrat adresář pro uložené hry" + +#: gui/options.cpp:1315 +msgid "The chosen directory cannot be written to. Please select another one." +msgstr "Do zvoleného adresáře nelze zapisovat. Vyberte, prosím, jiný." + +#: gui/options.cpp:1324 +msgid "Select directory for GUI themes" +msgstr "Vyberte adresář pro vhledy GUI" + +#: gui/options.cpp:1334 +msgid "Select directory for extra files" +msgstr "Vyberte adresář pro dodatečné soubory" + +#: gui/options.cpp:1345 +msgid "Select directory for plugins" +msgstr "Vyberte adresář pro zásuvné moduly" + +#: gui/options.cpp:1389 +msgid "" +"The theme you selected does not support your current language. If you want " +"to use this theme you need to switch to another language first." +msgstr "" +"Vzhled, který jste zvolili, nepodporuje Váš současný jazyk. Pokud chcete " +"tento vzhled použít, musíte nejdříve přepnout na jiný jazyk." + +#: gui/saveload.cpp:58 gui/saveload.cpp:239 +msgid "No date saved" +msgstr "Neuložena žádná data" + +#: gui/saveload.cpp:59 gui/saveload.cpp:240 +msgid "No time saved" +msgstr "Žádný uložený čas" + +#: gui/saveload.cpp:60 gui/saveload.cpp:241 +msgid "No playtime saved" +msgstr "Žádná uložená doba hraní" + +#: gui/saveload.cpp:67 gui/saveload.cpp:155 +msgid "Delete" +msgstr "Smazat" + +#: gui/saveload.cpp:154 +msgid "Do you really want to delete this savegame?" +msgstr "Opravdu chcete tuto uloženou hru vymazat" + +#: gui/saveload.cpp:264 +msgid "Date: " +msgstr "Datum:" + +#: gui/saveload.cpp:268 +msgid "Time: " +msgstr "Čas:" + +#: gui/saveload.cpp:274 +msgid "Playtime: " +msgstr "Doba hraní:" + +#: gui/saveload.cpp:287 gui/saveload.cpp:354 +msgid "Untitled savestate" +msgstr "Bezejmenný uložený stav" + +#: gui/themebrowser.cpp:44 +msgid "Select a Theme" +msgstr "Vyberte Vzhled" + +#: gui/ThemeEngine.cpp:328 +msgid "Disabled GFX" +msgstr "GFX zakázáno" + +#: gui/ThemeEngine.cpp:328 +msgctxt "lowres" +msgid "Disabled GFX" +msgstr "GFX zakázáno" + +#: gui/ThemeEngine.cpp:329 +msgid "Standard Renderer (16bpp)" +msgstr "Standardní Vykreslovač (16bpp)" + +#: gui/ThemeEngine.cpp:329 +msgid "Standard (16bpp)" +msgstr "Standardní (16bpp)" + +#: gui/ThemeEngine.cpp:331 +msgid "Antialiased Renderer (16bpp)" +msgstr "Vykreslovač s vyhlazenými hranami (16bpp)" + +#: gui/ThemeEngine.cpp:331 +msgid "Antialiased (16bpp)" +msgstr "S vyhlazenými hranami (16bpp)" + +#: base/main.cpp:206 +#, c-format +msgid "Engine does not support debug level '%s'" +msgstr "Jádro nepodporuje úroveň ladění '%s'" + +#: base/main.cpp:274 +msgid "Menu" +msgstr "Menu" + +#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 +msgid "Skip" +msgstr "Přeskočit" + +#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 +msgid "Pause" +msgstr "Pauza" + +#: base/main.cpp:283 +msgid "Skip line" +msgstr "Přeskočit řádek" + +#: base/main.cpp:442 +msgid "Error running game:" +msgstr "Chyba při spuštění hry:" + +#: base/main.cpp:466 +msgid "Could not find any engine capable of running the selected game" +msgstr "Nelze nalézt žádné jádro schopné vybranou hru spustit" + +#: common/error.cpp:38 +msgid "No error" +msgstr "Žádná chyba" + +#: common/error.cpp:40 +msgid "Game data not found" +msgstr "Data hry nenalezena" + +#: common/error.cpp:42 +msgid "Game id not supported" +msgstr "Id hry není podporováno" + +#: common/error.cpp:44 +msgid "Unsupported color mode" +msgstr "Nepodporovaný barevný režim" + +#: common/error.cpp:47 +msgid "Read permission denied" +msgstr "Oprávnění ke čtení zamítnuto" + +#: common/error.cpp:49 +msgid "Write permission denied" +msgstr "Oprávnění k zápisu zamítnuto" + +#: common/error.cpp:52 +msgid "Path does not exist" +msgstr "Cesta neexistuje" + +#: common/error.cpp:54 +msgid "Path not a directory" +msgstr "Cesta není adresář" + +#: common/error.cpp:56 +msgid "Path not a file" +msgstr "Cesta není soubor" + +#: common/error.cpp:59 +msgid "Cannot create file" +msgstr "Nelze vytvořit soubor" + +#: common/error.cpp:61 +msgid "Reading data failed" +msgstr "Čtení dat selhalo" + +#: common/error.cpp:63 +msgid "Writing data failed" +msgstr "Zápis dat selhal" + +#: common/error.cpp:66 +msgid "Could not find suitable engine plugin" +msgstr "Nelze nalézt vhodný zás. modul jádra" + +#: common/error.cpp:68 +msgid "Engine plugin does not support save states" +msgstr "Zás. modul jádra nepodporuje uložené stavy" + +#: common/error.cpp:71 +msgid "User canceled" +msgstr "Zrušeno uživatelem" + +#: common/error.cpp:75 +msgid "Unknown error" +msgstr "Neznámá chyba" + +#. I18N: Hercules is graphics card name +#: common/util.cpp:275 +msgid "Hercules Green" +msgstr "Hercules Zelená" + +#: common/util.cpp:276 +msgid "Hercules Amber" +msgstr "Hercules Jantarová" + +#: common/util.cpp:283 +msgctxt "lowres" +msgid "Hercules Green" +msgstr "Hercules Zelená" + +#: common/util.cpp:284 +msgctxt "lowres" +msgid "Hercules Amber" +msgstr "Hercules Jantarová" + +#: engines/advancedDetector.cpp:296 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "Hra v '%s' se zdá být neznámá." + +#: engines/advancedDetector.cpp:297 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "Prosím nahlaste následující data týmu ScummVM spolu se jménem" + +#: engines/advancedDetector.cpp:299 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "hry, kterou jste se pokusili přidat a její verzi/jazyk/atd.:" + +#: engines/dialogs.cpp:84 +msgid "~R~esume" +msgstr "~P~okračovat" + +#: engines/dialogs.cpp:86 +msgid "~L~oad" +msgstr "~N~ahrát" + +#: engines/dialogs.cpp:90 +msgid "~S~ave" +msgstr "~U~ložit" + +#: engines/dialogs.cpp:94 +msgid "~O~ptions" +msgstr "~V~olby" + +#: engines/dialogs.cpp:99 +msgid "~H~elp" +msgstr "~N~ápověda" + +#: engines/dialogs.cpp:101 +msgid "~A~bout" +msgstr "~O~ programu" + +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 +msgid "~R~eturn to Launcher" +msgstr "~N~ávrat do Spouštěče" + +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 +msgctxt "lowres" +msgid "~R~eturn to Launcher" +msgstr "~N~ávrat do Spouštěče" + +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +msgid "Save game:" +msgstr "Uložit hru:" + +#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187 +#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Save" +msgstr "Uložit" + +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" +"Je nám líto, ale toto jádro v současnosti nepodporuje herní nápovědu. Prosím " +"prohlédněte si README pro základní informace a pro instrukce jak získat " +"další pomoc." + +#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109 +#: engines/mohawk/dialogs.cpp:174 +msgid "~O~K" +msgstr "~O~K" + +#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110 +#: engines/mohawk/dialogs.cpp:175 +msgid "~C~ancel" +msgstr "~Z~rušit" + +#: engines/dialogs.cpp:312 +msgid "~K~eys" +msgstr "~K~lávesy" + +#: engines/engine.cpp:233 +msgid "Could not initialize color format." +msgstr "Nelze zavést barevný formát." + +#: engines/engine.cpp:241 +msgid "Could not switch to video mode: '" +msgstr "Nelze přepnout na režim obrazu: '" + +#: engines/engine.cpp:250 +msgid "Could not apply aspect ratio setting." +msgstr "Nelze použít nastavení poměru stran." + +#: engines/engine.cpp:255 +msgid "Could not apply fullscreen setting." +msgstr "Nelze použít nastavení celé obrazovky." + +#: engines/engine.cpp:355 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" +"Vypadá to, že tuto hru hrajete přímo z\n" +" CD. Je známo, že toto způsobuje problémy\n" +" a je tedy doporučeno, ať místo toho zkopírujete\n" +"datové soubory na Váš pevný disk.\n" +"Pro podrobnosti si přečtěte README." + +#: engines/engine.cpp:366 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" +"Tato hra má na svém disku zvukové stopy. Tyto\n" +"stopy musí být z disku zkopírovány použitím\n" +"vhodného nástroje pro extrakci zvuku z CD,\n" +"abyste mohli poslouchat hudbu ve hře.\n" +"Pro podrobnosti si přečtěte README." + +#: engines/engine.cpp:433 +msgid "" +"WARNING: The game you are about to start is not yet fully supported by " +"ScummVM. As such, it is likely to be unstable, and any saves you make might " +"not work in future versions of ScummVM." +msgstr "" +"VAROVÁNÍ: Hra, kterou se chystáte spustit, není ještě plně podporována " +"ScummVM. Proto je možné, že bude nestabilní a jakékoli uložené hry nemusí " +"fungovat v budoucích verzích ScummVM." + +#: engines/engine.cpp:436 +msgid "Start anyway" +msgstr "Přesto spustit" + +#: engines/scumm/dialogs.cpp:175 +#, c-format +msgid "Insert Disk %c and Press Button to Continue." +msgstr "Vložte Disk %c a Stiskněte Tlačítko Pro Poračování." + +#: engines/scumm/dialogs.cpp:176 +#, c-format +msgid "Unable to Find %s, (%c%d) Press Button." +msgstr "Nelze Najít %s, (%c%d) Stsikěte Tlačítko." + +#: engines/scumm/dialogs.cpp:177 +#, c-format +msgid "Error reading disk %c, (%c%d) Press Button." +msgstr "Chyba při čtení disku %c, (%c%d) Stiskněte Tlačítko." + +#: engines/scumm/dialogs.cpp:178 +msgid "Game Paused. Press SPACE to Continue." +msgstr "Hra Pozastavena. Stiskněte MEZERNÍK pro pokračování." + +#. I18N: You may specify 'Yes' symbol at the end of the line, like this: +#. "Moechten Sie wirklich neu starten? (J/N)J" +#. Will react to J as 'Yes' +#: engines/scumm/dialogs.cpp:182 +msgid "Are you sure you want to restart? (Y/N)" +msgstr "Jste si jisti, že chcete restartovat? (A/N)A" + +#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment +#: engines/scumm/dialogs.cpp:184 +msgid "Are you sure you want to quit? (Y/N)" +msgstr "Jste si jisti, že chcete odejít? (A/N)A" + +#: engines/scumm/dialogs.cpp:189 +msgid "Play" +msgstr "Hrát" + +#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:84 +#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:44 +#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/events/default/default-events.cpp:244 +msgid "Quit" +msgstr "Ukončit" + +#: engines/scumm/dialogs.cpp:193 +msgid "Insert save/load game disk" +msgstr "Vložte herní disk pro uložení/načtení" + +#: engines/scumm/dialogs.cpp:194 +msgid "You must enter a name" +msgstr "Musíte zadat jméno" + +#: engines/scumm/dialogs.cpp:195 +msgid "The game was NOT saved (disk full?)" +msgstr "Hra NEBYLA uložena (plný disk?)" + +#: engines/scumm/dialogs.cpp:196 +msgid "The game was NOT loaded" +msgstr "Hra NEBYLA načtena" + +#: engines/scumm/dialogs.cpp:197 +#, c-format +msgid "Saving '%s'" +msgstr "Ukládám '%s'" + +#: engines/scumm/dialogs.cpp:198 +#, c-format +msgid "Loading '%s'" +msgstr "Načítám '%s'" + +#: engines/scumm/dialogs.cpp:199 +msgid "Name your SAVE game" +msgstr "Pojmenujte svoji ULOŽENOU hru" + +#: engines/scumm/dialogs.cpp:200 +msgid "Select a game to LOAD" +msgstr "Vyberte hru k NAČTENÍ" + +#: engines/scumm/dialogs.cpp:201 +msgid "Game title)" +msgstr "Název hry" + +#. I18N: Previous page button +#: engines/scumm/dialogs.cpp:287 +msgid "~P~revious" +msgstr "~P~ředchozí" + +#. I18N: Next page button +#: engines/scumm/dialogs.cpp:289 +msgid "~N~ext" +msgstr "~D~alší" + +#: engines/scumm/dialogs.cpp:290 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 +msgid "~C~lose" +msgstr "~Z~avřít" + +#: engines/scumm/dialogs.cpp:597 +msgid "Speech Only" +msgstr "Pouze Řeč" + +#: engines/scumm/dialogs.cpp:598 +msgid "Speech and Subtitles" +msgstr "Řeč a Titulky" + +#: engines/scumm/dialogs.cpp:599 +msgid "Subtitles Only" +msgstr "Pouze Titulky" + +#: engines/scumm/dialogs.cpp:607 +msgctxt "lowres" +msgid "Speech & Subs" +msgstr "Řeč a Titulky" + +#: engines/scumm/help.cpp:73 +msgid "Common keyboard commands:" +msgstr "Běžné klávesové příkazy" + +#: engines/scumm/help.cpp:74 +msgid "Save / Load dialog" +msgstr "Dialog Nahrát / Uložit" + +#: engines/scumm/help.cpp:76 +msgid "Skip line of text" +msgstr "Přeskočit řádek textu" + +#: engines/scumm/help.cpp:77 +msgid "Esc" +msgstr "Mezerník" + +#: engines/scumm/help.cpp:77 +msgid "Skip cutscene" +msgstr "Přeskočit video" + +#: engines/scumm/help.cpp:78 +msgid "Space" +msgstr "Mezerník" + +#: engines/scumm/help.cpp:78 +msgid "Pause game" +msgstr "Pozastavit hru" + +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 +msgid "Ctrl" +msgstr "Ctrl" + +#: engines/scumm/help.cpp:79 +msgid "Load game state 1-10" +msgstr "Nahrát stav hry 1-10" + +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 +msgid "Alt" +msgstr "Alt" + +#: engines/scumm/help.cpp:80 +msgid "Save game state 1-10" +msgstr "Uložit stav hry 1-10" + +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 +msgid "Enter" +msgstr "Enter" + +#: engines/scumm/help.cpp:86 +msgid "Toggle fullscreen" +msgstr "Zapnout celou obrazovku" + +#: engines/scumm/help.cpp:87 +msgid "Music volume up / down" +msgstr "Hlasitost hudby nahoru / dolů" + +#: engines/scumm/help.cpp:88 +msgid "Text speed slower / faster" +msgstr "Zvýšit / Snížit rychlost textu" + +#: engines/scumm/help.cpp:89 +msgid "Simulate left mouse button" +msgstr "Napodobit levé tlačítko myši" + +#: engines/scumm/help.cpp:90 +msgid "Tab" +msgstr "Tab" + +#: engines/scumm/help.cpp:90 +msgid "Simulate right mouse button" +msgstr "Napodobit pravé tlačítko myši" + +#: engines/scumm/help.cpp:93 +msgid "Special keyboard commands:" +msgstr "Speciální klávesové příkazy" + +#: engines/scumm/help.cpp:94 +msgid "Show / Hide console" +msgstr "Ukázat / Skrýt konzoli" + +#: engines/scumm/help.cpp:95 +msgid "Start the debugger" +msgstr "Spustit ladící program" + +#: engines/scumm/help.cpp:96 +msgid "Show memory consumption" +msgstr "Zobrazit spotřebu paměti" + +#: engines/scumm/help.cpp:97 +msgid "Run in fast mode (*)" +msgstr "Spustit v rychlém režimu (*)" + +#: engines/scumm/help.cpp:98 +msgid "Run in really fast mode (*)" +msgstr "Spustit ve velmi rychlém režimu (*)" + +#: engines/scumm/help.cpp:99 +msgid "Toggle mouse capture" +msgstr "Povolit zachycování myši" + +#: engines/scumm/help.cpp:100 +msgid "Switch between graphics filters" +msgstr "Přepínat mezi grafickými filtry" + +#: engines/scumm/help.cpp:101 +msgid "Increase / Decrease scale factor" +msgstr "Zvětšit / Zmenšit faktor změny velikosti" + +#: engines/scumm/help.cpp:102 +msgid "Toggle aspect-ratio correction" +msgstr "Povolit korekci poměru stran" + +#: engines/scumm/help.cpp:107 +msgid "* Note that using ctrl-f and" +msgstr "Upozorňujeme, že používání ctrl-f a" + +#: engines/scumm/help.cpp:108 +msgid " ctrl-g are not recommended" +msgstr " ctrl-g není doporučeno" + +#: engines/scumm/help.cpp:109 +msgid " since they may cause crashes" +msgstr "jelikož můžou způsobit pád" + +#: engines/scumm/help.cpp:110 +msgid " or incorrect game behavior." +msgstr " nebo nesprávné chování hry." + +#: engines/scumm/help.cpp:114 +msgid "Spinning drafts on the keyboard:" +msgstr "Pletení náčrtků na klávesnici:" + +#: engines/scumm/help.cpp:116 +msgid "Main game controls:" +msgstr "Hlavní ovládací prvky:" + +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 +msgid "Push" +msgstr "Tlačit" + +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 +msgid "Pull" +msgstr "Táhnout" + +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:207 +msgid "Give" +msgstr "Dát" + +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:190 +#: engines/scumm/help.cpp:208 +msgid "Open" +msgstr "Otevřít" + +#: engines/scumm/help.cpp:126 +msgid "Go to" +msgstr "Jít do" + +#: engines/scumm/help.cpp:127 +msgid "Get" +msgstr "Vzít" + +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:198 +#: engines/scumm/help.cpp:213 engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:250 +msgid "Use" +msgstr "Použít" + +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 +msgid "Read" +msgstr "Přečíst" + +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 +msgid "New kid" +msgstr "Nové dítě" + +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 +msgid "Turn on" +msgstr "Zapnout" + +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 +msgid "Turn off" +msgstr "Vypnout" + +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:194 +msgid "Walk to" +msgstr "Přejít na" + +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:227 +msgid "Pick up" +msgstr "Sebrat" + +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 +msgid "What is" +msgstr "Co je" + +#: engines/scumm/help.cpp:146 +msgid "Unlock" +msgstr "Odemknout" + +#: engines/scumm/help.cpp:149 +msgid "Put on" +msgstr "Obléct" + +#: engines/scumm/help.cpp:150 +msgid "Take off" +msgstr "Svléct" + +#: engines/scumm/help.cpp:156 +msgid "Fix" +msgstr "Spravit" + +#: engines/scumm/help.cpp:158 +msgid "Switch" +msgstr "Přepnout" + +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228 +msgid "Look" +msgstr "Dívat se" + +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223 +msgid "Talk" +msgstr "Mluvit" + +#: engines/scumm/help.cpp:174 +msgid "Travel" +msgstr "Cestovat" + +#: engines/scumm/help.cpp:175 +msgid "To Henry / To Indy" +msgstr "Henrymu / Indymu" + +#. I18N: These are different musical notes +#: engines/scumm/help.cpp:179 +msgid "play C minor on distaff" +msgstr "zahrát c moll na přeslici" + +#: engines/scumm/help.cpp:180 +msgid "play D on distaff" +msgstr "zahrát D na přeslici" + +#: engines/scumm/help.cpp:181 +msgid "play E on distaff" +msgstr "zahrát E na přeslici" + +#: engines/scumm/help.cpp:182 +msgid "play F on distaff" +msgstr "zahrát F na přeslici" + +#: engines/scumm/help.cpp:183 +msgid "play G on distaff" +msgstr "zahrát G na přeslici" + +#: engines/scumm/help.cpp:184 +msgid "play A on distaff" +msgstr "zahrát A na přeslici" + +#: engines/scumm/help.cpp:185 +msgid "play B on distaff" +msgstr "zahrát B na přeslici" + +#: engines/scumm/help.cpp:186 +msgid "play C major on distaff" +msgstr "zahrát C dur na přeslici" + +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 +msgid "puSh" +msgstr "tlačIt" + +#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215 +msgid "pull (Yank)" +msgstr "táhnout (Škubnout)" + +#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212 +#: engines/scumm/help.cpp:248 +msgid "Talk to" +msgstr "Mluvit s" + +#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211 +msgid "Look at" +msgstr "Dívat se na" + +#: engines/scumm/help.cpp:200 +msgid "turn oN" +msgstr "zapnouT" + +#: engines/scumm/help.cpp:201 +msgid "turn oFf" +msgstr "vypnoUt" + +#: engines/scumm/help.cpp:217 +msgid "KeyUp" +msgstr "KlávesaNahoru" + +#: engines/scumm/help.cpp:217 +msgid "Highlight prev dialogue" +msgstr "Zvýraznit předchozí dialog" + +#: engines/scumm/help.cpp:218 +msgid "KeyDown" +msgstr "KlávesaDolů" + +#: engines/scumm/help.cpp:218 +msgid "Highlight next dialogue" +msgstr "Zvýraznit následující dialog" + +#: engines/scumm/help.cpp:222 +msgid "Walk" +msgstr "Jít" + +#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249 +msgid "Inventory" +msgstr "Inventář" + +#: engines/scumm/help.cpp:226 +msgid "Object" +msgstr "Objekt" + +#: engines/scumm/help.cpp:229 +msgid "Black and White / Color" +msgstr "Černobílé / Barva" + +#: engines/scumm/help.cpp:232 +msgid "Eyes" +msgstr "Oči" + +#: engines/scumm/help.cpp:233 +msgid "Tongue" +msgstr "Jazyk" + +#: engines/scumm/help.cpp:235 +msgid "Punch" +msgstr "Udeřit" + +#: engines/scumm/help.cpp:236 +msgid "Kick" +msgstr "Kopnout" + +#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247 +msgid "Examine" +msgstr "Prohlédnout" + +#: engines/scumm/help.cpp:240 +msgid "Regular cursor" +msgstr "Obyčejný kurzor" + +#. I18N: Comm is a communication device +#: engines/scumm/help.cpp:243 +msgid "Comm" +msgstr "Komunikace" + +#: engines/scumm/help.cpp:246 +msgid "Save / Load / Options" +msgstr "Uložit / Nahrát / Volby" + +#: engines/scumm/help.cpp:255 +msgid "Other game controls:" +msgstr "Další ovládací prvky hry" + +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267 +msgid "Inventory:" +msgstr "Inventář:" + +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274 +msgid "Scroll list up" +msgstr "Posunout seznam nahoru" + +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +msgid "Scroll list down" +msgstr "Posunout seznam dolu" + +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268 +msgid "Upper left item" +msgstr "Položka vlevo nahoře" + +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270 +msgid "Lower left item" +msgstr "Položka vlevo dole" + +#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +msgid "Upper right item" +msgstr "Položka vpravo nahoře" + +#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273 +msgid "Lower right item" +msgstr "Položka vpravo dole" + +#: engines/scumm/help.cpp:269 +msgid "Middle left item" +msgstr "Položka vlevo uprostřed" + +#: engines/scumm/help.cpp:272 +msgid "Middle right item" +msgstr "Položka vpravo uprostřed" + +#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284 +msgid "Switching characters:" +msgstr "Měnění postav:" + +#: engines/scumm/help.cpp:281 +msgid "Second kid" +msgstr "Druhé dítě" + +#: engines/scumm/help.cpp:282 +msgid "Third kid" +msgstr "Třetí dítě" + +#: engines/scumm/help.cpp:294 +msgid "Fighting controls (numpad):" +msgstr "Ovládání boje (num. kláv.)" + +#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296 +#: engines/scumm/help.cpp:297 +msgid "Step back" +msgstr "Ustoupit" + +#: engines/scumm/help.cpp:298 +msgid "Block high" +msgstr "Bránit nahoře" + +#: engines/scumm/help.cpp:299 +msgid "Block middle" +msgstr "Bránit uprostřed" + +#: engines/scumm/help.cpp:300 +msgid "Block low" +msgstr "Bránit dole" + +#: engines/scumm/help.cpp:301 +msgid "Punch high" +msgstr "Udeřit nahoru" + +#: engines/scumm/help.cpp:302 +msgid "Punch middle" +msgstr "Udeřit doprostřed" + +#: engines/scumm/help.cpp:303 +msgid "Punch low" +msgstr "Udeřit dolů" + +#: engines/scumm/help.cpp:306 +msgid "These are for Indy on left." +msgstr "Tyto jsou pro Indyho nalevo." + +#: engines/scumm/help.cpp:307 +msgid "When Indy is on the right," +msgstr "Když je Indy napravo," + +#: engines/scumm/help.cpp:308 +msgid "7, 4, and 1 are switched with" +msgstr "71 4 a 1 jsou zaměněny s" + +#: engines/scumm/help.cpp:309 +msgid "9, 6, and 3, respectively." +msgstr "9, 6 a 3, v tomto pořadí." + +#: engines/scumm/help.cpp:316 +msgid "Biplane controls (numpad):" +msgstr "Kontrola dvojplošníku (numerická klávesnice)" + +#: engines/scumm/help.cpp:317 +msgid "Fly to upper left" +msgstr "Letět doprava nahoru" + +#: engines/scumm/help.cpp:318 +msgid "Fly to left" +msgstr "Letět doleva" + +#: engines/scumm/help.cpp:319 +msgid "Fly to lower left" +msgstr "Letět doleva dolů" + +#: engines/scumm/help.cpp:320 +msgid "Fly upwards" +msgstr "Letět nahoru" + +#: engines/scumm/help.cpp:321 +msgid "Fly straight" +msgstr "Letět rovně" + +#: engines/scumm/help.cpp:322 +msgid "Fly down" +msgstr "Letět dolů" + +#: engines/scumm/help.cpp:323 +msgid "Fly to upper right" +msgstr "Letět doprava nahoru" + +#: engines/scumm/help.cpp:324 +msgid "Fly to right" +msgstr "Letět doprava" + +#: engines/scumm/help.cpp:325 +msgid "Fly to lower right" +msgstr "Letět doprava dolů" + +#: engines/scumm/scumm.cpp:1768 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" +"Přirozená podpora MIDI vyžaduje Aktualizaci Roland od LucasArts,\n" +"ale %s chybí. Místo toho je použit AdLib." + +#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189 +#, c-format +msgid "" +"Failed to save game state to file:\n" +"\n" +"%s" +msgstr "" +"Uložení stavu hry selhalo do souboru:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154 +#, c-format +msgid "" +"Failed to load game state from file:\n" +"\n" +"%s" +msgstr "" +"Nahrání stavu hry selhalo ze souboru:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197 +#, c-format +msgid "" +"Successfully saved game state in file:\n" +"\n" +"%s" +msgstr "" +"Stav hry úspěšně uložen do:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2492 +msgid "" +"Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " +"play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " +"directory inside the Tentacle game directory." +msgstr "" +"Normálně by teď Maniac Mansion byl spuštěn. Ale ScummVM toto zatím nedělá. " +"Abyste toto mohli hrát, přejděte do 'Přidat Hru' v počátečním menu ScummVM a " +"vyberte adresář 'Maniac' uvnitř herního adresáře Tentacle." + +#. I18N: Option for fast scene switching +#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171 +msgid "~Z~ip Mode Activated" +msgstr "~R~ežim Svištění Aktivován" + +#: engines/mohawk/dialogs.cpp:93 +msgid "~T~ransitions Enabled" +msgstr "~P~řechody zapnuty" + +#. I18N: Drop book page +#: engines/mohawk/dialogs.cpp:95 +msgid "~D~rop Page" +msgstr "~Z~ahodit Stránku" + +#: engines/mohawk/dialogs.cpp:99 +msgid "~S~how Map" +msgstr "~Z~obrazit Mapu" + +#: engines/mohawk/dialogs.cpp:105 +msgid "~M~ain Menu" +msgstr "~H~lavní Menu" + +#: engines/mohawk/dialogs.cpp:172 +msgid "~W~ater Effect Enabled" +msgstr "~E~fekt Vody Zapnut" + +#: engines/sci/engine/kfile.cpp:678 +msgid "Restore game:" +msgstr "Obnovit hru" + +#: engines/sci/engine/kfile.cpp:678 +msgid "Restore" +msgstr "Obnovit" + +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "Soubor videa '%s' nenalezen'" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:475 +msgid "Failed to load game state from file." +msgstr "Nelze načíst stav hry ze souboru." + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553 +msgid "Failed to save game state to file." +msgstr "Nelze uložit stav hry do souboru." + +#: engines/gob/inter_v5.cpp:107 +msgid "Failed to delete file." +msgstr "Nelze smazat soubor." + +#: engines/groovie/script.cpp:420 +msgid "Failed to save game" +msgstr "Nelze uložit hru." + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" +"Zdá se, že používáte zařízení General MIDI,\n" +"ale Vaše hra podporuje pouze Roland MT32 MIDI.\n" +"Snažíme se mapovat nástroje Roland MT32 na\n" +"ty od General MIDI. Po tomto se může stát,\n" +"že pár stop nebude správně přehráno." + +#: engines/m4/m4_menus.cpp:138 +msgid "Save game failed!" +msgstr "Ukládání hry selhalo!" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" +"Nelze nalézt soubor \"sky.cpt\"!\n" +"Stáhněte si ho, prosím z www.scummvm.org" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" +"Soubor \"sky.cpt\" má nesprávnou velikost.\n" +"Stáhněte si ho, prosím, (znovu) z www.scummvm.org" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "Videa DXA nalezena, ale ScummVM byl sestaven bez podpory zlib" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "Videa MPGE2 již nejsou podporována" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "Video '%s' nenalezeno" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" +"ScummVM zjistil, že máte staré uložené pozice pro Broken Sword 1, které by " +"měly být převedeny.\n" +"Starý formát uložených her již není podporován, takže pokud je nepřevedete, " +"nebudete moci Vaše hry načíst.\n" +"\n" +"Stiskněte OK, abyste je převedli teď, jinak budete požádáni znovu, při " +"spuštění této hry.\n" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" +"Nová cílová uložená hra již existuje!\n" +"Chtěli byste ponechat starou uloženou hru (%s), nebo novou (%s)?\n" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "Ponechat starou" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "Ponechat novou" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "Toto je konec Dema Broken Sword 1" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" +"Nelze uložit hru do pozice %i\n" +"\n" + +#: engines/parallaction/saveload.cpp:211 +msgid "Loading game..." +msgstr "Nahrávání hry..." + +#: engines/parallaction/saveload.cpp:226 +msgid "Saving game..." +msgstr "Ukládání hry..." + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" +"ScummVM zjistil, že máte staré uložené pozice pro Nippon Safes, které by " +"měly být přejmenovány.\n" +"Staré názvy již nejsou podporovány, takže pokud je nepřevedete, nebudete " +"moci Vaše hry načíst.\n" +"\n" +"Stiskněte OK, abyste je převedli teď, jinak budete požádáni příště.\n" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "ScummVM úspěšně převedl všechny Vaše uložené pozice. " + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" +"ScummVM vytiskl některá varování ve Vašem okně konzole a nemůže zaručit, že " +"všechny Vaše soubory byly převedeny.\n" +"\n" +"Prosím nahlaste to týmu" + +#: audio/fmopl.cpp:49 +msgid "MAME OPL emulator" +msgstr "MAME OPL Emulátor" + +#: audio/fmopl.cpp:51 +msgid "DOSBox OPL emulator" +msgstr "DOSBox OPL Emulátor" + +#: audio/mididrv.cpp:205 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected)." +msgstr "" +"Zvolené zvukové zařízení '%s' nebylo nalezeno (např. může být vypnuto nebo " +"odpojeno)." + +#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253 +#: audio/mididrv.cpp:268 +msgid "Attempting to fall back to the next available device..." +msgstr "Pokus o navrácení na nejbližší dostupné zařízení..." + +#: audio/mididrv.cpp:217 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information." +msgstr "" +"Zvolené zvukové zařízení '%s' nelze použít. Podívejte se na záznam pro více " +"informací." + +#: audio/mididrv.cpp:253 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected)." +msgstr "" +"Upřednostňované zvukové zařízení '%s' nebylo nalezeno (např. může být " +"vypnuto nebo odpojeno)." + +#: audio/mididrv.cpp:268 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information." +msgstr "" +"Upřednostňované zvukové zařízení '%s' nelze použít. Podívejte se na záznam " +"pro více informací." + +#: audio/null.h:43 +msgid "No music" +msgstr "Bez hudby" + +#: audio/mods/paula.cpp:189 +msgid "Amiga Audio Emulator" +msgstr "Emulátor zvuku Amiga" + +#: audio/softsynth/adlib.cpp:1594 +msgid "AdLib Emulator" +msgstr "AdLib Emulátor" + +#: audio/softsynth/appleiigs.cpp:33 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "Apple II GS Emulátor (NENÍ ZAVEDEN)" + +#: audio/softsynth/sid.cpp:1430 +msgid "C64 Audio Emulator" +msgstr "Emulátor zvuku C64" + +#: audio/softsynth/mt32.cpp:329 +msgid "Initializing MT-32 Emulator" +msgstr "Zavádím MT-32 Emulátor" + +#: audio/softsynth/mt32.cpp:543 +msgid "MT-32 Emulator" +msgstr "MT-32 Emulátor" + +#: audio/softsynth/pcspk.cpp:139 +msgid "PC Speaker Emulator" +msgstr "PC Speaker Emulátor" + +#: audio/softsynth/pcspk.cpp:158 +msgid "IBM PCjr Emulator" +msgstr "IBM PCjr Emulátor" + +#: backends/keymapper/remap-dialog.cpp:47 +msgid "Keymap:" +msgstr "Mapa Kláves:" + +#: backends/keymapper/remap-dialog.cpp:64 +msgid " (Active)" +msgstr "(Aktivní)" + +#: backends/keymapper/remap-dialog.cpp:98 +msgid " (Global)" +msgstr "(Globální)" + +#: backends/keymapper/remap-dialog.cpp:108 +msgid " (Game)" +msgstr "(Hra)" + +#: backends/midi/windows.cpp:164 +msgid "Windows MIDI" +msgstr "Windows MIDI" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 +msgid "ScummVM Main Menu" +msgstr "Hlavní Menu ScummVM" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 +msgid "~L~eft handed mode" +msgstr "~R~ežim pro leváky" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 +msgid "~I~ndy fight controls" +msgstr "~O~vládání Indyho boje" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 +msgid "Show mouse cursor" +msgstr "Zobrazit kurzor myši" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +msgid "Snap to edges" +msgstr "Přichytit k okrajům" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +msgid "Touch X Offset" +msgstr "Dotykové vyrovnáni na ose X" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 +msgid "Touch Y Offset" +msgstr "Dotykové vyrovnáni na ose Y" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 +msgid "Use laptop trackpad-style cursor control" +msgstr "Použít styl kontroly kurzoru jako u ovládací podušky laptopu" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 +msgid "Tap for left click, double tap right click" +msgstr "Ťukněte pro levé kliknutí, dvakrát pro pravé kliknutí" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +msgid "Sensitivity" +msgstr "Citlivost" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 +msgid "Initial top screen scale:" +msgstr "Počáteční změna velikosti horní obrazovky:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 +msgid "Main screen scaling:" +msgstr "Změna velikosti hlavní obrazovky:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 +msgid "Hardware scale (fast, but low quality)" +msgstr "Hardwarová změna velikosti (rychlé, ale nízká kvalita)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +msgid "Software scale (good quality, but slower)" +msgstr "Softwarová změna velikosti (dobrá kvalita, ale pomalejší)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 +msgid "Unscaled (you must scroll left and right)" +msgstr "Beze změny velikosti (musíte posunovat doleva a doprava)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +msgid "Brightness:" +msgstr "Jas:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 +msgid "High quality audio (slower) (reboot)" +msgstr "Vysoká kvalita zvuku (pomalejší) (restart) " + +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 +msgid "Disable power off" +msgstr "Zakázat vypnutí" + +#: backends/platform/iphone/osys_events.cpp:338 +msgid "Mouse-click-and-drag mode enabled." +msgstr "Režim přetáhnutí myši zapnut." + +#: backends/platform/iphone/osys_events.cpp:340 +msgid "Mouse-click-and-drag mode disabled." +msgstr "Režim přetáhnutí myši vypnut." + +#: backends/platform/iphone/osys_events.cpp:351 +msgid "Touchpad mode enabled." +msgstr "Touchpad režim zapnut" + +#: backends/platform/iphone/osys_events.cpp:353 +msgid "Touchpad mode disabled." +msgstr "Touchpad režim vypnut" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:67 +msgid "Hide ScummVM" +msgstr "Skrýt ScummVM" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:70 +msgid "Hide Others" +msgstr "Skrýt Ostatní" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:74 +msgid "Show All" +msgstr "Zobrazit Vše" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:92 +#: backends/platform/sdl/macosx/appmenu_osx.mm:99 +msgid "Window" +msgstr "Okno" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:95 +msgid "Minimize" +msgstr "Minimalizovat" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45 +msgid "Normal (no scaling)" +msgstr "Normální (bez změny velikosti)" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64 +msgctxt "lowres" +msgid "Normal (no scaling)" +msgstr "Normální (bez změny velikosti)" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533 +msgid "Enabled aspect ratio correction" +msgstr "Povolena korekce poměru stran" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538 +msgid "Disabled aspect ratio correction" +msgstr "Zakázána korekce poměru stran" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207 +msgid "Active graphics filter:" +msgstr "Aktivní grafický filtr:" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477 +msgid "Windowed mode" +msgstr "Režim do okna" + +#: backends/graphics/opengl/opengl-graphics.cpp:130 +msgid "OpenGL Normal" +msgstr "OpenGL Normální" + +#: backends/graphics/opengl/opengl-graphics.cpp:131 +msgid "OpenGL Conserve" +msgstr "OpenGL Zachovávající" + +#: backends/graphics/opengl/opengl-graphics.cpp:132 +msgid "OpenGL Original" +msgstr "OpenGL Původní" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415 +msgid "Current display mode" +msgstr "Současný režim obrazu" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428 +msgid "Current scale" +msgstr "Současná velikost" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558 +msgid "Active filter mode: Linear" +msgstr "Aktivní režim filtru: Lineární" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560 +msgid "Active filter mode: Nearest" +msgstr "Aktivní režim filtru: Nejbližší" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 +msgid "Up" +msgstr "Nahoru" + +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 +msgid "Down" +msgstr "Dolů" + +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 +msgid "Left" +msgstr "Doleva" + +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 +msgid "Right" +msgstr "Doprava" + +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 +msgid "Left Click" +msgstr "Levé Kliknutí" + +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 +msgid "Right Click" +msgstr "Pravé kliknutí" + +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 +msgid "Zone" +msgstr "Oblast" + +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 +msgid "Multi Function" +msgstr "Multi Funkce" + +#: backends/platform/symbian/src/SymbianActions.cpp:48 +msgid "Swap character" +msgstr "Zaměnit znaky" + +#: backends/platform/symbian/src/SymbianActions.cpp:49 +msgid "Skip text" +msgstr "Přeskočit text" + +#: backends/platform/symbian/src/SymbianActions.cpp:51 +msgid "Fast mode" +msgstr "Rychlý režim" + +#: backends/platform/symbian/src/SymbianActions.cpp:53 +msgid "Debugger" +msgstr "Ladící program" + +#: backends/platform/symbian/src/SymbianActions.cpp:54 +msgid "Global menu" +msgstr "Globální menu" + +#: backends/platform/symbian/src/SymbianActions.cpp:55 +msgid "Virtual keyboard" +msgstr "Virtuální klávesnice" + +#: backends/platform/symbian/src/SymbianActions.cpp:56 +msgid "Key mapper" +msgstr "Mapovač kláves" + +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +msgid "Do you want to quit ?" +msgstr "Chcete ukončit ?" + +#: backends/platform/wii/options.cpp:51 +msgid "Video" +msgstr "Video" + +#: backends/platform/wii/options.cpp:54 +msgid "Current video mode:" +msgstr "Současný režim obrazu:" + +#: backends/platform/wii/options.cpp:56 +msgid "Double-strike" +msgstr "Dvojité přeškrtnutí" + +#: backends/platform/wii/options.cpp:60 +msgid "Horizontal underscan:" +msgstr "Horizontální zmenšení" + +#: backends/platform/wii/options.cpp:66 +msgid "Vertical underscan:" +msgstr "Vertikální zmenšení" + +#: backends/platform/wii/options.cpp:71 +msgid "Input" +msgstr "Vstup" + +#: backends/platform/wii/options.cpp:74 +msgid "GC Pad sensitivity:" +msgstr "Citlivost GC Padu" + +#: backends/platform/wii/options.cpp:80 +msgid "GC Pad acceleration:" +msgstr "Zrychlení GC Padu" + +#: backends/platform/wii/options.cpp:86 +msgid "DVD" +msgstr "DVD" + +#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101 +msgid "Status:" +msgstr "Stav:" + +#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 +msgid "Unknown" +msgstr "Neznámé" + +#: backends/platform/wii/options.cpp:93 +msgid "Mount DVD" +msgstr "Připojit DVD" + +#: backends/platform/wii/options.cpp:94 +msgid "Unmount DVD" +msgstr "Odpojit DVD" + +#: backends/platform/wii/options.cpp:98 +msgid "SMB" +msgstr "SMB" + +#: backends/platform/wii/options.cpp:106 +msgid "Server:" +msgstr "Server:" + +#: backends/platform/wii/options.cpp:110 +msgid "Share:" +msgstr "Sdílení:" + +#: backends/platform/wii/options.cpp:114 +msgid "Username:" +msgstr "Uživatelské jméno" + +#: backends/platform/wii/options.cpp:118 +msgid "Password:" +msgstr "Heslo" + +#: backends/platform/wii/options.cpp:121 +msgid "Init network" +msgstr "Spustit síť" + +#: backends/platform/wii/options.cpp:123 +msgid "Mount SMB" +msgstr "Připojit SMB" + +#: backends/platform/wii/options.cpp:124 +msgid "Unmount SMB" +msgstr "Odpojit SMB" + +#: backends/platform/wii/options.cpp:143 +msgid "DVD Mounted successfully" +msgstr "DVD úspěšně připojeno" + +#: backends/platform/wii/options.cpp:146 +msgid "Error while mounting the DVD" +msgstr "Chyba při připojování DVD" + +#: backends/platform/wii/options.cpp:148 +msgid "DVD not mounted" +msgstr "DVD nepřipojeno" + +#: backends/platform/wii/options.cpp:161 +msgid "Network up, share mounted" +msgstr "Síť je zapnuta, sdílení připojeno" + +#: backends/platform/wii/options.cpp:163 +msgid "Network up" +msgstr "Síť je zapnuta" + +#: backends/platform/wii/options.cpp:166 +msgid ", error while mounting the share" +msgstr ", chyba při připojování sdílení" + +#: backends/platform/wii/options.cpp:168 +msgid ", share not mounted" +msgstr ", sdílení není připojeno" + +#: backends/platform/wii/options.cpp:174 +msgid "Network down" +msgstr "Síť je nedostupná" + +#: backends/platform/wii/options.cpp:178 +msgid "Initializing network" +msgstr "Zavádím síť" + +#: backends/platform/wii/options.cpp:182 +msgid "Timeout while initializing network" +msgstr "Při zavádění sítě vypršel limit" + +#: backends/platform/wii/options.cpp:186 +#, c-format +msgid "Network not initialized (%d)" +msgstr "Síť není zavedena (%d)" + +#: backends/platform/wince/CEActionsPocket.cpp:46 +msgid "Hide Toolbar" +msgstr "Skrýt Panel nástrojů" + +#: backends/platform/wince/CEActionsPocket.cpp:47 +msgid "Show Keyboard" +msgstr "Zobrazit klávesnici" + +#: backends/platform/wince/CEActionsPocket.cpp:48 +msgid "Sound on/off" +msgstr "Zvuk zapnout/vypnout" + +#: backends/platform/wince/CEActionsPocket.cpp:49 +msgid "Right click" +msgstr "Pravé kliknutí" + +#: backends/platform/wince/CEActionsPocket.cpp:50 +msgid "Show/Hide Cursor" +msgstr "Ukázat/Skrýt Kurzor" + +#: backends/platform/wince/CEActionsPocket.cpp:51 +msgid "Free look" +msgstr "Rozhlížení pomocí myši" + +#: backends/platform/wince/CEActionsPocket.cpp:52 +msgid "Zoom up" +msgstr "Přiblížení nahoru" + +#: backends/platform/wince/CEActionsPocket.cpp:53 +msgid "Zoom down" +msgstr "Přiblížení dolů" + +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 +msgid "Bind Keys" +msgstr "Přiřadit klávesy" + +#: backends/platform/wince/CEActionsPocket.cpp:56 +msgid "Cursor Up" +msgstr "Šipka Nahoru" + +#: backends/platform/wince/CEActionsPocket.cpp:57 +msgid "Cursor Down" +msgstr "Šipka Dolů" + +#: backends/platform/wince/CEActionsPocket.cpp:58 +msgid "Cursor Left" +msgstr "Šipka Doleva" + +#: backends/platform/wince/CEActionsPocket.cpp:59 +msgid "Cursor Right" +msgstr "Šipka Doprava" + +#: backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Do you want to load or save the game?" +msgstr "Chcete hru nahrát nebo uložit?" + +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +msgid " Are you sure you want to quit ? " +msgstr " Jste si jisti, že chcete odejít ? " + +#: backends/platform/wince/CEActionsSmartphone.cpp:50 +msgid "Keyboard" +msgstr "Klávesnice" + +#: backends/platform/wince/CEActionsSmartphone.cpp:51 +msgid "Rotate" +msgstr "Otáčet" + +#: backends/platform/wince/CELauncherDialog.cpp:56 +msgid "Using SDL driver " +msgstr "Používá ovladač SDL" + +#: backends/platform/wince/CELauncherDialog.cpp:60 +msgid "Display " +msgstr "Displej" + +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "Do you want to perform an automatic scan ?" +msgstr "Chcete provést automatické hledání ?" + +#: backends/platform/wince/wince-sdl.cpp:471 +msgid "Map right click action" +msgstr "Mapovat činnost pravé kliknutí" + +#: backends/platform/wince/wince-sdl.cpp:475 +msgid "You must map a key to the 'Right Click' action to play this game" +msgstr "" +"Musíte namapovat klávesu pro činnost 'Pravé Kliknutí', abyste tuto hru mohli " +"hrát" + +#: backends/platform/wince/wince-sdl.cpp:484 +msgid "Map hide toolbar action" +msgstr "Mapovat činnost skrýt panel nástrojů" + +#: backends/platform/wince/wince-sdl.cpp:488 +msgid "You must map a key to the 'Hide toolbar' action to play this game" +msgstr "" +"Musíte namapovat klávesu pro činnost 'Skrýt Panel nástrojů', abyste tuto hru " +"mohli hrát" + +#: backends/platform/wince/wince-sdl.cpp:497 +msgid "Map Zoom Up action (optional)" +msgstr "Namapovat činnost Přiblížit Nahoru (nepovinné)" + +#: backends/platform/wince/wince-sdl.cpp:500 +msgid "Map Zoom Down action (optional)" +msgstr "Namapovat činnost Přiblížit Dolů (nepovinné)" + +#: backends/platform/wince/wince-sdl.cpp:508 +msgid "" +"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" +msgstr "" +"Nezapomeňte namapovat klávesu k činnosti 'Skrýt Panel Nástrojů, abyste " +"viděli celý inventář" + +#: backends/events/default/default-events.cpp:222 +msgid "Do you really want to return to the Launcher?" +msgstr "Opravdu se chcete vrátit tuto do Spouštěče?" + +#: backends/events/default/default-events.cpp:222 +msgid "Launcher" +msgstr "Spouštěč" + +#: backends/events/default/default-events.cpp:244 +msgid "Do you really want to quit?" +msgstr "Opravdu chcete skončit?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Levé Kliknutí" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Pravé Kliknutí" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "'Režim Ťuknutí' Dotykové Obrazovky - Najetí (Bez Kliknutí)" + +#: backends/events/gph/gph-events.cpp:390 +msgid "Maximum Volume" +msgstr "Maximální Hlasitost" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "Zvyšuji Hlasitost" + +#: backends/events/gph/gph-events.cpp:398 +msgid "Minimal Volume" +msgstr "Minimální Hlasitost" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "Snižuji Hlasitost" + +#: backends/updates/macosx/macosx-updates.mm:65 +msgid "Check for Updates..." +msgstr "Zkontrolovat Aktualizace..." + +#~ msgctxt "lowres" +#~ msgid "Add Game..." +#~ msgstr "Přidat Hru..." + +#~ msgid "Add Game..." +#~ msgstr "Přidat Hru..." + +#~ msgid "" +#~ "Your game version has been detected using filename matching as a variant " +#~ "of %s." +#~ msgstr "" +#~ "Bylo zjištěno, že Vaše verze hry používá jméno souboru shodující se s " +#~ "variantou %s." + +#~ msgid "If this is an original and unmodified version, please report any" +#~ msgstr "Pokud je toto původní a nezměněná verze, ohlaste prosím jakékoli" + +#~ msgid "information previously printed by ScummVM to the team." +#~ msgstr "předešle vypsané informace od ScummVM zpátky týmu." + +#~ msgid "Discovered %d new games." +#~ msgstr "Objeveno %d nových her." + +#~ msgid "Command line argument not processed" +#~ msgstr "Argument příkazové řádky nebyl zpracován" + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM Towns Emulátor" + +#~ msgid "Invalid Path" +#~ msgstr "Neplatná Cesta" diff --git a/po/fr_FR.po b/po/fr_FR.po index 3824352106..89f07929a1 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -2,2776 +2,2778 @@ # Copyright (C) 2010-2011 ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Thierry Crozat <criezy@scummvm.org>, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
-"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2011-08-20 15:12+0100\n"
-"PO-Revision-Date: 2011-05-02 19:50+0100\n"
-"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
-"Language-Team: French <scummvm-devel@lists.sf.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: Francais\n"
-"Plural-Forms: nplurals=2; plural=n>1;\n"
-
-#: gui/about.cpp:91
-#, c-format
-msgid "(built on %s)"
-msgstr "(compilé sur %s)"
-
-#: gui/about.cpp:98
-msgid "Features compiled in:"
-msgstr "Options incluses:"
-
-#: gui/about.cpp:107
-msgid "Available engines:"
-msgstr "Moteurs disponibles:"
-
-#: gui/browser.cpp:66
-msgid "Go up"
-msgstr "Remonter"
-
-#: gui/browser.cpp:66 gui/browser.cpp:68
-msgid "Go to previous directory level"
-msgstr "Remonte d'un niveau dans la hiérarchie de répertoire"
-
-#: gui/browser.cpp:68
-msgctxt "lowres"
-msgid "Go up"
-msgstr "Remonter"
-
-#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
-#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
-#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
-#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:48
-#: backends/events/default/default-events.cpp:222
-#: backends/events/default/default-events.cpp:244
-msgid "Cancel"
-msgstr "Annuler"
-
-#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
-msgid "Choose"
-msgstr "Choisir"
-
-#: gui/gui-manager.cpp:116 engines/scumm/help.cpp:125
-#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165
-#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:209
-#: backends/keymapper/remap-dialog.cpp:52
-msgid "Close"
-msgstr "Fermer"
-
-#: gui/gui-manager.cpp:119
-msgid "Mouse click"
-msgstr "Clic de souris"
-
-#: gui/gui-manager.cpp:122 base/main.cpp:286
-msgid "Display keyboard"
-msgstr "Afficher le clavier"
-
-#: gui/gui-manager.cpp:125 base/main.cpp:289
-msgid "Remap keys"
-msgstr "Changer l'affectation des touches"
-
-#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
-msgid "Choose an action to map"
-msgstr "Sélectionnez une action ŕ affecter"
-
-#: gui/KeysDialog.cpp:41
-msgid "Map"
-msgstr "Affecter"
-
-#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
-#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
-#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
-#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
-#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
-#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
-#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
-#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
-#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
-#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:47
-#: backends/platform/wince/CELauncherDialog.cpp:54
-msgid "OK"
-msgstr "OK"
-
-#: gui/KeysDialog.cpp:49
-msgid "Select an action and click 'Map'"
-msgstr "Selectionez une action et cliquez 'Affecter'"
-
-#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
-#, c-format
-msgid "Associated key : %s"
-msgstr "Touche associée: %s"
-
-#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
-#, c-format
-msgid "Associated key : none"
-msgstr "Touche associée: aucune"
-
-#: gui/KeysDialog.cpp:90
-msgid "Please select an action"
-msgstr "Selectionnez une action"
-
-#: gui/KeysDialog.cpp:106
-msgid "Press the key to associate"
-msgstr "Appuyez sur la touche ŕ associer"
-
-#: gui/launcher.cpp:165
-msgid "Game"
-msgstr "Jeu"
-
-#: gui/launcher.cpp:169
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
-msgid ""
-"Short game identifier used for referring to savegames and running the game "
-"from the command line"
-msgstr ""
-"ID compact du jeu utilisée pour identifier les sauvegardes et démarrer le "
-"jeu depuis la ligne de commande"
-
-#: gui/launcher.cpp:171
-msgctxt "lowres"
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:176
-msgid "Name:"
-msgstr "Nom:"
-
-#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
-msgid "Full title of the game"
-msgstr "Nom complet du jeu"
-
-#: gui/launcher.cpp:178
-msgctxt "lowres"
-msgid "Name:"
-msgstr "Nom:"
-
-#: gui/launcher.cpp:182
-msgid "Language:"
-msgstr "Langue:"
-
-#: gui/launcher.cpp:182 gui/launcher.cpp:183
-msgid ""
-"Language of the game. This will not turn your Spanish game version into "
-"English"
-msgstr ""
-"Langue du jeu. Cela ne traduira pas en anglais par magie votre version "
-"espagnole du jeu."
-
-#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
-#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
-#: audio/null.cpp:40
-msgid "<default>"
-msgstr "<defaut>"
-
-#: gui/launcher.cpp:194
-msgid "Platform:"
-msgstr "Plateforme:"
-
-#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
-msgid "Platform the game was originally designed for"
-msgstr "Plateforme pour laquelle votre jeu a été conçu"
-
-#: gui/launcher.cpp:196
-msgctxt "lowres"
-msgid "Platform:"
-msgstr "Systčme:"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "Graphics"
-msgstr "Graphique"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "GFX"
-msgstr "GFX"
-
-#: gui/launcher.cpp:211
-msgid "Override global graphic settings"
-msgstr "Utiliser des réglages graphiques spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:213
-msgctxt "lowres"
-msgid "Override global graphic settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:220 gui/options.cpp:1041
-msgid "Audio"
-msgstr "Audio"
-
-#: gui/launcher.cpp:223
-msgid "Override global audio settings"
-msgstr "Utiliser des réglages audio spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:225
-msgctxt "lowres"
-msgid "Override global audio settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:234 gui/options.cpp:1046
-msgid "Volume"
-msgstr "Volume"
-
-#: gui/launcher.cpp:236 gui/options.cpp:1048
-msgctxt "lowres"
-msgid "Volume"
-msgstr "Volume"
-
-#: gui/launcher.cpp:239
-msgid "Override global volume settings"
-msgstr "Utiliser des réglages de volume sonore spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:241
-msgctxt "lowres"
-msgid "Override global volume settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:248 gui/options.cpp:1056
-msgid "MIDI"
-msgstr "MIDI"
-
-#: gui/launcher.cpp:251
-msgid "Override global MIDI settings"
-msgstr "Utiliser des réglages MIDI spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:253
-msgctxt "lowres"
-msgid "Override global MIDI settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:263 gui/options.cpp:1062
-msgid "MT-32"
-msgstr "MT-32"
-
-#: gui/launcher.cpp:266
-msgid "Override global MT-32 settings"
-msgstr "Utiliser des réglages MT-32 spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:268
-msgctxt "lowres"
-msgid "Override global MT-32 settings"
-msgstr "Réglages spécifiques ŕ ce jeux"
-
-#: gui/launcher.cpp:279 gui/options.cpp:1069
-msgid "Paths"
-msgstr "Chemins"
-
-#: gui/launcher.cpp:281 gui/options.cpp:1071
-msgctxt "lowres"
-msgid "Paths"
-msgstr "Chemins"
-
-#: gui/launcher.cpp:288
-msgid "Game Path:"
-msgstr "Chemin du Jeu:"
-
-#: gui/launcher.cpp:290
-msgctxt "lowres"
-msgid "Game Path:"
-msgstr "Chemin du Jeu:"
-
-#: gui/launcher.cpp:295 gui/options.cpp:1091
-msgid "Extra Path:"
-msgstr "Extra:"
-
-#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
-msgid "Specifies path to additional data used the game"
-msgstr "Définie un chemin vers des données suplémentaires utilisées par le jeu"
-
-#: gui/launcher.cpp:297 gui/options.cpp:1093
-msgctxt "lowres"
-msgid "Extra Path:"
-msgstr "Extra:"
-
-#: gui/launcher.cpp:302 gui/options.cpp:1079
-msgid "Save Path:"
-msgstr "Sauvegardes:"
-
-#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
-#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
-msgid "Specifies where your savegames are put"
-msgstr "Définie l'emplacement oů les fichiers de sauvegarde sont créés"
-
-#: gui/launcher.cpp:304 gui/options.cpp:1081
-msgctxt "lowres"
-msgid "Save Path:"
-msgstr "Sauvegardes:"
-
-#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
-#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
-#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
-#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
-#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
-msgctxt "path"
-msgid "None"
-msgstr "Aucun"
-
-#: gui/launcher.cpp:326 gui/launcher.cpp:408
-#: backends/platform/wii/options.cpp:56
-msgid "Default"
-msgstr "Défaut"
-
-#: gui/launcher.cpp:446 gui/options.cpp:1356
-msgid "Select SoundFont"
-msgstr "Choisir une banque de sons"
-
-#: gui/launcher.cpp:465 gui/launcher.cpp:612
-msgid "Select directory with game data"
-msgstr "Sélectionner le répertoire contenant les données du jeu"
-
-#: gui/launcher.cpp:483
-msgid "Select additional game directory"
-msgstr "Sélectionner un répertoire supplémentaire"
-
-#: gui/launcher.cpp:495
-msgid "Select directory for saved games"
-msgstr "Sélectionner le répertoire pour les sauvegardes"
-
-#: gui/launcher.cpp:514
-msgid "This game ID is already taken. Please choose another one."
-msgstr "Cet ID est déjŕ utilisé par un autre jeu. Choisissez en un autre svp."
-
-#: gui/launcher.cpp:555 engines/dialogs.cpp:110
-msgid "~Q~uit"
-msgstr "~Q~uitter"
-
-#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
-msgid "Quit ScummVM"
-msgstr "Quitter ScummVM"
-
-#: gui/launcher.cpp:556
-msgid "A~b~out..."
-msgstr "Ŕ ~P~ropos..."
-
-#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
-msgid "About ScummVM"
-msgstr "Ŕ propos de ScummVM"
-
-#: gui/launcher.cpp:557
-msgid "~O~ptions..."
-msgstr "~O~ptions..."
-
-#: gui/launcher.cpp:557
-msgid "Change global ScummVM options"
-msgstr "Change les options globales de ScummVM"
-
-#: gui/launcher.cpp:559
-msgid "~S~tart"
-msgstr "~D~émarrer"
-
-#: gui/launcher.cpp:559
-msgid "Start selected game"
-msgstr "Démarre le jeu sélectionné"
-
-#: gui/launcher.cpp:562
-msgid "~L~oad..."
-msgstr "~C~harger"
-
-#: gui/launcher.cpp:562
-msgid "Load savegame for selected game"
-msgstr "Charge une sauvegarde pour le jeu sélectionné"
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:1055
-msgid "~A~dd Game..."
-msgstr "~A~jouter..."
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:574
-msgid "Hold Shift for Mass Add"
-msgstr ""
-"Ajoute un jeu ŕ la Liste. Maintenez Shift enfoncée pour un Ajout Massif"
-
-#: gui/launcher.cpp:569
-msgid "~E~dit Game..."
-msgstr "~E~diter..."
-
-#: gui/launcher.cpp:569 gui/launcher.cpp:576
-msgid "Change game options"
-msgstr "Change les options du jeu"
-
-#: gui/launcher.cpp:571
-msgid "~R~emove Game"
-msgstr "~S~upprimer"
-
-#: gui/launcher.cpp:571 gui/launcher.cpp:578
-msgid "Remove game from the list. The game data files stay intact"
-msgstr "Supprime le jeu de la liste. Les fichiers sont conservés"
-
-#: gui/launcher.cpp:574 gui/launcher.cpp:1055
-msgctxt "lowres"
-msgid "~A~dd Game..."
-msgstr "~A~jouter..."
-
-#: gui/launcher.cpp:576
-msgctxt "lowres"
-msgid "~E~dit Game..."
-msgstr "~E~diter..."
-
-#: gui/launcher.cpp:578
-msgctxt "lowres"
-msgid "~R~emove Game"
-msgstr "~S~upprimer"
-
-#: gui/launcher.cpp:586
-msgid "Search in game list"
-msgstr "Recherche dans la liste de jeux"
-
-#: gui/launcher.cpp:590 gui/launcher.cpp:1102
-msgid "Search:"
-msgstr "Filtre:"
-
-#: gui/launcher.cpp:593 gui/options.cpp:826
-msgid "Clear value"
-msgstr "Effacer la valeur"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
-#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
-msgid "Load game:"
-msgstr "Charger le jeu:"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
-#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
-#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Load"
-msgstr "Charger"
-
-#: gui/launcher.cpp:723
-msgid ""
-"Do you really want to run the mass game detector? This could potentially add "
-"a huge number of games."
-msgstr ""
-"Voulez-vous vraiment lancer la détection automatique des jeux? Cela peut "
-"potentiellement ajouter un grand nombre de jeux."
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Yes"
-msgstr "Oui"
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "No"
-msgstr "Non"
-
-#: gui/launcher.cpp:772
-msgid "ScummVM couldn't open the specified directory!"
-msgstr "ScummVM n'a pas pu ouvrir le répertoire sélectionné."
-
-#: gui/launcher.cpp:784
-msgid "ScummVM could not find any game in the specified directory!"
-msgstr "ScummVM n'a pas trouvé de jeux dans le répertoire sélectionné."
-
-#: gui/launcher.cpp:798
-msgid "Pick the game:"
-msgstr "Choisissez le jeu:"
-
-#: gui/launcher.cpp:872
-msgid "Do you really want to remove this game configuration?"
-msgstr "Voulez-vous vraiment supprimer ce jeu?"
-
-#: gui/launcher.cpp:936
-msgid "This game does not support loading games from the launcher."
-msgstr ""
-"Le chargement de sauvegarde depuis le lanceur n'est pas supporté pour ce jeu."
-
-#: gui/launcher.cpp:940
-msgid "ScummVM could not find any engine capable of running the selected game!"
-msgstr "ScummVM n'a pas pu trouvé de moteur pour lancer le jeu sélectionné."
-
-#: gui/launcher.cpp:1054
-msgctxt "lowres"
-msgid "Mass Add..."
-msgstr "Ajout Massif..."
-
-#: gui/launcher.cpp:1054
-msgid "Mass Add..."
-msgstr "Ajout Massif..."
-
-#: gui/massadd.cpp:78 gui/massadd.cpp:81
-msgid "... progress ..."
-msgstr "... en cours ..."
-
-#: gui/massadd.cpp:258
-msgid "Scan complete!"
-msgstr "Examen terminé!"
-
-#: gui/massadd.cpp:261
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games."
-msgstr ""
-
-#: gui/massadd.cpp:265
-#, c-format
-msgid "Scanned %d directories ..."
-msgstr "%d répertoires examinés ..."
-
-#: gui/massadd.cpp:268
-#, fuzzy, c-format
-msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "%d nouveaux jeux trouvés ..."
-
-#: gui/options.cpp:72
-msgid "Never"
-msgstr "Jamais"
-
-#: gui/options.cpp:72
-msgid "every 5 mins"
-msgstr "Toutes les 5 mins"
-
-#: gui/options.cpp:72
-msgid "every 10 mins"
-msgstr "Toutes les 10 mins"
-
-#: gui/options.cpp:72
-msgid "every 15 mins"
-msgstr "Toutes les 15 mins"
-
-#: gui/options.cpp:72
-msgid "every 30 mins"
-msgstr "Toutes les 30 mins"
-
-#: gui/options.cpp:74
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: gui/options.cpp:74
-msgid "11kHz"
-msgstr "11 kHz"
-
-#: gui/options.cpp:74
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: gui/options.cpp:74
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: gui/options.cpp:74
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
-#: gui/options.cpp:625 gui/options.cpp:825
-msgctxt "soundfont"
-msgid "None"
-msgstr "Aucune"
-
-#: gui/options.cpp:372
-msgid "Failed to apply some of the graphic options changes:"
-msgstr ""
-
-#: gui/options.cpp:384
-msgid "the video mode could not be changed."
-msgstr ""
-
-#: gui/options.cpp:390
-msgid "the fullscreen setting could not be changed"
-msgstr ""
-
-#: gui/options.cpp:396
-msgid "the aspect ratio setting could not be changed"
-msgstr ""
-
-#: gui/options.cpp:705
-msgid "Graphics mode:"
-msgstr "Mode graphique:"
-
-#: gui/options.cpp:716
-msgid "Render mode:"
-msgstr "Mode de rendu:"
-
-#: gui/options.cpp:716 gui/options.cpp:717
-msgid "Special dithering modes supported by some games"
-msgstr "Mode spécial de tramage supporté par certains jeux"
-
-#: gui/options.cpp:726
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
-msgid "Fullscreen mode"
-msgstr "Plein écran"
-
-#: gui/options.cpp:729
-msgid "Aspect ratio correction"
-msgstr "Correction du rapport d'aspect"
-
-#: gui/options.cpp:729
-msgid "Correct aspect ratio for 320x200 games"
-msgstr "Corrige le rapport d'aspect pour les jeu 320x200"
-
-#: gui/options.cpp:730
-msgid "EGA undithering"
-msgstr "Détramage EGA"
-
-#: gui/options.cpp:730
-msgid "Enable undithering in EGA games that support it"
-msgstr "Active le détramage dans les jeux EGA qui le supporte"
-
-#: gui/options.cpp:738
-msgid "Preferred Device:"
-msgstr "Sortie Préféré:"
-
-#: gui/options.cpp:738
-msgid "Music Device:"
-msgstr "Sortie Audio:"
-
-#: gui/options.cpp:738 gui/options.cpp:740
-msgid "Specifies preferred sound device or sound card emulator"
-msgstr ""
-"Spécifie le périphérique de sortie audio ou l'émulateur de carte audio "
-"préféré"
-
-#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
-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:740
-msgctxt "lowres"
-msgid "Preferred Dev.:"
-msgstr "Sortie Préféré:"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Music Device:"
-msgstr "Sortie Audio:"
-
-#: gui/options.cpp:766
-msgid "AdLib emulator:"
-msgstr "Émulateur AdLib:"
-
-#: gui/options.cpp:766 gui/options.cpp:767
-msgid "AdLib is used for music in many games"
-msgstr "AdLib est utilisé pour la musique dans de nombreux jeux"
-
-#: gui/options.cpp:777
-msgid "Output rate:"
-msgstr "Fréquence:"
-
-#: gui/options.cpp:777 gui/options.cpp:778
-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:788
-msgid "GM Device:"
-msgstr "Sortie GM:"
-
-#: gui/options.cpp:788
-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:799
-msgid "Don't use General MIDI music"
-msgstr "Ne pas utiliser la musique General MIDI"
-
-#: gui/options.cpp:810 gui/options.cpp:871
-msgid "Use first available device"
-msgstr "Utiliser le premier périphérique disponible"
-
-#: gui/options.cpp:822
-msgid "SoundFont:"
-msgstr "Banque de sons:"
-
-#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
-msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
-msgstr ""
-"La banque de sons (SoundFont) est utilisée par certaines cartes audio, "
-"Fluidsynth et Timidity"
-
-#: gui/options.cpp:824
-msgctxt "lowres"
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:829
-msgid "Mixed AdLib/MIDI mode"
-msgstr "Mode mixe AdLib/MIDI"
-
-#: gui/options.cpp:829
-msgid "Use both MIDI and AdLib sound generation"
-msgstr "Utiliser ŕ la fois MIDI et AdLib"
-
-#: gui/options.cpp:832
-msgid "MIDI gain:"
-msgstr "Gain MIDI:"
-
-#: gui/options.cpp:842
-msgid "MT-32 Device:"
-msgstr "Sortie MT-32:"
-
-#: gui/options.cpp:842
-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:847
-msgid "True Roland MT-32 (disable GM emulation)"
-msgstr "Roland MT-32 exacte (désactive l'émulation GM)"
-
-#: gui/options.cpp:847 gui/options.cpp:849
-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:849
-msgctxt "lowres"
-msgid "True Roland MT-32 (no GM emulation)"
-msgstr "Roland MT-32 exacte (pas d'ému GM)"
-
-#: gui/options.cpp:852
-msgid "Enable Roland GS Mode"
-msgstr "Activer le mode Roland GS"
-
-#: gui/options.cpp:852
-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:861
-msgid "Don't use Roland MT-32 music"
-msgstr "Ne pas utiliser la musique Roland MT-32"
-
-#: gui/options.cpp:888
-msgid "Text and Speech:"
-msgstr "Dialogue:"
-
-#: gui/options.cpp:892 gui/options.cpp:902
-msgid "Speech"
-msgstr "Voix"
-
-#: gui/options.cpp:893 gui/options.cpp:903
-msgid "Subtitles"
-msgstr "Sous-titres"
-
-#: gui/options.cpp:894
-msgid "Both"
-msgstr "Les deux"
-
-#: gui/options.cpp:896
-msgid "Subtitle speed:"
-msgstr "Vitesse des ST:"
-
-#: gui/options.cpp:898
-msgctxt "lowres"
-msgid "Text and Speech:"
-msgstr "Dialogue:"
-
-#: gui/options.cpp:902
-msgid "Spch"
-msgstr "Voix"
-
-#: gui/options.cpp:903
-msgid "Subs"
-msgstr "Subs"
-
-#: gui/options.cpp:904
-msgctxt "lowres"
-msgid "Both"
-msgstr "V&S"
-
-#: gui/options.cpp:904
-msgid "Show subtitles and play speech"
-msgstr "Affiche les sous-titres et joue les dialogues audio"
-
-#: gui/options.cpp:906
-msgctxt "lowres"
-msgid "Subtitle speed:"
-msgstr "Vitesse des ST:"
-
-#: gui/options.cpp:922
-msgid "Music volume:"
-msgstr "Volume Musique:"
-
-#: gui/options.cpp:924
-msgctxt "lowres"
-msgid "Music volume:"
-msgstr "Musique:"
-
-#: gui/options.cpp:931
-msgid "Mute All"
-msgstr "Silence"
-
-#: gui/options.cpp:934
-msgid "SFX volume:"
-msgstr "Volume Bruitage:"
-
-#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
-msgid "Special sound effects volume"
-msgstr "Volume des effets spéciaux sonores"
-
-#: gui/options.cpp:936
-msgctxt "lowres"
-msgid "SFX volume:"
-msgstr "Bruitage:"
-
-#: gui/options.cpp:944
-msgid "Speech volume:"
-msgstr "Volume Dialogues:"
-
-#: gui/options.cpp:946
-msgctxt "lowres"
-msgid "Speech volume:"
-msgstr "Dialogues:"
-
-#: gui/options.cpp:1085
-msgid "Theme Path:"
-msgstr "Thčmes:"
-
-#: gui/options.cpp:1087
-msgctxt "lowres"
-msgid "Theme Path:"
-msgstr "Thčmes:"
-
-#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
-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:1098
-msgid "Plugins Path:"
-msgstr "Plugins:"
-
-#: gui/options.cpp:1100
-msgctxt "lowres"
-msgid "Plugins Path:"
-msgstr "Plugins:"
-
-#: gui/options.cpp:1109
-msgid "Misc"
-msgstr "Divers"
-
-#: gui/options.cpp:1111
-msgctxt "lowres"
-msgid "Misc"
-msgstr "Divers"
-
-#: gui/options.cpp:1113
-msgid "Theme:"
-msgstr "Thčme:"
-
-#: gui/options.cpp:1117
-msgid "GUI Renderer:"
-msgstr "Interface:"
-
-#: gui/options.cpp:1129
-msgid "Autosave:"
-msgstr "Sauvegarde auto:"
-
-#: gui/options.cpp:1131
-msgctxt "lowres"
-msgid "Autosave:"
-msgstr "Sauvegarde:"
-
-#: gui/options.cpp:1139
-msgid "Keys"
-msgstr "Touches"
-
-#: gui/options.cpp:1146
-msgid "GUI Language:"
-msgstr "Langue:"
-
-#: gui/options.cpp:1146
-msgid "Language of ScummVM GUI"
-msgstr "Langue de l'interface graphique de ScummVM"
-
-#: gui/options.cpp:1295
-#, fuzzy
-msgid "You have to restart ScummVM before your changes will take effect."
-msgstr ""
-"Vous devez relancer ScummVM pour que le changement soit pris en compte."
-
-#: gui/options.cpp:1308
-msgid "Select directory for savegames"
-msgstr "Sélectionner le répertoire pour les sauvegardes"
-
-#: gui/options.cpp:1315
-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:1324
-msgid "Select directory for GUI themes"
-msgstr "Sélectionner le répertoire des thčmes d'interface"
-
-#: gui/options.cpp:1334
-msgid "Select directory for extra files"
-msgstr "Sélectionner le répertoire pour les fichiers suplémentaires"
-
-#: gui/options.cpp:1345
-msgid "Select directory for plugins"
-msgstr "Sélectionner le répertoire des plugins"
-
-#: gui/options.cpp:1389
-msgid ""
-"The theme you selected does not support your current language. If you want "
-"to use this theme you need to switch to another language first."
-msgstr ""
-"Le thčme que vous avez sélectioné ne support pas la langue française. Si "
-"vous voulez l'utiliser vous devez d'abord changer de langue."
-
-#: gui/saveload.cpp:58 gui/saveload.cpp:239
-msgid "No date saved"
-msgstr "Date inconnue"
-
-#: gui/saveload.cpp:59 gui/saveload.cpp:240
-msgid "No time saved"
-msgstr "Heure inconnue"
-
-#: gui/saveload.cpp:60 gui/saveload.cpp:241
-msgid "No playtime saved"
-msgstr "Durée de jeu inconnue"
-
-#: gui/saveload.cpp:67 gui/saveload.cpp:155
-msgid "Delete"
-msgstr "Supprimer"
-
-#: gui/saveload.cpp:154
-msgid "Do you really want to delete this savegame?"
-msgstr "Voulez-vous vraiment supprimer cette sauvegarde?"
-
-#: gui/saveload.cpp:264
-msgid "Date: "
-msgstr "Date: "
-
-#: gui/saveload.cpp:268
-msgid "Time: "
-msgstr "Heure: "
-
-#: gui/saveload.cpp:274
-msgid "Playtime: "
-msgstr "Durée de jeu: "
-
-#: gui/saveload.cpp:287 gui/saveload.cpp:354
-msgid "Untitled savestate"
-msgstr "Sauvegarde sans nom"
-
-#: gui/themebrowser.cpp:44
-msgid "Select a Theme"
-msgstr "Sélectionnez un Thčme"
-
-#: gui/ThemeEngine.cpp:328
-msgid "Disabled GFX"
-msgstr "GFX désactivé"
-
-#: gui/ThemeEngine.cpp:328
-msgctxt "lowres"
-msgid "Disabled GFX"
-msgstr "GFX désactivé"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard Renderer (16bpp)"
-msgstr "Rendu Standard (16bpp)"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard (16bpp)"
-msgstr "Standard (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased Renderer (16bpp)"
-msgstr "Rendu Anti-crénelé (16 bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased (16bpp)"
-msgstr "Anti-crénelé (16 bpp)"
-
-#: base/main.cpp:206
-#, c-format
-msgid "Engine does not support debug level '%s'"
-msgstr "Le niveau de debug '%s' n'est pas supporté par ce moteur de jeu"
-
-#: base/main.cpp:274
-msgid "Menu"
-msgstr "Menu"
-
-#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
-#: backends/platform/wince/CEActionsPocket.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:46
-msgid "Skip"
-msgstr "Passer"
-
-#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
-#: backends/platform/wince/CEActionsPocket.cpp:42
-msgid "Pause"
-msgstr "Mettre en pause"
-
-#: base/main.cpp:283
-msgid "Skip line"
-msgstr "Passer la phrase"
-
-#: base/main.cpp:442
-msgid "Error running game:"
-msgstr "Erreur lors de l'éxécution du jeu:"
-
-#: base/main.cpp:466
-msgid "Could not find any engine capable of running the selected game"
-msgstr "Impossible de trouver un moteur pour exécuter le jeu sélectionné"
-
-#: common/error.cpp:38
-msgid "No error"
-msgstr "Pas d'erreur"
-
-#: common/error.cpp:40
-msgid "Game data not found"
-msgstr "Fichier de donées introuvable"
-
-#: common/error.cpp:42
-msgid "Game id not supported"
-msgstr "ID de jeu non supporté"
-
-#: common/error.cpp:44
-msgid "Unsupported color mode"
-msgstr "Mode de couleurs non supporté"
-
-#: common/error.cpp:47
-msgid "Read permission denied"
-msgstr "Véroullié en lecture"
-
-#: common/error.cpp:49
-msgid "Write permission denied"
-msgstr "Verrouillé en écriture"
-
-#: common/error.cpp:52
-msgid "Path does not exist"
-msgstr "Chemin inexistant"
-
-#: common/error.cpp:54
-msgid "Path not a directory"
-msgstr "Chemin n'est pas un répertoire"
-
-#: common/error.cpp:56
-msgid "Path not a file"
-msgstr "Chemin n'est pas un fichier"
-
-#: common/error.cpp:59
-msgid "Cannot create file"
-msgstr "Impossible de créer le fichier"
-
-#: common/error.cpp:61
-msgid "Reading data failed"
-msgstr "Echec de la lecture"
-
-#: common/error.cpp:63
-msgid "Writing data failed"
-msgstr "Echec de l'écriture des données"
-
-#: common/error.cpp:66
-msgid "Could not find suitable engine plugin"
-msgstr "Aucun plugin n'a pu ętre trouvé pour ce jeu"
-
-#: common/error.cpp:68
-msgid "Engine plugin does not support save states"
-msgstr "Ce moteur de jeu ne supporte pas les sauvegardes"
-
-#: common/error.cpp:71
-msgid "User canceled"
-msgstr ""
-
-#: common/error.cpp:75
-msgid "Unknown error"
-msgstr "Erreur inconnue"
-
-#. I18N: Hercules is graphics card name
-#: common/util.cpp:275
-msgid "Hercules Green"
-msgstr "Hercules Vert"
-
-#: common/util.cpp:276
-msgid "Hercules Amber"
-msgstr "Hercules Ambre"
-
-#: common/util.cpp:283
-msgctxt "lowres"
-msgid "Hercules Green"
-msgstr "Hercules Vert"
-
-#: common/util.cpp:284
-msgctxt "lowres"
-msgid "Hercules Amber"
-msgstr "Hercules Ambre"
-
-#: engines/advancedDetector.cpp:296
-#, c-format
-msgid "The game in '%s' seems to be unknown."
-msgstr ""
-
-#: engines/advancedDetector.cpp:297
-msgid "Please, report the following data to the ScummVM team along with name"
-msgstr ""
-
-#: engines/advancedDetector.cpp:299
-msgid "of the game you tried to add and its version/language/etc.:"
-msgstr ""
-
-#: engines/dialogs.cpp:84
-msgid "~R~esume"
-msgstr "~R~eprendre"
-
-#: engines/dialogs.cpp:86
-msgid "~L~oad"
-msgstr "~C~harger"
-
-#: engines/dialogs.cpp:90
-msgid "~S~ave"
-msgstr "~S~auver"
-
-#: engines/dialogs.cpp:94
-msgid "~O~ptions"
-msgstr "~O~ptions"
-
-#: engines/dialogs.cpp:99
-msgid "~H~elp"
-msgstr "~A~ide"
-
-#: engines/dialogs.cpp:101
-msgid "~A~bout"
-msgstr "Ŕ ~P~ropos"
-
-#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
-msgid "~R~eturn to Launcher"
-msgstr "Retour au ~L~anceur"
-
-#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
-msgctxt "lowres"
-msgid "~R~eturn to Launcher"
-msgstr "Retour au ~L~anceur"
-
-#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
-#: engines/sci/engine/kfile.cpp:575
-msgid "Save game:"
-msgstr "Sauvegarde:"
-
-#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
-#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
-#: backends/platform/symbian/src/SymbianActions.cpp:44
-#: backends/platform/wince/CEActionsPocket.cpp:43
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Save"
-msgstr "Sauver"
-
-#: engines/dialogs.cpp:146
-msgid ""
-"Sorry, this engine does not currently provide in-game help. Please consult "
-"the README for basic information, and for instructions on how to obtain "
-"further assistance."
-msgstr ""
-
-#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
-#: engines/mohawk/dialogs.cpp:174
-msgid "~O~K"
-msgstr "~O~K"
-
-#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
-#: engines/mohawk/dialogs.cpp:175
-msgid "~C~ancel"
-msgstr "~A~nnuler"
-
-#: engines/dialogs.cpp:312
-msgid "~K~eys"
-msgstr "~T~ouches"
-
-#: engines/engine.cpp:233
-msgid "Could not initialize color format."
-msgstr ""
-
-#: engines/engine.cpp:241
-#, fuzzy
-msgid "Could not switch to video mode: '"
-msgstr "Mode vidéo actuel"
-
-#: engines/engine.cpp:250
-#, fuzzy
-msgid "Could not apply aspect ratio setting."
-msgstr "Changer correction du rapport d'aspect"
-
-#: engines/engine.cpp:255
-msgid "Could not apply fullscreen setting."
-msgstr ""
-
-#: engines/engine.cpp:355
-msgid ""
-"You appear to be playing this game directly\n"
-"from the CD. This is known to cause problems,\n"
-"and it is therefore recommended that you copy\n"
-"the data files to your hard disk instead.\n"
-"See the README file for details."
-msgstr ""
-
-#: engines/engine.cpp:366
-msgid ""
-"This game has audio tracks in its disk. These\n"
-"tracks need to be ripped from the disk using\n"
-"an appropriate CD audio extracting tool in\n"
-"order to listen to the game's music.\n"
-"See the README file for details."
-msgstr ""
-
-#: engines/engine.cpp:433
-msgid ""
-"WARNING: The game you are about to start is not yet fully supported by "
-"ScummVM. As such, it is likely to be unstable, and any saves you make might "
-"not work in future versions of ScummVM."
-msgstr ""
-
-#: engines/engine.cpp:436
-msgid "Start anyway"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:175
-#, c-format
-msgid "Insert Disk %c and Press Button to Continue."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:176
-#, c-format
-msgid "Unable to Find %s, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:177
-#, c-format
-msgid "Error reading disk %c, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:178
-msgid "Game Paused. Press SPACE to Continue."
-msgstr ""
-
-#. I18N: You may specify 'Yes' symbol at the end of the line, like this:
-#. "Moechten Sie wirklich neu starten? (J/N)J"
-#. Will react to J as 'Yes'
-#: engines/scumm/dialogs.cpp:182
-#, fuzzy
-msgid "Are you sure you want to restart? (Y/N)"
-msgstr "Voulez-vous vraiment quitter?"
-
-#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
-#: engines/scumm/dialogs.cpp:184
-#, fuzzy
-msgid "Are you sure you want to quit? (Y/N)"
-msgstr "Voulez-vous vraiment quitter?"
-
-#: engines/scumm/dialogs.cpp:189
-msgid "Play"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82
-#: engines/scumm/help.cpp:84
-#: backends/platform/symbian/src/SymbianActions.cpp:52
-#: backends/platform/wince/CEActionsPocket.cpp:44
-#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:244
-msgid "Quit"
-msgstr "Quitter"
-
-#: engines/scumm/dialogs.cpp:193
-msgid "Insert save/load game disk"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:194
-msgid "You must enter a name"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:195
-msgid "The game was NOT saved (disk full?)"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:196
-msgid "The game was NOT loaded"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:197
-#, c-format
-msgid "Saving '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:198
-#, c-format
-msgid "Loading '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:199
-msgid "Name your SAVE game"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:200
-#, fuzzy
-msgid "Select a game to LOAD"
-msgstr "Sélectionnez un Thčme"
-
-#: engines/scumm/dialogs.cpp:201
-msgid "Game title)"
-msgstr ""
-
-#. I18N: Previous page button
-#: engines/scumm/dialogs.cpp:287
-msgid "~P~revious"
-msgstr "~P~récédent"
-
-#. I18N: Next page button
-#: engines/scumm/dialogs.cpp:289
-msgid "~N~ext"
-msgstr "~S~uivant"
-
-#: engines/scumm/dialogs.cpp:290
-#: backends/platform/ds/arm9/source/dsoptions.cpp:56
-msgid "~C~lose"
-msgstr "~F~ermer"
-
-#: engines/scumm/dialogs.cpp:597
-#, fuzzy
-msgid "Speech Only"
-msgstr "Voix"
-
-#: engines/scumm/dialogs.cpp:598
-#, fuzzy
-msgid "Speech and Subtitles"
-msgstr "Sous-titres"
-
-#: engines/scumm/dialogs.cpp:599
-#, fuzzy
-msgid "Subtitles Only"
-msgstr "Sous-titres"
-
-#: engines/scumm/dialogs.cpp:607
-#, fuzzy
-msgctxt "lowres"
-msgid "Speech & Subs"
-msgstr "Voix"
-
-#: engines/scumm/help.cpp:73
-msgid "Common keyboard commands:"
-msgstr "Commandes clavier communes:"
-
-#: engines/scumm/help.cpp:74
-msgid "Save / Load dialog"
-msgstr "Dialogue de Sauvegarde/Chargement"
-
-#: engines/scumm/help.cpp:76
-msgid "Skip line of text"
-msgstr "Passer la phrase"
-
-#: engines/scumm/help.cpp:77
-msgid "Esc"
-msgstr "Esc"
-
-#: engines/scumm/help.cpp:77
-msgid "Skip cutscene"
-msgstr "Passer la séquence"
-
-#: engines/scumm/help.cpp:78
-msgid "Space"
-msgstr "Espace"
-
-#: engines/scumm/help.cpp:78
-msgid "Pause game"
-msgstr "Mettre en pause:"
-
-#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84
-#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96
-#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98
-#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100
-#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: engines/scumm/help.cpp:79
-msgid "Load game state 1-10"
-msgstr "Charger sauvegarde 1-10:"
-
-#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100
-#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102
-msgid "Alt"
-msgstr "Alt"
-
-#: engines/scumm/help.cpp:80
-msgid "Save game state 1-10"
-msgstr "Écrire sauvegarde 1-10:"
-
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
-msgid "Enter"
-msgstr "Entrer"
-
-#: engines/scumm/help.cpp:86
-msgid "Toggle fullscreen"
-msgstr "Basculer en plein écran"
-
-#: engines/scumm/help.cpp:87
-msgid "Music volume up / down"
-msgstr "Augmenter / Diminuer volume musique"
-
-#: engines/scumm/help.cpp:88
-msgid "Text speed slower / faster"
-msgstr "Diminuer/Augmenter vitesse du texte"
-
-#: engines/scumm/help.cpp:89
-msgid "Simulate left mouse button"
-msgstr "Simuler bouton gauche de la souris"
-
-#: engines/scumm/help.cpp:90
-msgid "Tab"
-msgstr "Tab"
-
-#: engines/scumm/help.cpp:90
-msgid "Simulate right mouse button"
-msgstr "Simuler bouton droit de la souris"
-
-#: engines/scumm/help.cpp:93
-msgid "Special keyboard commands:"
-msgstr "Commandes clavier spéciales:"
-
-#: engines/scumm/help.cpp:94
-msgid "Show / Hide console"
-msgstr "Afficher/Cacher la console"
-
-#: engines/scumm/help.cpp:95
-msgid "Start the debugger"
-msgstr "Ouvrir le débugger"
-
-#: engines/scumm/help.cpp:96
-msgid "Show memory consumption"
-msgstr "Afficher la consomation de mémoire"
-
-#: engines/scumm/help.cpp:97
-msgid "Run in fast mode (*)"
-msgstr "Jouer en mode rapide (*)"
-
-#: engines/scumm/help.cpp:98
-msgid "Run in really fast mode (*)"
-msgstr "Jouer en mode trčs rapide (*)"
-
-#: engines/scumm/help.cpp:99
-msgid "Toggle mouse capture"
-msgstr "Capturer/Libérer la souris"
-
-#: engines/scumm/help.cpp:100
-msgid "Switch between graphics filters"
-msgstr "Changer de filtre graphique"
-
-#: engines/scumm/help.cpp:101
-msgid "Increase / Decrease scale factor"
-msgstr "Augmenter/Diminuer le facteur d'échelle"
-
-#: engines/scumm/help.cpp:102
-msgid "Toggle aspect-ratio correction"
-msgstr "Changer correction du rapport d'aspect"
-
-#: engines/scumm/help.cpp:107
-msgid "* Note that using ctrl-f and"
-msgstr "* Note que l'utilisation de crtl-f et"
-
-#: engines/scumm/help.cpp:108
-msgid " ctrl-g are not recommended"
-msgstr " crtl-g n'est pas recommandé car"
-
-#: engines/scumm/help.cpp:109
-msgid " since they may cause crashes"
-msgstr " elle peut causer des plantages ou"
-
-#: engines/scumm/help.cpp:110
-#, fuzzy
-msgid " or incorrect game behavior."
-msgstr " un comportement incorrect du jeu"
-
-#: engines/scumm/help.cpp:114
-msgid "Spinning drafts on the keyboard:"
-msgstr "Filage au clavier:"
-
-#: engines/scumm/help.cpp:116
-msgid "Main game controls:"
-msgstr "Controles principaux du jeu:"
-
-#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
-#: engines/scumm/help.cpp:161
-msgid "Push"
-msgstr "Pousser"
-
-#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
-#: engines/scumm/help.cpp:162
-msgid "Pull"
-msgstr "Tirer"
-
-#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138
-#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:197
-#: engines/scumm/help.cpp:207
-msgid "Give"
-msgstr "Donner"
-
-#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139
-#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:190
-#: engines/scumm/help.cpp:208
-msgid "Open"
-msgstr "Ouvrir"
-
-#: engines/scumm/help.cpp:126
-msgid "Go to"
-msgstr "Aller"
-
-#: engines/scumm/help.cpp:127
-msgid "Get"
-msgstr "Prendre"
-
-#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152
-#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:198
-#: engines/scumm/help.cpp:213 engines/scumm/help.cpp:224
-#: engines/scumm/help.cpp:250
-msgid "Use"
-msgstr "Utiliser"
-
-#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
-msgid "Read"
-msgstr "Lire"
-
-#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
-msgid "New kid"
-msgstr "Changer"
-
-#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
-#: engines/scumm/help.cpp:171
-msgid "Turn on"
-msgstr "Allumer"
-
-#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
-#: engines/scumm/help.cpp:172
-msgid "Turn off"
-msgstr "Éteindre"
-
-#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
-#: engines/scumm/help.cpp:194
-msgid "Walk to"
-msgstr "Aller"
-
-#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168
-#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:210
-#: engines/scumm/help.cpp:227
-msgid "Pick up"
-msgstr "Prendre"
-
-#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
-msgid "What is"
-msgstr "Qu'est-ce"
-
-#: engines/scumm/help.cpp:146
-msgid "Unlock"
-msgstr "Déverrouiller"
-
-#: engines/scumm/help.cpp:149
-msgid "Put on"
-msgstr "Mettre"
-
-#: engines/scumm/help.cpp:150
-msgid "Take off"
-msgstr "Enlever"
-
-#: engines/scumm/help.cpp:156
-msgid "Fix"
-msgstr "Réparer"
-
-#: engines/scumm/help.cpp:158
-msgid "Switch"
-msgstr "Commuter"
-
-#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
-msgid "Look"
-msgstr "Regarder"
-
-#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
-msgid "Talk"
-msgstr "Parler"
-
-#: engines/scumm/help.cpp:174
-msgid "Travel"
-msgstr "Voyager"
-
-#: engines/scumm/help.cpp:175
-msgid "To Henry / To Indy"
-msgstr "Henry / Indy"
-
-#. I18N: These are different musical notes
-#: engines/scumm/help.cpp:179
-msgid "play C minor on distaff"
-msgstr "jouer Do mineur sur la quenouille"
-
-#: engines/scumm/help.cpp:180
-msgid "play D on distaff"
-msgstr "jouer Ré sur la quenouille"
-
-#: engines/scumm/help.cpp:181
-msgid "play E on distaff"
-msgstr "jouer Mi sur la quenouille"
-
-#: engines/scumm/help.cpp:182
-msgid "play F on distaff"
-msgstr "jouer Fa sur la quenouille"
-
-#: engines/scumm/help.cpp:183
-msgid "play G on distaff"
-msgstr "jouer Sol sur la quenouille"
-
-#: engines/scumm/help.cpp:184
-msgid "play A on distaff"
-msgstr "jouer La sur la quenouille"
-
-#: engines/scumm/help.cpp:185
-msgid "play B on distaff"
-msgstr "jouer Si sur la quenouille"
-
-#: engines/scumm/help.cpp:186
-msgid "play C major on distaff"
-msgstr "jouer Do Majeur sur la quenouille"
-
-#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
-msgid "puSh"
-msgstr "Pousser"
-
-#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
-msgid "pull (Yank)"
-msgstr "Tirer"
-
-#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
-#: engines/scumm/help.cpp:248
-msgid "Talk to"
-msgstr "Parler ŕ"
-
-#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
-msgid "Look at"
-msgstr "Regarder"
-
-#: engines/scumm/help.cpp:200
-msgid "turn oN"
-msgstr "Allumer"
-
-#: engines/scumm/help.cpp:201
-msgid "turn oFf"
-msgstr "Éteindre"
-
-#: engines/scumm/help.cpp:217
-msgid "KeyUp"
-msgstr "Touche Haut"
-
-#: engines/scumm/help.cpp:217
-msgid "Highlight prev dialogue"
-msgstr "Sélectionner le dialogue précédent"
-
-#: engines/scumm/help.cpp:218
-msgid "KeyDown"
-msgstr "Touche Bas"
-
-#: engines/scumm/help.cpp:218
-msgid "Highlight next dialogue"
-msgstr "Sélectionner le dialogue suivant"
-
-#: engines/scumm/help.cpp:222
-msgid "Walk"
-msgstr "Marcher"
-
-#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
-#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
-msgid "Inventory"
-msgstr "Inventaire"
-
-#: engines/scumm/help.cpp:226
-msgid "Object"
-msgstr "Objet"
-
-#: engines/scumm/help.cpp:229
-msgid "Black and White / Color"
-msgstr "Noir et Blanc / Couleur"
-
-#: engines/scumm/help.cpp:232
-msgid "Eyes"
-msgstr "Yeux"
-
-#: engines/scumm/help.cpp:233
-msgid "Tongue"
-msgstr "Langue"
-
-#: engines/scumm/help.cpp:235
-msgid "Punch"
-msgstr "Frapper"
-
-#: engines/scumm/help.cpp:236
-msgid "Kick"
-msgstr "Coup de pied"
-
-#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
-msgid "Examine"
-msgstr "Examiner"
-
-#: engines/scumm/help.cpp:240
-msgid "Regular cursor"
-msgstr "Curseur normal"
-
-#. I18N: Comm is a communication device
-#: engines/scumm/help.cpp:243
-msgid "Comm"
-msgstr "Comm"
-
-#: engines/scumm/help.cpp:246
-msgid "Save / Load / Options"
-msgstr "Sauvegarder / Charger / Options"
-
-#: engines/scumm/help.cpp:255
-msgid "Other game controls:"
-msgstr "Autres controles du jeu:"
-
-#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
-msgid "Inventory:"
-msgstr "Inventaires:"
-
-#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
-msgid "Scroll list up"
-msgstr "Faire défiler vers le haut"
-
-#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
-msgid "Scroll list down"
-msgstr "Faire défiler vers le bas"
-
-#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
-msgid "Upper left item"
-msgstr "Élément en haut ŕ gauche"
-
-#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
-msgid "Lower left item"
-msgstr "Élément en bas ŕ gauche"
-
-#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
-msgid "Upper right item"
-msgstr "Élément en haut ŕ droite"
-
-#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
-msgid "Lower right item"
-msgstr "Élément en bas ŕ droite"
-
-#: engines/scumm/help.cpp:269
-msgid "Middle left item"
-msgstr "Élément au milieu ŕ gauche"
-
-#: engines/scumm/help.cpp:272
-msgid "Middle right item"
-msgstr "Élément au milieu ŕ droite"
-
-#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
-msgid "Switching characters:"
-msgstr "Changer de personnage"
-
-#: engines/scumm/help.cpp:281
-msgid "Second kid"
-msgstr "Second enfant"
-
-#: engines/scumm/help.cpp:282
-msgid "Third kid"
-msgstr "Troisičme enfant"
-
-#: engines/scumm/help.cpp:294
-msgid "Fighting controls (numpad):"
-msgstr "Controles de combat (pavet numérique):"
-
-#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
-#: engines/scumm/help.cpp:297
-msgid "Step back"
-msgstr "Pas en arričre"
-
-#: engines/scumm/help.cpp:298
-msgid "Block high"
-msgstr "Bloquer haut"
-
-#: engines/scumm/help.cpp:299
-msgid "Block middle"
-msgstr "Bloquer milieu"
-
-#: engines/scumm/help.cpp:300
-msgid "Block low"
-msgstr "Bloquer bas"
-
-#: engines/scumm/help.cpp:301
-msgid "Punch high"
-msgstr "Fraper haut"
-
-#: engines/scumm/help.cpp:302
-msgid "Punch middle"
-msgstr "Frapper milieu"
-
-#: engines/scumm/help.cpp:303
-msgid "Punch low"
-msgstr "Frapper bas"
-
-#: engines/scumm/help.cpp:306
-msgid "These are for Indy on left."
-msgstr "Correct quand Indy est ŕ gauche."
-
-#: engines/scumm/help.cpp:307
-msgid "When Indy is on the right,"
-msgstr "Quand Indy est ŕ droite, 7, 4 et 1"
-
-#: engines/scumm/help.cpp:308
-msgid "7, 4, and 1 are switched with"
-msgstr "sont interverties avec 9, 6 et 3"
-
-#: engines/scumm/help.cpp:309
-msgid "9, 6, and 3, respectively."
-msgstr "respectivement."
-
-#: engines/scumm/help.cpp:316
-msgid "Biplane controls (numpad):"
-msgstr "Controles du biplane (paver numérique):"
-
-#: engines/scumm/help.cpp:317
-msgid "Fly to upper left"
-msgstr "Voler vers le haut ŕ gauche"
-
-#: engines/scumm/help.cpp:318
-msgid "Fly to left"
-msgstr "Voler vers la gauche"
-
-#: engines/scumm/help.cpp:319
-msgid "Fly to lower left"
-msgstr "Voler vers le bas ŕ gauche"
-
-#: engines/scumm/help.cpp:320
-msgid "Fly upwards"
-msgstr "Voler vers le haut"
-
-#: engines/scumm/help.cpp:321
-msgid "Fly straight"
-msgstr "Voler tout droit"
-
-#: engines/scumm/help.cpp:322
-msgid "Fly down"
-msgstr "Voler vers le bas"
-
-#: engines/scumm/help.cpp:323
-msgid "Fly to upper right"
-msgstr "Voler vers le haut ŕ droite"
-
-#: engines/scumm/help.cpp:324
-msgid "Fly to right"
-msgstr "Voler vers la droite"
-
-#: engines/scumm/help.cpp:325
-msgid "Fly to lower right"
-msgstr "Voler vers la bas ŕ droite"
-
-#: engines/scumm/scumm.cpp:1768
-#, c-format
-msgid ""
-"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
-"but %s is missing. Using AdLib instead."
-msgstr ""
-
-#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
-#, c-format
-msgid ""
-"Failed to save game state to file:\n"
-"\n"
-"%s"
-msgstr ""
-"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
-#, c-format
-msgid ""
-"Failed to load game state from file:\n"
-"\n"
-"%s"
-msgstr ""
-"Échec du chargement de l'état du jeu depuis le fichier:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
-#, c-format
-msgid ""
-"Successfully saved game state in file:\n"
-"\n"
-"%s"
-msgstr ""
-"État du jeu enregistré avec succčs dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/scumm/scumm.cpp:2492
-msgid ""
-"Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To "
-"play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' "
-"directory inside the Tentacle game directory."
-msgstr ""
-"Normalement, Maniac Mansion devrait démarrer maintenant. Cependant ScummVM "
-"ne supporte pas encore cette fonctionalité. Pour jouer ŕ Maniac Mansion, "
-"choisissez 'Ajouter...' dans le Lanceur de ScummVM et sélectionnez le "
-"répertoire 'Maniac Mansion' dans le répertoire du jeu Day Of The Tentacle."
-
-#. I18N: Option for fast scene switching
-#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
-msgid "~Z~ip Mode Activated"
-msgstr "Mode ~Z~ip Activé"
-
-#: engines/mohawk/dialogs.cpp:93
-msgid "~T~ransitions Enabled"
-msgstr "T~r~ansitions activées"
-
-#. I18N: Drop book page
-#: engines/mohawk/dialogs.cpp:95
-msgid "~D~rop Page"
-msgstr ""
-
-#: engines/mohawk/dialogs.cpp:99
-msgid "~S~how Map"
-msgstr ""
-
-#: engines/mohawk/dialogs.cpp:105
-#, fuzzy
-msgid "~M~ain Menu"
-msgstr "Menu Principal ScummVM"
-
-#: engines/mohawk/dialogs.cpp:172
-msgid "~W~ater Effect Enabled"
-msgstr "~E~ffets de l'Eau Activés"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore game:"
-msgstr "Charger le jeu:"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore"
-msgstr "Charger"
-
-#: engines/agos/animation.cpp:544
-#, c-format
-msgid "Cutscene file '%s' not found!"
-msgstr ""
-
-#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
-#: engines/tinsel/saveload.cpp:475
-#, fuzzy
-msgid "Failed to load game state from file."
-msgstr ""
-"Échec du chargement de l'état du jeu depuis le fichier:\n"
-"\n"
-"%s"
-
-#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
-#, fuzzy
-msgid "Failed to save game state to file."
-msgstr ""
-"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/gob/inter_v5.cpp:107
-#, fuzzy
-msgid "Failed to delete file."
-msgstr ""
-"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/groovie/script.cpp:420
-#, fuzzy
-msgid "Failed to save game"
-msgstr ""
-"Échec de l'enregistrement de l'état du jeu dans le fichier:\n"
-"\n"
-"%s"
-
-#: engines/kyra/sound_midi.cpp:475
-msgid ""
-"You appear to be using a General MIDI device,\n"
-"but your game only supports Roland MT32 MIDI.\n"
-"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
-msgstr ""
-
-#: engines/m4/m4_menus.cpp:138
-#, fuzzy
-msgid "Save game failed!"
-msgstr "Sauvegarde:"
-
-#: engines/sky/compact.cpp:130
-msgid ""
-"Unable to find \"sky.cpt\" file!\n"
-"Please download it from www.scummvm.org"
-msgstr ""
-
-#: engines/sky/compact.cpp:141
-msgid ""
-"The \"sky.cpt\" file has an incorrect size.\n"
-"Please (re)download it from www.scummvm.org"
-msgstr ""
-
-#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
-msgid "DXA cutscenes found but ScummVM has been built without zlib support"
-msgstr ""
-
-#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
-msgid "MPEG2 cutscenes are no longer supported"
-msgstr ""
-
-#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
-#, c-format
-msgid "Cutscene '%s' not found"
-msgstr ""
-
-#: engines/sword1/control.cpp:863
-msgid ""
-"ScummVM found that you have old savefiles for Broken Sword 1 that should be "
-"converted.\n"
-"The old save game format is no longer supported, so you will not be able to "
-"load your games if you don't convert them.\n"
-"\n"
-"Press OK to convert them now, otherwise you will be asked again the next "
-"time you start the game.\n"
-msgstr ""
-
-#: engines/sword1/control.cpp:1232
-#, c-format
-msgid ""
-"Target new save game already exists!\n"
-"Would you like to keep the old save game (%s) or the new one (%s)?\n"
-msgstr ""
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the old one"
-msgstr ""
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the new one"
-msgstr ""
-
-#: engines/sword1/logic.cpp:1633
-msgid "This is the end of the Broken Sword 1 Demo"
-msgstr ""
-
-#: engines/parallaction/saveload.cpp:133
-#, c-format
-msgid ""
-"Can't save game in slot %i\n"
-"\n"
-msgstr ""
-
-#: engines/parallaction/saveload.cpp:211
-#, fuzzy
-msgid "Loading game..."
-msgstr "Charger le jeu:"
-
-#: engines/parallaction/saveload.cpp:226
-#, fuzzy
-msgid "Saving game..."
-msgstr "Sauvegarde:"
-
-#: engines/parallaction/saveload.cpp:279
-msgid ""
-"ScummVM found that you have old savefiles for Nippon Safes that should be "
-"renamed.\n"
-"The old names are no longer supported, so you will not be able to load your "
-"games if you don't convert them.\n"
-"\n"
-"Press OK to convert them now, otherwise you will be asked next time.\n"
-msgstr ""
-
-#: engines/parallaction/saveload.cpp:326
-msgid "ScummVM successfully converted all your savefiles."
-msgstr ""
-
-#: engines/parallaction/saveload.cpp:328
-msgid ""
-"ScummVM printed some warnings in your console window and can't guarantee all "
-"your files have been converted.\n"
-"\n"
-"Please report to the team."
-msgstr ""
-
-#: audio/fmopl.cpp:49
-msgid "MAME OPL emulator"
-msgstr "Émulateur MAME OPL"
-
-#: audio/fmopl.cpp:51
-msgid "DOSBox OPL emulator"
-msgstr "Émulateur DOSBox OPL"
-
-#: audio/mididrv.cpp:205
-#, c-format
-msgid ""
-"The selected audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-
-#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
-#: audio/mididrv.cpp:268
-msgid "Attempting to fall back to the next available device..."
-msgstr ""
-
-#: audio/mididrv.cpp:217
-#, c-format
-msgid ""
-"The selected audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-
-#: audio/mididrv.cpp:253
-#, c-format
-msgid ""
-"The preferred audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-
-#: audio/mididrv.cpp:268
-#, c-format
-msgid ""
-"The preferred audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-
-#: audio/null.h:43
-msgid "No music"
-msgstr "Pas de musique"
-
-#: audio/mods/paula.cpp:189
-msgid "Amiga Audio Emulator"
-msgstr "Émulateur Amiga Audio"
-
-#: audio/softsynth/adlib.cpp:1594
-msgid "AdLib Emulator"
-msgstr "Émulateur AdLib"
-
-#: audio/softsynth/appleiigs.cpp:33
-msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
-msgstr "Émulateur Apple II GS (PAS IMPLÉMENTÉ)"
-
-#: audio/softsynth/sid.cpp:1430
-msgid "C64 Audio Emulator"
-msgstr "Émulateur C64 Audio"
-
-#: audio/softsynth/mt32.cpp:329
-#, fuzzy
-msgid "Initializing MT-32 Emulator"
-msgstr "Initialisation de l'Émulateur MT-32"
-
-#: audio/softsynth/mt32.cpp:543
-msgid "MT-32 Emulator"
-msgstr "Émulateur MT-32"
-
-#: audio/softsynth/pcspk.cpp:139
-msgid "PC Speaker Emulator"
-msgstr "Émulateur Haut Parleur PC"
-
-#: audio/softsynth/pcspk.cpp:158
-msgid "IBM PCjr Emulator"
-msgstr "Émulateur IBM PCjr"
-
-#: backends/keymapper/remap-dialog.cpp:47
-msgid "Keymap:"
-msgstr "Affectation des touches:"
-
-#: backends/keymapper/remap-dialog.cpp:64
-msgid " (Active)"
-msgstr "(Actif)"
-
-#: backends/keymapper/remap-dialog.cpp:98
-msgid " (Global)"
-msgstr "(Global)"
-
-#: backends/keymapper/remap-dialog.cpp:108
-msgid " (Game)"
-msgstr "(Jeu)"
-
-#: backends/midi/windows.cpp:164
-msgid "Windows MIDI"
-msgstr "MIDI Windows"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:57
-msgid "ScummVM Main Menu"
-msgstr "Menu Principal ScummVM"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:63
-msgid "~L~eft handed mode"
-msgstr "Mode ~G~aucher"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:64
-msgid "~I~ndy fight controls"
-msgstr "Contrôle des combats d'~I~ndy"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:65
-msgid "Show mouse cursor"
-msgstr "Afficher le curseur de la souris"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:66
-msgid "Snap to edges"
-msgstr "Aligner sur les bords"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:68
-msgid "Touch X Offset"
-msgstr "Décalage X du toucher"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:75
-msgid "Touch Y Offset"
-msgstr "Décallage Y du toucher"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:87
-msgid "Use laptop trackpad-style cursor control"
-msgstr "Activer le contrôle du curseur de type trackpad"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:88
-msgid "Tap for left click, double tap right click"
-msgstr "Toucher pour un clic gauche, toucher deux fois pour un clic droit"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:90
-msgid "Sensitivity"
-msgstr "Sensibilité"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:99
-msgid "Initial top screen scale:"
-msgstr "Échelle initiale de l'écran du haut"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:105
-msgid "Main screen scaling:"
-msgstr "Échelle de l'écran principal"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:107
-msgid "Hardware scale (fast, but low quality)"
-msgstr "Mise ŕ l'echelle matérielle (rapide mais qualité faible)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:108
-msgid "Software scale (good quality, but slower)"
-msgstr "Mise ŕ l'échelle logicielle (bonne qualité mais plus lent)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:109
-msgid "Unscaled (you must scroll left and right)"
-msgstr "Sans changement d'échelle (vous devez faire défiler l'écran)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:111
-msgid "Brightness:"
-msgstr "Luminosité:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:121
-msgid "High quality audio (slower) (reboot)"
-msgstr "Audio haute qualité (plus lent) (redémarrer)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:122
-msgid "Disable power off"
-msgstr "Désactivé l'extinction"
-
-#: backends/platform/iphone/osys_events.cpp:338
-#, fuzzy
-msgid "Mouse-click-and-drag mode enabled."
-msgstr "Mode touchpad activé"
-
-#: backends/platform/iphone/osys_events.cpp:340
-#, fuzzy
-msgid "Mouse-click-and-drag mode disabled."
-msgstr "Mode touchpad désactivé"
-
-#: backends/platform/iphone/osys_events.cpp:351
-msgid "Touchpad mode enabled."
-msgstr "Mode touchpad activé"
-
-#: backends/platform/iphone/osys_events.cpp:353
-msgid "Touchpad mode disabled."
-msgstr "Mode touchpad désactivé"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:67
-#, fuzzy
-msgid "Hide ScummVM"
-msgstr "Quitter ScummVM"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:70
-msgid "Hide Others"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:74
-msgid "Show All"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:92
-#: backends/platform/sdl/macosx/appmenu_osx.mm:99
-#, fuzzy
-msgid "Window"
-msgstr "MIDI Windows"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:95
-msgid "Minimize"
-msgstr ""
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
-msgid "Normal (no scaling)"
-msgstr "Normal (échelle d'origine)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
-msgctxt "lowres"
-msgid "Normal (no scaling)"
-msgstr "Normal"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
-#, fuzzy
-msgid "Enabled aspect ratio correction"
-msgstr "Changer correction du rapport d'aspect"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
-#, fuzzy
-msgid "Disabled aspect ratio correction"
-msgstr "Changer correction du rapport d'aspect"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
-#, fuzzy
-msgid "Active graphics filter:"
-msgstr "Changer de filtre graphique"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
-#, fuzzy
-msgid "Windowed mode"
-msgstr "Mode de rendu:"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:130
-msgid "OpenGL Normal"
-msgstr "OpenGL Normal"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:131
-msgid "OpenGL Conserve"
-msgstr "OpenGL Préserve"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:132
-msgid "OpenGL Original"
-msgstr "OpenGL Originel"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
-#, fuzzy
-msgid "Current display mode"
-msgstr "Mode vidéo actuel"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
-msgid "Current scale"
-msgstr ""
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
-msgid "Active filter mode: Linear"
-msgstr ""
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
-msgid "Active filter mode: Nearest"
-msgstr ""
-
-#: backends/platform/symbian/src/SymbianActions.cpp:38
-#: backends/platform/wince/CEActionsSmartphone.cpp:39
-msgid "Up"
-msgstr "Haut"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:39
-#: backends/platform/wince/CEActionsSmartphone.cpp:40
-msgid "Down"
-msgstr "Bas"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:40
-#: backends/platform/wince/CEActionsSmartphone.cpp:41
-msgid "Left"
-msgstr "Gauche"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:41
-#: backends/platform/wince/CEActionsSmartphone.cpp:42
-msgid "Right"
-msgstr "Droite"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:42
-#: backends/platform/wince/CEActionsPocket.cpp:60
-#: backends/platform/wince/CEActionsSmartphone.cpp:43
-msgid "Left Click"
-msgstr "Clic Gauche"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:43
-#: backends/platform/wince/CEActionsSmartphone.cpp:44
-msgid "Right Click"
-msgstr "Clic Droit"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:46
-#: backends/platform/wince/CEActionsSmartphone.cpp:47
-msgid "Zone"
-msgstr "Zone"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:47
-#: backends/platform/wince/CEActionsPocket.cpp:54
-#: backends/platform/wince/CEActionsSmartphone.cpp:48
-msgid "Multi Function"
-msgstr "Fonction Multiple"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:48
-msgid "Swap character"
-msgstr "Changement de personnage"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:49
-msgid "Skip text"
-msgstr "Sauter le texte"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:51
-msgid "Fast mode"
-msgstr "Mode rapide"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:53
-msgid "Debugger"
-msgstr "Debugger"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:54
-msgid "Global menu"
-msgstr "Menu global"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:55
-msgid "Virtual keyboard"
-msgstr "Clavier virtuel"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:56
-msgid "Key mapper"
-msgstr "Affectation des touches"
-
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-msgid "Do you want to quit ?"
-msgstr "Voulez-vous quitter?"
-
-#: backends/platform/wii/options.cpp:51
-msgid "Video"
-msgstr "Vidéo"
-
-#: backends/platform/wii/options.cpp:54
-msgid "Current video mode:"
-msgstr "Mode vidéo actuel"
-
-#: backends/platform/wii/options.cpp:56
-msgid "Double-strike"
-msgstr "Coup double"
-
-#: backends/platform/wii/options.cpp:60
-msgid "Horizontal underscan:"
-msgstr "Underscan horizontal:"
-
-#: backends/platform/wii/options.cpp:66
-msgid "Vertical underscan:"
-msgstr "Underscan vertical:"
-
-#: backends/platform/wii/options.cpp:71
-msgid "Input"
-msgstr "Entrée"
-
-#: backends/platform/wii/options.cpp:74
-msgid "GC Pad sensitivity:"
-msgstr "Sensibilité du pad GC:"
-
-#: backends/platform/wii/options.cpp:80
-msgid "GC Pad acceleration:"
-msgstr "Acceleration du pad GC:"
-
-#: backends/platform/wii/options.cpp:86
-msgid "DVD"
-msgstr "DVD"
-
-#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
-msgid "Status:"
-msgstr "Status:"
-
-#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
-msgid "Unknown"
-msgstr "Inconue"
-
-#: backends/platform/wii/options.cpp:93
-msgid "Mount DVD"
-msgstr "Monter le DVD"
-
-#: backends/platform/wii/options.cpp:94
-msgid "Unmount DVD"
-msgstr "Démonter le DVD"
-
-#: backends/platform/wii/options.cpp:98
-msgid "SMB"
-msgstr "SMB"
-
-#: backends/platform/wii/options.cpp:106
-msgid "Server:"
-msgstr "Serveur:"
-
-#: backends/platform/wii/options.cpp:110
-msgid "Share:"
-msgstr "Disque partagé:"
-
-#: backends/platform/wii/options.cpp:114
-msgid "Username:"
-msgstr "Nom d'utilisateur:"
-
-#: backends/platform/wii/options.cpp:118
-msgid "Password:"
-msgstr "Mot de passe:"
-
-#: backends/platform/wii/options.cpp:121
-msgid "Init network"
-msgstr "Initialiser le réseau"
-
-#: backends/platform/wii/options.cpp:123
-msgid "Mount SMB"
-msgstr "Monter SMB"
-
-#: backends/platform/wii/options.cpp:124
-msgid "Unmount SMB"
-msgstr "Démonter SMB"
-
-#: backends/platform/wii/options.cpp:143
-msgid "DVD Mounted successfully"
-msgstr "DVD monté avec succčs"
-
-#: backends/platform/wii/options.cpp:146
-msgid "Error while mounting the DVD"
-msgstr "Échec du montage du DVD"
-
-#: backends/platform/wii/options.cpp:148
-msgid "DVD not mounted"
-msgstr "DVD non monté"
-
-#: backends/platform/wii/options.cpp:161
-msgid "Network up, share mounted"
-msgstr "Réseau connecté, disque partagé monté"
-
-#: backends/platform/wii/options.cpp:163
-msgid "Network up"
-msgstr "Réseau connecté"
-
-#: backends/platform/wii/options.cpp:166
-msgid ", error while mounting the share"
-msgstr ", échec du montage du disque partagé"
-
-#: backends/platform/wii/options.cpp:168
-msgid ", share not mounted"
-msgstr ", disque partagé non monté"
-
-#: backends/platform/wii/options.cpp:174
-msgid "Network down"
-msgstr "Réseau déconnecté"
-
-#: backends/platform/wii/options.cpp:178
-#, fuzzy
-msgid "Initializing network"
-msgstr "Initialisation du réseau"
-
-#: backends/platform/wii/options.cpp:182
-#, fuzzy
-msgid "Timeout while initializing network"
-msgstr "Dépassement du délai lors de l'initialisation du réseau"
-
-#: backends/platform/wii/options.cpp:186
-#, fuzzy, c-format
-msgid "Network not initialized (%d)"
-msgstr "Réseau non initialisé (%d)"
-
-#: backends/platform/wince/CEActionsPocket.cpp:46
-msgid "Hide Toolbar"
-msgstr "Caché la barre d'outils"
-
-#: backends/platform/wince/CEActionsPocket.cpp:47
-msgid "Show Keyboard"
-msgstr "Afficher le clavier"
-
-#: backends/platform/wince/CEActionsPocket.cpp:48
-msgid "Sound on/off"
-msgstr "Audio marche/arręt"
-
-#: backends/platform/wince/CEActionsPocket.cpp:49
-msgid "Right click"
-msgstr "Clic droit"
-
-#: backends/platform/wince/CEActionsPocket.cpp:50
-msgid "Show/Hide Cursor"
-msgstr "Afficher/Cacher le curseur"
-
-#: backends/platform/wince/CEActionsPocket.cpp:51
-msgid "Free look"
-msgstr "Regarder autour"
-
-#: backends/platform/wince/CEActionsPocket.cpp:52
-msgid "Zoom up"
-msgstr "Dézoomer"
-
-#: backends/platform/wince/CEActionsPocket.cpp:53
-msgid "Zoom down"
-msgstr "Zoomer"
-
-#: backends/platform/wince/CEActionsPocket.cpp:55
-#: backends/platform/wince/CEActionsSmartphone.cpp:49
-msgid "Bind Keys"
-msgstr "Affecter les touches"
-
-#: backends/platform/wince/CEActionsPocket.cpp:56
-msgid "Cursor Up"
-msgstr "Haut"
-
-#: backends/platform/wince/CEActionsPocket.cpp:57
-msgid "Cursor Down"
-msgstr "Bas"
-
-#: backends/platform/wince/CEActionsPocket.cpp:58
-msgid "Cursor Left"
-msgstr "Gauche"
-
-#: backends/platform/wince/CEActionsPocket.cpp:59
-msgid "Cursor Right"
-msgstr "Droit"
-
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Do you want to load or save the game?"
-msgstr "Voulez-vous charger ou enregistrer le jeu?"
-
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-msgid " Are you sure you want to quit ? "
-msgstr "Voulez-vous vraiment quitter?"
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:50
-msgid "Keyboard"
-msgstr "Clavier"
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:51
-msgid "Rotate"
-msgstr "Pivoter"
-
-#: backends/platform/wince/CELauncherDialog.cpp:56
-msgid "Using SDL driver "
-msgstr "Utilise le pilote SDL"
-
-#: backends/platform/wince/CELauncherDialog.cpp:60
-msgid "Display "
-msgstr "Affichage"
-
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Do you want to perform an automatic scan ?"
-msgstr "Voulez-vous exécuter une recherche automatique?"
-
-#: backends/platform/wince/wince-sdl.cpp:471
-msgid "Map right click action"
-msgstr "Affecter l'action 'Clic Droit'"
-
-#: backends/platform/wince/wince-sdl.cpp:475
-msgid "You must map a key to the 'Right Click' action to play this game"
-msgstr ""
-"Vous devez affecter une touche ŕ l'action de 'Clic Droit' pour pouvoir jouer "
-"ŕ ce jeu"
-
-#: backends/platform/wince/wince-sdl.cpp:484
-msgid "Map hide toolbar action"
-msgstr "Affecter l'action 'Cacher Bar d'Outils'"
-
-#: backends/platform/wince/wince-sdl.cpp:488
-msgid "You must map a key to the 'Hide toolbar' action to play this game"
-msgstr ""
-"Vous devez affecter une touche ŕ l'action 'Cacher Bar d'Outils' pour pouvoir "
-"jouer ŕ ce jeu"
-
-#: backends/platform/wince/wince-sdl.cpp:497
-msgid "Map Zoom Up action (optional)"
-msgstr "Affecter l'action 'Dézoomer' (optionnelle)"
-
-#: backends/platform/wince/wince-sdl.cpp:500
-msgid "Map Zoom Down action (optional)"
-msgstr "Affecter l'action 'Zoomer' (optionnelle)"
-
-#: backends/platform/wince/wince-sdl.cpp:508
-msgid ""
-"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
-msgstr ""
-"Noubliez pas d'affecter une touche ŕ l'action 'Cacher Bar d'Outils' pour "
-"pouvoir voir entičrement l'inventaire"
-
-#: backends/events/default/default-events.cpp:222
-#, fuzzy
-msgid "Do you really want to return to the Launcher?"
-msgstr "Voulez-vous vraiment supprimer cette sauvegarde?"
-
-#: backends/events/default/default-events.cpp:222
-#, fuzzy
-msgid "Launcher"
-msgstr "Frapper"
-
-#: backends/events/default/default-events.cpp:244
-#, fuzzy
-msgid "Do you really want to quit?"
-msgstr "Voulez-vous quitter?"
-
-#: backends/events/gph/gph-events.cpp:366
-#: backends/events/gph/gph-events.cpp:409
-#: backends/events/openpandora/op-events.cpp:141
-msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr ""
-
-#: backends/events/gph/gph-events.cpp:368
-#: backends/events/gph/gph-events.cpp:411
-#: backends/events/openpandora/op-events.cpp:143
-msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr ""
-
-#: backends/events/gph/gph-events.cpp:370
-#: backends/events/gph/gph-events.cpp:413
-#: backends/events/openpandora/op-events.cpp:145
-msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr ""
-
-#: backends/events/gph/gph-events.cpp:390
-#, fuzzy
-msgid "Maximum Volume"
-msgstr "Volume"
-
-#: backends/events/gph/gph-events.cpp:392
-msgid "Increasing Volume"
-msgstr ""
-
-#: backends/events/gph/gph-events.cpp:398
-#, fuzzy
-msgid "Minimal Volume"
-msgstr "Volume"
-
-#: backends/events/gph/gph-events.cpp:400
-msgid "Decreasing Volume"
-msgstr ""
-
-#: backends/updates/macosx/macosx-updates.mm:65
-msgid "Check for Updates..."
-msgstr ""
-
-#~ msgctxt "lowres"
-#~ msgid "Add Game..."
-#~ msgstr "Ajouter..."
-
-#~ msgid "Add Game..."
-#~ msgstr "Ajouter..."
-
-#~ msgid "Discovered %d new games."
-#~ msgstr "%d nouveaux jeux trouvés."
-
-#~ msgid "Command line argument not processed"
-#~ msgstr "Argument de ligne de commande non traité"
-
-#~ msgid "FM Towns Emulator"
-#~ msgstr "Émulateur FM Towns"
-
-#~ msgid "Invalid Path"
-#~ msgstr "Chemin Invalide"
+#
+msgid "" +msgstr "" +"Project-Id-Version: ScummVM 1.3.0svn\n" +"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" +"POT-Creation-Date: 2011-08-20 15:12+0100\n" +"PO-Revision-Date: 2011-08-22 22:27+0100\n" +"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n" +"Language-Team: French <scummvm-devel@lists.sf.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: Francais\n" +"Plural-Forms: nplurals=2; plural=n>1;\n" + +#: gui/about.cpp:91 +#, c-format +msgid "(built on %s)" +msgstr "(compilé sur %s)" + +#: gui/about.cpp:98 +msgid "Features compiled in:" +msgstr "Options incluses:" + +#: gui/about.cpp:107 +msgid "Available engines:" +msgstr "Moteurs disponibles:" + +#: gui/browser.cpp:66 +msgid "Go up" +msgstr "Remonter" + +#: gui/browser.cpp:66 gui/browser.cpp:68 +msgid "Go to previous directory level" +msgstr "Remonte d'un niveau dans la hiérarchie de répertoire" + +#: gui/browser.cpp:68 +msgctxt "lowres" +msgid "Go up" +msgstr "Remonter" + +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 +#: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 +msgid "Cancel" +msgstr "Annuler" + +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 +msgid "Choose" +msgstr "Choisir" + +#: gui/gui-manager.cpp:116 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:209 +#: backends/keymapper/remap-dialog.cpp:52 +msgid "Close" +msgstr "Fermer" + +#: gui/gui-manager.cpp:119 +msgid "Mouse click" +msgstr "Clic de souris" + +#: gui/gui-manager.cpp:122 base/main.cpp:286 +msgid "Display keyboard" +msgstr "Afficher le clavier" + +#: gui/gui-manager.cpp:125 base/main.cpp:289 +msgid "Remap keys" +msgstr "Changer l'affectation des touches" + +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 +msgid "Choose an action to map" +msgstr "Sélectionnez une action ŕ affecter" + +#: gui/KeysDialog.cpp:41 +msgid "Map" +msgstr "Affecter" + +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179 +#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192 +#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545 +#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131 +#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344 +#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360 +#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633 +#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389 +#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281 +#: backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:54 +msgid "OK" +msgstr "OK" + +#: gui/KeysDialog.cpp:49 +msgid "Select an action and click 'Map'" +msgstr "Selectionez une action et cliquez 'Affecter'" + +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 +#, c-format +msgid "Associated key : %s" +msgstr "Touche associée: %s" + +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 +#, c-format +msgid "Associated key : none" +msgstr "Touche associée: aucune" + +#: gui/KeysDialog.cpp:90 +msgid "Please select an action" +msgstr "Selectionnez une action" + +#: gui/KeysDialog.cpp:106 +msgid "Press the key to associate" +msgstr "Appuyez sur la touche ŕ associer" + +#: gui/launcher.cpp:165 +msgid "Game" +msgstr "Jeu" + +#: gui/launcher.cpp:169 +msgid "ID:" +msgstr "ID:" + +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 +msgid "" +"Short game identifier used for referring to savegames and running the game " +"from the command line" +msgstr "" +"ID compact du jeu utilisée pour identifier les sauvegardes et démarrer le " +"jeu depuis la ligne de commande" + +#: gui/launcher.cpp:171 +msgctxt "lowres" +msgid "ID:" +msgstr "ID:" + +#: gui/launcher.cpp:176 +msgid "Name:" +msgstr "Nom:" + +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +msgid "Full title of the game" +msgstr "Nom complet du jeu" + +#: gui/launcher.cpp:178 +msgctxt "lowres" +msgid "Name:" +msgstr "Nom:" + +#: gui/launcher.cpp:182 +msgid "Language:" +msgstr "Langue:" + +#: gui/launcher.cpp:182 gui/launcher.cpp:183 +msgid "" +"Language of the game. This will not turn your Spanish game version into " +"English" +msgstr "" +"Langue du jeu. Cela ne traduira pas en anglais par magie votre version " +"espagnole du jeu." + +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 +msgid "<default>" +msgstr "<defaut>" + +#: gui/launcher.cpp:194 +msgid "Platform:" +msgstr "Plateforme:" + +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 +msgid "Platform the game was originally designed for" +msgstr "Plateforme pour laquelle votre jeu a été conçu" + +#: gui/launcher.cpp:196 +msgctxt "lowres" +msgid "Platform:" +msgstr "Systčme:" + +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 +msgid "Graphics" +msgstr "Graphique" + +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 +msgid "GFX" +msgstr "GFX" + +#: gui/launcher.cpp:211 +msgid "Override global graphic settings" +msgstr "Utiliser des réglages graphiques spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:213 +msgctxt "lowres" +msgid "Override global graphic settings" +msgstr "Réglages spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:220 gui/options.cpp:1041 +msgid "Audio" +msgstr "Audio" + +#: gui/launcher.cpp:223 +msgid "Override global audio settings" +msgstr "Utiliser des réglages audio spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:225 +msgctxt "lowres" +msgid "Override global audio settings" +msgstr "Réglages spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:234 gui/options.cpp:1046 +msgid "Volume" +msgstr "Volume" + +#: gui/launcher.cpp:236 gui/options.cpp:1048 +msgctxt "lowres" +msgid "Volume" +msgstr "Volume" + +#: gui/launcher.cpp:239 +msgid "Override global volume settings" +msgstr "Utiliser des réglages de volume sonore spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:241 +msgctxt "lowres" +msgid "Override global volume settings" +msgstr "Réglages spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:248 gui/options.cpp:1056 +msgid "MIDI" +msgstr "MIDI" + +#: gui/launcher.cpp:251 +msgid "Override global MIDI settings" +msgstr "Utiliser des réglages MIDI spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:253 +msgctxt "lowres" +msgid "Override global MIDI settings" +msgstr "Réglages spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:263 gui/options.cpp:1062 +msgid "MT-32" +msgstr "MT-32" + +#: gui/launcher.cpp:266 +msgid "Override global MT-32 settings" +msgstr "Utiliser des réglages MT-32 spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:268 +msgctxt "lowres" +msgid "Override global MT-32 settings" +msgstr "Réglages spécifiques ŕ ce jeux" + +#: gui/launcher.cpp:279 gui/options.cpp:1069 +msgid "Paths" +msgstr "Chemins" + +#: gui/launcher.cpp:281 gui/options.cpp:1071 +msgctxt "lowres" +msgid "Paths" +msgstr "Chemins" + +#: gui/launcher.cpp:288 +msgid "Game Path:" +msgstr "Chemin du Jeu:" + +#: gui/launcher.cpp:290 +msgctxt "lowres" +msgid "Game Path:" +msgstr "Chemin du Jeu:" + +#: gui/launcher.cpp:295 gui/options.cpp:1091 +msgid "Extra Path:" +msgstr "Extra:" + +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 +msgid "Specifies path to additional data used the game" +msgstr "Définie un chemin vers des données suplémentaires utilisées par le jeu" + +#: gui/launcher.cpp:297 gui/options.cpp:1093 +msgctxt "lowres" +msgid "Extra Path:" +msgstr "Extra:" + +#: gui/launcher.cpp:302 gui/options.cpp:1079 +msgid "Save Path:" +msgstr "Sauvegardes:" + +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 +msgid "Specifies where your savegames are put" +msgstr "Définie l'emplacement oů les fichiers de sauvegarde sont créés" + +#: gui/launcher.cpp:304 gui/options.cpp:1081 +msgctxt "lowres" +msgid "Save Path:" +msgstr "Sauvegardes:" + +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 +msgctxt "path" +msgid "None" +msgstr "Aucun" + +#: gui/launcher.cpp:326 gui/launcher.cpp:408 +#: backends/platform/wii/options.cpp:56 +msgid "Default" +msgstr "Défaut" + +#: gui/launcher.cpp:446 gui/options.cpp:1356 +msgid "Select SoundFont" +msgstr "Choisir une banque de sons" + +#: gui/launcher.cpp:465 gui/launcher.cpp:612 +msgid "Select directory with game data" +msgstr "Sélectionner le répertoire contenant les données du jeu" + +#: gui/launcher.cpp:483 +msgid "Select additional game directory" +msgstr "Sélectionner un répertoire supplémentaire" + +#: gui/launcher.cpp:495 +msgid "Select directory for saved games" +msgstr "Sélectionner le répertoire pour les sauvegardes" + +#: gui/launcher.cpp:514 +msgid "This game ID is already taken. Please choose another one." +msgstr "Cet ID est déjŕ utilisé par un autre jeu. Choisissez en un autre svp." + +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 +msgid "~Q~uit" +msgstr "~Q~uitter" + +#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80 +msgid "Quit ScummVM" +msgstr "Quitter ScummVM" + +#: gui/launcher.cpp:556 +msgid "A~b~out..." +msgstr "Ŕ ~P~ropos..." + +#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61 +msgid "About ScummVM" +msgstr "Ŕ propos de ScummVM" + +#: gui/launcher.cpp:557 +msgid "~O~ptions..." +msgstr "~O~ptions..." + +#: gui/launcher.cpp:557 +msgid "Change global ScummVM options" +msgstr "Change les options globales de ScummVM" + +#: gui/launcher.cpp:559 +msgid "~S~tart" +msgstr "~D~émarrer" + +#: gui/launcher.cpp:559 +msgid "Start selected game" +msgstr "Démarre le jeu sélectionné" + +#: gui/launcher.cpp:562 +msgid "~L~oad..." +msgstr "~C~harger" + +#: gui/launcher.cpp:562 +msgid "Load savegame for selected game" +msgstr "Charge une sauvegarde pour le jeu sélectionné" + +#: gui/launcher.cpp:567 gui/launcher.cpp:1055 +msgid "~A~dd Game..." +msgstr "~A~jouter..." + +#: gui/launcher.cpp:567 gui/launcher.cpp:574 +msgid "Hold Shift for Mass Add" +msgstr "" +"Ajoute un jeu ŕ la Liste. Maintenez Shift enfoncée pour un Ajout Massif" + +#: gui/launcher.cpp:569 +msgid "~E~dit Game..." +msgstr "~E~diter..." + +#: gui/launcher.cpp:569 gui/launcher.cpp:576 +msgid "Change game options" +msgstr "Change les options du jeu" + +#: gui/launcher.cpp:571 +msgid "~R~emove Game" +msgstr "~S~upprimer" + +#: gui/launcher.cpp:571 gui/launcher.cpp:578 +msgid "Remove game from the list. The game data files stay intact" +msgstr "Supprime le jeu de la liste. Les fichiers sont conservés" + +#: gui/launcher.cpp:574 gui/launcher.cpp:1055 +msgctxt "lowres" +msgid "~A~dd Game..." +msgstr "~A~jouter..." + +#: gui/launcher.cpp:576 +msgctxt "lowres" +msgid "~E~dit Game..." +msgstr "~E~diter..." + +#: gui/launcher.cpp:578 +msgctxt "lowres" +msgid "~R~emove Game" +msgstr "~S~upprimer" + +#: gui/launcher.cpp:586 +msgid "Search in game list" +msgstr "Recherche dans la liste de jeux" + +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 +msgid "Search:" +msgstr "Filtre:" + +#: gui/launcher.cpp:593 gui/options.cpp:826 +msgid "Clear value" +msgstr "Effacer la valeur" + +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216 +msgid "Load game:" +msgstr "Charger le jeu:" + +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188 +#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716 +#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Load" +msgstr "Charger" + +#: gui/launcher.cpp:723 +msgid "" +"Do you really want to run the mass game detector? This could potentially add " +"a huge number of games." +msgstr "" +"Voulez-vous vraiment lancer la détection automatique des jeux? Cela peut " +"potentiellement ajouter un grand nombre de jeux." + +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "Yes" +msgstr "Oui" + +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "No" +msgstr "Non" + +#: gui/launcher.cpp:772 +msgid "ScummVM couldn't open the specified directory!" +msgstr "ScummVM n'a pas pu ouvrir le répertoire sélectionné." + +#: gui/launcher.cpp:784 +msgid "ScummVM could not find any game in the specified directory!" +msgstr "ScummVM n'a pas trouvé de jeux dans le répertoire sélectionné." + +#: gui/launcher.cpp:798 +msgid "Pick the game:" +msgstr "Choisissez le jeu:" + +#: gui/launcher.cpp:872 +msgid "Do you really want to remove this game configuration?" +msgstr "Voulez-vous vraiment supprimer ce jeu?" + +#: gui/launcher.cpp:936 +msgid "This game does not support loading games from the launcher." +msgstr "" +"Le chargement de sauvegarde depuis le lanceur n'est pas supporté pour ce jeu." + +#: gui/launcher.cpp:940 +msgid "ScummVM could not find any engine capable of running the selected game!" +msgstr "ScummVM n'a pas pu trouvé de moteur pour lancer le jeu sélectionné." + +#: gui/launcher.cpp:1054 +msgctxt "lowres" +msgid "Mass Add..." +msgstr "Ajout Massif..." + +#: gui/launcher.cpp:1054 +msgid "Mass Add..." +msgstr "Ajout Massif..." + +#: gui/massadd.cpp:78 gui/massadd.cpp:81 +msgid "... progress ..." +msgstr "... en cours ..." + +#: gui/massadd.cpp:258 +msgid "Scan complete!" +msgstr "Examen terminé!" + +#: gui/massadd.cpp:261 +#, c-format +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "%d nouveaux jeux trouvés, %d jeux ignorés (déjŕ ajoutés précédemment)." + +#: gui/massadd.cpp:265 +#, c-format +msgid "Scanned %d directories ..." +msgstr "%d répertoires examinés ..." + +#: gui/massadd.cpp:268 +#, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." +msgstr "" +"%d nouveaux jeux trouvés, %d jeux ignorés (déjŕ ajouté précédemment) ..." + +#: gui/options.cpp:72 +msgid "Never" +msgstr "Jamais" + +#: gui/options.cpp:72 +msgid "every 5 mins" +msgstr "Toutes les 5 mins" + +#: gui/options.cpp:72 +msgid "every 10 mins" +msgstr "Toutes les 10 mins" + +#: gui/options.cpp:72 +msgid "every 15 mins" +msgstr "Toutes les 15 mins" + +#: gui/options.cpp:72 +msgid "every 30 mins" +msgstr "Toutes les 30 mins" + +#: gui/options.cpp:74 +msgid "8 kHz" +msgstr "8 kHz" + +#: gui/options.cpp:74 +msgid "11kHz" +msgstr "11 kHz" + +#: gui/options.cpp:74 +msgid "22 kHz" +msgstr "22 kHz" + +#: gui/options.cpp:74 +msgid "44 kHz" +msgstr "44 kHz" + +#: gui/options.cpp:74 +msgid "48 kHz" +msgstr "48 kHz" + +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 +msgctxt "soundfont" +msgid "None" +msgstr "Aucune" + +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "Certaines options graphiques n'ont pu ętre changées:" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "le mode vidéo n'a pu ętre changé." + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "le mode plein écran n'a pu ętre changé." + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "la correction de rapport d'aspect n'a pu ętre changée." + +#: gui/options.cpp:705 +msgid "Graphics mode:" +msgstr "Mode graphique:" + +#: gui/options.cpp:716 +msgid "Render mode:" +msgstr "Mode de rendu:" + +#: gui/options.cpp:716 gui/options.cpp:717 +msgid "Special dithering modes supported by some games" +msgstr "Mode spécial de tramage supporté par certains jeux" + +#: gui/options.cpp:726 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472 +msgid "Fullscreen mode" +msgstr "Plein écran" + +#: gui/options.cpp:729 +msgid "Aspect ratio correction" +msgstr "Correction du rapport d'aspect" + +#: gui/options.cpp:729 +msgid "Correct aspect ratio for 320x200 games" +msgstr "Corrige le rapport d'aspect pour les jeu 320x200" + +#: gui/options.cpp:730 +msgid "EGA undithering" +msgstr "Détramage EGA" + +#: gui/options.cpp:730 +msgid "Enable undithering in EGA games that support it" +msgstr "Active le détramage dans les jeux EGA qui le supporte" + +#: gui/options.cpp:738 +msgid "Preferred Device:" +msgstr "Sortie Préféré:" + +#: gui/options.cpp:738 +msgid "Music Device:" +msgstr "Sortie Audio:" + +#: gui/options.cpp:738 gui/options.cpp:740 +msgid "Specifies preferred sound device or sound card emulator" +msgstr "" +"Spécifie le périphérique de sortie audio ou l'émulateur de carte audio " +"préféré" + +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 +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:740 +msgctxt "lowres" +msgid "Preferred Dev.:" +msgstr "Sortie Préféré:" + +#: gui/options.cpp:740 +msgctxt "lowres" +msgid "Music Device:" +msgstr "Sortie Audio:" + +#: gui/options.cpp:766 +msgid "AdLib emulator:" +msgstr "Émulateur AdLib:" + +#: gui/options.cpp:766 gui/options.cpp:767 +msgid "AdLib is used for music in many games" +msgstr "AdLib est utilisé pour la musique dans de nombreux jeux" + +#: gui/options.cpp:777 +msgid "Output rate:" +msgstr "Fréquence:" + +#: gui/options.cpp:777 gui/options.cpp:778 +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:788 +msgid "GM Device:" +msgstr "Sortie GM:" + +#: gui/options.cpp:788 +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:799 +msgid "Don't use General MIDI music" +msgstr "Ne pas utiliser la musique General MIDI" + +#: gui/options.cpp:810 gui/options.cpp:871 +msgid "Use first available device" +msgstr "Utiliser le premier périphérique disponible" + +#: gui/options.cpp:822 +msgid "SoundFont:" +msgstr "Banque de sons:" + +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 +msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" +msgstr "" +"La banque de sons (SoundFont) est utilisée par certaines cartes audio, " +"Fluidsynth et Timidity" + +#: gui/options.cpp:824 +msgctxt "lowres" +msgid "SoundFont:" +msgstr "SoundFont:" + +#: gui/options.cpp:829 +msgid "Mixed AdLib/MIDI mode" +msgstr "Mode mixe AdLib/MIDI" + +#: gui/options.cpp:829 +msgid "Use both MIDI and AdLib sound generation" +msgstr "Utiliser ŕ la fois MIDI et AdLib" + +#: gui/options.cpp:832 +msgid "MIDI gain:" +msgstr "Gain MIDI:" + +#: gui/options.cpp:842 +msgid "MT-32 Device:" +msgstr "Sortie MT-32:" + +#: gui/options.cpp:842 +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:847 +msgid "True Roland MT-32 (disable GM emulation)" +msgstr "Roland MT-32 exacte (désactive l'émulation GM)" + +#: gui/options.cpp:847 gui/options.cpp:849 +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:849 +msgctxt "lowres" +msgid "True Roland MT-32 (no GM emulation)" +msgstr "Roland MT-32 exacte (pas d'ému GM)" + +#: gui/options.cpp:852 +msgid "Enable Roland GS Mode" +msgstr "Activer le mode Roland GS" + +#: gui/options.cpp:852 +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:861 +msgid "Don't use Roland MT-32 music" +msgstr "Ne pas utiliser la musique Roland MT-32" + +#: gui/options.cpp:888 +msgid "Text and Speech:" +msgstr "Dialogue:" + +#: gui/options.cpp:892 gui/options.cpp:902 +msgid "Speech" +msgstr "Voix" + +#: gui/options.cpp:893 gui/options.cpp:903 +msgid "Subtitles" +msgstr "Sous-titres" + +#: gui/options.cpp:894 +msgid "Both" +msgstr "Les deux" + +#: gui/options.cpp:896 +msgid "Subtitle speed:" +msgstr "Vitesse des ST:" + +#: gui/options.cpp:898 +msgctxt "lowres" +msgid "Text and Speech:" +msgstr "Dialogue:" + +#: gui/options.cpp:902 +msgid "Spch" +msgstr "Voix" + +#: gui/options.cpp:903 +msgid "Subs" +msgstr "Subs" + +#: gui/options.cpp:904 +msgctxt "lowres" +msgid "Both" +msgstr "V&S" + +#: gui/options.cpp:904 +msgid "Show subtitles and play speech" +msgstr "Affiche les sous-titres et joue les dialogues audio" + +#: gui/options.cpp:906 +msgctxt "lowres" +msgid "Subtitle speed:" +msgstr "Vitesse des ST:" + +#: gui/options.cpp:922 +msgid "Music volume:" +msgstr "Volume Musique:" + +#: gui/options.cpp:924 +msgctxt "lowres" +msgid "Music volume:" +msgstr "Musique:" + +#: gui/options.cpp:931 +msgid "Mute All" +msgstr "Silence" + +#: gui/options.cpp:934 +msgid "SFX volume:" +msgstr "Volume Bruitage:" + +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 +msgid "Special sound effects volume" +msgstr "Volume des effets spéciaux sonores" + +#: gui/options.cpp:936 +msgctxt "lowres" +msgid "SFX volume:" +msgstr "Bruitage:" + +#: gui/options.cpp:944 +msgid "Speech volume:" +msgstr "Volume Dialogues:" + +#: gui/options.cpp:946 +msgctxt "lowres" +msgid "Speech volume:" +msgstr "Dialogues:" + +#: gui/options.cpp:1085 +msgid "Theme Path:" +msgstr "Thčmes:" + +#: gui/options.cpp:1087 +msgctxt "lowres" +msgid "Theme Path:" +msgstr "Thčmes:" + +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 +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:1098 +msgid "Plugins Path:" +msgstr "Plugins:" + +#: gui/options.cpp:1100 +msgctxt "lowres" +msgid "Plugins Path:" +msgstr "Plugins:" + +#: gui/options.cpp:1109 +msgid "Misc" +msgstr "Divers" + +#: gui/options.cpp:1111 +msgctxt "lowres" +msgid "Misc" +msgstr "Divers" + +#: gui/options.cpp:1113 +msgid "Theme:" +msgstr "Thčme:" + +#: gui/options.cpp:1117 +msgid "GUI Renderer:" +msgstr "Interface:" + +#: gui/options.cpp:1129 +msgid "Autosave:" +msgstr "Sauvegarde auto:" + +#: gui/options.cpp:1131 +msgctxt "lowres" +msgid "Autosave:" +msgstr "Sauvegarde:" + +#: gui/options.cpp:1139 +msgid "Keys" +msgstr "Touches" + +#: gui/options.cpp:1146 +msgid "GUI Language:" +msgstr "Langue:" + +#: gui/options.cpp:1146 +msgid "Language of ScummVM GUI" +msgstr "Langue de l'interface graphique de ScummVM" + +#: gui/options.cpp:1295 +msgid "You have to restart ScummVM before your changes will take effect." +msgstr "" +"Vous devez relancer ScummVM pour que le changement soit pris en compte." + +#: gui/options.cpp:1308 +msgid "Select directory for savegames" +msgstr "Sélectionner le répertoire pour les sauvegardes" + +#: gui/options.cpp:1315 +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:1324 +msgid "Select directory for GUI themes" +msgstr "Sélectionner le répertoire des thčmes d'interface" + +#: gui/options.cpp:1334 +msgid "Select directory for extra files" +msgstr "Sélectionner le répertoire pour les fichiers suplémentaires" + +#: gui/options.cpp:1345 +msgid "Select directory for plugins" +msgstr "Sélectionner le répertoire des plugins" + +#: gui/options.cpp:1389 +msgid "" +"The theme you selected does not support your current language. If you want " +"to use this theme you need to switch to another language first." +msgstr "" +"Le thčme que vous avez sélectioné ne support pas la langue française. Si " +"vous voulez l'utiliser vous devez d'abord changer de langue." + +#: gui/saveload.cpp:58 gui/saveload.cpp:239 +msgid "No date saved" +msgstr "Date inconnue" + +#: gui/saveload.cpp:59 gui/saveload.cpp:240 +msgid "No time saved" +msgstr "Heure inconnue" + +#: gui/saveload.cpp:60 gui/saveload.cpp:241 +msgid "No playtime saved" +msgstr "Durée de jeu inconnue" + +#: gui/saveload.cpp:67 gui/saveload.cpp:155 +msgid "Delete" +msgstr "Supprimer" + +#: gui/saveload.cpp:154 +msgid "Do you really want to delete this savegame?" +msgstr "Voulez-vous vraiment supprimer cette sauvegarde?" + +#: gui/saveload.cpp:264 +msgid "Date: " +msgstr "Date: " + +#: gui/saveload.cpp:268 +msgid "Time: " +msgstr "Heure: " + +#: gui/saveload.cpp:274 +msgid "Playtime: " +msgstr "Durée de jeu: " + +#: gui/saveload.cpp:287 gui/saveload.cpp:354 +msgid "Untitled savestate" +msgstr "Sauvegarde sans nom" + +#: gui/themebrowser.cpp:44 +msgid "Select a Theme" +msgstr "Sélectionnez un Thčme" + +#: gui/ThemeEngine.cpp:328 +msgid "Disabled GFX" +msgstr "GFX désactivé" + +#: gui/ThemeEngine.cpp:328 +msgctxt "lowres" +msgid "Disabled GFX" +msgstr "GFX désactivé" + +#: gui/ThemeEngine.cpp:329 +msgid "Standard Renderer (16bpp)" +msgstr "Rendu Standard (16bpp)" + +#: gui/ThemeEngine.cpp:329 +msgid "Standard (16bpp)" +msgstr "Standard (16bpp)" + +#: gui/ThemeEngine.cpp:331 +msgid "Antialiased Renderer (16bpp)" +msgstr "Rendu Anti-crénelé (16 bpp)" + +#: gui/ThemeEngine.cpp:331 +msgid "Antialiased (16bpp)" +msgstr "Anti-crénelé (16 bpp)" + +#: base/main.cpp:206 +#, c-format +msgid "Engine does not support debug level '%s'" +msgstr "Le niveau de debug '%s' n'est pas supporté par ce moteur de jeu" + +#: base/main.cpp:274 +msgid "Menu" +msgstr "Menu" + +#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 +msgid "Skip" +msgstr "Passer" + +#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 +msgid "Pause" +msgstr "Mettre en pause" + +#: base/main.cpp:283 +msgid "Skip line" +msgstr "Passer la phrase" + +#: base/main.cpp:442 +msgid "Error running game:" +msgstr "Erreur lors de l'éxécution du jeu:" + +#: base/main.cpp:466 +msgid "Could not find any engine capable of running the selected game" +msgstr "Impossible de trouver un moteur pour exécuter le jeu sélectionné" + +#: common/error.cpp:38 +msgid "No error" +msgstr "Pas d'erreur" + +#: common/error.cpp:40 +msgid "Game data not found" +msgstr "Fichier de donées introuvable" + +#: common/error.cpp:42 +msgid "Game id not supported" +msgstr "ID de jeu non supporté" + +#: common/error.cpp:44 +msgid "Unsupported color mode" +msgstr "Mode de couleurs non supporté" + +#: common/error.cpp:47 +msgid "Read permission denied" +msgstr "Véroullié en lecture" + +#: common/error.cpp:49 +msgid "Write permission denied" +msgstr "Verrouillé en écriture" + +#: common/error.cpp:52 +msgid "Path does not exist" +msgstr "Chemin inexistant" + +#: common/error.cpp:54 +msgid "Path not a directory" +msgstr "Chemin n'est pas un répertoire" + +#: common/error.cpp:56 +msgid "Path not a file" +msgstr "Chemin n'est pas un fichier" + +#: common/error.cpp:59 +msgid "Cannot create file" +msgstr "Impossible de créer le fichier" + +#: common/error.cpp:61 +msgid "Reading data failed" +msgstr "Echec de la lecture" + +#: common/error.cpp:63 +msgid "Writing data failed" +msgstr "Echec de l'écriture des données" + +#: common/error.cpp:66 +msgid "Could not find suitable engine plugin" +msgstr "Aucun plugin n'a pu ętre trouvé pour ce jeu" + +#: common/error.cpp:68 +msgid "Engine plugin does not support save states" +msgstr "Ce moteur de jeu ne supporte pas les sauvegardes" + +#: common/error.cpp:71 +msgid "User canceled" +msgstr "Annuler par l'utilisateur" + +#: common/error.cpp:75 +msgid "Unknown error" +msgstr "Erreur inconnue" + +#. I18N: Hercules is graphics card name +#: common/util.cpp:275 +msgid "Hercules Green" +msgstr "Hercules Vert" + +#: common/util.cpp:276 +msgid "Hercules Amber" +msgstr "Hercules Ambre" + +#: common/util.cpp:283 +msgctxt "lowres" +msgid "Hercules Green" +msgstr "Hercules Vert" + +#: common/util.cpp:284 +msgctxt "lowres" +msgid "Hercules Amber" +msgstr "Hercules Ambre" + +#: engines/advancedDetector.cpp:296 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "Le jeu dans '%s' n'est pas reconnu." + +#: engines/advancedDetector.cpp:297 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" +"Veuillez reporter les informations suivantes ŕ l'équipe ScummVM ainsi que le " +"nom" + +#: engines/advancedDetector.cpp:299 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "du jeu que vous avez essayé d'ajouter, sa version, le langage, etc..." + +#: engines/dialogs.cpp:84 +msgid "~R~esume" +msgstr "~R~eprendre" + +#: engines/dialogs.cpp:86 +msgid "~L~oad" +msgstr "~C~harger" + +#: engines/dialogs.cpp:90 +msgid "~S~ave" +msgstr "~S~auver" + +#: engines/dialogs.cpp:94 +msgid "~O~ptions" +msgstr "~O~ptions" + +#: engines/dialogs.cpp:99 +msgid "~H~elp" +msgstr "~A~ide" + +#: engines/dialogs.cpp:101 +msgid "~A~bout" +msgstr "Ŕ ~P~ropos" + +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 +msgid "~R~eturn to Launcher" +msgstr "Retour au ~L~anceur" + +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 +msgctxt "lowres" +msgid "~R~eturn to Launcher" +msgstr "Retour au ~L~anceur" + +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +msgid "Save game:" +msgstr "Sauvegarde:" + +#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187 +#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Save" +msgstr "Sauver" + +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" +"Désolé, il n'y a pas d'aide disponible dans ce jeu actuellement. Lisez le " +"fichier README pour les informations de base et les instructions pour " +"obtenir de l'aide supplémentaire." + +#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109 +#: engines/mohawk/dialogs.cpp:174 +msgid "~O~K" +msgstr "~O~K" + +#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110 +#: engines/mohawk/dialogs.cpp:175 +msgid "~C~ancel" +msgstr "~A~nnuler" + +#: engines/dialogs.cpp:312 +msgid "~K~eys" +msgstr "~T~ouches" + +#: engines/engine.cpp:233 +msgid "Could not initialize color format." +msgstr "Impossible d'initialiser le format des couleurs." + +#: engines/engine.cpp:241 +msgid "Could not switch to video mode: '" +msgstr "Impossible de changer le mode vidéo ŕ: '" + +#: engines/engine.cpp:250 +msgid "Could not apply aspect ratio setting." +msgstr "Impossible d'appliquer la correction du rapport d'aspect." + +#: engines/engine.cpp:255 +msgid "Could not apply fullscreen setting." +msgstr "Impossible d'appliquer l'option plein écran." + +#: engines/engine.cpp:355 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" +"Il semble que vous essayez de jouez directement\n" +"depuis le CD. Cela peut occasionner des problčmes\n" +"et il est donc recommandé de copier les fichier de\n" +"données du jeu sur votre disque dur.\n" +"Lisez le fichier README pour plus de détails." + +#: engines/engine.cpp:366 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" +"Ce jeu possčde des pistes audio sur le CD. Pour\n" +"profiter de la musique, ces pistes doivent ętre\n" +"extraite du CD et réencodée en utilisant un\n" +"logiciel approprié.\n" +"Lisez le fichier README pour plus de détails." + +#: engines/engine.cpp:433 +msgid "" +"WARNING: The game you are about to start is not yet fully supported by " +"ScummVM. As such, it is likely to be unstable, and any saves you make might " +"not work in future versions of ScummVM." +msgstr "" +"Attention:le jeu que vous vous apprętez ŕ jouer n'est pas encore " +"complčtement supporté par ScummVM. Il est donc instable et les sauvegardes " +"peuvent ne pas marcher avec une future version de ScummVM." + +#: engines/engine.cpp:436 +msgid "Start anyway" +msgstr "Jouer quand męme" + +#: engines/scumm/dialogs.cpp:175 +#, c-format +msgid "Insert Disk %c and Press Button to Continue." +msgstr "Insérer le Disque %c et appuyer sur le Bouton pour Continuer." + +#: engines/scumm/dialogs.cpp:176 +#, c-format +msgid "Unable to Find %s, (%c%d) Press Button." +msgstr "Impossible de trouver %s, (%c%d) Appuyer sur le Bouton." + +#: engines/scumm/dialogs.cpp:177 +#, c-format +msgid "Error reading disk %c, (%c%d) Press Button." +msgstr "Erreur lors de la lecture du disque %c, (%c%d). Appuyer sur le Bouton." + +#: engines/scumm/dialogs.cpp:178 +msgid "Game Paused. Press SPACE to Continue." +msgstr "Jeu en pause. Appuyer sur Espace pour Reprendre." + +#. I18N: You may specify 'Yes' symbol at the end of the line, like this: +#. "Moechten Sie wirklich neu starten? (J/N)J" +#. Will react to J as 'Yes' +#: engines/scumm/dialogs.cpp:182 +msgid "Are you sure you want to restart? (Y/N)" +msgstr "Voulez-vous vraiment recommencer? (O/N)" + +#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment +#: engines/scumm/dialogs.cpp:184 +msgid "Are you sure you want to quit? (Y/N)" +msgstr "Voulez-vous vraiment quitter? (O/N)" + +#: engines/scumm/dialogs.cpp:189 +msgid "Play" +msgstr "Jouer" + +#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:84 +#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:44 +#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/events/default/default-events.cpp:244 +msgid "Quit" +msgstr "Quitter" + +#: engines/scumm/dialogs.cpp:193 +msgid "Insert save/load game disk" +msgstr "Insérer le disque de sauvegarde/chargement" + +#: engines/scumm/dialogs.cpp:194 +msgid "You must enter a name" +msgstr "Vous devez entrer un nom" + +#: engines/scumm/dialogs.cpp:195 +msgid "The game was NOT saved (disk full?)" +msgstr "Le jeu n'a pu ętre sauvé (disque plein?)" + +#: engines/scumm/dialogs.cpp:196 +msgid "The game was NOT loaded" +msgstr "Le jeu n'a pu ętre chargé" + +#: engines/scumm/dialogs.cpp:197 +#, c-format +msgid "Saving '%s'" +msgstr "Sauvegarde de '%s'" + +#: engines/scumm/dialogs.cpp:198 +#, c-format +msgid "Loading '%s'" +msgstr "Chargement de '%s'" + +#: engines/scumm/dialogs.cpp:199 +msgid "Name your SAVE game" +msgstr "Donnez un nom ŕ votre sauvegarde" + +#: engines/scumm/dialogs.cpp:200 +msgid "Select a game to LOAD" +msgstr "Sélectionnez un jeu ŕ charger" + +#: engines/scumm/dialogs.cpp:201 +msgid "Game title)" +msgstr "Nom du jeu)" + +#. I18N: Previous page button +#: engines/scumm/dialogs.cpp:287 +msgid "~P~revious" +msgstr "~P~récédent" + +#. I18N: Next page button +#: engines/scumm/dialogs.cpp:289 +msgid "~N~ext" +msgstr "~S~uivant" + +#: engines/scumm/dialogs.cpp:290 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 +msgid "~C~lose" +msgstr "~F~ermer" + +#: engines/scumm/dialogs.cpp:597 +msgid "Speech Only" +msgstr "Voix" + +#: engines/scumm/dialogs.cpp:598 +msgid "Speech and Subtitles" +msgstr "Voix et Sous-titres" + +#: engines/scumm/dialogs.cpp:599 +msgid "Subtitles Only" +msgstr "Sous-titres" + +#: engines/scumm/dialogs.cpp:607 +msgctxt "lowres" +msgid "Speech & Subs" +msgstr "Voix & ST" + +#: engines/scumm/help.cpp:73 +msgid "Common keyboard commands:" +msgstr "Commandes clavier communes:" + +#: engines/scumm/help.cpp:74 +msgid "Save / Load dialog" +msgstr "Dialogue de Sauvegarde/Chargement" + +#: engines/scumm/help.cpp:76 +msgid "Skip line of text" +msgstr "Passer la phrase" + +#: engines/scumm/help.cpp:77 +msgid "Esc" +msgstr "Esc" + +#: engines/scumm/help.cpp:77 +msgid "Skip cutscene" +msgstr "Passer la séquence" + +#: engines/scumm/help.cpp:78 +msgid "Space" +msgstr "Espace" + +#: engines/scumm/help.cpp:78 +msgid "Pause game" +msgstr "Mettre en pause:" + +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 +msgid "Ctrl" +msgstr "Ctrl" + +#: engines/scumm/help.cpp:79 +msgid "Load game state 1-10" +msgstr "Charger sauvegarde 1-10:" + +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 +msgid "Alt" +msgstr "Alt" + +#: engines/scumm/help.cpp:80 +msgid "Save game state 1-10" +msgstr "Écrire sauvegarde 1-10:" + +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 +msgid "Enter" +msgstr "Entrer" + +#: engines/scumm/help.cpp:86 +msgid "Toggle fullscreen" +msgstr "Basculer en plein écran" + +#: engines/scumm/help.cpp:87 +msgid "Music volume up / down" +msgstr "Augmenter / Diminuer volume musique" + +#: engines/scumm/help.cpp:88 +msgid "Text speed slower / faster" +msgstr "Diminuer/Augmenter vitesse du texte" + +#: engines/scumm/help.cpp:89 +msgid "Simulate left mouse button" +msgstr "Simuler bouton gauche de la souris" + +#: engines/scumm/help.cpp:90 +msgid "Tab" +msgstr "Tab" + +#: engines/scumm/help.cpp:90 +msgid "Simulate right mouse button" +msgstr "Simuler bouton droit de la souris" + +#: engines/scumm/help.cpp:93 +msgid "Special keyboard commands:" +msgstr "Commandes clavier spéciales:" + +#: engines/scumm/help.cpp:94 +msgid "Show / Hide console" +msgstr "Afficher/Cacher la console" + +#: engines/scumm/help.cpp:95 +msgid "Start the debugger" +msgstr "Ouvrir le débugger" + +#: engines/scumm/help.cpp:96 +msgid "Show memory consumption" +msgstr "Afficher la consomation de mémoire" + +#: engines/scumm/help.cpp:97 +msgid "Run in fast mode (*)" +msgstr "Jouer en mode rapide (*)" + +#: engines/scumm/help.cpp:98 +msgid "Run in really fast mode (*)" +msgstr "Jouer en mode trčs rapide (*)" + +#: engines/scumm/help.cpp:99 +msgid "Toggle mouse capture" +msgstr "Capturer/Libérer la souris" + +#: engines/scumm/help.cpp:100 +msgid "Switch between graphics filters" +msgstr "Changer de filtre graphique" + +#: engines/scumm/help.cpp:101 +msgid "Increase / Decrease scale factor" +msgstr "Augmenter/Diminuer le facteur d'échelle" + +#: engines/scumm/help.cpp:102 +msgid "Toggle aspect-ratio correction" +msgstr "Changer correction du rapport d'aspect" + +#: engines/scumm/help.cpp:107 +msgid "* Note that using ctrl-f and" +msgstr "* Note que l'utilisation de crtl-f et" + +#: engines/scumm/help.cpp:108 +msgid " ctrl-g are not recommended" +msgstr " crtl-g n'est pas recommandé car" + +#: engines/scumm/help.cpp:109 +msgid " since they may cause crashes" +msgstr " elle peut causer des plantages ou" + +#: engines/scumm/help.cpp:110 +msgid " or incorrect game behavior." +msgstr " ou comportement incorrect du jeu." + +#: engines/scumm/help.cpp:114 +msgid "Spinning drafts on the keyboard:" +msgstr "Filage au clavier:" + +#: engines/scumm/help.cpp:116 +msgid "Main game controls:" +msgstr "Controles principaux du jeu:" + +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 +msgid "Push" +msgstr "Pousser" + +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 +msgid "Pull" +msgstr "Tirer" + +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:207 +msgid "Give" +msgstr "Donner" + +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:190 +#: engines/scumm/help.cpp:208 +msgid "Open" +msgstr "Ouvrir" + +#: engines/scumm/help.cpp:126 +msgid "Go to" +msgstr "Aller" + +#: engines/scumm/help.cpp:127 +msgid "Get" +msgstr "Prendre" + +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:198 +#: engines/scumm/help.cpp:213 engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:250 +msgid "Use" +msgstr "Utiliser" + +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 +msgid "Read" +msgstr "Lire" + +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 +msgid "New kid" +msgstr "Changer" + +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 +msgid "Turn on" +msgstr "Allumer" + +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 +msgid "Turn off" +msgstr "Éteindre" + +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:194 +msgid "Walk to" +msgstr "Aller" + +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:227 +msgid "Pick up" +msgstr "Prendre" + +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 +msgid "What is" +msgstr "Qu'est-ce" + +#: engines/scumm/help.cpp:146 +msgid "Unlock" +msgstr "Déverrouiller" + +#: engines/scumm/help.cpp:149 +msgid "Put on" +msgstr "Mettre" + +#: engines/scumm/help.cpp:150 +msgid "Take off" +msgstr "Enlever" + +#: engines/scumm/help.cpp:156 +msgid "Fix" +msgstr "Réparer" + +#: engines/scumm/help.cpp:158 +msgid "Switch" +msgstr "Commuter" + +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228 +msgid "Look" +msgstr "Regarder" + +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223 +msgid "Talk" +msgstr "Parler" + +#: engines/scumm/help.cpp:174 +msgid "Travel" +msgstr "Voyager" + +#: engines/scumm/help.cpp:175 +msgid "To Henry / To Indy" +msgstr "Henry / Indy" + +#. I18N: These are different musical notes +#: engines/scumm/help.cpp:179 +msgid "play C minor on distaff" +msgstr "jouer Do mineur sur la quenouille" + +#: engines/scumm/help.cpp:180 +msgid "play D on distaff" +msgstr "jouer Ré sur la quenouille" + +#: engines/scumm/help.cpp:181 +msgid "play E on distaff" +msgstr "jouer Mi sur la quenouille" + +#: engines/scumm/help.cpp:182 +msgid "play F on distaff" +msgstr "jouer Fa sur la quenouille" + +#: engines/scumm/help.cpp:183 +msgid "play G on distaff" +msgstr "jouer Sol sur la quenouille" + +#: engines/scumm/help.cpp:184 +msgid "play A on distaff" +msgstr "jouer La sur la quenouille" + +#: engines/scumm/help.cpp:185 +msgid "play B on distaff" +msgstr "jouer Si sur la quenouille" + +#: engines/scumm/help.cpp:186 +msgid "play C major on distaff" +msgstr "jouer Do Majeur sur la quenouille" + +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 +msgid "puSh" +msgstr "Pousser" + +#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215 +msgid "pull (Yank)" +msgstr "Tirer" + +#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212 +#: engines/scumm/help.cpp:248 +msgid "Talk to" +msgstr "Parler ŕ" + +#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211 +msgid "Look at" +msgstr "Regarder" + +#: engines/scumm/help.cpp:200 +msgid "turn oN" +msgstr "Allumer" + +#: engines/scumm/help.cpp:201 +msgid "turn oFf" +msgstr "Éteindre" + +#: engines/scumm/help.cpp:217 +msgid "KeyUp" +msgstr "Touche Haut" + +#: engines/scumm/help.cpp:217 +msgid "Highlight prev dialogue" +msgstr "Sélectionner le dialogue précédent" + +#: engines/scumm/help.cpp:218 +msgid "KeyDown" +msgstr "Touche Bas" + +#: engines/scumm/help.cpp:218 +msgid "Highlight next dialogue" +msgstr "Sélectionner le dialogue suivant" + +#: engines/scumm/help.cpp:222 +msgid "Walk" +msgstr "Marcher" + +#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249 +msgid "Inventory" +msgstr "Inventaire" + +#: engines/scumm/help.cpp:226 +msgid "Object" +msgstr "Objet" + +#: engines/scumm/help.cpp:229 +msgid "Black and White / Color" +msgstr "Noir et Blanc / Couleur" + +#: engines/scumm/help.cpp:232 +msgid "Eyes" +msgstr "Yeux" + +#: engines/scumm/help.cpp:233 +msgid "Tongue" +msgstr "Langue" + +#: engines/scumm/help.cpp:235 +msgid "Punch" +msgstr "Frapper" + +#: engines/scumm/help.cpp:236 +msgid "Kick" +msgstr "Coup de pied" + +#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247 +msgid "Examine" +msgstr "Examiner" + +#: engines/scumm/help.cpp:240 +msgid "Regular cursor" +msgstr "Curseur normal" + +#. I18N: Comm is a communication device +#: engines/scumm/help.cpp:243 +msgid "Comm" +msgstr "Comm" + +#: engines/scumm/help.cpp:246 +msgid "Save / Load / Options" +msgstr "Sauvegarder / Charger / Options" + +#: engines/scumm/help.cpp:255 +msgid "Other game controls:" +msgstr "Autres controles du jeu:" + +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267 +msgid "Inventory:" +msgstr "Inventaires:" + +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274 +msgid "Scroll list up" +msgstr "Faire défiler vers le haut" + +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +msgid "Scroll list down" +msgstr "Faire défiler vers le bas" + +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268 +msgid "Upper left item" +msgstr "Élément en haut ŕ gauche" + +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270 +msgid "Lower left item" +msgstr "Élément en bas ŕ gauche" + +#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +msgid "Upper right item" +msgstr "Élément en haut ŕ droite" + +#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273 +msgid "Lower right item" +msgstr "Élément en bas ŕ droite" + +#: engines/scumm/help.cpp:269 +msgid "Middle left item" +msgstr "Élément au milieu ŕ gauche" + +#: engines/scumm/help.cpp:272 +msgid "Middle right item" +msgstr "Élément au milieu ŕ droite" + +#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284 +msgid "Switching characters:" +msgstr "Changer de personnage" + +#: engines/scumm/help.cpp:281 +msgid "Second kid" +msgstr "Second enfant" + +#: engines/scumm/help.cpp:282 +msgid "Third kid" +msgstr "Troisičme enfant" + +#: engines/scumm/help.cpp:294 +msgid "Fighting controls (numpad):" +msgstr "Controles de combat (pavet numérique):" + +#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296 +#: engines/scumm/help.cpp:297 +msgid "Step back" +msgstr "Pas en arričre" + +#: engines/scumm/help.cpp:298 +msgid "Block high" +msgstr "Bloquer haut" + +#: engines/scumm/help.cpp:299 +msgid "Block middle" +msgstr "Bloquer milieu" + +#: engines/scumm/help.cpp:300 +msgid "Block low" +msgstr "Bloquer bas" + +#: engines/scumm/help.cpp:301 +msgid "Punch high" +msgstr "Fraper haut" + +#: engines/scumm/help.cpp:302 +msgid "Punch middle" +msgstr "Frapper milieu" + +#: engines/scumm/help.cpp:303 +msgid "Punch low" +msgstr "Frapper bas" + +#: engines/scumm/help.cpp:306 +msgid "These are for Indy on left." +msgstr "Correct quand Indy est ŕ gauche." + +#: engines/scumm/help.cpp:307 +msgid "When Indy is on the right," +msgstr "Quand Indy est ŕ droite, 7, 4 et 1" + +#: engines/scumm/help.cpp:308 +msgid "7, 4, and 1 are switched with" +msgstr "sont interverties avec 9, 6 et 3" + +#: engines/scumm/help.cpp:309 +msgid "9, 6, and 3, respectively." +msgstr "respectivement." + +#: engines/scumm/help.cpp:316 +msgid "Biplane controls (numpad):" +msgstr "Controles du biplane (paver numérique):" + +#: engines/scumm/help.cpp:317 +msgid "Fly to upper left" +msgstr "Voler vers le haut ŕ gauche" + +#: engines/scumm/help.cpp:318 +msgid "Fly to left" +msgstr "Voler vers la gauche" + +#: engines/scumm/help.cpp:319 +msgid "Fly to lower left" +msgstr "Voler vers le bas ŕ gauche" + +#: engines/scumm/help.cpp:320 +msgid "Fly upwards" +msgstr "Voler vers le haut" + +#: engines/scumm/help.cpp:321 +msgid "Fly straight" +msgstr "Voler tout droit" + +#: engines/scumm/help.cpp:322 +msgid "Fly down" +msgstr "Voler vers le bas" + +#: engines/scumm/help.cpp:323 +msgid "Fly to upper right" +msgstr "Voler vers le haut ŕ droite" + +#: engines/scumm/help.cpp:324 +msgid "Fly to right" +msgstr "Voler vers la droite" + +#: engines/scumm/help.cpp:325 +msgid "Fly to lower right" +msgstr "Voler vers la bas ŕ droite" + +#: engines/scumm/scumm.cpp:1768 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" +"Support MIDI natif requičre la mise ŕ jour Roland de LucasArt,\n" +"mais %s manque. Utilise AdLib ŕ la place." + +#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189 +#, c-format +msgid "" +"Failed to save game state to file:\n" +"\n" +"%s" +msgstr "" +"Échec de l'enregistrement de l'état du jeu dans le fichier:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154 +#, c-format +msgid "" +"Failed to load game state from file:\n" +"\n" +"%s" +msgstr "" +"Échec du chargement de l'état du jeu depuis le fichier:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197 +#, c-format +msgid "" +"Successfully saved game state in file:\n" +"\n" +"%s" +msgstr "" +"État du jeu enregistré avec succčs dans le fichier:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2492 +msgid "" +"Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " +"play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " +"directory inside the Tentacle game directory." +msgstr "" +"Normalement, Maniac Mansion devrait démarrer maintenant. Cependant ScummVM " +"ne supporte pas encore cette fonctionalité. Pour jouer ŕ Maniac Mansion, " +"choisissez 'Ajouter...' dans le Lanceur de ScummVM et sélectionnez le " +"répertoire 'Maniac Mansion' dans le répertoire du jeu Day Of The Tentacle." + +#. I18N: Option for fast scene switching +#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171 +msgid "~Z~ip Mode Activated" +msgstr "Mode ~Z~ip Activé" + +#: engines/mohawk/dialogs.cpp:93 +msgid "~T~ransitions Enabled" +msgstr "T~r~ansitions activées" + +#. I18N: Drop book page +#: engines/mohawk/dialogs.cpp:95 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:99 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:105 +msgid "~M~ain Menu" +msgstr "~M~enu Principal" + +#: engines/mohawk/dialogs.cpp:172 +msgid "~W~ater Effect Enabled" +msgstr "~E~ffets de l'Eau Activés" + +#: engines/sci/engine/kfile.cpp:678 +msgid "Restore game:" +msgstr "Charger le jeu:" + +#: engines/sci/engine/kfile.cpp:678 +msgid "Restore" +msgstr "Charger" + +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "Fichier de séquence '%s' non trouvé!" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:475 +msgid "Failed to load game state from file." +msgstr "Échec du chargement de l'état du jeu depuis le disque." + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553 +msgid "Failed to save game state to file." +msgstr "Échec de l'enregistrement de l'état du jeu sur le disque." + +#: engines/gob/inter_v5.cpp:107 +msgid "Failed to delete file." +msgstr "Échec de la suppression du fichier." + +#: engines/groovie/script.cpp:420 +msgid "Failed to save game" +msgstr "Échec de la sauvegarde." + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" +"Il semble que vous utilisiez un périphérique General MIDI,\n" +"mais ce jeu ne support que le MIDI Roland MT32.\n" +"Nous essayons d'associer les instruments Roland MT32 auxinstruments General " +"MIDI. Mais il est possible que quelquespistes ne soient pas jouées " +"correctement." + +#: engines/m4/m4_menus.cpp:138 +msgid "Save game failed!" +msgstr "Échec de la sauvegarde!" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" +"Fichier \"sky.cpt\" manquant\n" +"Vous pouvez le télécharger sur www.scummvm.org" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" +"Le fichier \"sky.cpt\" a une taille incorrecte.\n" +"Vous pouvez le (re)télécharger sur www.scummvm.org" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" +"Les séquences DXA sont présente mais ScummVM a été compilé sans le support " +"zlib." + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "Les séquences MPEG2 ne sont plus supportées" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "Séquence '%s' non trouvé" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" +"ScummVM a trouvé des anciens fichiers de sauvegarde pour Broken Sword 1 qui " +"ont besoin d'ętre convertis.\n" +"L'ancien format de sauvegarde n'est plus supporté, donc vous ne pourrez pas " +"les charger si vous ne les convertissez pas.\n" +"\n" +"Appuyer sur OK pour les convertir maintenant, sinon le męme message " +"s'affichera la prochaine fois que vous démarrerez le jeu.\n" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" +"La sauvegarde cible existe déjŕ!\n" +"Voulez-vous conserver l'ancienne sauvegarde (%s) ou la nouvelle (%s)?\n" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "Garde l'ancienne" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "Garder la nouvelle" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "C'est la fin de la démo des Chevaliers de Baphomet" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" +"Erreur lors de la sauvegarde dans l'emplacement %i\n" +"\n" + +#: engines/parallaction/saveload.cpp:211 +msgid "Loading game..." +msgstr "Chargement en cours..." + +#: engines/parallaction/saveload.cpp:226 +msgid "Saving game..." +msgstr "Sauvegarde en cours..." + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" +"ScummVM a trouvé des anciens fichiers de sauvegarde pour Nippon Safes qui " +"ont besoin d'ętre convertis.\n" +"L'ancien format de sauvegarde n'est plus supporté, donc vous ne pourrez pas " +"les charger si vous ne les convertissez pas.\n" +"\n" +"Appuyer sur OK pour les convertir maintenant, sinon le męme message " +"s'affichera la prochaine fois que vous démarrerez le jeu.\n" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "ScummVM a converti avec succčs vos anciennes sauvegardes." + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 +msgid "MAME OPL emulator" +msgstr "Émulateur MAME OPL" + +#: audio/fmopl.cpp:51 +msgid "DOSBox OPL emulator" +msgstr "Émulateur DOSBox OPL" + +#: audio/mididrv.cpp:205 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected)." +msgstr "" + +#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253 +#: audio/mididrv.cpp:268 +msgid "Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:217 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information." +msgstr "" + +#: audio/mididrv.cpp:253 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected)." +msgstr "" + +#: audio/mididrv.cpp:268 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information." +msgstr "" + +#: audio/null.h:43 +msgid "No music" +msgstr "Pas de musique" + +#: audio/mods/paula.cpp:189 +msgid "Amiga Audio Emulator" +msgstr "Émulateur Amiga Audio" + +#: audio/softsynth/adlib.cpp:1594 +msgid "AdLib Emulator" +msgstr "Émulateur AdLib" + +#: audio/softsynth/appleiigs.cpp:33 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "Émulateur Apple II GS (PAS IMPLÉMENTÉ)" + +#: audio/softsynth/sid.cpp:1430 +msgid "C64 Audio Emulator" +msgstr "Émulateur C64 Audio" + +#: audio/softsynth/mt32.cpp:329 +msgid "Initializing MT-32 Emulator" +msgstr "Initialisation de l'Émulateur MT-32" + +#: audio/softsynth/mt32.cpp:543 +msgid "MT-32 Emulator" +msgstr "Émulateur MT-32" + +#: audio/softsynth/pcspk.cpp:139 +msgid "PC Speaker Emulator" +msgstr "Émulateur Haut Parleur PC" + +#: audio/softsynth/pcspk.cpp:158 +msgid "IBM PCjr Emulator" +msgstr "Émulateur IBM PCjr" + +#: backends/keymapper/remap-dialog.cpp:47 +msgid "Keymap:" +msgstr "Affectation des touches:" + +#: backends/keymapper/remap-dialog.cpp:64 +msgid " (Active)" +msgstr "(Actif)" + +#: backends/keymapper/remap-dialog.cpp:98 +msgid " (Global)" +msgstr "(Global)" + +#: backends/keymapper/remap-dialog.cpp:108 +msgid " (Game)" +msgstr "(Jeu)" + +#: backends/midi/windows.cpp:164 +msgid "Windows MIDI" +msgstr "MIDI Windows" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 +msgid "ScummVM Main Menu" +msgstr "Menu Principal ScummVM" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 +msgid "~L~eft handed mode" +msgstr "Mode ~G~aucher" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 +msgid "~I~ndy fight controls" +msgstr "Contrôle des combats d'~I~ndy" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 +msgid "Show mouse cursor" +msgstr "Afficher le curseur de la souris" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +msgid "Snap to edges" +msgstr "Aligner sur les bords" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +msgid "Touch X Offset" +msgstr "Décalage X du toucher" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 +msgid "Touch Y Offset" +msgstr "Décallage Y du toucher" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 +msgid "Use laptop trackpad-style cursor control" +msgstr "Activer le contrôle du curseur de type trackpad" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 +msgid "Tap for left click, double tap right click" +msgstr "Toucher pour un clic gauche, toucher deux fois pour un clic droit" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +msgid "Sensitivity" +msgstr "Sensibilité" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 +msgid "Initial top screen scale:" +msgstr "Échelle initiale de l'écran du haut" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 +msgid "Main screen scaling:" +msgstr "Échelle de l'écran principal" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 +msgid "Hardware scale (fast, but low quality)" +msgstr "Mise ŕ l'echelle matérielle (rapide mais qualité faible)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +msgid "Software scale (good quality, but slower)" +msgstr "Mise ŕ l'échelle logicielle (bonne qualité mais plus lent)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 +msgid "Unscaled (you must scroll left and right)" +msgstr "Sans changement d'échelle (vous devez faire défiler l'écran)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +msgid "Brightness:" +msgstr "Luminosité:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 +msgid "High quality audio (slower) (reboot)" +msgstr "Audio haute qualité (plus lent) (redémarrer)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 +msgid "Disable power off" +msgstr "Désactivé l'extinction" + +#: backends/platform/iphone/osys_events.cpp:338 +msgid "Mouse-click-and-drag mode enabled." +msgstr "Mode souris-cliquer-et-déplacer activé" + +#: backends/platform/iphone/osys_events.cpp:340 +msgid "Mouse-click-and-drag mode disabled." +msgstr "Mode souris-cliquer-et-déplacer désactivé" + +#: backends/platform/iphone/osys_events.cpp:351 +msgid "Touchpad mode enabled." +msgstr "Mode touchpad activé" + +#: backends/platform/iphone/osys_events.cpp:353 +msgid "Touchpad mode disabled." +msgstr "Mode touchpad désactivé" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:67 +msgid "Hide ScummVM" +msgstr "Cacher ScummVM" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:70 +msgid "Hide Others" +msgstr "Masquer les Autres" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:74 +msgid "Show All" +msgstr "Tout Afficher" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:92 +#: backends/platform/sdl/macosx/appmenu_osx.mm:99 +msgid "Window" +msgstr "Fenętre" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:95 +msgid "Minimize" +msgstr "Minimiser" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45 +msgid "Normal (no scaling)" +msgstr "Normal (échelle d'origine)" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64 +msgctxt "lowres" +msgid "Normal (no scaling)" +msgstr "Normal" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533 +msgid "Enabled aspect ratio correction" +msgstr "Activer la correction du rapport d'aspect" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538 +msgid "Disabled aspect ratio correction" +msgstr "Désactiver la correction du rapport d'aspect" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207 +msgid "Active graphics filter:" +msgstr "Mode graphique actif:" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477 +msgid "Windowed mode" +msgstr "Mode Fenętre" + +#: backends/graphics/opengl/opengl-graphics.cpp:130 +msgid "OpenGL Normal" +msgstr "OpenGL Normal" + +#: backends/graphics/opengl/opengl-graphics.cpp:131 +msgid "OpenGL Conserve" +msgstr "OpenGL Préserve" + +#: backends/graphics/opengl/opengl-graphics.cpp:132 +msgid "OpenGL Original" +msgstr "OpenGL Originel" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415 +msgid "Current display mode" +msgstr "Mode vidéo actuel" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558 +msgid "Active filter mode: Linear" +msgstr "Filtre actif: Linéaire" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560 +msgid "Active filter mode: Nearest" +msgstr "Filtre actif: Plus proche" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 +msgid "Up" +msgstr "Haut" + +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 +msgid "Down" +msgstr "Bas" + +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 +msgid "Left" +msgstr "Gauche" + +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 +msgid "Right" +msgstr "Droite" + +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 +msgid "Left Click" +msgstr "Clic Gauche" + +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 +msgid "Right Click" +msgstr "Clic Droit" + +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 +msgid "Zone" +msgstr "Zone" + +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 +msgid "Multi Function" +msgstr "Fonction Multiple" + +#: backends/platform/symbian/src/SymbianActions.cpp:48 +msgid "Swap character" +msgstr "Changement de personnage" + +#: backends/platform/symbian/src/SymbianActions.cpp:49 +msgid "Skip text" +msgstr "Sauter le texte" + +#: backends/platform/symbian/src/SymbianActions.cpp:51 +msgid "Fast mode" +msgstr "Mode rapide" + +#: backends/platform/symbian/src/SymbianActions.cpp:53 +msgid "Debugger" +msgstr "Debugger" + +#: backends/platform/symbian/src/SymbianActions.cpp:54 +msgid "Global menu" +msgstr "Menu global" + +#: backends/platform/symbian/src/SymbianActions.cpp:55 +msgid "Virtual keyboard" +msgstr "Clavier virtuel" + +#: backends/platform/symbian/src/SymbianActions.cpp:56 +msgid "Key mapper" +msgstr "Affectation des touches" + +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +msgid "Do you want to quit ?" +msgstr "Voulez-vous quitter?" + +#: backends/platform/wii/options.cpp:51 +msgid "Video" +msgstr "Vidéo" + +#: backends/platform/wii/options.cpp:54 +msgid "Current video mode:" +msgstr "Mode vidéo actuel" + +#: backends/platform/wii/options.cpp:56 +msgid "Double-strike" +msgstr "Coup double" + +#: backends/platform/wii/options.cpp:60 +msgid "Horizontal underscan:" +msgstr "Underscan horizontal:" + +#: backends/platform/wii/options.cpp:66 +msgid "Vertical underscan:" +msgstr "Underscan vertical:" + +#: backends/platform/wii/options.cpp:71 +msgid "Input" +msgstr "Entrée" + +#: backends/platform/wii/options.cpp:74 +msgid "GC Pad sensitivity:" +msgstr "Sensibilité du pad GC:" + +#: backends/platform/wii/options.cpp:80 +msgid "GC Pad acceleration:" +msgstr "Acceleration du pad GC:" + +#: backends/platform/wii/options.cpp:86 +msgid "DVD" +msgstr "DVD" + +#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101 +msgid "Status:" +msgstr "Status:" + +#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 +msgid "Unknown" +msgstr "Inconue" + +#: backends/platform/wii/options.cpp:93 +msgid "Mount DVD" +msgstr "Monter le DVD" + +#: backends/platform/wii/options.cpp:94 +msgid "Unmount DVD" +msgstr "Démonter le DVD" + +#: backends/platform/wii/options.cpp:98 +msgid "SMB" +msgstr "SMB" + +#: backends/platform/wii/options.cpp:106 +msgid "Server:" +msgstr "Serveur:" + +#: backends/platform/wii/options.cpp:110 +msgid "Share:" +msgstr "Disque partagé:" + +#: backends/platform/wii/options.cpp:114 +msgid "Username:" +msgstr "Nom d'utilisateur:" + +#: backends/platform/wii/options.cpp:118 +msgid "Password:" +msgstr "Mot de passe:" + +#: backends/platform/wii/options.cpp:121 +msgid "Init network" +msgstr "Initialiser le réseau" + +#: backends/platform/wii/options.cpp:123 +msgid "Mount SMB" +msgstr "Monter SMB" + +#: backends/platform/wii/options.cpp:124 +msgid "Unmount SMB" +msgstr "Démonter SMB" + +#: backends/platform/wii/options.cpp:143 +msgid "DVD Mounted successfully" +msgstr "DVD monté avec succčs" + +#: backends/platform/wii/options.cpp:146 +msgid "Error while mounting the DVD" +msgstr "Échec du montage du DVD" + +#: backends/platform/wii/options.cpp:148 +msgid "DVD not mounted" +msgstr "DVD non monté" + +#: backends/platform/wii/options.cpp:161 +msgid "Network up, share mounted" +msgstr "Réseau connecté, disque partagé monté" + +#: backends/platform/wii/options.cpp:163 +msgid "Network up" +msgstr "Réseau connecté" + +#: backends/platform/wii/options.cpp:166 +msgid ", error while mounting the share" +msgstr ", échec du montage du disque partagé" + +#: backends/platform/wii/options.cpp:168 +msgid ", share not mounted" +msgstr ", disque partagé non monté" + +#: backends/platform/wii/options.cpp:174 +msgid "Network down" +msgstr "Réseau déconnecté" + +#: backends/platform/wii/options.cpp:178 +msgid "Initializing network" +msgstr "Initialisation du réseau" + +#: backends/platform/wii/options.cpp:182 +msgid "Timeout while initializing network" +msgstr "Dépassement du délai lors de l'initialisation du réseau" + +#: backends/platform/wii/options.cpp:186 +#, c-format +msgid "Network not initialized (%d)" +msgstr "Réseau non initialisé (%d)" + +#: backends/platform/wince/CEActionsPocket.cpp:46 +msgid "Hide Toolbar" +msgstr "Caché la barre d'outils" + +#: backends/platform/wince/CEActionsPocket.cpp:47 +msgid "Show Keyboard" +msgstr "Afficher le clavier" + +#: backends/platform/wince/CEActionsPocket.cpp:48 +msgid "Sound on/off" +msgstr "Audio marche/arręt" + +#: backends/platform/wince/CEActionsPocket.cpp:49 +msgid "Right click" +msgstr "Clic droit" + +#: backends/platform/wince/CEActionsPocket.cpp:50 +msgid "Show/Hide Cursor" +msgstr "Afficher/Cacher le curseur" + +#: backends/platform/wince/CEActionsPocket.cpp:51 +msgid "Free look" +msgstr "Regarder autour" + +#: backends/platform/wince/CEActionsPocket.cpp:52 +msgid "Zoom up" +msgstr "Dézoomer" + +#: backends/platform/wince/CEActionsPocket.cpp:53 +msgid "Zoom down" +msgstr "Zoomer" + +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 +msgid "Bind Keys" +msgstr "Affecter les touches" + +#: backends/platform/wince/CEActionsPocket.cpp:56 +msgid "Cursor Up" +msgstr "Haut" + +#: backends/platform/wince/CEActionsPocket.cpp:57 +msgid "Cursor Down" +msgstr "Bas" + +#: backends/platform/wince/CEActionsPocket.cpp:58 +msgid "Cursor Left" +msgstr "Gauche" + +#: backends/platform/wince/CEActionsPocket.cpp:59 +msgid "Cursor Right" +msgstr "Droit" + +#: backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Do you want to load or save the game?" +msgstr "Voulez-vous charger ou enregistrer le jeu?" + +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +msgid " Are you sure you want to quit ? " +msgstr "Voulez-vous vraiment quitter?" + +#: backends/platform/wince/CEActionsSmartphone.cpp:50 +msgid "Keyboard" +msgstr "Clavier" + +#: backends/platform/wince/CEActionsSmartphone.cpp:51 +msgid "Rotate" +msgstr "Pivoter" + +#: backends/platform/wince/CELauncherDialog.cpp:56 +msgid "Using SDL driver " +msgstr "Utilise le pilote SDL" + +#: backends/platform/wince/CELauncherDialog.cpp:60 +msgid "Display " +msgstr "Affichage" + +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "Do you want to perform an automatic scan ?" +msgstr "Voulez-vous exécuter une recherche automatique?" + +#: backends/platform/wince/wince-sdl.cpp:471 +msgid "Map right click action" +msgstr "Affecter l'action 'Clic Droit'" + +#: backends/platform/wince/wince-sdl.cpp:475 +msgid "You must map a key to the 'Right Click' action to play this game" +msgstr "" +"Vous devez affecter une touche ŕ l'action de 'Clic Droit' pour pouvoir jouer " +"ŕ ce jeu" + +#: backends/platform/wince/wince-sdl.cpp:484 +msgid "Map hide toolbar action" +msgstr "Affecter l'action 'Cacher Bar d'Outils'" + +#: backends/platform/wince/wince-sdl.cpp:488 +msgid "You must map a key to the 'Hide toolbar' action to play this game" +msgstr "" +"Vous devez affecter une touche ŕ l'action 'Cacher Bar d'Outils' pour pouvoir " +"jouer ŕ ce jeu" + +#: backends/platform/wince/wince-sdl.cpp:497 +msgid "Map Zoom Up action (optional)" +msgstr "Affecter l'action 'Dézoomer' (optionnelle)" + +#: backends/platform/wince/wince-sdl.cpp:500 +msgid "Map Zoom Down action (optional)" +msgstr "Affecter l'action 'Zoomer' (optionnelle)" + +#: backends/platform/wince/wince-sdl.cpp:508 +msgid "" +"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" +msgstr "" +"Noubliez pas d'affecter une touche ŕ l'action 'Cacher Bar d'Outils' pour " +"pouvoir voir entičrement l'inventaire" + +#: backends/events/default/default-events.cpp:222 +msgid "Do you really want to return to the Launcher?" +msgstr "Voulez-vous vraiment retourner au Lanceur?" + +#: backends/events/default/default-events.cpp:222 +msgid "Launcher" +msgstr "Lanceur" + +#: backends/events/default/default-events.cpp:244 +msgid "Do you really want to quit?" +msgstr "Voulez-vous vraiment quitter?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +msgid "Maximum Volume" +msgstr "Volume Maximum" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "Augmentation Volume" + +#: backends/events/gph/gph-events.cpp:398 +msgid "Minimal Volume" +msgstr "Volume Minimum" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "Diminution Volume" + +#: backends/updates/macosx/macosx-updates.mm:65 +msgid "Check for Updates..." +msgstr "Recherche des mises ŕ jour..." + +#~ msgctxt "lowres" +#~ msgid "Add Game..." +#~ msgstr "Ajouter..." + +#~ msgid "Add Game..." +#~ msgstr "Ajouter..." + +#~ msgid "Discovered %d new games." +#~ msgstr "%d nouveaux jeux trouvés." + +#~ msgid "Command line argument not processed" +#~ msgstr "Argument de ligne de commande non traité" + +#~ msgid "FM Towns Emulator" +#~ msgstr "Émulateur FM Towns" + +#~ msgid "Invalid Path" +#~ msgstr "Chemin Invalide" diff --git a/po/hu_HU.po b/po/hu_HU.po index cbd9ae902b..0a11aa8c4f 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -1,2789 +1,2777 @@ -# Hungarian translation for ScummVM.
-# Copyright (C) 2010-2011 ScummVM Team
-# This file is distributed under the same license as the ScummVM package.
-# George Kormendi <grubycza@hotmail.com>, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
-"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2011-08-20 15:12+0100\n"
-"PO-Revision-Date: 2011-06-21 09:54+0100\n"
-"Last-Translator: Gruby <grubycza@hotmail.com>\n"
-"Language-Team: Hungarian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-2\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: Magyar\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Poedit-Language: Hungarian\n"
-"X-Poedit-Country: HUNGARY\n"
-"X-Poedit-SourceCharset: iso-8859-1\n"
-
-#: gui/about.cpp:91
-#, c-format
-msgid "(built on %s)"
-msgstr "(készült %s)"
-
-#: gui/about.cpp:98
-msgid "Features compiled in:"
-msgstr "Lefordított összetevők:"
-
-#: gui/about.cpp:107
-msgid "Available engines:"
-msgstr "Támogatott játékmotorok:"
-
-#: gui/browser.cpp:66
-msgid "Go up"
-msgstr "Feljebb"
-
-#: gui/browser.cpp:66 gui/browser.cpp:68
-msgid "Go to previous directory level"
-msgstr "Vissza az előző könyvtárszintre"
-
-#: gui/browser.cpp:68
-msgctxt "lowres"
-msgid "Go up"
-msgstr "Feljebb"
-
-#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178
-#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54
-#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190
-#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:48
-#: backends/events/default/default-events.cpp:222
-#: backends/events/default/default-events.cpp:244
-msgid "Cancel"
-msgstr "Mégse"
-
-#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55
-msgid "Choose"
-msgstr "Választ"
-
-#: gui/gui-manager.cpp:116 engines/scumm/help.cpp:125
-#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165
-#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:209
-#: backends/keymapper/remap-dialog.cpp:52
-msgid "Close"
-msgstr "Bezár"
-
-#: gui/gui-manager.cpp:119
-msgid "Mouse click"
-msgstr "Egérkattintás"
-
-#: gui/gui-manager.cpp:122 base/main.cpp:286
-msgid "Display keyboard"
-msgstr "Billentyűzet beállítások"
-
-#: gui/gui-manager.cpp:125 base/main.cpp:289
-msgid "Remap keys"
-msgstr "Billentyűk átállítása"
-
-#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145
-msgid "Choose an action to map"
-msgstr "Válassz műveletet a kiosztáshoz"
-
-#: gui/KeysDialog.cpp:41
-msgid "Map"
-msgstr "Kiosztás"
-
-#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936
-#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179
-#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192
-#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545
-#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131
-#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344
-#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360
-#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633
-#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389
-#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281
-#: backends/platform/wii/options.cpp:47
-#: backends/platform/wince/CELauncherDialog.cpp:54
-msgid "OK"
-msgstr "OK"
-
-#: gui/KeysDialog.cpp:49
-msgid "Select an action and click 'Map'"
-msgstr "Válassz műveletet és katt a 'Kiosztás'-ra"
-
-#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141
-#, c-format
-msgid "Associated key : %s"
-msgstr "Társított billentyű: %s"
-
-#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143
-#, c-format
-msgid "Associated key : none"
-msgstr "Társított billentyű: nincs"
-
-#: gui/KeysDialog.cpp:90
-msgid "Please select an action"
-msgstr "Válassz egy műveletet"
-
-#: gui/KeysDialog.cpp:106
-msgid "Press the key to associate"
-msgstr "Nyomj egy billentyűt a társításhoz"
-
-#: gui/launcher.cpp:165
-msgid "Game"
-msgstr "Játék"
-
-#: gui/launcher.cpp:169
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172
-msgid ""
-"Short game identifier used for referring to savegames and running the game "
-"from the command line"
-msgstr ""
-"Rövid játékazonosító a játékmentésekhez és a játék parancssori futtatásához"
-
-#: gui/launcher.cpp:171
-msgctxt "lowres"
-msgid "ID:"
-msgstr "ID:"
-
-#: gui/launcher.cpp:176
-msgid "Name:"
-msgstr "Név:"
-
-#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179
-msgid "Full title of the game"
-msgstr "A játék teljes neve"
-
-#: gui/launcher.cpp:178
-msgctxt "lowres"
-msgid "Name:"
-msgstr "Név:"
-
-#: gui/launcher.cpp:182
-msgid "Language:"
-msgstr "Nyelv:"
-
-#: gui/launcher.cpp:182 gui/launcher.cpp:183
-msgid ""
-"Language of the game. This will not turn your Spanish game version into "
-"English"
-msgstr ""
-"A játék nyelve. Ne állítsd át a pl. Spanyol nyelvű játékodat Angolra nyelvre"
-
-#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74
-#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149
-#: audio/null.cpp:40
-msgid "<default>"
-msgstr "<alapértelmezett>"
-
-#: gui/launcher.cpp:194
-msgid "Platform:"
-msgstr "Platform:"
-
-#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197
-msgid "Platform the game was originally designed for"
-msgstr "Platform amire a játékot eredetileg készítették"
-
-#: gui/launcher.cpp:196
-msgctxt "lowres"
-msgid "Platform:"
-msgstr "Platform:"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "Graphics"
-msgstr "Grafika"
-
-#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035
-msgid "GFX"
-msgstr "GFX"
-
-#: gui/launcher.cpp:211
-msgid "Override global graphic settings"
-msgstr "Globális grafikai beállítások felülbírálása"
-
-#: gui/launcher.cpp:213
-msgctxt "lowres"
-msgid "Override global graphic settings"
-msgstr "Globális grafikai beállítások felülbírálása"
-
-#: gui/launcher.cpp:220 gui/options.cpp:1041
-msgid "Audio"
-msgstr "Audió"
-
-#: gui/launcher.cpp:223
-msgid "Override global audio settings"
-msgstr "Globális audió beállítások felülbírálása"
-
-#: gui/launcher.cpp:225
-msgctxt "lowres"
-msgid "Override global audio settings"
-msgstr "Globális audió beállítások felülbírálása"
-
-#: gui/launcher.cpp:234 gui/options.cpp:1046
-msgid "Volume"
-msgstr "Hangerő"
-
-#: gui/launcher.cpp:236 gui/options.cpp:1048
-msgctxt "lowres"
-msgid "Volume"
-msgstr "Hangerő"
-
-#: gui/launcher.cpp:239
-msgid "Override global volume settings"
-msgstr "Globális hangerőbeállítások felülbírálása"
-
-#: gui/launcher.cpp:241
-msgctxt "lowres"
-msgid "Override global volume settings"
-msgstr "Globális hangerőbeállítások felülbírálása"
-
-#: gui/launcher.cpp:248 gui/options.cpp:1056
-msgid "MIDI"
-msgstr "MIDI"
-
-#: gui/launcher.cpp:251
-msgid "Override global MIDI settings"
-msgstr "Globális MIDI beállítások felülbírálása"
-
-#: gui/launcher.cpp:253
-msgctxt "lowres"
-msgid "Override global MIDI settings"
-msgstr "Globális MIDI beállítások felülbírálása"
-
-#: gui/launcher.cpp:263 gui/options.cpp:1062
-msgid "MT-32"
-msgstr "MT-32"
-
-#: gui/launcher.cpp:266
-msgid "Override global MT-32 settings"
-msgstr "Globális MT-32 beállítások felülbírálása"
-
-#: gui/launcher.cpp:268
-msgctxt "lowres"
-msgid "Override global MT-32 settings"
-msgstr "Globális MT-32 beállítások felülbírálása"
-
-#: gui/launcher.cpp:279 gui/options.cpp:1069
-msgid "Paths"
-msgstr "Mappák"
-
-#: gui/launcher.cpp:281 gui/options.cpp:1071
-msgctxt "lowres"
-msgid "Paths"
-msgstr "Mappák"
-
-#: gui/launcher.cpp:288
-msgid "Game Path:"
-msgstr "Játék Mappa:"
-
-#: gui/launcher.cpp:290
-msgctxt "lowres"
-msgid "Game Path:"
-msgstr "Játék Mappa:"
-
-#: gui/launcher.cpp:295 gui/options.cpp:1091
-msgid "Extra Path:"
-msgstr "Extra Mappa:"
-
-#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298
-msgid "Specifies path to additional data used the game"
-msgstr "Mappa kiválasztás a játékok kiegészítő fájljaihoz"
-
-#: gui/launcher.cpp:297 gui/options.cpp:1093
-msgctxt "lowres"
-msgid "Extra Path:"
-msgstr "Extra Mappa:"
-
-#: gui/launcher.cpp:302 gui/options.cpp:1079
-msgid "Save Path:"
-msgstr "Mentés Mappa:"
-
-#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305
-#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082
-msgid "Specifies where your savegames are put"
-msgstr "Játékmentések helyének meghatározása"
-
-#: gui/launcher.cpp:304 gui/options.cpp:1081
-msgctxt "lowres"
-msgid "Save Path:"
-msgstr "Mentés Mappa:"
-
-#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453
-#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101
-#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214
-#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250
-#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362
-msgctxt "path"
-msgid "None"
-msgstr "Nincs"
-
-#: gui/launcher.cpp:326 gui/launcher.cpp:408
-#: backends/platform/wii/options.cpp:56
-msgid "Default"
-msgstr "Alapértelmezett"
-
-#: gui/launcher.cpp:446 gui/options.cpp:1356
-msgid "Select SoundFont"
-msgstr "SoundFont kiválasztás"
-
-#: gui/launcher.cpp:465 gui/launcher.cpp:612
-msgid "Select directory with game data"
-msgstr "Játékok helyének kiválasztása"
-
-#: gui/launcher.cpp:483
-msgid "Select additional game directory"
-msgstr "Válassz mappát a játék kiegészítőkhöz"
-
-#: gui/launcher.cpp:495
-msgid "Select directory for saved games"
-msgstr "Válaszz játékmentéseknek mappát"
-
-#: gui/launcher.cpp:514
-msgid "This game ID is already taken. Please choose another one."
-msgstr "Ez a játékazonosító ID már foglalt, Válassz egy másikat."
-
-#: gui/launcher.cpp:555 engines/dialogs.cpp:110
-msgid "~Q~uit"
-msgstr "Kilépés"
-
-#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80
-msgid "Quit ScummVM"
-msgstr "ScummVM bezárása"
-
-#: gui/launcher.cpp:556
-msgid "A~b~out..."
-msgstr "Névjegy"
-
-#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61
-msgid "About ScummVM"
-msgstr "ScummVM névjegy"
-
-#: gui/launcher.cpp:557
-msgid "~O~ptions..."
-msgstr "~O~pciók..."
-
-#: gui/launcher.cpp:557
-msgid "Change global ScummVM options"
-msgstr "Globális ScummVM opciók cseréje"
-
-#: gui/launcher.cpp:559
-msgid "~S~tart"
-msgstr "Indítás"
-
-#: gui/launcher.cpp:559
-msgid "Start selected game"
-msgstr "A választott játék indítása"
-
-#: gui/launcher.cpp:562
-msgid "~L~oad..."
-msgstr "Betöltés"
-
-#: gui/launcher.cpp:562
-msgid "Load savegame for selected game"
-msgstr "Kimentett játékállás betöltése"
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:1055
-msgid "~A~dd Game..."
-msgstr "Játék hozzáadás"
-
-#: gui/launcher.cpp:567 gui/launcher.cpp:574
-msgid "Hold Shift for Mass Add"
-msgstr "Tratsd lenyomva a Shift-et a Masszív módhoz"
-
-#: gui/launcher.cpp:569
-msgid "~E~dit Game..."
-msgstr "Játékopciók"
-
-#: gui/launcher.cpp:569 gui/launcher.cpp:576
-msgid "Change game options"
-msgstr "Játék beállítások megváltoztatása"
-
-#: gui/launcher.cpp:571
-msgid "~R~emove Game"
-msgstr "Játék törlése"
-
-#: gui/launcher.cpp:571 gui/launcher.cpp:578
-msgid "Remove game from the list. The game data files stay intact"
-msgstr "Törli a játék nevét a listáról. A játékfájlok megmaradnak"
-
-#: gui/launcher.cpp:574 gui/launcher.cpp:1055
-msgctxt "lowres"
-msgid "~A~dd Game..."
-msgstr "Játék hozzáadás"
-
-#: gui/launcher.cpp:576
-msgctxt "lowres"
-msgid "~E~dit Game..."
-msgstr "Játékopciók"
-
-#: gui/launcher.cpp:578
-msgctxt "lowres"
-msgid "~R~emove Game"
-msgstr "Játék törlése"
-
-#: gui/launcher.cpp:586
-msgid "Search in game list"
-msgstr "Keresés a játéklistában"
-
-#: gui/launcher.cpp:590 gui/launcher.cpp:1102
-msgid "Search:"
-msgstr "Keresés:"
-
-#: gui/launcher.cpp:593 gui/options.cpp:826
-msgid "Clear value"
-msgstr "Érték törlése"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255
-#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216
-msgid "Load game:"
-msgstr "Játék betöltése:"
-
-#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188
-#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716
-#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Load"
-msgstr "Betöltés"
-
-#: gui/launcher.cpp:723
-msgid ""
-"Do you really want to run the mass game detector? This could potentially add "
-"a huge number of games."
-msgstr ""
-"Biztos hogy futtatod a Masszív játékdetektort? Ez potenciálisan sok játékot "
-"hozzáad a listához."
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Yes"
-msgstr "Igen"
-
-#: gui/launcher.cpp:724 gui/launcher.cpp:872
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "No"
-msgstr "Nem"
-
-#: gui/launcher.cpp:772
-msgid "ScummVM couldn't open the specified directory!"
-msgstr "ScummVM nem tudja megnyitni a választott mappát!"
-
-#: gui/launcher.cpp:784
-msgid "ScummVM could not find any game in the specified directory!"
-msgstr "A ScummVM nem talált egy játékot sem a választott mappában!"
-
-#: gui/launcher.cpp:798
-msgid "Pick the game:"
-msgstr "Válassztott játék:"
-
-#: gui/launcher.cpp:872
-msgid "Do you really want to remove this game configuration?"
-msgstr "Biztosan törölni akarod ezt a játékkonfigurációt?"
-
-#: gui/launcher.cpp:936
-msgid "This game does not support loading games from the launcher."
-msgstr "Ez a játék nem támogatja a játékállás betöltést az indítóból."
-
-#: gui/launcher.cpp:940
-msgid "ScummVM could not find any engine capable of running the selected game!"
-msgstr ""
-"ScummVM nem talált olyan játékmotort ami a választott játékot támogatja!"
-
-#: gui/launcher.cpp:1054
-msgctxt "lowres"
-msgid "Mass Add..."
-msgstr "Masszív mód..."
-
-#: gui/launcher.cpp:1054
-msgid "Mass Add..."
-msgstr "Masszív mód..."
-
-#: gui/massadd.cpp:78 gui/massadd.cpp:81
-msgid "... progress ..."
-msgstr "... folyamatban ..."
-
-#: gui/massadd.cpp:258
-msgid "Scan complete!"
-msgstr "Vizsgálat kész!"
-
-#: gui/massadd.cpp:261
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games."
-msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..."
-
-#: gui/massadd.cpp:265
-#, c-format
-msgid "Scanned %d directories ..."
-msgstr "%d Mappa átvizsgálva..."
-
-#: gui/massadd.cpp:268
-#, c-format
-msgid "Discovered %d new games, ignored %d previously added games ..."
-msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..."
-
-#: gui/options.cpp:72
-msgid "Never"
-msgstr "Soha"
-
-#: gui/options.cpp:72
-msgid "every 5 mins"
-msgstr "5 percenként"
-
-#: gui/options.cpp:72
-msgid "every 10 mins"
-msgstr "10 percenként"
-
-#: gui/options.cpp:72
-msgid "every 15 mins"
-msgstr "15 percenként"
-
-#: gui/options.cpp:72
-msgid "every 30 mins"
-msgstr "30 percenként"
-
-#: gui/options.cpp:74
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: gui/options.cpp:74
-msgid "11kHz"
-msgstr "11kHz"
-
-#: gui/options.cpp:74
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: gui/options.cpp:74
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: gui/options.cpp:74
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559
-#: gui/options.cpp:625 gui/options.cpp:825
-msgctxt "soundfont"
-msgid "None"
-msgstr "Nincs"
-
-#: gui/options.cpp:372
-msgid "Failed to apply some of the graphic options changes:"
-msgstr "Néhány grafikus opció változtatása sikertelen:"
-
-#: gui/options.cpp:384
-msgid "the video mode could not be changed."
-msgstr "a videómód nem változott."
-
-#: gui/options.cpp:390
-msgid "the fullscreen setting could not be changed"
-msgstr "a teljesképernyős beállítás nem változott"
-
-#: gui/options.cpp:396
-msgid "the aspect ratio setting could not be changed"
-msgstr "a képméretarány beállítások nem változtak"
-
-#: gui/options.cpp:705
-msgid "Graphics mode:"
-msgstr "Grafikus mód:"
-
-#: gui/options.cpp:716
-msgid "Render mode:"
-msgstr "Kirajzolás mód:"
-
-#: gui/options.cpp:716 gui/options.cpp:717
-msgid "Special dithering modes supported by some games"
-msgstr "Néhány játék támogatja a speciális árnyalási módokat"
-
-#: gui/options.cpp:726
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472
-msgid "Fullscreen mode"
-msgstr "Teljesképernyős mód:"
-
-#: gui/options.cpp:729
-msgid "Aspect ratio correction"
-msgstr "Képméretarány korrekció"
-
-#: gui/options.cpp:729
-msgid "Correct aspect ratio for 320x200 games"
-msgstr "Helyes oldalarány a 320x200 játékokhoz"
-
-#: gui/options.cpp:730
-msgid "EGA undithering"
-msgstr "EGA szinjavítás"
-
-#: gui/options.cpp:730
-msgid "Enable undithering in EGA games that support it"
-msgstr "EGA színjavítás támogatott EGA játékokban"
-
-#: gui/options.cpp:738
-msgid "Preferred Device:"
-msgstr "Elsődleges eszköz:"
-
-#: gui/options.cpp:738
-msgid "Music Device:"
-msgstr "Zene eszköz:"
-
-#: gui/options.cpp:738 gui/options.cpp:740
-msgid "Specifies preferred sound device or sound card emulator"
-msgstr "Elsődleges hangeszköz vagy hang emulátor beállítások"
-
-#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741
-msgid "Specifies output sound device or sound card emulator"
-msgstr "Hangeszköz vagy hangkártya emulátor beállítások"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Preferred Dev.:"
-msgstr "Elsődleges eszk.:"
-
-#: gui/options.cpp:740
-msgctxt "lowres"
-msgid "Music Device:"
-msgstr "Zene eszköz:"
-
-#: gui/options.cpp:766
-msgid "AdLib emulator:"
-msgstr "AdLib emulátor:"
-
-#: gui/options.cpp:766 gui/options.cpp:767
-msgid "AdLib is used for music in many games"
-msgstr "AdLib meghajtót sok játék használja zenéhez"
-
-#: gui/options.cpp:777
-msgid "Output rate:"
-msgstr "Kimeneti ráta:"
-
-#: gui/options.cpp:777 gui/options.cpp:778
-msgid ""
-"Higher value specifies better sound quality but may be not supported by your "
-"soundcard"
-msgstr ""
-"Nagyobb értékek jobb hangminőséget adnak, de nem minden hangkártya támogatja"
-
-#: gui/options.cpp:788
-msgid "GM Device:"
-msgstr "GM Eszköz:"
-
-#: gui/options.cpp:788
-msgid "Specifies default sound device for General MIDI output"
-msgstr "Alapértelmezett hangeszköz General MIDI kimenethez"
-
-#: gui/options.cpp:799
-msgid "Don't use General MIDI music"
-msgstr "Ne használj General MIDI zenét"
-
-#: gui/options.cpp:810 gui/options.cpp:871
-msgid "Use first available device"
-msgstr "Első elérhető eszköz használata"
-
-#: gui/options.cpp:822
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825
-msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity"
-msgstr ""
-"Néhány hangkárya, Fluidsynth és Timidyti támogatja a SoundFont betöltését"
-
-#: gui/options.cpp:824
-msgctxt "lowres"
-msgid "SoundFont:"
-msgstr "SoundFont:"
-
-#: gui/options.cpp:829
-msgid "Mixed AdLib/MIDI mode"
-msgstr "Vegyes AdLib/MIDI mód"
-
-#: gui/options.cpp:829
-msgid "Use both MIDI and AdLib sound generation"
-msgstr "MIDI és AdLib hanggenerátorok használata"
-
-#: gui/options.cpp:832
-msgid "MIDI gain:"
-msgstr "MIDI erősítés:"
-
-#: gui/options.cpp:842
-msgid "MT-32 Device:"
-msgstr "MT-32 Eszköz:"
-
-#: gui/options.cpp:842
-msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
-msgstr "Roland MT-32/LAPC1/CM32l/CM64 alapértelmezett hangeszközök beállítása"
-
-#: gui/options.cpp:847
-msgid "True Roland MT-32 (disable GM emulation)"
-msgstr "Roland MT-32 Hardver (GM emuláció tiltva)"
-
-#: gui/options.cpp:847 gui/options.cpp:849
-msgid ""
-"Check if you want to use your real hardware Roland-compatible sound device "
-"connected to your computer"
-msgstr ""
-"Jelöld be, ha hardveres Roland-Kompatibilis hangeszköz van csatlakoztatva a "
-"gépedhez és használni akarod"
-
-#: gui/options.cpp:849
-msgctxt "lowres"
-msgid "True Roland MT-32 (no GM emulation)"
-msgstr "Roland MT-32 Hardver (GM emuláció nincs)"
-
-#: gui/options.cpp:852
-msgid "Enable Roland GS Mode"
-msgstr "Roland GS Mód engedélyezve"
-
-#: gui/options.cpp:852
-msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
-msgstr "General MIDI leképezés Roland MT-32 zenés játékokhoz kikapcsolva"
-
-#: gui/options.cpp:861
-msgid "Don't use Roland MT-32 music"
-msgstr "Ne használj Roland MT-32 zenét"
-
-#: gui/options.cpp:888
-msgid "Text and Speech:"
-msgstr "Szöveg és beszéd:"
-
-#: gui/options.cpp:892 gui/options.cpp:902
-msgid "Speech"
-msgstr "Csak beszéd"
-
-#: gui/options.cpp:893 gui/options.cpp:903
-msgid "Subtitles"
-msgstr "Csak felirat"
-
-#: gui/options.cpp:894
-msgid "Both"
-msgstr "Mind"
-
-#: gui/options.cpp:896
-msgid "Subtitle speed:"
-msgstr "Felirat sebesség:"
-
-#: gui/options.cpp:898
-msgctxt "lowres"
-msgid "Text and Speech:"
-msgstr "Felirat és beszéd:"
-
-#: gui/options.cpp:902
-msgid "Spch"
-msgstr "Besz"
-
-#: gui/options.cpp:903
-msgid "Subs"
-msgstr "Text"
-
-#: gui/options.cpp:904
-msgctxt "lowres"
-msgid "Both"
-msgstr "Mind"
-
-#: gui/options.cpp:904
-msgid "Show subtitles and play speech"
-msgstr "Hang és feliratok megjelenítése"
-
-#: gui/options.cpp:906
-msgctxt "lowres"
-msgid "Subtitle speed:"
-msgstr "Felirat sebesség:"
-
-#: gui/options.cpp:922
-msgid "Music volume:"
-msgstr "Zene hangerő:"
-
-#: gui/options.cpp:924
-msgctxt "lowres"
-msgid "Music volume:"
-msgstr "Zene hangerő:"
-
-#: gui/options.cpp:931
-msgid "Mute All"
-msgstr "Összes némítása"
-
-#: gui/options.cpp:934
-msgid "SFX volume:"
-msgstr "SFX hangerő:"
-
-#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937
-msgid "Special sound effects volume"
-msgstr "Speciális hangeffektusok hangereje"
-
-#: gui/options.cpp:936
-msgctxt "lowres"
-msgid "SFX volume:"
-msgstr "SFX hangerő:"
-
-#: gui/options.cpp:944
-msgid "Speech volume:"
-msgstr "Beszéd hangerő:"
-
-#: gui/options.cpp:946
-msgctxt "lowres"
-msgid "Speech volume:"
-msgstr "Beszéd hangerő:"
-
-#: gui/options.cpp:1085
-msgid "Theme Path:"
-msgstr "Téma Mappa:"
-
-#: gui/options.cpp:1087
-msgctxt "lowres"
-msgid "Theme Path:"
-msgstr "Téma Mappa:"
-
-#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094
-msgid "Specifies path to additional data used by all games or ScummVM"
-msgstr "Minden jéték és ScummVM kiegészítő fájljainak mappája:"
-
-#: gui/options.cpp:1098
-msgid "Plugins Path:"
-msgstr "Plugin Mappa:"
-
-#: gui/options.cpp:1100
-msgctxt "lowres"
-msgid "Plugins Path:"
-msgstr "Plugin Mappa:"
-
-#: gui/options.cpp:1109
-msgid "Misc"
-msgstr "Vegyes"
-
-#: gui/options.cpp:1111
-msgctxt "lowres"
-msgid "Misc"
-msgstr "Vegyes"
-
-#: gui/options.cpp:1113
-msgid "Theme:"
-msgstr "Téma:"
-
-#: gui/options.cpp:1117
-msgid "GUI Renderer:"
-msgstr "GUI Renderelő:"
-
-#: gui/options.cpp:1129
-msgid "Autosave:"
-msgstr "Automentés:"
-
-#: gui/options.cpp:1131
-msgctxt "lowres"
-msgid "Autosave:"
-msgstr "Automentés:"
-
-#: gui/options.cpp:1139
-msgid "Keys"
-msgstr "Billentyűk"
-
-#: gui/options.cpp:1146
-msgid "GUI Language:"
-msgstr "GUI nyelve:"
-
-#: gui/options.cpp:1146
-msgid "Language of ScummVM GUI"
-msgstr "A ScummVM GUI nyelve"
-
-#: gui/options.cpp:1295
-msgid "You have to restart ScummVM before your changes will take effect."
-msgstr "Indítsd újra a ScummVM-et a változások érvényesítéséhez."
-
-#: gui/options.cpp:1308
-msgid "Select directory for savegames"
-msgstr "Válassz játékmentés mappát"
-
-#: gui/options.cpp:1315
-msgid "The chosen directory cannot be written to. Please select another one."
-msgstr "A kiválasztott mappába nem lehet írni, válassz egy másikat"
-
-#: gui/options.cpp:1324
-msgid "Select directory for GUI themes"
-msgstr "GUI téma mappa kiválasztása"
-
-#: gui/options.cpp:1334
-msgid "Select directory for extra files"
-msgstr "Mappa választás az extra fájloknak"
-
-#: gui/options.cpp:1345
-msgid "Select directory for plugins"
-msgstr "Plugin mappa kiválasztása"
-
-#: gui/options.cpp:1389
-msgid ""
-"The theme you selected does not support your current language. If you want "
-"to use this theme you need to switch to another language first."
-msgstr ""
-"A kiválasztott téma nem támogatja a nyelvedet. Ha használni akarod ezt a "
-"témát, előszőr válts át egy másik nyelvre."
-
-#: gui/saveload.cpp:58 gui/saveload.cpp:239
-msgid "No date saved"
-msgstr "Dátum nincs mentve"
-
-#: gui/saveload.cpp:59 gui/saveload.cpp:240
-msgid "No time saved"
-msgstr "Idő nincs mentve"
-
-#: gui/saveload.cpp:60 gui/saveload.cpp:241
-msgid "No playtime saved"
-msgstr "Játékidő nincs mentve"
-
-#: gui/saveload.cpp:67 gui/saveload.cpp:155
-msgid "Delete"
-msgstr "Töröl"
-
-#: gui/saveload.cpp:154
-msgid "Do you really want to delete this savegame?"
-msgstr "Biztos hogy törölni akarod ezt a játékállást?"
-
-#: gui/saveload.cpp:264
-msgid "Date: "
-msgstr "Dátum:"
-
-#: gui/saveload.cpp:268
-msgid "Time: "
-msgstr "Idő:"
-
-#: gui/saveload.cpp:274
-msgid "Playtime: "
-msgstr "Játékidő:"
-
-#: gui/saveload.cpp:287 gui/saveload.cpp:354
-msgid "Untitled savestate"
-msgstr "Névtelen játékállás"
-
-#: gui/themebrowser.cpp:44
-msgid "Select a Theme"
-msgstr "Válassz témát"
-
-#: gui/ThemeEngine.cpp:328
-msgid "Disabled GFX"
-msgstr "GFX letiltva"
-
-#: gui/ThemeEngine.cpp:328
-msgctxt "lowres"
-msgid "Disabled GFX"
-msgstr "GFX letiltva"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard Renderer (16bpp)"
-msgstr "Standard leképező (16bpp)"
-
-#: gui/ThemeEngine.cpp:329
-msgid "Standard (16bpp)"
-msgstr "Standard (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased Renderer (16bpp)"
-msgstr "Élsimításos leképező (16bpp)"
-
-#: gui/ThemeEngine.cpp:331
-msgid "Antialiased (16bpp)"
-msgstr "Élsimított (16bpp)"
-
-#: base/main.cpp:206
-#, c-format
-msgid "Engine does not support debug level '%s'"
-msgstr "A motor nem támogatja a '%s' debug szintet"
-
-#: base/main.cpp:274
-msgid "Menu"
-msgstr "Menü"
-
-#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45
-#: backends/platform/wince/CEActionsPocket.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:46
-msgid "Skip"
-msgstr "Tovább"
-
-#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50
-#: backends/platform/wince/CEActionsPocket.cpp:42
-msgid "Pause"
-msgstr "Szünet"
-
-#: base/main.cpp:283
-msgid "Skip line"
-msgstr "Sor átlépése"
-
-#: base/main.cpp:442
-msgid "Error running game:"
-msgstr "Hiba a játék futtatásakor:"
-
-#: base/main.cpp:466
-msgid "Could not find any engine capable of running the selected game"
-msgstr "Nem található olyan játékmotor ami a választott játékot támogatja"
-
-#: common/error.cpp:38
-msgid "No error"
-msgstr "Nincs hiba"
-
-#: common/error.cpp:40
-msgid "Game data not found"
-msgstr "Játék adat nem található"
-
-#: common/error.cpp:42
-msgid "Game id not supported"
-msgstr "Játék id nem támogatott"
-
-#: common/error.cpp:44
-msgid "Unsupported color mode"
-msgstr "Nem támogatott színmód"
-
-#: common/error.cpp:47
-msgid "Read permission denied"
-msgstr "Olvasás hozzáfárés megtagadva"
-
-#: common/error.cpp:49
-msgid "Write permission denied"
-msgstr "Írás hozzáférés megtagadva"
-
-#: common/error.cpp:52
-msgid "Path does not exist"
-msgstr "Mappa nem létezik"
-
-#: common/error.cpp:54
-msgid "Path not a directory"
-msgstr "Mappa nem egy könyvtár"
-
-#: common/error.cpp:56
-msgid "Path not a file"
-msgstr "Mappa nem egy fájl"
-
-#: common/error.cpp:59
-msgid "Cannot create file"
-msgstr "Fájl nem hozható létre"
-
-#: common/error.cpp:61
-msgid "Reading data failed"
-msgstr "A Beolvasott adat hibás"
-
-#: common/error.cpp:63
-msgid "Writing data failed"
-msgstr "Kiírt adat hibás"
-
-#: common/error.cpp:66
-msgid "Could not find suitable engine plugin"
-msgstr "Nem található alkalmas motor plugin"
-
-#: common/error.cpp:68
-msgid "Engine plugin does not support save states"
-msgstr "A motor nem támogatja a játékállás mentését"
-
-#: common/error.cpp:71
-msgid "User canceled"
-msgstr "Felhasználói megszakítás"
-
-#: common/error.cpp:75
-msgid "Unknown error"
-msgstr "Ismeretlen hiba"
-
-#. I18N: Hercules is graphics card name
-#: common/util.cpp:275
-msgid "Hercules Green"
-msgstr "Hercules Zöld"
-
-#: common/util.cpp:276
-msgid "Hercules Amber"
-msgstr "Hercules Sárga"
-
-#: common/util.cpp:283
-msgctxt "lowres"
-msgid "Hercules Green"
-msgstr "Hercules Zöld"
-
-#: common/util.cpp:284
-msgctxt "lowres"
-msgid "Hercules Amber"
-msgstr "Hercules Sárga"
-
-#: engines/advancedDetector.cpp:296
-#, c-format
-msgid "The game in '%s' seems to be unknown."
-msgstr "A '%s' játék ismeretlennek tűnik."
-
-#: engines/advancedDetector.cpp:297
-msgid "Please, report the following data to the ScummVM team along with name"
-msgstr "Kérlek jelezd a ScummVM csapatnak a következő adatokat, együtt a játék"
-
-#: engines/advancedDetector.cpp:299
-msgid "of the game you tried to add and its version/language/etc.:"
-msgstr "címével és megbízható adataival játékverzió/nyelv(ek)/stb.:"
-
-#: engines/dialogs.cpp:84
-msgid "~R~esume"
-msgstr "Folytatás"
-
-#: engines/dialogs.cpp:86
-msgid "~L~oad"
-msgstr "Betöltés"
-
-#: engines/dialogs.cpp:90
-msgid "~S~ave"
-msgstr "Mentés"
-
-#: engines/dialogs.cpp:94
-msgid "~O~ptions"
-msgstr "~O~pciók"
-
-#: engines/dialogs.cpp:99
-msgid "~H~elp"
-msgstr "Súgó"
-
-#: engines/dialogs.cpp:101
-msgid "~A~bout"
-msgstr "Névjegy"
-
-#: engines/dialogs.cpp:104 engines/dialogs.cpp:182
-msgid "~R~eturn to Launcher"
-msgstr "Visszatérés az indítóba"
-
-#: engines/dialogs.cpp:106 engines/dialogs.cpp:184
-msgctxt "lowres"
-msgid "~R~eturn to Launcher"
-msgstr "Visszatérés az indítóba"
-
-#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214
-#: engines/sci/engine/kfile.cpp:575
-msgid "Save game:"
-msgstr "Játék mentése:"
-
-#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187
-#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575
-#: backends/platform/symbian/src/SymbianActions.cpp:44
-#: backends/platform/wince/CEActionsPocket.cpp:43
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:45
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Save"
-msgstr "Mentés"
-
-#: engines/dialogs.cpp:146
-msgid ""
-"Sorry, this engine does not currently provide in-game help. Please consult "
-"the README for basic information, and for instructions on how to obtain "
-"further assistance."
-msgstr ""
-"Sajnálom, a motor jelenleg nem tartalmaz játék közbeni súgót. Olvassd el a "
-"README-t az alap információkról, és hogy hogyan segíthetsz a későbbiekben."
-
-#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109
-#: engines/mohawk/dialogs.cpp:174
-msgid "~O~K"
-msgstr "~O~K"
-
-#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110
-#: engines/mohawk/dialogs.cpp:175
-msgid "~C~ancel"
-msgstr "Mégse"
-
-#: engines/dialogs.cpp:312
-msgid "~K~eys"
-msgstr "Billentyük"
-
-#: engines/engine.cpp:233
-msgid "Could not initialize color format."
-msgstr "Szín formátum nincs alkalmazva"
-
-#: engines/engine.cpp:241
-msgid "Could not switch to video mode: '"
-msgstr "Videómód nincs átállítva: ' "
-
-#: engines/engine.cpp:250
-msgid "Could not apply aspect ratio setting."
-msgstr "Méretarány korrekció nem változott."
-
-#: engines/engine.cpp:255
-msgid "Could not apply fullscreen setting."
-msgstr "Teljesképernyős beállítás nincs alkalmazva"
-
-#: engines/engine.cpp:355
-msgid ""
-"You appear to be playing this game directly\n"
-"from the CD. This is known to cause problems,\n"
-"and it is therefore recommended that you copy\n"
-"the data files to your hard disk instead.\n"
-"See the README file for details."
-msgstr ""
-"Úgy néz ki, ezt a játékot CD-ről futtatod\n"
-"Ez ismert problémákat okoz, ezért\n"
-"ajánlatos átmásolni a játék\n"
-"adatfájljait a merevlemezedre.\n"
-"Nézd meg a README fájlt a részletekért."
-
-#: engines/engine.cpp:366
-msgid ""
-"This game has audio tracks in its disk. These\n"
-"tracks need to be ripped from the disk using\n"
-"an appropriate CD audio extracting tool in\n"
-"order to listen to the game's music.\n"
-"See the README file for details."
-msgstr ""
-"A játékhoz audiósávok tartoznak a lemezen\n"
-"ezeket a sávokat másold ki egy megfelelő\n"
-"CD audió kitömörítő programmal\n"
-"hogy a játék zenéje hallható legyen.\n"
-"Nézd meg a README fájlt a részletekért."
-
-#: engines/engine.cpp:433
-msgid ""
-"WARNING: The game you are about to start is not yet fully supported by "
-"ScummVM. As such, it is likely to be unstable, and any saves you make might "
-"not work in future versions of ScummVM."
-msgstr ""
-"FIGYELEM: A játékot amit indítani akarsz még nem teljesen támogatotja a "
-"ScummVM. Számíts rá hogy nem stabilan fut, és a mentések nem működnek a "
-"jövőbeni ScummVM verziókkal."
-
-#: engines/engine.cpp:436
-msgid "Start anyway"
-msgstr "Indítás így is"
-
-#: engines/scumm/dialogs.cpp:175
-#, c-format
-msgid "Insert Disk %c and Press Button to Continue."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:176
-#, c-format
-msgid "Unable to Find %s, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:177
-#, c-format
-msgid "Error reading disk %c, (%c%d) Press Button."
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:178
-msgid "Game Paused. Press SPACE to Continue."
-msgstr ""
-
-#. I18N: You may specify 'Yes' symbol at the end of the line, like this:
-#. "Moechten Sie wirklich neu starten? (J/N)J"
-#. Will react to J as 'Yes'
-#: engines/scumm/dialogs.cpp:182
-#, fuzzy
-msgid "Are you sure you want to restart? (Y/N)"
-msgstr " Biztos hogy ki akarsz lépni ? "
-
-#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment
-#: engines/scumm/dialogs.cpp:184
-#, fuzzy
-msgid "Are you sure you want to quit? (Y/N)"
-msgstr " Biztos hogy ki akarsz lépni ? "
-
-#: engines/scumm/dialogs.cpp:189
-msgid "Play"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82
-#: engines/scumm/help.cpp:84
-#: backends/platform/symbian/src/SymbianActions.cpp:52
-#: backends/platform/wince/CEActionsPocket.cpp:44
-#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:244
-msgid "Quit"
-msgstr "Kilépés"
-
-#: engines/scumm/dialogs.cpp:193
-msgid "Insert save/load game disk"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:194
-msgid "You must enter a name"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:195
-msgid "The game was NOT saved (disk full?)"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:196
-msgid "The game was NOT loaded"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:197
-#, c-format
-msgid "Saving '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:198
-#, c-format
-msgid "Loading '%s'"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:199
-msgid "Name your SAVE game"
-msgstr ""
-
-#: engines/scumm/dialogs.cpp:200
-#, fuzzy
-msgid "Select a game to LOAD"
-msgstr "Válassz témát"
-
-#: engines/scumm/dialogs.cpp:201
-msgid "Game title)"
-msgstr ""
-
-#. I18N: Previous page button
-#: engines/scumm/dialogs.cpp:287
-msgid "~P~revious"
-msgstr "Előző"
-
-#. I18N: Next page button
-#: engines/scumm/dialogs.cpp:289
-msgid "~N~ext"
-msgstr "Következő"
-
-#: engines/scumm/dialogs.cpp:290
-#: backends/platform/ds/arm9/source/dsoptions.cpp:56
-msgid "~C~lose"
-msgstr "Bezár"
-
-#: engines/scumm/dialogs.cpp:597
-#, fuzzy
-msgid "Speech Only"
-msgstr "Csak beszéd"
-
-#: engines/scumm/dialogs.cpp:598
-#, fuzzy
-msgid "Speech and Subtitles"
-msgstr "Csak felirat"
-
-#: engines/scumm/dialogs.cpp:599
-#, fuzzy
-msgid "Subtitles Only"
-msgstr "Csak felirat"
-
-#: engines/scumm/dialogs.cpp:607
-#, fuzzy
-msgctxt "lowres"
-msgid "Speech & Subs"
-msgstr "Csak beszéd"
-
-#: engines/scumm/help.cpp:73
-msgid "Common keyboard commands:"
-msgstr "Általános billentyűparancsok:"
-
-#: engines/scumm/help.cpp:74
-msgid "Save / Load dialog"
-msgstr "Ment / Tölt dialógus"
-
-#: engines/scumm/help.cpp:76
-msgid "Skip line of text"
-msgstr "Szövegsor átugrása"
-
-#: engines/scumm/help.cpp:77
-msgid "Esc"
-msgstr "Esc"
-
-#: engines/scumm/help.cpp:77
-msgid "Skip cutscene"
-msgstr "Bevezető átugrása"
-
-#: engines/scumm/help.cpp:78
-msgid "Space"
-msgstr "Szóköz"
-
-#: engines/scumm/help.cpp:78
-msgid "Pause game"
-msgstr "Szünet a játékban"
-
-#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84
-#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96
-#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98
-#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100
-#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: engines/scumm/help.cpp:79
-msgid "Load game state 1-10"
-msgstr "1-10 Játékállás betöltése"
-
-#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100
-#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102
-msgid "Alt"
-msgstr "Alt"
-
-#: engines/scumm/help.cpp:80
-msgid "Save game state 1-10"
-msgstr "1-10 Játékállás mentése"
-
-#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89
-msgid "Enter"
-msgstr "Enter"
-
-#: engines/scumm/help.cpp:86
-msgid "Toggle fullscreen"
-msgstr "Teljesképernyő kapcsoló"
-
-#: engines/scumm/help.cpp:87
-msgid "Music volume up / down"
-msgstr "Zene hangerő fel / le"
-
-#: engines/scumm/help.cpp:88
-msgid "Text speed slower / faster"
-msgstr "Szövegsebesség gyors / lassú"
-
-#: engines/scumm/help.cpp:89
-msgid "Simulate left mouse button"
-msgstr "Bal egérgomb szimuláció"
-
-#: engines/scumm/help.cpp:90
-msgid "Tab"
-msgstr "Tab"
-
-#: engines/scumm/help.cpp:90
-msgid "Simulate right mouse button"
-msgstr "Jobb egérgomb szimuláció"
-
-#: engines/scumm/help.cpp:93
-msgid "Special keyboard commands:"
-msgstr "Speciális billentyűparancsok:"
-
-#: engines/scumm/help.cpp:94
-msgid "Show / Hide console"
-msgstr "Konzol be / ki kapcsolás"
-
-#: engines/scumm/help.cpp:95
-msgid "Start the debugger"
-msgstr "Hibakereső indítása"
-
-#: engines/scumm/help.cpp:96
-msgid "Show memory consumption"
-msgstr "Memóriakihasználtság látszik"
-
-#: engines/scumm/help.cpp:97
-msgid "Run in fast mode (*)"
-msgstr "Futtatás gyors módban (*)"
-
-#: engines/scumm/help.cpp:98
-msgid "Run in really fast mode (*)"
-msgstr "Futtatás túlgyors módban (*)"
-
-#: engines/scumm/help.cpp:99
-msgid "Toggle mouse capture"
-msgstr "Egér rögzítés kapcsoló"
-
-#: engines/scumm/help.cpp:100
-msgid "Switch between graphics filters"
-msgstr "Kapcsolás grafikus szűrők között"
-
-#: engines/scumm/help.cpp:101
-msgid "Increase / Decrease scale factor"
-msgstr "Lépték növelés / csökkentés"
-
-#: engines/scumm/help.cpp:102
-msgid "Toggle aspect-ratio correction"
-msgstr "Méretarány korrekció kapcsoló"
-
-#: engines/scumm/help.cpp:107
-msgid "* Note that using ctrl-f and"
-msgstr "* Megjegyzés, ctrl-f és"
-
-#: engines/scumm/help.cpp:108
-msgid " ctrl-g are not recommended"
-msgstr " ctrl-g használata nem javasolt"
-
-#: engines/scumm/help.cpp:109
-msgid " since they may cause crashes"
-msgstr " mert rendszerösszeomlást vagy"
-
-#: engines/scumm/help.cpp:110
-msgid " or incorrect game behavior."
-msgstr " vagy hibás játékműködést okoz."
-
-#: engines/scumm/help.cpp:114
-msgid "Spinning drafts on the keyboard:"
-msgstr "Forgó draftok a billentyűzeten:"
-
-#: engines/scumm/help.cpp:116
-msgid "Main game controls:"
-msgstr "Fő játékvezérlők:"
-
-#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136
-#: engines/scumm/help.cpp:161
-msgid "Push"
-msgstr "Tol"
-
-#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137
-#: engines/scumm/help.cpp:162
-msgid "Pull"
-msgstr "Húz"
-
-#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138
-#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:197
-#: engines/scumm/help.cpp:207
-msgid "Give"
-msgstr "Ad"
-
-#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139
-#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:190
-#: engines/scumm/help.cpp:208
-msgid "Open"
-msgstr "Nyit"
-
-#: engines/scumm/help.cpp:126
-msgid "Go to"
-msgstr "Menj"
-
-#: engines/scumm/help.cpp:127
-msgid "Get"
-msgstr "Vesz"
-
-#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152
-#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:198
-#: engines/scumm/help.cpp:213 engines/scumm/help.cpp:224
-#: engines/scumm/help.cpp:250
-msgid "Use"
-msgstr "Használ"
-
-#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141
-msgid "Read"
-msgstr "Olvas"
-
-#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147
-msgid "New kid"
-msgstr "Új gyerek"
-
-#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153
-#: engines/scumm/help.cpp:171
-msgid "Turn on"
-msgstr "Bekapcsol"
-
-#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154
-#: engines/scumm/help.cpp:172
-msgid "Turn off"
-msgstr "Kikapcsol"
-
-#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167
-#: engines/scumm/help.cpp:194
-msgid "Walk to"
-msgstr "Odamegy"
-
-#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168
-#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:210
-#: engines/scumm/help.cpp:227
-msgid "Pick up"
-msgstr "Felvesz"
-
-#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169
-msgid "What is"
-msgstr "Mi ez"
-
-#: engines/scumm/help.cpp:146
-msgid "Unlock"
-msgstr "Felold"
-
-#: engines/scumm/help.cpp:149
-msgid "Put on"
-msgstr "Felvesz"
-
-#: engines/scumm/help.cpp:150
-msgid "Take off"
-msgstr "Letesz"
-
-#: engines/scumm/help.cpp:156
-msgid "Fix"
-msgstr "Javít"
-
-#: engines/scumm/help.cpp:158
-msgid "Switch"
-msgstr "Kapcsol"
-
-#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228
-msgid "Look"
-msgstr "Megnéz"
-
-#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223
-msgid "Talk"
-msgstr "Beszél"
-
-#: engines/scumm/help.cpp:174
-msgid "Travel"
-msgstr "Utazás"
-
-#: engines/scumm/help.cpp:175
-msgid "To Henry / To Indy"
-msgstr "Henrytől / Indytől"
-
-#. I18N: These are different musical notes
-#: engines/scumm/help.cpp:179
-msgid "play C minor on distaff"
-msgstr "C moll játék a bottal"
-
-#: engines/scumm/help.cpp:180
-msgid "play D on distaff"
-msgstr "Játék D-ben a bottal"
-
-#: engines/scumm/help.cpp:181
-msgid "play E on distaff"
-msgstr "Játék E-ben a bottal"
-
-#: engines/scumm/help.cpp:182
-msgid "play F on distaff"
-msgstr "Játék F-ben a bottal"
-
-#: engines/scumm/help.cpp:183
-msgid "play G on distaff"
-msgstr "Játék G-ben a bottal"
-
-#: engines/scumm/help.cpp:184
-msgid "play A on distaff"
-msgstr "Játék A-ban a bottal"
-
-#: engines/scumm/help.cpp:185
-msgid "play B on distaff"
-msgstr "Játék B-ben a bottal"
-
-#: engines/scumm/help.cpp:186
-msgid "play C major on distaff"
-msgstr "C dúr játék a bottal"
-
-#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214
-msgid "puSh"
-msgstr "Megtol"
-
-#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215
-msgid "pull (Yank)"
-msgstr "húz (Ránt)"
-
-#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212
-#: engines/scumm/help.cpp:248
-msgid "Talk to"
-msgstr "Beszél"
-
-#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211
-msgid "Look at"
-msgstr "Megnézi"
-
-#: engines/scumm/help.cpp:200
-msgid "turn oN"
-msgstr "Bekapcsol"
-
-#: engines/scumm/help.cpp:201
-msgid "turn oFf"
-msgstr "Kikapcsol"
-
-#: engines/scumm/help.cpp:217
-msgid "KeyUp"
-msgstr "FelGomb"
-
-#: engines/scumm/help.cpp:217
-msgid "Highlight prev dialogue"
-msgstr "Előző dialógus kiemelése"
-
-#: engines/scumm/help.cpp:218
-msgid "KeyDown"
-msgstr "LeGomb"
-
-#: engines/scumm/help.cpp:218
-msgid "Highlight next dialogue"
-msgstr "Következő dialógus kiemelése"
-
-#: engines/scumm/help.cpp:222
-msgid "Walk"
-msgstr "Megy"
-
-#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234
-#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249
-msgid "Inventory"
-msgstr "Tárgylista"
-
-#: engines/scumm/help.cpp:226
-msgid "Object"
-msgstr "Tárgy"
-
-#: engines/scumm/help.cpp:229
-msgid "Black and White / Color"
-msgstr "Fekete fehér / Színes"
-
-#: engines/scumm/help.cpp:232
-msgid "Eyes"
-msgstr "Szemek"
-
-#: engines/scumm/help.cpp:233
-msgid "Tongue"
-msgstr "Nyelv"
-
-#: engines/scumm/help.cpp:235
-msgid "Punch"
-msgstr "Megüt"
-
-#: engines/scumm/help.cpp:236
-msgid "Kick"
-msgstr "Megüt"
-
-#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247
-msgid "Examine"
-msgstr "Vizsgál"
-
-#: engines/scumm/help.cpp:240
-msgid "Regular cursor"
-msgstr "Szabvány kurzor"
-
-#. I18N: Comm is a communication device
-#: engines/scumm/help.cpp:243
-msgid "Comm"
-msgstr "Comm"
-
-#: engines/scumm/help.cpp:246
-msgid "Save / Load / Options"
-msgstr "Ment / Tölt / Opciók"
-
-#: engines/scumm/help.cpp:255
-msgid "Other game controls:"
-msgstr "Egyébb játékvezérlők:"
-
-#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267
-msgid "Inventory:"
-msgstr "Tárgylista:"
-
-#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274
-msgid "Scroll list up"
-msgstr "Listagörgetés fel"
-
-#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275
-msgid "Scroll list down"
-msgstr "Listagörgetés le"
-
-#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268
-msgid "Upper left item"
-msgstr "Bal felső tárgy"
-
-#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270
-msgid "Lower left item"
-msgstr "Bal alsó tárgy"
-
-#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271
-msgid "Upper right item"
-msgstr "Jobb felső tárgy"
-
-#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273
-msgid "Lower right item"
-msgstr "Jobb alsó tárgy"
-
-#: engines/scumm/help.cpp:269
-msgid "Middle left item"
-msgstr "Bal középső tárgy"
-
-#: engines/scumm/help.cpp:272
-msgid "Middle right item"
-msgstr "Jobb középső tárgy"
-
-#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284
-msgid "Switching characters:"
-msgstr "Karakterek cseréje:"
-
-#: engines/scumm/help.cpp:281
-msgid "Second kid"
-msgstr "Második gyerek"
-
-#: engines/scumm/help.cpp:282
-msgid "Third kid"
-msgstr "Harmadik gyerek"
-
-#: engines/scumm/help.cpp:294
-msgid "Fighting controls (numpad):"
-msgstr "Verekedés irányítók (numpad):"
-
-#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296
-#: engines/scumm/help.cpp:297
-msgid "Step back"
-msgstr "Hátralép"
-
-#: engines/scumm/help.cpp:298
-msgid "Block high"
-msgstr "Felső védés"
-
-#: engines/scumm/help.cpp:299
-msgid "Block middle"
-msgstr "Védés középen"
-
-#: engines/scumm/help.cpp:300
-msgid "Block low"
-msgstr "Alsó védés"
-
-#: engines/scumm/help.cpp:301
-msgid "Punch high"
-msgstr "Felső ütés"
-
-#: engines/scumm/help.cpp:302
-msgid "Punch middle"
-msgstr "Ütés középen"
-
-#: engines/scumm/help.cpp:303
-msgid "Punch low"
-msgstr "Alsó ütés"
-
-#: engines/scumm/help.cpp:306
-msgid "These are for Indy on left."
-msgstr "Indytől balra levő."
-
-#: engines/scumm/help.cpp:307
-msgid "When Indy is on the right,"
-msgstr "Indytől jobbra levő,"
-
-#: engines/scumm/help.cpp:308
-msgid "7, 4, and 1 are switched with"
-msgstr "7, 4, és 1 átkapcsolva"
-
-#: engines/scumm/help.cpp:309
-msgid "9, 6, and 3, respectively."
-msgstr "9, 6, és 3-ra, egyenként."
-
-#: engines/scumm/help.cpp:316
-msgid "Biplane controls (numpad):"
-msgstr "Repülő vezérlők (numpad):"
-
-#: engines/scumm/help.cpp:317
-msgid "Fly to upper left"
-msgstr "Balra fel repülés"
-
-#: engines/scumm/help.cpp:318
-msgid "Fly to left"
-msgstr "Balra repülés"
-
-#: engines/scumm/help.cpp:319
-msgid "Fly to lower left"
-msgstr "Balra le repülés"
-
-#: engines/scumm/help.cpp:320
-msgid "Fly upwards"
-msgstr "Repülés fel"
-
-#: engines/scumm/help.cpp:321
-msgid "Fly straight"
-msgstr "Repülés előre"
-
-#: engines/scumm/help.cpp:322
-msgid "Fly down"
-msgstr "Repülés le"
-
-#: engines/scumm/help.cpp:323
-msgid "Fly to upper right"
-msgstr "Jobbra fel repülés"
-
-#: engines/scumm/help.cpp:324
-msgid "Fly to right"
-msgstr "Jobbra repülés"
-
-#: engines/scumm/help.cpp:325
-msgid "Fly to lower right"
-msgstr "Jobbra le repülés"
-
-#: engines/scumm/scumm.cpp:1768
-#, c-format
-msgid ""
-"Native MIDI support requires the Roland Upgrade from LucasArts,\n"
-"but %s is missing. Using AdLib instead."
-msgstr ""
-"Native MIDI támogatáshoz kell a Roland Upgrade a LucasArts-tól,\n"
-"a %s hiányzik. AdLib-ot használok helyette."
-
-#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189
-#, c-format
-msgid ""
-"Failed to save game state to file:\n"
-"\n"
-"%s"
-msgstr ""
-"Játékállás mentése:\n"
-"\n"
-"%s fájlba nem sikerült"
-
-#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154
-#, c-format
-msgid ""
-"Failed to load game state from file:\n"
-"\n"
-"%s"
-msgstr ""
-"Játékállás betöltése:\n"
-"\n"
-"%s fájlból nem sikerült"
-
-#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197
-#, c-format
-msgid ""
-"Successfully saved game state in file:\n"
-"\n"
-"%s"
-msgstr ""
-"Játékállás mentése:\n"
-"\n"
-"%s fájlba elkészült"
-
-#: engines/scumm/scumm.cpp:2492
-msgid ""
-"Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To "
-"play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' "
-"directory inside the Tentacle game directory."
-msgstr ""
-"Általában a Maniac Mansion indulna itt. De a ScummVM most nem indítja el. Ha "
-"játszani akarsz vele menj a ScummVM főmenüben a 'Játék hozzáadás' ra és "
-"válaszd a 'Maniac' mappát a 'Tentacle' könyvtárában."
-
-#. I18N: Option for fast scene switching
-#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171
-msgid "~Z~ip Mode Activated"
-msgstr "~Z~ip Mód aktiválva"
-
-#: engines/mohawk/dialogs.cpp:93
-msgid "~T~ransitions Enabled"
-msgstr "Átmenetek engedélyezve"
-
-#. I18N: Drop book page
-#: engines/mohawk/dialogs.cpp:95
-msgid "~D~rop Page"
-msgstr "Oldal~D~obás"
-
-#: engines/mohawk/dialogs.cpp:99
-msgid "~S~how Map"
-msgstr "~S~ Térkép"
-
-#: engines/mohawk/dialogs.cpp:105
-#, fuzzy
-msgid "~M~ain Menu"
-msgstr "ScummVM Főmenü"
-
-#: engines/mohawk/dialogs.cpp:172
-msgid "~W~ater Effect Enabled"
-msgstr "Vízeffektus engedélyezve"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore game:"
-msgstr "Játékmenet visszaállítása:"
-
-#: engines/sci/engine/kfile.cpp:678
-msgid "Restore"
-msgstr "Visszaállítás"
-
-#: engines/agos/animation.cpp:544
-#, c-format
-msgid "Cutscene file '%s' not found!"
-msgstr "'%s' átvezető fájl nem található"
-
-#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283
-#: engines/tinsel/saveload.cpp:475
-msgid "Failed to load game state from file."
-msgstr "Játékállás betöltése fájlból nem sikerült."
-
-#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553
-msgid "Failed to save game state to file."
-msgstr "Játékállás mentése fájlba nem sikerült."
-
-#: engines/gob/inter_v5.cpp:107
-msgid "Failed to delete file."
-msgstr "Fájl törlés sikertelen."
-
-#: engines/groovie/script.cpp:420
-msgid "Failed to save game"
-msgstr "Játék mentés nem sikerült"
-
-#: engines/kyra/sound_midi.cpp:475
-msgid ""
-"You appear to be using a General MIDI device,\n"
-"but your game only supports Roland MT32 MIDI.\n"
-"We try to map the Roland MT32 instruments to\n"
-"General MIDI ones. After all it might happen\n"
-"that a few tracks will not be correctly played."
-msgstr ""
-"Úgy néz ki egy General MIDI eszközt használsz,\n"
-"a játék csak Roland MT32 MIDI eszközt támogat.\n"
-"Cseréld ki Roland MT32 hangszerekre\n"
-"a General MIDI-t. Különben néhány\n"
-"sávot nem lehet rendesen lejátszani."
-
-#: engines/m4/m4_menus.cpp:138
-msgid "Save game failed!"
-msgstr "Játék mentése nem sikerült!"
-
-#: engines/sky/compact.cpp:130
-msgid ""
-"Unable to find \"sky.cpt\" file!\n"
-"Please download it from www.scummvm.org"
-msgstr ""
-"A \"sky.cpt\" fájl nem található!\n"
-"Töltsd le a www.scummvm.org oldaláról"
-
-#: engines/sky/compact.cpp:141
-msgid ""
-"The \"sky.cpt\" file has an incorrect size.\n"
-"Please (re)download it from www.scummvm.org"
-msgstr ""
-"A \"sky.cpt\" fájl mérete nem megfelelő.\n"
-"Töltsd le a www.scummvm.org oldaláról"
-
-#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379
-msgid "DXA cutscenes found but ScummVM has been built without zlib support"
-msgstr "DXA átvezető elérhető, de a ScummVM zlib támogatás nincs lefordítva"
-
-#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389
-msgid "MPEG2 cutscenes are no longer supported"
-msgstr "MPEG2 átvezetők már nem támogatottak"
-
-#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397
-#, c-format
-msgid "Cutscene '%s' not found"
-msgstr "'%s' átvezető nem található"
-
-#: engines/sword1/control.cpp:863
-msgid ""
-"ScummVM found that you have old savefiles for Broken Sword 1 that should be "
-"converted.\n"
-"The old save game format is no longer supported, so you will not be able to "
-"load your games if you don't convert them.\n"
-"\n"
-"Press OK to convert them now, otherwise you will be asked again the next "
-"time you start the game.\n"
-msgstr ""
-"ScummVM régi játékmentést talált a Broken Sword 1 hez, ezt át kell "
-"alakítani.\n"
-"A régi játékmentés nem támogatott, ezért a játék nem töltődik be átalakítás "
-"nélkül.\n"
-"\n"
-"Nyomj OK-t az átalakításhoz, vagy rákérdezzek ha legközelebb elindítod a "
-"játékot.\n"
-
-#: engines/sword1/control.cpp:1232
-#, c-format
-msgid ""
-"Target new save game already exists!\n"
-"Would you like to keep the old save game (%s) or the new one (%s)?\n"
-msgstr ""
-"A választott játékmentés már létezik!\n"
-"Megtartod a régi játékmentést (%s) vagy kicseréled az újra (%s)?\n"
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the old one"
-msgstr "A régit megtartom"
-
-#: engines/sword1/control.cpp:1235
-msgid "Keep the new one"
-msgstr "Az újat megtartom"
-
-#: engines/sword1/logic.cpp:1633
-msgid "This is the end of the Broken Sword 1 Demo"
-msgstr "Ez a Broken Sword 1 Demo vége"
-
-#: engines/parallaction/saveload.cpp:133
-#, c-format
-msgid ""
-"Can't save game in slot %i\n"
-"\n"
-msgstr ""
-"Játékállás nem menthető %i slotba\n"
-"\n"
-
-#: engines/parallaction/saveload.cpp:211
-msgid "Loading game..."
-msgstr "Játék betöltés..."
-
-#: engines/parallaction/saveload.cpp:226
-msgid "Saving game..."
-msgstr "Játék mentés..."
-
-#: engines/parallaction/saveload.cpp:279
-msgid ""
-"ScummVM found that you have old savefiles for Nippon Safes that should be "
-"renamed.\n"
-"The old names are no longer supported, so you will not be able to load your "
-"games if you don't convert them.\n"
-"\n"
-"Press OK to convert them now, otherwise you will be asked next time.\n"
-msgstr ""
-"ScummVM régi játékmentést talált a Nippon Safes hez ezt át kell nevezni.\n"
-"A régi játékmentés nem támogatott, ezért a játék nem töltődik be átnevezés "
-"nélkül..\n"
-"\n"
-"Nyomj OK-t az átalakításhoz, vagy rákérdezzek ha legközelebb elindítod a "
-"játékot.\n"
-
-#: engines/parallaction/saveload.cpp:326
-msgid "ScummVM successfully converted all your savefiles."
-msgstr "ScummVM konvertálta az összes játékállásodat."
-
-#: engines/parallaction/saveload.cpp:328
-msgid ""
-"ScummVM printed some warnings in your console window and can't guarantee all "
-"your files have been converted.\n"
-"\n"
-"Please report to the team."
-msgstr ""
-"ScummVM kiírt néhány figyelmeztetést a konzolablakba és nem biztos hogy az "
-"összes fájlod át lett alakítva.\n"
-"\n"
-"Légyszíves jelentsd a csapatnak."
-
-#: audio/fmopl.cpp:49
-msgid "MAME OPL emulator"
-msgstr "MAME OPL emulátor"
-
-#: audio/fmopl.cpp:51
-msgid "DOSBox OPL emulator"
-msgstr "DOSBox OPL emulátor"
-
-#: audio/mididrv.cpp:205
-#, fuzzy, c-format
-msgid ""
-"The selected audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-"A kiválasztott '%s' hangeszköz nem található. (Lekapcsoltad, vagy kihúztad). "
-"A következő elérhető eszköz keresése..."
-
-#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253
-#: audio/mididrv.cpp:268
-msgid "Attempting to fall back to the next available device..."
-msgstr ""
-
-#: audio/mididrv.cpp:217
-#, fuzzy, c-format
-msgid ""
-"The selected audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-"A kiválasztott '%s' hangeszköz nem használható. Bővebb információ a "
-"naplófájlban. A következő elérhető eszköz keresése..."
-
-#: audio/mididrv.cpp:253
-#, fuzzy, c-format
-msgid ""
-"The preferred audio device '%s' was not found (e.g. might be turned off or "
-"disconnected)."
-msgstr ""
-"Az elsődleges '%s' hangeszköz nem található. (Lekapcsoltad, vagy kihúztad). "
-"A következő elérhető eszköz keresése..."
-
-#: audio/mididrv.cpp:268
-#, fuzzy, c-format
-msgid ""
-"The preferred audio device '%s' cannot be used. See log file for more "
-"information."
-msgstr ""
-"Az elsődleges '%s' hangeszköz nem használható. Bővebb információ a "
-"naplófájlban. A következő elérhető eszköz keresése..."
-
-#: audio/null.h:43
-msgid "No music"
-msgstr "Nincs zene"
-
-#: audio/mods/paula.cpp:189
-msgid "Amiga Audio Emulator"
-msgstr "Amiga Audió Emulátor"
-
-#: audio/softsynth/adlib.cpp:1594
-msgid "AdLib Emulator"
-msgstr "AdLib Emulátor"
-
-#: audio/softsynth/appleiigs.cpp:33
-msgid "Apple II GS Emulator (NOT IMPLEMENTED)"
-msgstr "Apple II GS Emulátor (NEM TÁMOGATOTT)"
-
-#: audio/softsynth/sid.cpp:1430
-msgid "C64 Audio Emulator"
-msgstr "C64 Audio Emulátor"
-
-#: audio/softsynth/mt32.cpp:329
-msgid "Initializing MT-32 Emulator"
-msgstr "MT-32 Emulátor inicializálása"
-
-#: audio/softsynth/mt32.cpp:543
-msgid "MT-32 Emulator"
-msgstr "MT-32 Emulátor"
-
-#: audio/softsynth/pcspk.cpp:139
-msgid "PC Speaker Emulator"
-msgstr "PC Speaker Emulátor"
-
-#: audio/softsynth/pcspk.cpp:158
-msgid "IBM PCjr Emulator"
-msgstr "IBM PCjr Emulátor"
-
-#: backends/keymapper/remap-dialog.cpp:47
-msgid "Keymap:"
-msgstr "Billentyűzet kiosztás:"
-
-#: backends/keymapper/remap-dialog.cpp:64
-msgid " (Active)"
-msgstr " (Aktív)"
-
-#: backends/keymapper/remap-dialog.cpp:98
-msgid " (Global)"
-msgstr " (Globális)"
-
-#: backends/keymapper/remap-dialog.cpp:108
-msgid " (Game)"
-msgstr " (Játék)"
-
-#: backends/midi/windows.cpp:164
-msgid "Windows MIDI"
-msgstr "Windows MIDI"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:57
-msgid "ScummVM Main Menu"
-msgstr "ScummVM Főmenü"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:63
-msgid "~L~eft handed mode"
-msgstr "Balkezes mód:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:64
-msgid "~I~ndy fight controls"
-msgstr "~I~ndy fight controls"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:65
-msgid "Show mouse cursor"
-msgstr "Egérkurzor látszik"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:66
-msgid "Snap to edges"
-msgstr "Élekre illesztés"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:68
-msgid "Touch X Offset"
-msgstr "Touch X Eltolás"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:75
-msgid "Touch Y Offset"
-msgstr "Touch Y Eltolás"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:87
-msgid "Use laptop trackpad-style cursor control"
-msgstr "Laptop trackpad stílusu kurzor vezérlő"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:88
-msgid "Tap for left click, double tap right click"
-msgstr "Érintés balkatt, duplaérintés jobbkatt"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:90
-msgid "Sensitivity"
-msgstr "Érzékenység"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:99
-msgid "Initial top screen scale:"
-msgstr "Képernyő felső kezdőpont:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:105
-msgid "Main screen scaling:"
-msgstr "Főképernyő átméretezés:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:107
-msgid "Hardware scale (fast, but low quality)"
-msgstr "Hardveres átméretezés (gyors, alacsony minőség)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:108
-msgid "Software scale (good quality, but slower)"
-msgstr "Szoftveres átméretezés (jó minőség, lassú)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:109
-msgid "Unscaled (you must scroll left and right)"
-msgstr "Eredeti (görgethetsz jobbra és balra)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:111
-msgid "Brightness:"
-msgstr "Fényerő:"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:121
-msgid "High quality audio (slower) (reboot)"
-msgstr "Jóminőségü audió (lassabb)(újraindítás)"
-
-#: backends/platform/ds/arm9/source/dsoptions.cpp:122
-msgid "Disable power off"
-msgstr "Leállítás tiltva"
-
-#: backends/platform/iphone/osys_events.cpp:338
-msgid "Mouse-click-and-drag mode enabled."
-msgstr "Egér kattint-és-húz mód engedélyezve."
-
-#: backends/platform/iphone/osys_events.cpp:340
-msgid "Mouse-click-and-drag mode disabled."
-msgstr "Egér kattint-és-húz mód letiltva."
-
-#: backends/platform/iphone/osys_events.cpp:351
-msgid "Touchpad mode enabled."
-msgstr "Touchpad mód engedélyezve."
-
-#: backends/platform/iphone/osys_events.cpp:353
-msgid "Touchpad mode disabled."
-msgstr "Touchpad mód letiltva."
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:67
-#, fuzzy
-msgid "Hide ScummVM"
-msgstr "ScummVM bezárása"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:70
-msgid "Hide Others"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:74
-msgid "Show All"
-msgstr ""
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:92
-#: backends/platform/sdl/macosx/appmenu_osx.mm:99
-#, fuzzy
-msgid "Window"
-msgstr "Windows MIDI"
-
-#: backends/platform/sdl/macosx/appmenu_osx.mm:95
-msgid "Minimize"
-msgstr ""
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45
-msgid "Normal (no scaling)"
-msgstr "Normál (nincs átméretezés)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64
-msgctxt "lowres"
-msgid "Normal (no scaling)"
-msgstr "Normál (nincs átméretezés)"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533
-msgid "Enabled aspect ratio correction"
-msgstr "Méretarány korrekció engedélyezve"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538
-msgid "Disabled aspect ratio correction"
-msgstr "Méretarány korrekció letiltva"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207
-msgid "Active graphics filter:"
-msgstr "Aktív grafikus szűrők:"
-
-#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477
-msgid "Windowed mode"
-msgstr "Ablakos mód"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:130
-msgid "OpenGL Normal"
-msgstr "OpenGL Normál"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:131
-msgid "OpenGL Conserve"
-msgstr "OpenGL Megtartott"
-
-#: backends/graphics/opengl/opengl-graphics.cpp:132
-msgid "OpenGL Original"
-msgstr "OpenGL Eredeti"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415
-msgid "Current display mode"
-msgstr "Jelenlegi videómód"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428
-msgid "Current scale"
-msgstr "Aktuális méretezés"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558
-msgid "Active filter mode: Linear"
-msgstr "Aktív filter mód: Lineáris"
-
-#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560
-msgid "Active filter mode: Nearest"
-msgstr "Aktív filter mód: Közelítő"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:38
-#: backends/platform/wince/CEActionsSmartphone.cpp:39
-msgid "Up"
-msgstr "Fel"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:39
-#: backends/platform/wince/CEActionsSmartphone.cpp:40
-msgid "Down"
-msgstr "Le"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:40
-#: backends/platform/wince/CEActionsSmartphone.cpp:41
-msgid "Left"
-msgstr "Bal"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:41
-#: backends/platform/wince/CEActionsSmartphone.cpp:42
-msgid "Right"
-msgstr "Jobb"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:42
-#: backends/platform/wince/CEActionsPocket.cpp:60
-#: backends/platform/wince/CEActionsSmartphone.cpp:43
-msgid "Left Click"
-msgstr "Bal katt"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:43
-#: backends/platform/wince/CEActionsSmartphone.cpp:44
-msgid "Right Click"
-msgstr "Jobb katt"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:46
-#: backends/platform/wince/CEActionsSmartphone.cpp:47
-msgid "Zone"
-msgstr "Zóna"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:47
-#: backends/platform/wince/CEActionsPocket.cpp:54
-#: backends/platform/wince/CEActionsSmartphone.cpp:48
-msgid "Multi Function"
-msgstr "Többfunkciós"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:48
-msgid "Swap character"
-msgstr "Karakter csere"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:49
-msgid "Skip text"
-msgstr "Szöveg átugrása"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:51
-msgid "Fast mode"
-msgstr "Gyors mód"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:53
-msgid "Debugger"
-msgstr "Hibakereső"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:54
-msgid "Global menu"
-msgstr "Globális menü"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:55
-msgid "Virtual keyboard"
-msgstr "Virtuális billentyűzet"
-
-#: backends/platform/symbian/src/SymbianActions.cpp:56
-msgid "Key mapper"
-msgstr "Billentyű kiosztás"
-
-#: backends/events/symbiansdl/symbiansdl-events.cpp:184
-msgid "Do you want to quit ?"
-msgstr "Ki akarsz lépni ?"
-
-#: backends/platform/wii/options.cpp:51
-msgid "Video"
-msgstr "Videó"
-
-#: backends/platform/wii/options.cpp:54
-msgid "Current video mode:"
-msgstr "Jelenlegi videómód:"
-
-#: backends/platform/wii/options.cpp:56
-msgid "Double-strike"
-msgstr "Dupla érintés"
-
-#: backends/platform/wii/options.cpp:60
-msgid "Horizontal underscan:"
-msgstr "Vízszintes eltolás:"
-
-#: backends/platform/wii/options.cpp:66
-msgid "Vertical underscan:"
-msgstr "Függőleges eltolás:"
-
-#: backends/platform/wii/options.cpp:71
-msgid "Input"
-msgstr "Bemenet"
-
-#: backends/platform/wii/options.cpp:74
-msgid "GC Pad sensitivity:"
-msgstr "GC Pad érzékenység:"
-
-#: backends/platform/wii/options.cpp:80
-msgid "GC Pad acceleration:"
-msgstr "GC Pad felbontás:"
-
-#: backends/platform/wii/options.cpp:86
-msgid "DVD"
-msgstr "DVD"
-
-#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101
-msgid "Status:"
-msgstr "Státusz:"
-
-#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102
-msgid "Unknown"
-msgstr "Ismeretlen"
-
-#: backends/platform/wii/options.cpp:93
-msgid "Mount DVD"
-msgstr "DVD csatolás"
-
-#: backends/platform/wii/options.cpp:94
-msgid "Unmount DVD"
-msgstr "DVD kiadás"
-
-#: backends/platform/wii/options.cpp:98
-msgid "SMB"
-msgstr "SMB"
-
-#: backends/platform/wii/options.cpp:106
-msgid "Server:"
-msgstr "Szerver:"
-
-#: backends/platform/wii/options.cpp:110
-msgid "Share:"
-msgstr "Megoszt:"
-
-#: backends/platform/wii/options.cpp:114
-msgid "Username:"
-msgstr "Felhasználó:"
-
-#: backends/platform/wii/options.cpp:118
-msgid "Password:"
-msgstr "Jelszó:"
-
-#: backends/platform/wii/options.cpp:121
-msgid "Init network"
-msgstr "Hálózat inicializálás"
-
-#: backends/platform/wii/options.cpp:123
-msgid "Mount SMB"
-msgstr "SMB csatolás"
-
-#: backends/platform/wii/options.cpp:124
-msgid "Unmount SMB"
-msgstr "SMB kiadás"
-
-#: backends/platform/wii/options.cpp:143
-msgid "DVD Mounted successfully"
-msgstr "DVD csatlakoztatva"
-
-#: backends/platform/wii/options.cpp:146
-msgid "Error while mounting the DVD"
-msgstr "Hiba a DVD csatlakoztatásakor"
-
-#: backends/platform/wii/options.cpp:148
-msgid "DVD not mounted"
-msgstr "DVD nincs csatolva"
-
-#: backends/platform/wii/options.cpp:161
-msgid "Network up, share mounted"
-msgstr "Hálózat és megosztás csatlakozva"
-
-#: backends/platform/wii/options.cpp:163
-msgid "Network up"
-msgstr "Hálózat csatlakozva"
-
-#: backends/platform/wii/options.cpp:166
-msgid ", error while mounting the share"
-msgstr ", hiba a megosztás csatolásakor"
-
-#: backends/platform/wii/options.cpp:168
-msgid ", share not mounted"
-msgstr ", megosztás nincs csatolva"
-
-#: backends/platform/wii/options.cpp:174
-msgid "Network down"
-msgstr "Nincs hálózat"
-
-#: backends/platform/wii/options.cpp:178
-msgid "Initializing network"
-msgstr "Hálózat inicializálása"
-
-#: backends/platform/wii/options.cpp:182
-msgid "Timeout while initializing network"
-msgstr "Időtúllépés a hálózat inicializálásakor"
-
-#: backends/platform/wii/options.cpp:186
-#, c-format
-msgid "Network not initialized (%d)"
-msgstr "(%d) Hálózat nincs inicializálva"
-
-#: backends/platform/wince/CEActionsPocket.cpp:46
-msgid "Hide Toolbar"
-msgstr "Eszköztár rejtés"
-
-#: backends/platform/wince/CEActionsPocket.cpp:47
-msgid "Show Keyboard"
-msgstr "Billentyűzet megjelenítés"
-
-#: backends/platform/wince/CEActionsPocket.cpp:48
-msgid "Sound on/off"
-msgstr "Hang be/ki"
-
-#: backends/platform/wince/CEActionsPocket.cpp:49
-msgid "Right click"
-msgstr "Jobb katt"
-
-#: backends/platform/wince/CEActionsPocket.cpp:50
-msgid "Show/Hide Cursor"
-msgstr "Kurzor be/ki"
-
-#: backends/platform/wince/CEActionsPocket.cpp:51
-msgid "Free look"
-msgstr "Szabad nézet"
-
-#: backends/platform/wince/CEActionsPocket.cpp:52
-msgid "Zoom up"
-msgstr "Nagyítás"
-
-#: backends/platform/wince/CEActionsPocket.cpp:53
-msgid "Zoom down"
-msgstr "Kicsinyítés"
-
-#: backends/platform/wince/CEActionsPocket.cpp:55
-#: backends/platform/wince/CEActionsSmartphone.cpp:49
-msgid "Bind Keys"
-msgstr "Kapcsolódás kulcsok"
-
-#: backends/platform/wince/CEActionsPocket.cpp:56
-msgid "Cursor Up"
-msgstr "Kurzor Fel"
-
-#: backends/platform/wince/CEActionsPocket.cpp:57
-msgid "Cursor Down"
-msgstr "Kurzor Le"
-
-#: backends/platform/wince/CEActionsPocket.cpp:58
-msgid "Cursor Left"
-msgstr "Kurzor Bal"
-
-#: backends/platform/wince/CEActionsPocket.cpp:59
-msgid "Cursor Right"
-msgstr "Kurzor Jobb"
-
-#: backends/platform/wince/CEActionsPocket.cpp:267
-#: backends/platform/wince/CEActionsSmartphone.cpp:231
-msgid "Do you want to load or save the game?"
-msgstr "Játékállás betöltése vagy mentése?"
-
-#: backends/platform/wince/CEActionsPocket.cpp:326
-#: backends/platform/wince/CEActionsSmartphone.cpp:287
-msgid " Are you sure you want to quit ? "
-msgstr " Biztos hogy ki akarsz lépni ? "
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:50
-msgid "Keyboard"
-msgstr "Billentyűzet"
-
-#: backends/platform/wince/CEActionsSmartphone.cpp:51
-msgid "Rotate"
-msgstr "Forgatás"
-
-#: backends/platform/wince/CELauncherDialog.cpp:56
-msgid "Using SDL driver "
-msgstr "SDL meghajtó használata"
-
-#: backends/platform/wince/CELauncherDialog.cpp:60
-msgid "Display "
-msgstr "Kijelző"
-
-#: backends/platform/wince/CELauncherDialog.cpp:83
-msgid "Do you want to perform an automatic scan ?"
-msgstr "El akarod kezdeni az automatikus vizsgálatot ?"
-
-#: backends/platform/wince/wince-sdl.cpp:471
-msgid "Map right click action"
-msgstr "Jobbkatt művelet gomb"
-
-#: backends/platform/wince/wince-sdl.cpp:475
-msgid "You must map a key to the 'Right Click' action to play this game"
-msgstr "Válassz egy billentyűt a 'Jobbkatt' művelethez"
-
-#: backends/platform/wince/wince-sdl.cpp:484
-msgid "Map hide toolbar action"
-msgstr "Eszköztár rejtés gomb"
-
-#: backends/platform/wince/wince-sdl.cpp:488
-msgid "You must map a key to the 'Hide toolbar' action to play this game"
-msgstr "Válassz egy billentyűt az 'Eszköztár rejtés' művelethez"
-
-#: backends/platform/wince/wince-sdl.cpp:497
-msgid "Map Zoom Up action (optional)"
-msgstr "Nagyítás művelet (opcionális)"
-
-#: backends/platform/wince/wince-sdl.cpp:500
-msgid "Map Zoom Down action (optional)"
-msgstr "Kicsinyítés művelet (opcionális)"
-
-#: backends/platform/wince/wince-sdl.cpp:508
-msgid ""
-"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory"
-msgstr ""
-"Ne felejts billentyűt társítani az 'Eszköztár rejtés' művelethez, hogy lásd "
-"a teljes listát"
-
-#: backends/events/default/default-events.cpp:222
-msgid "Do you really want to return to the Launcher?"
-msgstr "Biztos hogy visszatérsz az indítópulthoz?"
-
-#: backends/events/default/default-events.cpp:222
-msgid "Launcher"
-msgstr "Indítópult"
-
-#: backends/events/default/default-events.cpp:244
-msgid "Do you really want to quit?"
-msgstr "Biztos hogy ki akarsz lépni ?"
-
-#: backends/events/gph/gph-events.cpp:366
-#: backends/events/gph/gph-events.cpp:409
-#: backends/events/openpandora/op-events.cpp:141
-msgid "Touchscreen 'Tap Mode' - Left Click"
-msgstr "Érintőképernyő 'Tap Mód' - Bal katt"
-
-#: backends/events/gph/gph-events.cpp:368
-#: backends/events/gph/gph-events.cpp:411
-#: backends/events/openpandora/op-events.cpp:143
-msgid "Touchscreen 'Tap Mode' - Right Click"
-msgstr "Érintőképernyő 'Tap Mód' - Jobb katt"
-
-#: backends/events/gph/gph-events.cpp:370
-#: backends/events/gph/gph-events.cpp:413
-#: backends/events/openpandora/op-events.cpp:145
-msgid "Touchscreen 'Tap Mode' - Hover (No Click)"
-msgstr "Érintőképernyő 'Tap Mód' - Lebegő (Nincs katt)"
-
-#: backends/events/gph/gph-events.cpp:390
-msgid "Maximum Volume"
-msgstr "Maximum Hangerő"
-
-#: backends/events/gph/gph-events.cpp:392
-msgid "Increasing Volume"
-msgstr "Hangerő növelése"
-
-#: backends/events/gph/gph-events.cpp:398
-msgid "Minimal Volume"
-msgstr "Minimum Hangerő"
-
-#: backends/events/gph/gph-events.cpp:400
-msgid "Decreasing Volume"
-msgstr "Hangerő csökkentése"
-
-#: backends/updates/macosx/macosx-updates.mm:65
-msgid "Check for Updates..."
-msgstr ""
-
-#~ msgctxt "lowres"
-#~ msgid "Add Game..."
-#~ msgstr "Játék hozzáadás"
-
-#~ msgid "Add Game..."
-#~ msgstr "Játék hozzáadás"
-
-#~ msgid ""
-#~ "Your game version has been detected using filename matching as a variant "
-#~ "of %s."
-#~ msgstr "A felismert játékverziód a használt fájlnévvel a %s egy változata."
-
-#~ msgid "If this is an original and unmodified version, please report any"
-#~ msgstr "Ha ez egy eredeti nem változtatott verzió, kérlek jelezd minden"
-
-#~ msgid "information previously printed by ScummVM to the team."
-#~ msgstr "előzőleg kiírt információt a ScummVM csapatnak."
-
-#~ msgid "Discovered %d new games."
-#~ msgstr "%d Új játékot találtam."
-
-#~ msgid "Command line argument not processed"
-#~ msgstr "Parancssori paraméter nem működik"
-
-#~ msgid "FM Towns Emulator"
-#~ msgstr "FM Towns Emulátor"
-
-#~ msgid "Invalid Path"
-#~ msgstr "Érvénytelen mappa"
+# Hungarian translation for ScummVM. +# Copyright (C) 2010-2011 ScummVM Team +# This file is distributed under the same license as the ScummVM package. +# George Kormendi <grubycza@hotmail.com>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: ScummVM 1.3.0svn\n" +"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" +"POT-Creation-Date: 2011-08-20 15:12+0100\n" +"PO-Revision-Date: 2011-08-23 06:45+0100\n" +"Last-Translator: Gruby <grubycza@hotmail.com>\n" +"Language-Team: Hungarian\n" +"Language: Magyar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"X-Poedit-Language: Hungarian\n" +"X-Poedit-Country: HUNGARY\n" +"X-Poedit-SourceCharset: iso-8859-1\n" + +#: gui/about.cpp:91 +#, c-format +msgid "(built on %s)" +msgstr "(készült %s)" + +#: gui/about.cpp:98 +msgid "Features compiled in:" +msgstr "Lefordított összetevők:" + +#: gui/about.cpp:107 +msgid "Available engines:" +msgstr "Támogatott játékmotorok:" + +#: gui/browser.cpp:66 +msgid "Go up" +msgstr "Feljebb" + +#: gui/browser.cpp:66 gui/browser.cpp:68 +msgid "Go to previous directory level" +msgstr "Vissza az előző könyvtárszintre" + +#: gui/browser.cpp:68 +msgctxt "lowres" +msgid "Go up" +msgstr "Feljebb" + +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:94 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/engine.cpp:436 engines/scumm/dialogs.cpp:190 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 +#: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 +msgid "Cancel" +msgstr "Mégse" + +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 +msgid "Choose" +msgstr "Választ" + +#: gui/gui-manager.cpp:116 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:209 +#: backends/keymapper/remap-dialog.cpp:52 +msgid "Close" +msgstr "Bezár" + +#: gui/gui-manager.cpp:119 +msgid "Mouse click" +msgstr "Egérkattintás" + +#: gui/gui-manager.cpp:122 base/main.cpp:286 +msgid "Display keyboard" +msgstr "Billentyűzet beállítások" + +#: gui/gui-manager.cpp:125 base/main.cpp:289 +msgid "Remap keys" +msgstr "Billentyűk átállítása" + +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 +msgid "Choose an action to map" +msgstr "Válassz műveletet a kiosztáshoz" + +#: gui/KeysDialog.cpp:41 +msgid "Map" +msgstr "Kiosztás" + +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:91 gui/options.cpp:1179 +#: engines/engine.cpp:359 engines/engine.cpp:370 engines/scumm/dialogs.cpp:192 +#: engines/scumm/scumm.cpp:1770 engines/agos/animation.cpp:545 +#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131 +#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:344 +#: engines/sword1/animation.cpp:354 engines/sword1/animation.cpp:360 +#: engines/sword1/control.cpp:865 engines/sword1/logic.cpp:1633 +#: engines/sword2/animation.cpp:379 engines/sword2/animation.cpp:389 +#: engines/sword2/animation.cpp:398 engines/parallaction/saveload.cpp:281 +#: backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:54 +msgid "OK" +msgstr "OK" + +#: gui/KeysDialog.cpp:49 +msgid "Select an action and click 'Map'" +msgstr "Válassz műveletet és katt a 'Kiosztás'-ra" + +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 +#, c-format +msgid "Associated key : %s" +msgstr "Társított billentyű: %s" + +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 +#, c-format +msgid "Associated key : none" +msgstr "Társított billentyű: nincs" + +#: gui/KeysDialog.cpp:90 +msgid "Please select an action" +msgstr "Válassz egy műveletet" + +#: gui/KeysDialog.cpp:106 +msgid "Press the key to associate" +msgstr "Nyomj egy billentyűt a társításhoz" + +#: gui/launcher.cpp:165 +msgid "Game" +msgstr "Játék" + +#: gui/launcher.cpp:169 +msgid "ID:" +msgstr "ID:" + +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 +msgid "" +"Short game identifier used for referring to savegames and running the game " +"from the command line" +msgstr "" +"Rövid játékazonosító a játékmentésekhez és a játék parancssori futtatásához" + +#: gui/launcher.cpp:171 +msgctxt "lowres" +msgid "ID:" +msgstr "ID:" + +#: gui/launcher.cpp:176 +msgid "Name:" +msgstr "Név:" + +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +msgid "Full title of the game" +msgstr "A játék teljes neve" + +#: gui/launcher.cpp:178 +msgctxt "lowres" +msgid "Name:" +msgstr "Név:" + +#: gui/launcher.cpp:182 +msgid "Language:" +msgstr "Nyelv:" + +#: gui/launcher.cpp:182 gui/launcher.cpp:183 +msgid "" +"Language of the game. This will not turn your Spanish game version into " +"English" +msgstr "" +"A játék nyelve. Ne állítsd át a pl. Spanyol nyelvű játékodat Angol nyelvre" + +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 +msgid "<default>" +msgstr "<alapértelmezett>" + +#: gui/launcher.cpp:194 +msgid "Platform:" +msgstr "Platform:" + +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 +msgid "Platform the game was originally designed for" +msgstr "Platform amire a játékot eredetileg készítették" + +#: gui/launcher.cpp:196 +msgctxt "lowres" +msgid "Platform:" +msgstr "Platform:" + +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 +msgid "Graphics" +msgstr "Grafika" + +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 +msgid "GFX" +msgstr "GFX" + +#: gui/launcher.cpp:211 +msgid "Override global graphic settings" +msgstr "Globális grafikai beállítások felülbírálása" + +#: gui/launcher.cpp:213 +msgctxt "lowres" +msgid "Override global graphic settings" +msgstr "Globális grafikai beállítások felülbírálása" + +#: gui/launcher.cpp:220 gui/options.cpp:1041 +msgid "Audio" +msgstr "Audió" + +#: gui/launcher.cpp:223 +msgid "Override global audio settings" +msgstr "Globális audió beállítások felülbírálása" + +#: gui/launcher.cpp:225 +msgctxt "lowres" +msgid "Override global audio settings" +msgstr "Globális audió beállítások felülbírálása" + +#: gui/launcher.cpp:234 gui/options.cpp:1046 +msgid "Volume" +msgstr "Hangerő" + +#: gui/launcher.cpp:236 gui/options.cpp:1048 +msgctxt "lowres" +msgid "Volume" +msgstr "Hangerő" + +#: gui/launcher.cpp:239 +msgid "Override global volume settings" +msgstr "Globális hangerőbeállítások felülbírálása" + +#: gui/launcher.cpp:241 +msgctxt "lowres" +msgid "Override global volume settings" +msgstr "Globális hangerőbeállítások felülbírálása" + +#: gui/launcher.cpp:248 gui/options.cpp:1056 +msgid "MIDI" +msgstr "MIDI" + +#: gui/launcher.cpp:251 +msgid "Override global MIDI settings" +msgstr "Globális MIDI beállítások felülbírálása" + +#: gui/launcher.cpp:253 +msgctxt "lowres" +msgid "Override global MIDI settings" +msgstr "Globális MIDI beállítások felülbírálása" + +#: gui/launcher.cpp:263 gui/options.cpp:1062 +msgid "MT-32" +msgstr "MT-32" + +#: gui/launcher.cpp:266 +msgid "Override global MT-32 settings" +msgstr "Globális MT-32 beállítások felülbírálása" + +#: gui/launcher.cpp:268 +msgctxt "lowres" +msgid "Override global MT-32 settings" +msgstr "Globális MT-32 beállítások felülbírálása" + +#: gui/launcher.cpp:279 gui/options.cpp:1069 +msgid "Paths" +msgstr "Mappák" + +#: gui/launcher.cpp:281 gui/options.cpp:1071 +msgctxt "lowres" +msgid "Paths" +msgstr "Mappák" + +#: gui/launcher.cpp:288 +msgid "Game Path:" +msgstr "Játék Mappa:" + +#: gui/launcher.cpp:290 +msgctxt "lowres" +msgid "Game Path:" +msgstr "Játék Mappa:" + +#: gui/launcher.cpp:295 gui/options.cpp:1091 +msgid "Extra Path:" +msgstr "Extra Mappa:" + +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 +msgid "Specifies path to additional data used the game" +msgstr "Mappa kiválasztás a játékok kiegészítő fájljaihoz" + +#: gui/launcher.cpp:297 gui/options.cpp:1093 +msgctxt "lowres" +msgid "Extra Path:" +msgstr "Extra Mappa:" + +#: gui/launcher.cpp:302 gui/options.cpp:1079 +msgid "Save Path:" +msgstr "Mentés Mappa:" + +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 +msgid "Specifies where your savegames are put" +msgstr "Játékmentések helyének meghatározása" + +#: gui/launcher.cpp:304 gui/options.cpp:1081 +msgctxt "lowres" +msgid "Save Path:" +msgstr "Mentés Mappa:" + +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 +msgctxt "path" +msgid "None" +msgstr "Nincs" + +#: gui/launcher.cpp:326 gui/launcher.cpp:408 +#: backends/platform/wii/options.cpp:56 +msgid "Default" +msgstr "Alapértelmezett" + +#: gui/launcher.cpp:446 gui/options.cpp:1356 +msgid "Select SoundFont" +msgstr "SoundFont kiválasztás" + +#: gui/launcher.cpp:465 gui/launcher.cpp:612 +msgid "Select directory with game data" +msgstr "Játékok helyének kiválasztása" + +#: gui/launcher.cpp:483 +msgid "Select additional game directory" +msgstr "Válassz mappát a játék kiegészítőkhöz" + +#: gui/launcher.cpp:495 +msgid "Select directory for saved games" +msgstr "Válaszz játékmentéseknek mappát" + +#: gui/launcher.cpp:514 +msgid "This game ID is already taken. Please choose another one." +msgstr "Ez a játékazonosító ID már foglalt, Válassz egy másikat." + +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 +msgid "~Q~uit" +msgstr "Kilépés" + +#: gui/launcher.cpp:555 backends/platform/sdl/macosx/appmenu_osx.mm:80 +msgid "Quit ScummVM" +msgstr "ScummVM bezárása" + +#: gui/launcher.cpp:556 +msgid "A~b~out..." +msgstr "Névjegy" + +#: gui/launcher.cpp:556 backends/platform/sdl/macosx/appmenu_osx.mm:61 +msgid "About ScummVM" +msgstr "ScummVM névjegy" + +#: gui/launcher.cpp:557 +msgid "~O~ptions..." +msgstr "~O~pciók..." + +#: gui/launcher.cpp:557 +msgid "Change global ScummVM options" +msgstr "Globális ScummVM opciók cseréje" + +#: gui/launcher.cpp:559 +msgid "~S~tart" +msgstr "Indítás" + +#: gui/launcher.cpp:559 +msgid "Start selected game" +msgstr "A választott játék indítása" + +#: gui/launcher.cpp:562 +msgid "~L~oad..." +msgstr "Betöltés" + +#: gui/launcher.cpp:562 +msgid "Load savegame for selected game" +msgstr "Kimentett játékállás betöltése" + +#: gui/launcher.cpp:567 gui/launcher.cpp:1055 +msgid "~A~dd Game..." +msgstr "Játék hozzáadás" + +#: gui/launcher.cpp:567 gui/launcher.cpp:574 +msgid "Hold Shift for Mass Add" +msgstr "Tratsd lenyomva a Shift-et a Masszív módhoz" + +#: gui/launcher.cpp:569 +msgid "~E~dit Game..." +msgstr "Játékopciók" + +#: gui/launcher.cpp:569 gui/launcher.cpp:576 +msgid "Change game options" +msgstr "Játék beállítások megváltoztatása" + +#: gui/launcher.cpp:571 +msgid "~R~emove Game" +msgstr "Játék törlése" + +#: gui/launcher.cpp:571 gui/launcher.cpp:578 +msgid "Remove game from the list. The game data files stay intact" +msgstr "Törli a játék nevét a listáról. A játékfájlok megmaradnak" + +#: gui/launcher.cpp:574 gui/launcher.cpp:1055 +msgctxt "lowres" +msgid "~A~dd Game..." +msgstr "Játék hozzáadás" + +#: gui/launcher.cpp:576 +msgctxt "lowres" +msgid "~E~dit Game..." +msgstr "Játékopciók" + +#: gui/launcher.cpp:578 +msgctxt "lowres" +msgid "~R~emove Game" +msgstr "Játék törlése" + +#: gui/launcher.cpp:586 +msgid "Search in game list" +msgstr "Keresés a játéklistában" + +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 +msgid "Search:" +msgstr "Keresés:" + +#: gui/launcher.cpp:593 gui/options.cpp:826 +msgid "Clear value" +msgstr "Érték törlése" + +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216 +msgid "Load game:" +msgstr "Játék betöltése:" + +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188 +#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716 +#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Load" +msgstr "Betöltés" + +#: gui/launcher.cpp:723 +msgid "" +"Do you really want to run the mass game detector? This could potentially add " +"a huge number of games." +msgstr "" +"Biztos hogy futtatod a Masszív játékdetektort? Ez potenciálisan sok játékot " +"hozzáad a listához." + +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "Yes" +msgstr "Igen" + +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "No" +msgstr "Nem" + +#: gui/launcher.cpp:772 +msgid "ScummVM couldn't open the specified directory!" +msgstr "ScummVM nem tudja megnyitni a választott mappát!" + +#: gui/launcher.cpp:784 +msgid "ScummVM could not find any game in the specified directory!" +msgstr "A ScummVM nem talált egy játékot sem a választott mappában!" + +#: gui/launcher.cpp:798 +msgid "Pick the game:" +msgstr "Válassztott játék:" + +#: gui/launcher.cpp:872 +msgid "Do you really want to remove this game configuration?" +msgstr "Biztosan törölni akarod ezt a játékkonfigurációt?" + +#: gui/launcher.cpp:936 +msgid "This game does not support loading games from the launcher." +msgstr "Ez a játék nem támogatja a játékállás betöltést az indítóból." + +#: gui/launcher.cpp:940 +msgid "ScummVM could not find any engine capable of running the selected game!" +msgstr "" +"ScummVM nem talált olyan játékmotort ami a választott játékot támogatja!" + +#: gui/launcher.cpp:1054 +msgctxt "lowres" +msgid "Mass Add..." +msgstr "Masszív mód..." + +#: gui/launcher.cpp:1054 +msgid "Mass Add..." +msgstr "Masszív mód..." + +#: gui/massadd.cpp:78 gui/massadd.cpp:81 +msgid "... progress ..." +msgstr "... folyamatban ..." + +#: gui/massadd.cpp:258 +msgid "Scan complete!" +msgstr "Vizsgálat kész!" + +#: gui/massadd.cpp:261 +#, c-format +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..." + +#: gui/massadd.cpp:265 +#, c-format +msgid "Scanned %d directories ..." +msgstr "%d Mappa átvizsgálva..." + +#: gui/massadd.cpp:268 +#, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." +msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..." + +#: gui/options.cpp:72 +msgid "Never" +msgstr "Soha" + +#: gui/options.cpp:72 +msgid "every 5 mins" +msgstr "5 percenként" + +#: gui/options.cpp:72 +msgid "every 10 mins" +msgstr "10 percenként" + +#: gui/options.cpp:72 +msgid "every 15 mins" +msgstr "15 percenként" + +#: gui/options.cpp:72 +msgid "every 30 mins" +msgstr "30 percenként" + +#: gui/options.cpp:74 +msgid "8 kHz" +msgstr "8 kHz" + +#: gui/options.cpp:74 +msgid "11kHz" +msgstr "11kHz" + +#: gui/options.cpp:74 +msgid "22 kHz" +msgstr "22 kHz" + +#: gui/options.cpp:74 +msgid "44 kHz" +msgstr "44 kHz" + +#: gui/options.cpp:74 +msgid "48 kHz" +msgstr "48 kHz" + +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 +msgctxt "soundfont" +msgid "None" +msgstr "Nincs" + +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "Néhány grafikus opció változtatása sikertelen:" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "a videómód nem változott." + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "a teljesképernyős beállítás nem változott" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "a képméretarány beállítások nem változtak" + +#: gui/options.cpp:705 +msgid "Graphics mode:" +msgstr "Grafikus mód:" + +#: gui/options.cpp:716 +msgid "Render mode:" +msgstr "Kirajzolás mód:" + +#: gui/options.cpp:716 gui/options.cpp:717 +msgid "Special dithering modes supported by some games" +msgstr "Néhány játék támogatja a speciális árnyalási módokat" + +#: gui/options.cpp:726 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2247 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472 +msgid "Fullscreen mode" +msgstr "Teljesképernyős mód:" + +#: gui/options.cpp:729 +msgid "Aspect ratio correction" +msgstr "Képméretarány korrekció" + +#: gui/options.cpp:729 +msgid "Correct aspect ratio for 320x200 games" +msgstr "Helyes oldalarány a 320x200 játékokhoz" + +#: gui/options.cpp:730 +msgid "EGA undithering" +msgstr "EGA szinjavítás" + +#: gui/options.cpp:730 +msgid "Enable undithering in EGA games that support it" +msgstr "EGA színjavítás támogatott EGA játékokban" + +#: gui/options.cpp:738 +msgid "Preferred Device:" +msgstr "Elsődleges eszköz:" + +#: gui/options.cpp:738 +msgid "Music Device:" +msgstr "Zene eszköz:" + +#: gui/options.cpp:738 gui/options.cpp:740 +msgid "Specifies preferred sound device or sound card emulator" +msgstr "Elsődleges hangeszköz vagy hang emulátor beállítások" + +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 +msgid "Specifies output sound device or sound card emulator" +msgstr "Hangeszköz vagy hangkártya emulátor beállítások" + +#: gui/options.cpp:740 +msgctxt "lowres" +msgid "Preferred Dev.:" +msgstr "Elsődleges eszk.:" + +#: gui/options.cpp:740 +msgctxt "lowres" +msgid "Music Device:" +msgstr "Zene eszköz:" + +#: gui/options.cpp:766 +msgid "AdLib emulator:" +msgstr "AdLib emulátor:" + +#: gui/options.cpp:766 gui/options.cpp:767 +msgid "AdLib is used for music in many games" +msgstr "AdLib meghajtót sok játék használja zenéhez" + +#: gui/options.cpp:777 +msgid "Output rate:" +msgstr "Kimeneti ráta:" + +#: gui/options.cpp:777 gui/options.cpp:778 +msgid "" +"Higher value specifies better sound quality but may be not supported by your " +"soundcard" +msgstr "" +"Nagyobb értékek jobb hangminőséget adnak, de nem minden hangkártya támogatja" + +#: gui/options.cpp:788 +msgid "GM Device:" +msgstr "GM Eszköz:" + +#: gui/options.cpp:788 +msgid "Specifies default sound device for General MIDI output" +msgstr "Alapértelmezett hangeszköz General MIDI kimenethez" + +#: gui/options.cpp:799 +msgid "Don't use General MIDI music" +msgstr "Ne használj General MIDI zenét" + +#: gui/options.cpp:810 gui/options.cpp:871 +msgid "Use first available device" +msgstr "Első elérhető eszköz használata" + +#: gui/options.cpp:822 +msgid "SoundFont:" +msgstr "SoundFont:" + +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 +msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" +msgstr "" +"Néhány hangkárya, Fluidsynth és Timidyti támogatja a SoundFont betöltését" + +#: gui/options.cpp:824 +msgctxt "lowres" +msgid "SoundFont:" +msgstr "SoundFont:" + +#: gui/options.cpp:829 +msgid "Mixed AdLib/MIDI mode" +msgstr "Vegyes AdLib/MIDI mód" + +#: gui/options.cpp:829 +msgid "Use both MIDI and AdLib sound generation" +msgstr "MIDI és AdLib hanggenerátorok használata" + +#: gui/options.cpp:832 +msgid "MIDI gain:" +msgstr "MIDI erősítés:" + +#: gui/options.cpp:842 +msgid "MT-32 Device:" +msgstr "MT-32 Eszköz:" + +#: gui/options.cpp:842 +msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" +msgstr "Roland MT-32/LAPC1/CM32l/CM64 alapértelmezett hangeszközök beállítása" + +#: gui/options.cpp:847 +msgid "True Roland MT-32 (disable GM emulation)" +msgstr "Roland MT-32 Hardver (GM emuláció tiltva)" + +#: gui/options.cpp:847 gui/options.cpp:849 +msgid "" +"Check if you want to use your real hardware Roland-compatible sound device " +"connected to your computer" +msgstr "" +"Jelöld be, ha hardveres Roland-Kompatibilis hangeszköz van csatlakoztatva a " +"gépedhez és használni akarod" + +#: gui/options.cpp:849 +msgctxt "lowres" +msgid "True Roland MT-32 (no GM emulation)" +msgstr "Roland MT-32 Hardver (GM emuláció nincs)" + +#: gui/options.cpp:852 +msgid "Enable Roland GS Mode" +msgstr "Roland GS Mód engedélyezve" + +#: gui/options.cpp:852 +msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" +msgstr "General MIDI leképezés Roland MT-32 zenés játékokhoz kikapcsolva" + +#: gui/options.cpp:861 +msgid "Don't use Roland MT-32 music" +msgstr "Ne használj Roland MT-32 zenét" + +#: gui/options.cpp:888 +msgid "Text and Speech:" +msgstr "Szöveg és beszéd:" + +#: gui/options.cpp:892 gui/options.cpp:902 +msgid "Speech" +msgstr "Csak beszéd" + +#: gui/options.cpp:893 gui/options.cpp:903 +msgid "Subtitles" +msgstr "Csak felirat" + +#: gui/options.cpp:894 +msgid "Both" +msgstr "Mind" + +#: gui/options.cpp:896 +msgid "Subtitle speed:" +msgstr "Felirat sebesség:" + +#: gui/options.cpp:898 +msgctxt "lowres" +msgid "Text and Speech:" +msgstr "Felirat és beszéd:" + +#: gui/options.cpp:902 +msgid "Spch" +msgstr "Besz" + +#: gui/options.cpp:903 +msgid "Subs" +msgstr "Text" + +#: gui/options.cpp:904 +msgctxt "lowres" +msgid "Both" +msgstr "Mind" + +#: gui/options.cpp:904 +msgid "Show subtitles and play speech" +msgstr "Hang és feliratok megjelenítése" + +#: gui/options.cpp:906 +msgctxt "lowres" +msgid "Subtitle speed:" +msgstr "Felirat sebesség:" + +#: gui/options.cpp:922 +msgid "Music volume:" +msgstr "Zene hangerő:" + +#: gui/options.cpp:924 +msgctxt "lowres" +msgid "Music volume:" +msgstr "Zene hangerő:" + +#: gui/options.cpp:931 +msgid "Mute All" +msgstr "Összes némítása" + +#: gui/options.cpp:934 +msgid "SFX volume:" +msgstr "SFX hangerő:" + +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 +msgid "Special sound effects volume" +msgstr "Speciális hangeffektusok hangereje" + +#: gui/options.cpp:936 +msgctxt "lowres" +msgid "SFX volume:" +msgstr "SFX hangerő:" + +#: gui/options.cpp:944 +msgid "Speech volume:" +msgstr "Beszéd hangerő:" + +#: gui/options.cpp:946 +msgctxt "lowres" +msgid "Speech volume:" +msgstr "Beszéd hangerő:" + +#: gui/options.cpp:1085 +msgid "Theme Path:" +msgstr "Téma Mappa:" + +#: gui/options.cpp:1087 +msgctxt "lowres" +msgid "Theme Path:" +msgstr "Téma Mappa:" + +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 +msgid "Specifies path to additional data used by all games or ScummVM" +msgstr "Minden jéték és ScummVM kiegészítő fájljainak mappája:" + +#: gui/options.cpp:1098 +msgid "Plugins Path:" +msgstr "Plugin Mappa:" + +#: gui/options.cpp:1100 +msgctxt "lowres" +msgid "Plugins Path:" +msgstr "Plugin Mappa:" + +#: gui/options.cpp:1109 +msgid "Misc" +msgstr "Vegyes" + +#: gui/options.cpp:1111 +msgctxt "lowres" +msgid "Misc" +msgstr "Vegyes" + +#: gui/options.cpp:1113 +msgid "Theme:" +msgstr "Téma:" + +#: gui/options.cpp:1117 +msgid "GUI Renderer:" +msgstr "GUI Renderelő:" + +#: gui/options.cpp:1129 +msgid "Autosave:" +msgstr "Automentés:" + +#: gui/options.cpp:1131 +msgctxt "lowres" +msgid "Autosave:" +msgstr "Automentés:" + +#: gui/options.cpp:1139 +msgid "Keys" +msgstr "Billentyűk" + +#: gui/options.cpp:1146 +msgid "GUI Language:" +msgstr "GUI nyelve:" + +#: gui/options.cpp:1146 +msgid "Language of ScummVM GUI" +msgstr "A ScummVM GUI nyelve" + +#: gui/options.cpp:1295 +msgid "You have to restart ScummVM before your changes will take effect." +msgstr "Indítsd újra a ScummVM-et a változások érvényesítéséhez." + +#: gui/options.cpp:1308 +msgid "Select directory for savegames" +msgstr "Válassz játékmentés mappát" + +#: gui/options.cpp:1315 +msgid "The chosen directory cannot be written to. Please select another one." +msgstr "A kiválasztott mappába nem lehet írni, válassz egy másikat" + +#: gui/options.cpp:1324 +msgid "Select directory for GUI themes" +msgstr "GUI téma mappa kiválasztása" + +#: gui/options.cpp:1334 +msgid "Select directory for extra files" +msgstr "Mappa választás az extra fájloknak" + +#: gui/options.cpp:1345 +msgid "Select directory for plugins" +msgstr "Plugin mappa kiválasztása" + +#: gui/options.cpp:1389 +msgid "" +"The theme you selected does not support your current language. If you want " +"to use this theme you need to switch to another language first." +msgstr "" +"A kiválasztott téma nem támogatja a nyelvedet. Ha használni akarod ezt a " +"témát, előszőr válts át egy másik nyelvre." + +#: gui/saveload.cpp:58 gui/saveload.cpp:239 +msgid "No date saved" +msgstr "Dátum nincs mentve" + +#: gui/saveload.cpp:59 gui/saveload.cpp:240 +msgid "No time saved" +msgstr "Idő nincs mentve" + +#: gui/saveload.cpp:60 gui/saveload.cpp:241 +msgid "No playtime saved" +msgstr "Játékidő nincs mentve" + +#: gui/saveload.cpp:67 gui/saveload.cpp:155 +msgid "Delete" +msgstr "Töröl" + +#: gui/saveload.cpp:154 +msgid "Do you really want to delete this savegame?" +msgstr "Biztos hogy törölni akarod ezt a játékállást?" + +#: gui/saveload.cpp:264 +msgid "Date: " +msgstr "Dátum:" + +#: gui/saveload.cpp:268 +msgid "Time: " +msgstr "Idő:" + +#: gui/saveload.cpp:274 +msgid "Playtime: " +msgstr "Játékidő:" + +#: gui/saveload.cpp:287 gui/saveload.cpp:354 +msgid "Untitled savestate" +msgstr "Névtelen játékállás" + +#: gui/themebrowser.cpp:44 +msgid "Select a Theme" +msgstr "Válassz témát" + +#: gui/ThemeEngine.cpp:328 +msgid "Disabled GFX" +msgstr "GFX letiltva" + +#: gui/ThemeEngine.cpp:328 +msgctxt "lowres" +msgid "Disabled GFX" +msgstr "GFX letiltva" + +#: gui/ThemeEngine.cpp:329 +msgid "Standard Renderer (16bpp)" +msgstr "Standard leképező (16bpp)" + +#: gui/ThemeEngine.cpp:329 +msgid "Standard (16bpp)" +msgstr "Standard (16bpp)" + +#: gui/ThemeEngine.cpp:331 +msgid "Antialiased Renderer (16bpp)" +msgstr "Élsimításos leképező (16bpp)" + +#: gui/ThemeEngine.cpp:331 +msgid "Antialiased (16bpp)" +msgstr "Élsimított (16bpp)" + +#: base/main.cpp:206 +#, c-format +msgid "Engine does not support debug level '%s'" +msgstr "A motor nem támogatja a '%s' debug szintet" + +#: base/main.cpp:274 +msgid "Menu" +msgstr "Menü" + +#: base/main.cpp:277 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 +msgid "Skip" +msgstr "Tovább" + +#: base/main.cpp:280 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 +msgid "Pause" +msgstr "Szünet" + +#: base/main.cpp:283 +msgid "Skip line" +msgstr "Sor átlépése" + +#: base/main.cpp:442 +msgid "Error running game:" +msgstr "Hiba a játék futtatásakor:" + +#: base/main.cpp:466 +msgid "Could not find any engine capable of running the selected game" +msgstr "Nem található olyan játékmotor ami a választott játékot támogatja" + +#: common/error.cpp:38 +msgid "No error" +msgstr "Nincs hiba" + +#: common/error.cpp:40 +msgid "Game data not found" +msgstr "Játék adat nem található" + +#: common/error.cpp:42 +msgid "Game id not supported" +msgstr "Játék id nem támogatott" + +#: common/error.cpp:44 +msgid "Unsupported color mode" +msgstr "Nem támogatott színmód" + +#: common/error.cpp:47 +msgid "Read permission denied" +msgstr "Olvasás hozzáfárés megtagadva" + +#: common/error.cpp:49 +msgid "Write permission denied" +msgstr "Írás hozzáférés megtagadva" + +#: common/error.cpp:52 +msgid "Path does not exist" +msgstr "Mappa nem létezik" + +#: common/error.cpp:54 +msgid "Path not a directory" +msgstr "Mappa nem egy könyvtár" + +#: common/error.cpp:56 +msgid "Path not a file" +msgstr "Mappa nem egy fájl" + +#: common/error.cpp:59 +msgid "Cannot create file" +msgstr "Fájl nem hozható létre" + +#: common/error.cpp:61 +msgid "Reading data failed" +msgstr "A Beolvasott adat hibás" + +#: common/error.cpp:63 +msgid "Writing data failed" +msgstr "Kiírt adat hibás" + +#: common/error.cpp:66 +msgid "Could not find suitable engine plugin" +msgstr "Nem található alkalmas motor plugin" + +#: common/error.cpp:68 +msgid "Engine plugin does not support save states" +msgstr "A motor nem támogatja a játékállás mentését" + +#: common/error.cpp:71 +msgid "User canceled" +msgstr "Felhasználói megszakítás" + +#: common/error.cpp:75 +msgid "Unknown error" +msgstr "Ismeretlen hiba" + +#. I18N: Hercules is graphics card name +#: common/util.cpp:275 +msgid "Hercules Green" +msgstr "Hercules Zöld" + +#: common/util.cpp:276 +msgid "Hercules Amber" +msgstr "Hercules Sárga" + +#: common/util.cpp:283 +msgctxt "lowres" +msgid "Hercules Green" +msgstr "Hercules Zöld" + +#: common/util.cpp:284 +msgctxt "lowres" +msgid "Hercules Amber" +msgstr "Hercules Sárga" + +#: engines/advancedDetector.cpp:296 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "A '%s' játék ismeretlennek tűnik." + +#: engines/advancedDetector.cpp:297 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "Kérlek jelezd a ScummVM csapatnak a következő adatokat, együtt a játék" + +#: engines/advancedDetector.cpp:299 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "címével és megbízható adataival játékverzió/nyelv(ek)/stb.:" + +#: engines/dialogs.cpp:84 +msgid "~R~esume" +msgstr "Folytatás" + +#: engines/dialogs.cpp:86 +msgid "~L~oad" +msgstr "Betöltés" + +#: engines/dialogs.cpp:90 +msgid "~S~ave" +msgstr "Mentés" + +#: engines/dialogs.cpp:94 +msgid "~O~ptions" +msgstr "~O~pciók" + +#: engines/dialogs.cpp:99 +msgid "~H~elp" +msgstr "Súgó" + +#: engines/dialogs.cpp:101 +msgid "~A~bout" +msgstr "Névjegy" + +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 +msgid "~R~eturn to Launcher" +msgstr "Visszatérés az indítóba" + +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 +msgctxt "lowres" +msgid "~R~eturn to Launcher" +msgstr "Visszatérés az indítóba" + +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +msgid "Save game:" +msgstr "Játék mentése:" + +#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187 +#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Save" +msgstr "Mentés" + +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" +"Sajnálom, a motor jelenleg nem tartalmaz játék közbeni súgót. Olvassd el a " +"README-t az alap információkról, és hogy hogyan segíthetsz a későbbiekben." + +#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:109 +#: engines/mohawk/dialogs.cpp:174 +msgid "~O~K" +msgstr "~O~K" + +#: engines/dialogs.cpp:309 engines/mohawk/dialogs.cpp:110 +#: engines/mohawk/dialogs.cpp:175 +msgid "~C~ancel" +msgstr "Mégse" + +#: engines/dialogs.cpp:312 +msgid "~K~eys" +msgstr "Billentyük" + +#: engines/engine.cpp:233 +msgid "Could not initialize color format." +msgstr "Szín formátum nincs alkalmazva" + +#: engines/engine.cpp:241 +msgid "Could not switch to video mode: '" +msgstr "Videómód nincs átállítva: ' " + +#: engines/engine.cpp:250 +msgid "Could not apply aspect ratio setting." +msgstr "Méretarány korrekció nem változott." + +#: engines/engine.cpp:255 +msgid "Could not apply fullscreen setting." +msgstr "Teljesképernyős beállítás nincs alkalmazva" + +#: engines/engine.cpp:355 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" +"Úgy néz ki, ezt a játékot CD-ről futtatod\n" +"Ez ismert problémákat okoz, ezért\n" +"ajánlatos átmásolni a játék\n" +"adatfájljait a merevlemezedre.\n" +"Nézd meg a README fájlt a részletekért." + +#: engines/engine.cpp:366 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" +"A játékhoz audiósávok tartoznak a lemezen\n" +"ezeket a sávokat másold ki egy megfelelő\n" +"CD audió kitömörítő programmal\n" +"hogy a játék zenéje hallható legyen.\n" +"Nézd meg a README fájlt a részletekért." + +#: engines/engine.cpp:433 +msgid "" +"WARNING: The game you are about to start is not yet fully supported by " +"ScummVM. As such, it is likely to be unstable, and any saves you make might " +"not work in future versions of ScummVM." +msgstr "" +"FIGYELEM: A játékot amit indítani akarsz még nem teljesen támogatotja a " +"ScummVM. Számíts rá hogy nem stabilan fut, és a mentések nem működnek a " +"jövőbeni ScummVM verziókkal." + +#: engines/engine.cpp:436 +msgid "Start anyway" +msgstr "Indítás így is" + +#: engines/scumm/dialogs.cpp:175 +#, c-format +msgid "Insert Disk %c and Press Button to Continue." +msgstr "Helyezd be a %c lemezt és gombnyomás a folytatáshoz." + +#: engines/scumm/dialogs.cpp:176 +#, c-format +msgid "Unable to Find %s, (%c%d) Press Button." +msgstr "%s, (%c%d) nem található. Nyomj egy billentyűt." + +#: engines/scumm/dialogs.cpp:177 +#, c-format +msgid "Error reading disk %c, (%c%d) Press Button." +msgstr "Hiba a %c, (%c%d) lemez olvasásakor. Nyomj egy billentyűt." + +#: engines/scumm/dialogs.cpp:178 +msgid "Game Paused. Press SPACE to Continue." +msgstr "Játék szünetel. SPACE a folytatáshoz." + +#. I18N: You may specify 'Yes' symbol at the end of the line, like this: +#. "Moechten Sie wirklich neu starten? (J/N)J" +#. Will react to J as 'Yes' +#: engines/scumm/dialogs.cpp:182 +msgid "Are you sure you want to restart? (Y/N)" +msgstr "Biztos hogy újra akarod indítani? (Y/N)" + +#. I18N: you may specify 'Yes' symbol at the endo fo the line. See previous comment +#: engines/scumm/dialogs.cpp:184 +msgid "Are you sure you want to quit? (Y/N)" +msgstr "Biztos hogy ki akarsz lépni? (Y/N)" + +#: engines/scumm/dialogs.cpp:189 +msgid "Play" +msgstr "Játék" + +#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:84 +#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:44 +#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/events/default/default-events.cpp:244 +msgid "Quit" +msgstr "Kilépés" + +#: engines/scumm/dialogs.cpp:193 +msgid "Insert save/load game disk" +msgstr "Helyezd be a játékmentés lemezt" + +#: engines/scumm/dialogs.cpp:194 +msgid "You must enter a name" +msgstr "Meg kell adnod egy nevet" + +#: engines/scumm/dialogs.cpp:195 +msgid "The game was NOT saved (disk full?)" +msgstr "A játék NINCS mentve (Megtelt a lemez?)" + +#: engines/scumm/dialogs.cpp:196 +msgid "The game was NOT loaded" +msgstr "A játék NINCS betöltve" + +#: engines/scumm/dialogs.cpp:197 +#, c-format +msgid "Saving '%s'" +msgstr "'%s' Mentése" + +#: engines/scumm/dialogs.cpp:198 +#, c-format +msgid "Loading '%s'" +msgstr "'%s' Betöltése" + +#: engines/scumm/dialogs.cpp:199 +msgid "Name your SAVE game" +msgstr "JátékMENTÉS neve" + +#: engines/scumm/dialogs.cpp:200 +msgid "Select a game to LOAD" +msgstr "Válassz egy játékot Betöltésre" + +#: engines/scumm/dialogs.cpp:201 +msgid "Game title)" +msgstr "Játék címe)" + +#. I18N: Previous page button +#: engines/scumm/dialogs.cpp:287 +msgid "~P~revious" +msgstr "Előző" + +#. I18N: Next page button +#: engines/scumm/dialogs.cpp:289 +msgid "~N~ext" +msgstr "Következő" + +#: engines/scumm/dialogs.cpp:290 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 +msgid "~C~lose" +msgstr "Bezár" + +#: engines/scumm/dialogs.cpp:597 +msgid "Speech Only" +msgstr "Csak beszéd" + +#: engines/scumm/dialogs.cpp:598 +msgid "Speech and Subtitles" +msgstr "Beszéd és felirat" + +#: engines/scumm/dialogs.cpp:599 +msgid "Subtitles Only" +msgstr "Csak felirat" + +#: engines/scumm/dialogs.cpp:607 +msgctxt "lowres" +msgid "Speech & Subs" +msgstr "Beszéd & Felir" + +#: engines/scumm/help.cpp:73 +msgid "Common keyboard commands:" +msgstr "Általános billentyűparancsok:" + +#: engines/scumm/help.cpp:74 +msgid "Save / Load dialog" +msgstr "Ment / Tölt dialógus" + +#: engines/scumm/help.cpp:76 +msgid "Skip line of text" +msgstr "Szövegsor átugrása" + +#: engines/scumm/help.cpp:77 +msgid "Esc" +msgstr "Esc" + +#: engines/scumm/help.cpp:77 +msgid "Skip cutscene" +msgstr "Bevezető átugrása" + +#: engines/scumm/help.cpp:78 +msgid "Space" +msgstr "Szóköz" + +#: engines/scumm/help.cpp:78 +msgid "Pause game" +msgstr "Szünet a játékban" + +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 +msgid "Ctrl" +msgstr "Ctrl" + +#: engines/scumm/help.cpp:79 +msgid "Load game state 1-10" +msgstr "1-10 Játékállás betöltése" + +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 +msgid "Alt" +msgstr "Alt" + +#: engines/scumm/help.cpp:80 +msgid "Save game state 1-10" +msgstr "1-10 Játékállás mentése" + +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 +msgid "Enter" +msgstr "Enter" + +#: engines/scumm/help.cpp:86 +msgid "Toggle fullscreen" +msgstr "Teljesképernyő kapcsoló" + +#: engines/scumm/help.cpp:87 +msgid "Music volume up / down" +msgstr "Zene hangerő fel / le" + +#: engines/scumm/help.cpp:88 +msgid "Text speed slower / faster" +msgstr "Szövegsebesség gyors / lassú" + +#: engines/scumm/help.cpp:89 +msgid "Simulate left mouse button" +msgstr "Bal egérgomb szimuláció" + +#: engines/scumm/help.cpp:90 +msgid "Tab" +msgstr "Tab" + +#: engines/scumm/help.cpp:90 +msgid "Simulate right mouse button" +msgstr "Jobb egérgomb szimuláció" + +#: engines/scumm/help.cpp:93 +msgid "Special keyboard commands:" +msgstr "Speciális billentyűparancsok:" + +#: engines/scumm/help.cpp:94 +msgid "Show / Hide console" +msgstr "Konzol be / ki kapcsolás" + +#: engines/scumm/help.cpp:95 +msgid "Start the debugger" +msgstr "Hibakereső indítása" + +#: engines/scumm/help.cpp:96 +msgid "Show memory consumption" +msgstr "Memóriakihasználtság látszik" + +#: engines/scumm/help.cpp:97 +msgid "Run in fast mode (*)" +msgstr "Futtatás gyors módban (*)" + +#: engines/scumm/help.cpp:98 +msgid "Run in really fast mode (*)" +msgstr "Futtatás túlgyors módban (*)" + +#: engines/scumm/help.cpp:99 +msgid "Toggle mouse capture" +msgstr "Egér rögzítés kapcsoló" + +#: engines/scumm/help.cpp:100 +msgid "Switch between graphics filters" +msgstr "Kapcsolás grafikus szűrők között" + +#: engines/scumm/help.cpp:101 +msgid "Increase / Decrease scale factor" +msgstr "Lépték növelés / csökkentés" + +#: engines/scumm/help.cpp:102 +msgid "Toggle aspect-ratio correction" +msgstr "Méretarány korrekció kapcsoló" + +#: engines/scumm/help.cpp:107 +msgid "* Note that using ctrl-f and" +msgstr "* Megjegyzés, ctrl-f és" + +#: engines/scumm/help.cpp:108 +msgid " ctrl-g are not recommended" +msgstr " ctrl-g használata nem javasolt" + +#: engines/scumm/help.cpp:109 +msgid " since they may cause crashes" +msgstr " mert rendszerösszeomlást vagy" + +#: engines/scumm/help.cpp:110 +msgid " or incorrect game behavior." +msgstr " vagy hibás játékműködést okoz." + +#: engines/scumm/help.cpp:114 +msgid "Spinning drafts on the keyboard:" +msgstr "Forgó draftok a billentyűzeten:" + +#: engines/scumm/help.cpp:116 +msgid "Main game controls:" +msgstr "Fő játékvezérlők:" + +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 +msgid "Push" +msgstr "Tol" + +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 +msgid "Pull" +msgstr "Húz" + +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:207 +msgid "Give" +msgstr "Ad" + +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:190 +#: engines/scumm/help.cpp:208 +msgid "Open" +msgstr "Nyit" + +#: engines/scumm/help.cpp:126 +msgid "Go to" +msgstr "Menj" + +#: engines/scumm/help.cpp:127 +msgid "Get" +msgstr "Vesz" + +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:198 +#: engines/scumm/help.cpp:213 engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:250 +msgid "Use" +msgstr "Használ" + +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 +msgid "Read" +msgstr "Olvas" + +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 +msgid "New kid" +msgstr "Új gyerek" + +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 +msgid "Turn on" +msgstr "Bekapcsol" + +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 +msgid "Turn off" +msgstr "Kikapcsol" + +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:194 +msgid "Walk to" +msgstr "Odamegy" + +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:227 +msgid "Pick up" +msgstr "Felvesz" + +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 +msgid "What is" +msgstr "Mi ez" + +#: engines/scumm/help.cpp:146 +msgid "Unlock" +msgstr "Felold" + +#: engines/scumm/help.cpp:149 +msgid "Put on" +msgstr "Felvesz" + +#: engines/scumm/help.cpp:150 +msgid "Take off" +msgstr "Letesz" + +#: engines/scumm/help.cpp:156 +msgid "Fix" +msgstr "Javít" + +#: engines/scumm/help.cpp:158 +msgid "Switch" +msgstr "Kapcsol" + +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228 +msgid "Look" +msgstr "Megnéz" + +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223 +msgid "Talk" +msgstr "Beszél" + +#: engines/scumm/help.cpp:174 +msgid "Travel" +msgstr "Utazás" + +#: engines/scumm/help.cpp:175 +msgid "To Henry / To Indy" +msgstr "Henrytől / Indytől" + +#. I18N: These are different musical notes +#: engines/scumm/help.cpp:179 +msgid "play C minor on distaff" +msgstr "C moll játék a bottal" + +#: engines/scumm/help.cpp:180 +msgid "play D on distaff" +msgstr "Játék D-ben a bottal" + +#: engines/scumm/help.cpp:181 +msgid "play E on distaff" +msgstr "Játék E-ben a bottal" + +#: engines/scumm/help.cpp:182 +msgid "play F on distaff" +msgstr "Játék F-ben a bottal" + +#: engines/scumm/help.cpp:183 +msgid "play G on distaff" +msgstr "Játék G-ben a bottal" + +#: engines/scumm/help.cpp:184 +msgid "play A on distaff" +msgstr "Játék A-ban a bottal" + +#: engines/scumm/help.cpp:185 +msgid "play B on distaff" +msgstr "Játék B-ben a bottal" + +#: engines/scumm/help.cpp:186 +msgid "play C major on distaff" +msgstr "C dúr játék a bottal" + +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 +msgid "puSh" +msgstr "Megtol" + +#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215 +msgid "pull (Yank)" +msgstr "húz (Ránt)" + +#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212 +#: engines/scumm/help.cpp:248 +msgid "Talk to" +msgstr "Beszél" + +#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211 +msgid "Look at" +msgstr "Megnézi" + +#: engines/scumm/help.cpp:200 +msgid "turn oN" +msgstr "Bekapcsol" + +#: engines/scumm/help.cpp:201 +msgid "turn oFf" +msgstr "Kikapcsol" + +#: engines/scumm/help.cpp:217 +msgid "KeyUp" +msgstr "FelGomb" + +#: engines/scumm/help.cpp:217 +msgid "Highlight prev dialogue" +msgstr "Előző dialógus kiemelése" + +#: engines/scumm/help.cpp:218 +msgid "KeyDown" +msgstr "LeGomb" + +#: engines/scumm/help.cpp:218 +msgid "Highlight next dialogue" +msgstr "Következő dialógus kiemelése" + +#: engines/scumm/help.cpp:222 +msgid "Walk" +msgstr "Megy" + +#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249 +msgid "Inventory" +msgstr "Tárgylista" + +#: engines/scumm/help.cpp:226 +msgid "Object" +msgstr "Tárgy" + +#: engines/scumm/help.cpp:229 +msgid "Black and White / Color" +msgstr "Fekete fehér / Színes" + +#: engines/scumm/help.cpp:232 +msgid "Eyes" +msgstr "Szemek" + +#: engines/scumm/help.cpp:233 +msgid "Tongue" +msgstr "Nyelv" + +#: engines/scumm/help.cpp:235 +msgid "Punch" +msgstr "Megüt" + +#: engines/scumm/help.cpp:236 +msgid "Kick" +msgstr "Megüt" + +#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247 +msgid "Examine" +msgstr "Vizsgál" + +#: engines/scumm/help.cpp:240 +msgid "Regular cursor" +msgstr "Szabvány kurzor" + +#. I18N: Comm is a communication device +#: engines/scumm/help.cpp:243 +msgid "Comm" +msgstr "Comm" + +#: engines/scumm/help.cpp:246 +msgid "Save / Load / Options" +msgstr "Ment / Tölt / Opciók" + +#: engines/scumm/help.cpp:255 +msgid "Other game controls:" +msgstr "Egyébb játékvezérlők:" + +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267 +msgid "Inventory:" +msgstr "Tárgylista:" + +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274 +msgid "Scroll list up" +msgstr "Listagörgetés fel" + +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +msgid "Scroll list down" +msgstr "Listagörgetés le" + +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268 +msgid "Upper left item" +msgstr "Bal felső tárgy" + +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270 +msgid "Lower left item" +msgstr "Bal alsó tárgy" + +#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +msgid "Upper right item" +msgstr "Jobb felső tárgy" + +#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273 +msgid "Lower right item" +msgstr "Jobb alsó tárgy" + +#: engines/scumm/help.cpp:269 +msgid "Middle left item" +msgstr "Bal középső tárgy" + +#: engines/scumm/help.cpp:272 +msgid "Middle right item" +msgstr "Jobb középső tárgy" + +#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284 +msgid "Switching characters:" +msgstr "Karakterek cseréje:" + +#: engines/scumm/help.cpp:281 +msgid "Second kid" +msgstr "Második gyerek" + +#: engines/scumm/help.cpp:282 +msgid "Third kid" +msgstr "Harmadik gyerek" + +#: engines/scumm/help.cpp:294 +msgid "Fighting controls (numpad):" +msgstr "Verekedés irányítók (numpad):" + +#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296 +#: engines/scumm/help.cpp:297 +msgid "Step back" +msgstr "Hátralép" + +#: engines/scumm/help.cpp:298 +msgid "Block high" +msgstr "Felső védés" + +#: engines/scumm/help.cpp:299 +msgid "Block middle" +msgstr "Védés középen" + +#: engines/scumm/help.cpp:300 +msgid "Block low" +msgstr "Alsó védés" + +#: engines/scumm/help.cpp:301 +msgid "Punch high" +msgstr "Felső ütés" + +#: engines/scumm/help.cpp:302 +msgid "Punch middle" +msgstr "Ütés középen" + +#: engines/scumm/help.cpp:303 +msgid "Punch low" +msgstr "Alsó ütés" + +#: engines/scumm/help.cpp:306 +msgid "These are for Indy on left." +msgstr "Indytől balra levő." + +#: engines/scumm/help.cpp:307 +msgid "When Indy is on the right," +msgstr "Indytől jobbra levő," + +#: engines/scumm/help.cpp:308 +msgid "7, 4, and 1 are switched with" +msgstr "7, 4, és 1 átkapcsolva" + +#: engines/scumm/help.cpp:309 +msgid "9, 6, and 3, respectively." +msgstr "9, 6, és 3-ra, egyenként." + +#: engines/scumm/help.cpp:316 +msgid "Biplane controls (numpad):" +msgstr "Repülő vezérlők (numpad):" + +#: engines/scumm/help.cpp:317 +msgid "Fly to upper left" +msgstr "Balra fel repülés" + +#: engines/scumm/help.cpp:318 +msgid "Fly to left" +msgstr "Balra repülés" + +#: engines/scumm/help.cpp:319 +msgid "Fly to lower left" +msgstr "Balra le repülés" + +#: engines/scumm/help.cpp:320 +msgid "Fly upwards" +msgstr "Repülés fel" + +#: engines/scumm/help.cpp:321 +msgid "Fly straight" +msgstr "Repülés előre" + +#: engines/scumm/help.cpp:322 +msgid "Fly down" +msgstr "Repülés le" + +#: engines/scumm/help.cpp:323 +msgid "Fly to upper right" +msgstr "Jobbra fel repülés" + +#: engines/scumm/help.cpp:324 +msgid "Fly to right" +msgstr "Jobbra repülés" + +#: engines/scumm/help.cpp:325 +msgid "Fly to lower right" +msgstr "Jobbra le repülés" + +#: engines/scumm/scumm.cpp:1768 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" +"Native MIDI támogatáshoz kell a Roland Upgrade a LucasArts-tól,\n" +"a %s hiányzik. AdLib-ot használok helyette." + +#: engines/scumm/scumm.cpp:2258 engines/agos/saveload.cpp:189 +#, c-format +msgid "" +"Failed to save game state to file:\n" +"\n" +"%s" +msgstr "" +"Játékállás mentése:\n" +"\n" +"%s fájlba nem sikerült" + +#: engines/scumm/scumm.cpp:2265 engines/agos/saveload.cpp:154 +#, c-format +msgid "" +"Failed to load game state from file:\n" +"\n" +"%s" +msgstr "" +"Játékállás betöltése:\n" +"\n" +"%s fájlból nem sikerült" + +#: engines/scumm/scumm.cpp:2277 engines/agos/saveload.cpp:197 +#, c-format +msgid "" +"Successfully saved game state in file:\n" +"\n" +"%s" +msgstr "" +"Játékállás mentése:\n" +"\n" +"%s fájlba elkészült" + +#: engines/scumm/scumm.cpp:2492 +msgid "" +"Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " +"play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " +"directory inside the Tentacle game directory." +msgstr "" +"Általában a Maniac Mansion indulna itt. De a ScummVM most nem indítja el. Ha " +"játszani akarsz vele menj a ScummVM főmenüben a 'Játék hozzáadás' ra és " +"válaszd a 'Maniac' mappát a 'Tentacle' könyvtárában." + +#. I18N: Option for fast scene switching +#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171 +msgid "~Z~ip Mode Activated" +msgstr "~Z~ip Mód aktiválva" + +#: engines/mohawk/dialogs.cpp:93 +msgid "~T~ransitions Enabled" +msgstr "Átmenetek engedélyezve" + +#. I18N: Drop book page +#: engines/mohawk/dialogs.cpp:95 +msgid "~D~rop Page" +msgstr "Oldal~D~obás" + +#: engines/mohawk/dialogs.cpp:99 +msgid "~S~how Map" +msgstr "~S~ Térkép" + +#: engines/mohawk/dialogs.cpp:105 +msgid "~M~ain Menu" +msgstr "Fő~M~enü" + +#: engines/mohawk/dialogs.cpp:172 +msgid "~W~ater Effect Enabled" +msgstr "Vízeffektus engedélyezve" + +#: engines/sci/engine/kfile.cpp:678 +msgid "Restore game:" +msgstr "Játékmenet visszaállítása:" + +#: engines/sci/engine/kfile.cpp:678 +msgid "Restore" +msgstr "Visszaállítás" + +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "'%s' átvezető fájl nem található" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:475 +msgid "Failed to load game state from file." +msgstr "Játékállás betöltése fájlból nem sikerült." + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:553 +msgid "Failed to save game state to file." +msgstr "Játékállás mentése fájlba nem sikerült." + +#: engines/gob/inter_v5.cpp:107 +msgid "Failed to delete file." +msgstr "Fájl törlés sikertelen." + +#: engines/groovie/script.cpp:420 +msgid "Failed to save game" +msgstr "Játék mentés nem sikerült" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" +"Úgy néz ki egy General MIDI eszközt használsz,\n" +"a játék csak Roland MT32 MIDI eszközt támogat.\n" +"Cseréld ki Roland MT32 hangszerekre\n" +"a General MIDI-t. Különben néhány\n" +"sávot nem lehet rendesen lejátszani." + +#: engines/m4/m4_menus.cpp:138 +msgid "Save game failed!" +msgstr "Játék mentése nem sikerült!" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" +"A \"sky.cpt\" fájl nem található!\n" +"Töltsd le a www.scummvm.org oldaláról" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" +"A \"sky.cpt\" fájl mérete nem megfelelő.\n" +"Töltsd le a www.scummvm.org oldaláról" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "DXA átvezető elérhető, de a ScummVM zlib támogatás nincs lefordítva" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "MPEG2 átvezetők már nem támogatottak" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "'%s' átvezető nem található" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" +"ScummVM régi játékmentést talált a Broken Sword 1 hez, ezt át kell " +"alakítani.\n" +"A régi játékmentés nem támogatott, ezért a játék nem töltődik be átalakítás " +"nélkül.\n" +"\n" +"Nyomj OK-t az átalakításhoz, vagy rákérdezzek ha legközelebb elindítod a " +"játékot.\n" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" +"A választott játékmentés már létezik!\n" +"Megtartod a régi játékmentést (%s) vagy kicseréled az újra (%s)?\n" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "A régit megtartom" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "Az újat megtartom" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "Ez a Broken Sword 1 Demo vége" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" +"Játékállás nem menthető %i slotba\n" +"\n" + +#: engines/parallaction/saveload.cpp:211 +msgid "Loading game..." +msgstr "Játék betöltés..." + +#: engines/parallaction/saveload.cpp:226 +msgid "Saving game..." +msgstr "Játék mentés..." + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" +"ScummVM régi játékmentést talált a Nippon Safes hez ezt át kell nevezni.\n" +"A régi játékmentés nem támogatott, ezért a játék nem töltődik be átnevezés " +"nélkül..\n" +"\n" +"Nyomj OK-t az átalakításhoz, vagy rákérdezzek ha legközelebb elindítod a " +"játékot.\n" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "ScummVM konvertálta az összes játékállásodat." + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" +"ScummVM kiírt néhány figyelmeztetést a konzolablakba és nem biztos hogy az " +"összes fájlod át lett alakítva.\n" +"\n" +"Légyszíves jelentsd a csapatnak." + +#: audio/fmopl.cpp:49 +msgid "MAME OPL emulator" +msgstr "MAME OPL emulátor" + +#: audio/fmopl.cpp:51 +msgid "DOSBox OPL emulator" +msgstr "DOSBox OPL emulátor" + +#: audio/mididrv.cpp:205 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected)." +msgstr "" +"A kiválasztott '%s' hangeszköz nem található (Lekapcsoltad, vagy kihúztad)." + +#: audio/mididrv.cpp:205 audio/mididrv.cpp:217 audio/mididrv.cpp:253 +#: audio/mididrv.cpp:268 +msgid "Attempting to fall back to the next available device..." +msgstr "A következő elérhető eszköz keresése..." + +#: audio/mididrv.cpp:217 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information." +msgstr "" +"A kiválasztott '%s' hangeszköz nem használható. Bővebb információ a " +"naplófájlban." + +#: audio/mididrv.cpp:253 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected)." +msgstr "" +"Az elsődleges '%s' hangeszköz nem található (Lekapcsoltad, vagy kihúztad)." + +#: audio/mididrv.cpp:268 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information." +msgstr "" +"Az elsődleges '%s' hangeszköz nem használható. Bővebb információ a " +"naplófájlban." + +#: audio/null.h:43 +msgid "No music" +msgstr "Nincs zene" + +#: audio/mods/paula.cpp:189 +msgid "Amiga Audio Emulator" +msgstr "Amiga Audió Emulátor" + +#: audio/softsynth/adlib.cpp:1594 +msgid "AdLib Emulator" +msgstr "AdLib Emulátor" + +#: audio/softsynth/appleiigs.cpp:33 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "Apple II GS Emulátor (NEM TÁMOGATOTT)" + +#: audio/softsynth/sid.cpp:1430 +msgid "C64 Audio Emulator" +msgstr "C64 Audio Emulátor" + +#: audio/softsynth/mt32.cpp:329 +msgid "Initializing MT-32 Emulator" +msgstr "MT-32 Emulátor inicializálása" + +#: audio/softsynth/mt32.cpp:543 +msgid "MT-32 Emulator" +msgstr "MT-32 Emulátor" + +#: audio/softsynth/pcspk.cpp:139 +msgid "PC Speaker Emulator" +msgstr "PC Speaker Emulátor" + +#: audio/softsynth/pcspk.cpp:158 +msgid "IBM PCjr Emulator" +msgstr "IBM PCjr Emulátor" + +#: backends/keymapper/remap-dialog.cpp:47 +msgid "Keymap:" +msgstr "Billentyűzet kiosztás:" + +#: backends/keymapper/remap-dialog.cpp:64 +msgid " (Active)" +msgstr " (Aktív)" + +#: backends/keymapper/remap-dialog.cpp:98 +msgid " (Global)" +msgstr " (Globális)" + +#: backends/keymapper/remap-dialog.cpp:108 +msgid " (Game)" +msgstr " (Játék)" + +#: backends/midi/windows.cpp:164 +msgid "Windows MIDI" +msgstr "Windows MIDI" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 +msgid "ScummVM Main Menu" +msgstr "ScummVM Főmenü" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 +msgid "~L~eft handed mode" +msgstr "Balkezes mód:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 +msgid "~I~ndy fight controls" +msgstr "~I~ndy fight controls" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 +msgid "Show mouse cursor" +msgstr "Egérkurzor látszik" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +msgid "Snap to edges" +msgstr "Élekre illesztés" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +msgid "Touch X Offset" +msgstr "Touch X Eltolás" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 +msgid "Touch Y Offset" +msgstr "Touch Y Eltolás" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 +msgid "Use laptop trackpad-style cursor control" +msgstr "Laptop trackpad stílusu kurzor vezérlő" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 +msgid "Tap for left click, double tap right click" +msgstr "Érintés balkatt, duplaérintés jobbkatt" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +msgid "Sensitivity" +msgstr "Érzékenység" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 +msgid "Initial top screen scale:" +msgstr "Képernyő felső kezdőpont:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 +msgid "Main screen scaling:" +msgstr "Főképernyő átméretezés:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 +msgid "Hardware scale (fast, but low quality)" +msgstr "Hardveres átméretezés (gyors, alacsony minőség)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +msgid "Software scale (good quality, but slower)" +msgstr "Szoftveres átméretezés (jó minőség, lassú)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 +msgid "Unscaled (you must scroll left and right)" +msgstr "Eredeti (görgethetsz jobbra és balra)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +msgid "Brightness:" +msgstr "Fényerő:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 +msgid "High quality audio (slower) (reboot)" +msgstr "Jóminőségü audió (lassabb)(újraindítás)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 +msgid "Disable power off" +msgstr "Leállítás tiltva" + +#: backends/platform/iphone/osys_events.cpp:338 +msgid "Mouse-click-and-drag mode enabled." +msgstr "Egér kattint-és-húz mód engedélyezve." + +#: backends/platform/iphone/osys_events.cpp:340 +msgid "Mouse-click-and-drag mode disabled." +msgstr "Egér kattint-és-húz mód letiltva." + +#: backends/platform/iphone/osys_events.cpp:351 +msgid "Touchpad mode enabled." +msgstr "Touchpad mód engedélyezve." + +#: backends/platform/iphone/osys_events.cpp:353 +msgid "Touchpad mode disabled." +msgstr "Touchpad mód letiltva." + +#: backends/platform/sdl/macosx/appmenu_osx.mm:67 +msgid "Hide ScummVM" +msgstr "ScummVM elrejtése" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:70 +msgid "Hide Others" +msgstr "Többi elrejtése" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:74 +msgid "Show All" +msgstr "Mutasd mind" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:92 +#: backends/platform/sdl/macosx/appmenu_osx.mm:99 +msgid "Window" +msgstr "Ablak" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:95 +msgid "Minimize" +msgstr "Kis méret" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45 +msgid "Normal (no scaling)" +msgstr "Normál (nincs átméretezés)" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64 +msgctxt "lowres" +msgid "Normal (no scaling)" +msgstr "Normál (nincs átméretezés)" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2146 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533 +msgid "Enabled aspect ratio correction" +msgstr "Méretarány korrekció engedélyezve" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2152 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538 +msgid "Disabled aspect ratio correction" +msgstr "Méretarány korrekció letiltva" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2207 +msgid "Active graphics filter:" +msgstr "Aktív grafikus szűrők:" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2249 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477 +msgid "Windowed mode" +msgstr "Ablakos mód" + +#: backends/graphics/opengl/opengl-graphics.cpp:130 +msgid "OpenGL Normal" +msgstr "OpenGL Normál" + +#: backends/graphics/opengl/opengl-graphics.cpp:131 +msgid "OpenGL Conserve" +msgstr "OpenGL Megtartott" + +#: backends/graphics/opengl/opengl-graphics.cpp:132 +msgid "OpenGL Original" +msgstr "OpenGL Eredeti" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415 +msgid "Current display mode" +msgstr "Jelenlegi videómód" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428 +msgid "Current scale" +msgstr "Aktuális méretezés" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558 +msgid "Active filter mode: Linear" +msgstr "Aktív filter mód: Lineáris" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560 +msgid "Active filter mode: Nearest" +msgstr "Aktív filter mód: Közelítő" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 +msgid "Up" +msgstr "Fel" + +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 +msgid "Down" +msgstr "Le" + +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 +msgid "Left" +msgstr "Bal" + +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 +msgid "Right" +msgstr "Jobb" + +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 +msgid "Left Click" +msgstr "Bal katt" + +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 +msgid "Right Click" +msgstr "Jobb katt" + +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 +msgid "Zone" +msgstr "Zóna" + +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 +msgid "Multi Function" +msgstr "Többfunkciós" + +#: backends/platform/symbian/src/SymbianActions.cpp:48 +msgid "Swap character" +msgstr "Karakter csere" + +#: backends/platform/symbian/src/SymbianActions.cpp:49 +msgid "Skip text" +msgstr "Szöveg átugrása" + +#: backends/platform/symbian/src/SymbianActions.cpp:51 +msgid "Fast mode" +msgstr "Gyors mód" + +#: backends/platform/symbian/src/SymbianActions.cpp:53 +msgid "Debugger" +msgstr "Hibakereső" + +#: backends/platform/symbian/src/SymbianActions.cpp:54 +msgid "Global menu" +msgstr "Globális menü" + +#: backends/platform/symbian/src/SymbianActions.cpp:55 +msgid "Virtual keyboard" +msgstr "Virtuális billentyűzet" + +#: backends/platform/symbian/src/SymbianActions.cpp:56 +msgid "Key mapper" +msgstr "Billentyű kiosztás" + +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +msgid "Do you want to quit ?" +msgstr "Ki akarsz lépni ?" + +#: backends/platform/wii/options.cpp:51 +msgid "Video" +msgstr "Videó" + +#: backends/platform/wii/options.cpp:54 +msgid "Current video mode:" +msgstr "Jelenlegi videómód:" + +#: backends/platform/wii/options.cpp:56 +msgid "Double-strike" +msgstr "Dupla érintés" + +#: backends/platform/wii/options.cpp:60 +msgid "Horizontal underscan:" +msgstr "Vízszintes eltolás:" + +#: backends/platform/wii/options.cpp:66 +msgid "Vertical underscan:" +msgstr "Függőleges eltolás:" + +#: backends/platform/wii/options.cpp:71 +msgid "Input" +msgstr "Bemenet" + +#: backends/platform/wii/options.cpp:74 +msgid "GC Pad sensitivity:" +msgstr "GC Pad érzékenység:" + +#: backends/platform/wii/options.cpp:80 +msgid "GC Pad acceleration:" +msgstr "GC Pad felbontás:" + +#: backends/platform/wii/options.cpp:86 +msgid "DVD" +msgstr "DVD" + +#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101 +msgid "Status:" +msgstr "Státusz:" + +#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 +msgid "Unknown" +msgstr "Ismeretlen" + +#: backends/platform/wii/options.cpp:93 +msgid "Mount DVD" +msgstr "DVD csatolás" + +#: backends/platform/wii/options.cpp:94 +msgid "Unmount DVD" +msgstr "DVD kiadás" + +#: backends/platform/wii/options.cpp:98 +msgid "SMB" +msgstr "SMB" + +#: backends/platform/wii/options.cpp:106 +msgid "Server:" +msgstr "Szerver:" + +#: backends/platform/wii/options.cpp:110 +msgid "Share:" +msgstr "Megoszt:" + +#: backends/platform/wii/options.cpp:114 +msgid "Username:" +msgstr "Felhasználó:" + +#: backends/platform/wii/options.cpp:118 +msgid "Password:" +msgstr "Jelszó:" + +#: backends/platform/wii/options.cpp:121 +msgid "Init network" +msgstr "Hálózat inicializálás" + +#: backends/platform/wii/options.cpp:123 +msgid "Mount SMB" +msgstr "SMB csatolás" + +#: backends/platform/wii/options.cpp:124 +msgid "Unmount SMB" +msgstr "SMB kiadás" + +#: backends/platform/wii/options.cpp:143 +msgid "DVD Mounted successfully" +msgstr "DVD csatlakoztatva" + +#: backends/platform/wii/options.cpp:146 +msgid "Error while mounting the DVD" +msgstr "Hiba a DVD csatlakoztatásakor" + +#: backends/platform/wii/options.cpp:148 +msgid "DVD not mounted" +msgstr "DVD nincs csatolva" + +#: backends/platform/wii/options.cpp:161 +msgid "Network up, share mounted" +msgstr "Hálózat és megosztás csatlakozva" + +#: backends/platform/wii/options.cpp:163 +msgid "Network up" +msgstr "Hálózat csatlakozva" + +#: backends/platform/wii/options.cpp:166 +msgid ", error while mounting the share" +msgstr ", hiba a megosztás csatolásakor" + +#: backends/platform/wii/options.cpp:168 +msgid ", share not mounted" +msgstr ", megosztás nincs csatolva" + +#: backends/platform/wii/options.cpp:174 +msgid "Network down" +msgstr "Nincs hálózat" + +#: backends/platform/wii/options.cpp:178 +msgid "Initializing network" +msgstr "Hálózat inicializálása" + +#: backends/platform/wii/options.cpp:182 +msgid "Timeout while initializing network" +msgstr "Időtúllépés a hálózat inicializálásakor" + +#: backends/platform/wii/options.cpp:186 +#, c-format +msgid "Network not initialized (%d)" +msgstr "(%d) Hálózat nincs inicializálva" + +#: backends/platform/wince/CEActionsPocket.cpp:46 +msgid "Hide Toolbar" +msgstr "Eszköztár rejtés" + +#: backends/platform/wince/CEActionsPocket.cpp:47 +msgid "Show Keyboard" +msgstr "Billentyűzet megjelenítés" + +#: backends/platform/wince/CEActionsPocket.cpp:48 +msgid "Sound on/off" +msgstr "Hang be/ki" + +#: backends/platform/wince/CEActionsPocket.cpp:49 +msgid "Right click" +msgstr "Jobb katt" + +#: backends/platform/wince/CEActionsPocket.cpp:50 +msgid "Show/Hide Cursor" +msgstr "Kurzor be/ki" + +#: backends/platform/wince/CEActionsPocket.cpp:51 +msgid "Free look" +msgstr "Szabad nézet" + +#: backends/platform/wince/CEActionsPocket.cpp:52 +msgid "Zoom up" +msgstr "Nagyítás" + +#: backends/platform/wince/CEActionsPocket.cpp:53 +msgid "Zoom down" +msgstr "Kicsinyítés" + +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 +msgid "Bind Keys" +msgstr "Kapcsolódás kulcsok" + +#: backends/platform/wince/CEActionsPocket.cpp:56 +msgid "Cursor Up" +msgstr "Kurzor Fel" + +#: backends/platform/wince/CEActionsPocket.cpp:57 +msgid "Cursor Down" +msgstr "Kurzor Le" + +#: backends/platform/wince/CEActionsPocket.cpp:58 +msgid "Cursor Left" +msgstr "Kurzor Bal" + +#: backends/platform/wince/CEActionsPocket.cpp:59 +msgid "Cursor Right" +msgstr "Kurzor Jobb" + +#: backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Do you want to load or save the game?" +msgstr "Játékállás betöltése vagy mentése?" + +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +msgid " Are you sure you want to quit ? " +msgstr " Biztos hogy ki akarsz lépni ? " + +#: backends/platform/wince/CEActionsSmartphone.cpp:50 +msgid "Keyboard" +msgstr "Billentyűzet" + +#: backends/platform/wince/CEActionsSmartphone.cpp:51 +msgid "Rotate" +msgstr "Forgatás" + +#: backends/platform/wince/CELauncherDialog.cpp:56 +msgid "Using SDL driver " +msgstr "SDL meghajtó használata" + +#: backends/platform/wince/CELauncherDialog.cpp:60 +msgid "Display " +msgstr "Kijelző" + +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "Do you want to perform an automatic scan ?" +msgstr "El akarod kezdeni az automatikus vizsgálatot ?" + +#: backends/platform/wince/wince-sdl.cpp:471 +msgid "Map right click action" +msgstr "Jobbkatt művelet gomb" + +#: backends/platform/wince/wince-sdl.cpp:475 +msgid "You must map a key to the 'Right Click' action to play this game" +msgstr "Válassz egy billentyűt a 'Jobbkatt' művelethez" + +#: backends/platform/wince/wince-sdl.cpp:484 +msgid "Map hide toolbar action" +msgstr "Eszköztár rejtés gomb" + +#: backends/platform/wince/wince-sdl.cpp:488 +msgid "You must map a key to the 'Hide toolbar' action to play this game" +msgstr "Válassz egy billentyűt az 'Eszköztár rejtés' művelethez" + +#: backends/platform/wince/wince-sdl.cpp:497 +msgid "Map Zoom Up action (optional)" +msgstr "Nagyítás művelet (opcionális)" + +#: backends/platform/wince/wince-sdl.cpp:500 +msgid "Map Zoom Down action (optional)" +msgstr "Kicsinyítés művelet (opcionális)" + +#: backends/platform/wince/wince-sdl.cpp:508 +msgid "" +"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" +msgstr "" +"Ne felejts billentyűt társítani az 'Eszköztár rejtés' művelethez, hogy lásd " +"a teljes listát" + +#: backends/events/default/default-events.cpp:222 +msgid "Do you really want to return to the Launcher?" +msgstr "Biztos hogy visszatérsz az indítópulthoz?" + +#: backends/events/default/default-events.cpp:222 +msgid "Launcher" +msgstr "Indítópult" + +#: backends/events/default/default-events.cpp:244 +msgid "Do you really want to quit?" +msgstr "Biztos hogy ki akarsz lépni ?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "Érintőképernyő 'Tap Mód' - Bal katt" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "Érintőképernyő 'Tap Mód' - Jobb katt" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "Érintőképernyő 'Tap Mód' - Lebegő (Nincs katt)" + +#: backends/events/gph/gph-events.cpp:390 +msgid "Maximum Volume" +msgstr "Maximum Hangerő" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "Hangerő növelése" + +#: backends/events/gph/gph-events.cpp:398 +msgid "Minimal Volume" +msgstr "Minimum Hangerő" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "Hangerő csökkentése" + +#: backends/updates/macosx/macosx-updates.mm:65 +msgid "Check for Updates..." +msgstr "Frissítések keresése..." + +#~ msgctxt "lowres" +#~ msgid "Add Game..." +#~ msgstr "Játék hozzáadás" + +#~ msgid "Add Game..." +#~ msgstr "Játék hozzáadás" + +#~ msgid "" +#~ "Your game version has been detected using filename matching as a variant " +#~ "of %s." +#~ msgstr "A felismert játékverziód a használt fájlnévvel a %s egy változata." + +#~ msgid "If this is an original and unmodified version, please report any" +#~ msgstr "Ha ez egy eredeti nem változtatott verzió, kérlek jelezd minden" + +#~ msgid "information previously printed by ScummVM to the team." +#~ msgstr "előzőleg kiírt információt a ScummVM csapatnak." + +#~ msgid "Discovered %d new games." +#~ msgstr "%d Új játékot találtam." + +#~ msgid "Command line argument not processed" +#~ msgstr "Parancssori paraméter nem működik" + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM Towns Emulátor" + +#~ msgid "Invalid Path" +#~ msgstr "Érvénytelen mappa" @@ -160,6 +160,8 @@ osxsnap: bundle mkdir ScummVM-snapshot/doc/fr cp $(srcdir)/doc/fr/QuickStart_fr ./ScummVM-snapshot/doc/fr/QuickStart_fr /Developer/Tools/SetFile -t ttro -c ttxt ./ScummVM-snapshot/* + xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/de/* + xattr -w "com.apple.TextEncoding" "utf-8;134217984" ./ScummVM-snapshot/doc/fr/* /Developer/Tools/CpMac -r $(bundle_name) ./ScummVM-snapshot/ cp $(srcdir)/dists/macosx/DS_Store ./ScummVM-snapshot/.DS_Store cp $(srcdir)/dists/macosx/background.jpg ./ScummVM-snapshot/background.jpg diff --git a/test/cxxtest_mingw.h b/test/cxxtest_mingw.h new file mode 100644 index 0000000000..f407105bfe --- /dev/null +++ b/test/cxxtest_mingw.h @@ -0,0 +1,11 @@ + +#ifndef CXXTEST_MINGW +#define CXXTEST_MINGW + +// HACK to allow building with the SDL backend on MinGW +// see bug #1800764 "TOOLS: MinGW tools building broken" +#ifdef main +#undef main +#endif // main + +#endif // CXXTEST_MINGW
\ No newline at end of file diff --git a/test/module.mk b/test/module.mk index 4e5cbf62e1..11ee6bd200 100644 --- a/test/module.mk +++ b/test/module.mk @@ -9,7 +9,7 @@ TESTS := $(srcdir)/test/common/*.h $(srcdir)/test/audio/*.h TEST_LIBS := audio/libaudio.a common/libcommon.a # -TEST_FLAGS := --runner=StdioPrinter --no-std --no-eh +TEST_FLAGS := --runner=StdioPrinter --no-std --no-eh --include=$(srcdir)/test/cxxtest_mingw.h TEST_CFLAGS := -I$(srcdir)/test/cxxtest TEST_LDFLAGS := $(LIBS) TEST_CXXFLAGS := $(filter-out -Wglobal-constructors,$(CXXFLAGS)) |