diff options
110 files changed, 3061 insertions, 1079 deletions
diff --git a/backends/platform/sdl/win32/win32-main.cpp b/backends/platform/sdl/win32/win32-main.cpp index c6c15c00e8..c6339f0c8c 100644 --- a/backends/platform/sdl/win32/win32-main.cpp +++ b/backends/platform/sdl/win32/win32-main.cpp @@ -43,7 +43,12 @@ int __stdcall WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/, LPSTR /*lpC #if !SDL_VERSION_ATLEAST(2, 0, 0) SDL_SetModuleHandle(GetModuleHandle(NULL)); #endif +// HACK: __argc, __argv are broken and return zero when using mingwrt 4.0+ on MinGW +#if defined(__GNUC__) && defined(__MINGW32__) && !defined(__MINGW64__) + return main(_argc, _argv); +#else return main(__argc, __argv); +#endif } int main(int argc, char *argv[]) { diff --git a/common/scummsys.h b/common/scummsys.h index 0c4687e03e..b8cf7678a4 100644 --- a/common/scummsys.h +++ b/common/scummsys.h @@ -46,7 +46,7 @@ #if defined(WIN32) - #ifdef _MSC_VER + #if defined(_MSC_VER) && _MSC_VER <= 1800 // FIXME: The placement of the workaround functions for MSVC below // require us to include stdio.h and stdarg.h for MSVC here. This diff --git a/devtools/README b/devtools/README index 509048bfe0..e7ff94dc05 100644 --- a/devtools/README +++ b/devtools/README @@ -72,8 +72,8 @@ create_mort (Strangerke) create_project (LordHoto, Littleboy) -------------- - Creates project files for Visual Studio 2008, 2010, 2012, 2013, Xcode and - Code::Blocks out of the configure / Makefile based build system. + Creates project files for Visual Studio 2008, 2010, 2012, 2013, 2015, + Xcode and Code::Blocks out of the configure / Makefile based build system. It also offers a way to enable or disable certain engines and the use of external libraries similar to configure. Run the tool without any arguments for further help. diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index e4cb67134a..0aba511491 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -124,7 +124,7 @@ int main(int argc, char *argv[]) { setup.features = getAllFeatures(); ProjectType projectType = kProjectNone; - int msvcVersion = 9; + int msvcVersion = 12; bool useSDL2 = false; // Parse command line arguments @@ -176,7 +176,7 @@ int main(int argc, char *argv[]) { msvcVersion = atoi(argv[++i]); - if (msvcVersion != 9 && msvcVersion != 10 && msvcVersion != 11 && msvcVersion != 12) { + if (msvcVersion != 9 && msvcVersion != 10 && msvcVersion != 11 && msvcVersion != 12 && msvcVersion != 14) { std::cerr << "ERROR: Unsupported version: \"" << msvcVersion << "\" passed to \"--msvc-version\"!\n"; return -1; } @@ -453,6 +453,9 @@ int main(int argc, char *argv[]) { // 4250 ('class1' : inherits 'class2::member' via dominance) // two or more members have the same name. Should be harmless // + // 4267 ('var' : conversion from 'size_t' to 'type', possible loss of data) + // throws tons and tons of warnings (no immediate plan to fix all usages) + // // 4310 (cast truncates constant value) // used in some engines // @@ -468,6 +471,8 @@ int main(int argc, char *argv[]) { // 4512 ('class' : assignment operator could not be generated) // some classes use const items and the default assignment operator cannot be generated // + // 4577 ('noexcept' used with no exception handling mode specified) + // // 4702 (unreachable code) // mostly thrown after error() calls (marked as NORETURN) // @@ -523,6 +528,11 @@ int main(int argc, char *argv[]) { globalWarnings.push_back("6385"); globalWarnings.push_back("6386"); + if (msvcVersion == 14) { + globalWarnings.push_back("4267"); + globalWarnings.push_back("4577"); + } + projectWarnings["agi"].push_back("4510"); projectWarnings["agi"].push_back("4610"); @@ -636,6 +646,7 @@ void displayHelp(const char *exe) { " 10 stands for \"Visual Studio 2010\"\n" " 11 stands for \"Visual Studio 2012\"\n" " 12 stands for \"Visual Studio 2013\"\n" + " 14 stands for \"Visual Studio 2015\"\n" " The default is \"9\", thus \"Visual Studio 2008\"\n" " --build-events Run custom build events as part of the build\n" " (default: false)\n" @@ -658,9 +669,9 @@ void displayHelp(const char *exe) { "Optional features settings:\n" " --enable-<name> enable inclusion of the feature \"name\"\n" " --disable-<name> disable inclusion of the feature \"name\"\n" - "\n" - "SDL settings:\n" - " --sdl2 link to SDL 2.0, instead of SDL 1.2\n" + "\n" + "SDL settings:\n" + " --sdl2 link to SDL 2.0, instead of SDL 1.2\n" "\n" " There are the following features available:\n" "\n"; @@ -921,7 +932,7 @@ const Feature s_features[] = { { "libz", "USE_ZLIB", "zlib", true, "zlib (compression) support" }, { "mad", "USE_MAD", "libmad", true, "libmad (MP3) support" }, { "vorbis", "USE_VORBIS", "libvorbisfile_static libvorbis_static libogg_static", true, "Ogg Vorbis support" }, - { "flac", "USE_FLAC", "libFLAC_static", true, "FLAC support" }, + { "flac", "USE_FLAC", "libFLAC_static win_utf8_io_static", true, "FLAC support" }, { "png", "USE_PNG", "libpng", true, "libpng support" }, { "faad", "USE_FAAD", "libfaad", false, "AAC support" }, { "mpeg2", "USE_MPEG2", "libmpeg2", false, "MPEG-2 support" }, @@ -1050,7 +1061,7 @@ bool producesObjectFile(const std::string &fileName) { } std::string toString(int num) { - return static_cast<std::ostringstream*>(&(std::ostringstream() << num))->str(); + return static_cast<std::ostringstream*>(&(std::ostringstream() << num))->str(); } /** diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp index 87c9066199..a326bd721a 100644 --- a/devtools/create_project/msbuild.cpp +++ b/devtools/create_project/msbuild.cpp @@ -55,9 +55,16 @@ int MSBuildProvider::getVisualStudioVersion() { if (_version == 12) return 2013; + if (_version == 14) + return 14; + error("Unsupported version passed to getVisualStudioVersion"); } +int MSBuildProvider::getSolutionVersion() { + return (_version < 14) ? _version + 1 : _version; +} + namespace { inline void outputConfiguration(std::ostream &project, const std::string &config, const std::string &platform) { @@ -116,7 +123,7 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri // Shared configuration project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n"; - std::string version = "v" + toString(_version) + "0"; + std::string version = "v" + toString(_version) + "0"; std::string llvm = "LLVM-vs" + toString(getVisualStudioVersion()); outputConfigurationType(setup, project, name, "Release|Win32", version); @@ -177,6 +184,13 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri project << "\t</ItemGroup>\n"; } + // Visual Studio 2015 automatically imports natvis files that are part of the project + if (name == PROJECT_NAME && _version == 14) { + project << "\t<ItemGroup>\n"; + project << "\t\t<None Include=\"" << setup.srcDir << "/devtools/create_project/scripts/scummvm.natvis\" />\n"; + project << "\t</ItemGroup>\n"; + } + project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n" "\t<ImportGroup Label=\"ExtensionTargets\">\n" "\t</ImportGroup>\n"; @@ -185,7 +199,7 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri // We override the normal target to ignore the exit code (this allows us to have a clean output and not message about the command exit code) project << "\t\t<Target Name=\"PostBuildEvent\">\n" << "\t\t\t<Message Text=\"Description: Run tests\" />\n" - << "\t\t\t<Exec Command=\"$(TargetPath)\" IgnoreExitCode=\"true\" />\n" + << "\t\t\t<Exec Command=\"$(TargetPath)\" IgnoreExitCode=\"true\" />\n" << "\t\t</Target>\n"; } @@ -305,6 +319,12 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i) libraries += *i + ".lib;"; + if (_version == 14) { + std::string debug = isRelease ? "" : "d"; + libraries += "libvcruntime" + debug + ".lib;"; + libraries += "libucrt" + debug + ".lib;"; + } + project << "\t\t<Link>\n" "\t\t\t<OutputFile>$(OutDir)" << ((setup.devTools || setup.tests) ? name : setup.projectName) << ".exe</OutputFile>\n" "\t\t\t<AdditionalDependencies>" << libraries << "%(AdditionalDependencies)</AdditionalDependencies>\n" diff --git a/devtools/create_project/msbuild.h b/devtools/create_project/msbuild.h index 829657beff..f92e68ede8 100644 --- a/devtools/create_project/msbuild.h +++ b/devtools/create_project/msbuild.h @@ -49,6 +49,7 @@ protected: const char *getProjectExtension(); const char *getPropertiesExtension(); int getVisualStudioVersion(); + int getSolutionVersion(); private: struct FileEntry { diff --git a/devtools/create_project/msvc.cpp b/devtools/create_project/msvc.cpp index cdd2d8a7c1..dbfbcc128d 100644 --- a/devtools/create_project/msvc.cpp +++ b/devtools/create_project/msvc.cpp @@ -52,7 +52,7 @@ void MSVCProvider::createWorkspace(const BuildSetup &setup) { if (!solution) error("Could not open \"" + setup.outputDir + '/' + setup.projectName + ".sln\" for writing"); - solution << "Microsoft Visual Studio Solution File, Format Version " << _version + 1 << ".00\n"; + solution << "Microsoft Visual Studio Solution File, Format Version " << getSolutionVersion() << ".00\n"; solution << "# Visual Studio " << getVisualStudioVersion() << "\n"; // Write main project @@ -157,13 +157,17 @@ void MSVCProvider::createGlobalProp(const BuildSetup &setup) { outputGlobalPropFile(setup, properties, 64, x64Defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents); } +int MSVCProvider::getSolutionVersion() { + return _version + 1; +} + std::string MSVCProvider::getPreBuildEvent() const { std::string cmdLine = ""; cmdLine = "@echo off\n" "echo Executing Pre-Build script...\n" - "echo.\n" - "@call "$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd" "$(SolutionDir)/../.." "$(TargetDir)"\n" + "echo.\n" + "@call "$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd" "$(SolutionDir)/../.." "$(TargetDir)"\n" "EXIT /B0"; return cmdLine; diff --git a/devtools/create_project/msvc.h b/devtools/create_project/msvc.h index 3a3eb98034..e75e131bd1 100644 --- a/devtools/create_project/msvc.h +++ b/devtools/create_project/msvc.h @@ -83,6 +83,11 @@ protected: virtual int getVisualStudioVersion() = 0; /** + * Get the Solution version (used in the sln file header) + */ + virtual int getSolutionVersion(); + + /** * Get the command line for the revision tool (shared between all Visual Studio based providers) */ std::string getPreBuildEvent() const; diff --git a/devtools/create_project/msvc14/create_project.sln b/devtools/create_project/msvc14/create_project.sln new file mode 100644 index 0000000000..73f0b3569e --- /dev/null +++ b/devtools/create_project/msvc14/create_project.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.22609.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_project", "create_project.vcxproj", "{CF177559-077D-4A08-AABE-BE0FD35F6C63}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|Win32.ActiveCfg = Debug|Win32 + {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|Win32.Build.0 = Debug|Win32 + {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|x64.ActiveCfg = Debug|x64 + {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|x64.Build.0 = Debug|x64 + {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|Win32.ActiveCfg = Release|Win32 + {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|Win32.Build.0 = Release|Win32 + {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|x64.ActiveCfg = Release|x64 + {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/devtools/create_project/msvc14/create_project.vcxproj b/devtools/create_project/msvc14/create_project.vcxproj new file mode 100644 index 0000000000..3c0345f49c --- /dev/null +++ b/devtools/create_project/msvc14/create_project.vcxproj @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.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="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{CF177559-077D-4A08-AABE-BE0FD35F6C63}</ProjectGuid> + <RootNamespace>create_project</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <WholeProgramOptimization>true</WholeProgramOptimization> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <WholeProgramOptimization>true</WholeProgramOptimization> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </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)'=='Release|x64'" 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> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" 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> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <MinimalRebuild>true</MinimalRebuild> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <WarningLevel>Level4</WarningLevel> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + <DisableLanguageExtensions>false</DisableLanguageExtensions> + <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings> + <ExceptionHandling>Sync</ExceptionHandling> + </ClCompile> + <Link> + <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies> + <GenerateDebugInformation>true</GenerateDebugInformation> + <TargetMachine>MachineX86</TargetMachine> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> + </Link> + <PostBuildEvent> + <Command>@echo off +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc14\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc12\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <WarningLevel>Level4</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <DisableLanguageExtensions>false</DisableLanguageExtensions> + <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings> + </ClCompile> + <Link> + <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies> + <GenerateDebugInformation>true</GenerateDebugInformation> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> + </Link> + <PostBuildEvent> + <Command>@echo off +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc14\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc12\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <IntrinsicFunctions>true</IntrinsicFunctions> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies> + <GenerateDebugInformation>true</GenerateDebugInformation> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <TargetMachine>MachineX86</TargetMachine> + </Link> + <PostBuildEvent> + <Command>@echo off +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc14\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc12\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command> + </PostBuildEvent> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <IntrinsicFunctions>true</IntrinsicFunctions> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings> + <SDLCheck>true</SDLCheck> + </ClCompile> + <Link> + <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies> + <GenerateDebugInformation>true</GenerateDebugInformation> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + </Link> + <PostBuildEvent> + <Command>@echo off +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc14\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc12\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\" +xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command> + </PostBuildEvent> + <PreBuildEvent> + <Command> + </Command> + </PreBuildEvent> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\codeblocks.cpp" /> + <ClCompile Include="..\create_project.cpp" /> + <ClCompile Include="..\msbuild.cpp" /> + <ClCompile Include="..\msvc.cpp" /> + <ClCompile Include="..\visualstudio.cpp" /> + <ClCompile Include="..\xcode.cpp" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\codeblocks.h" /> + <ClInclude Include="..\config.h" /> + <ClInclude Include="..\create_project.h" /> + <ClInclude Include="..\msbuild.h" /> + <ClInclude Include="..\msvc.h" /> + <ClInclude Include="..\visualstudio.h" /> + <ClInclude Include="..\xcode.h" /> + </ItemGroup> + <ItemGroup> + <None Include="..\scripts\installer.vbs" /> + <None Include="..\scripts\postbuild.cmd" /> + <None Include="..\scripts\prebuild.cmd" /> + <None Include="..\scripts\revision.vbs" /> + </ItemGroup> + <ItemGroup> + <Natvis Include="..\scripts\scummvm.natvis" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/devtools/create_project/msvc14/create_project.vcxproj.filters b/devtools/create_project/msvc14/create_project.vcxproj.filters new file mode 100644 index 0000000000..16c6df081d --- /dev/null +++ b/devtools/create_project/msvc14/create_project.vcxproj.filters @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Header Files"> + <UniqueIdentifier>{2e3580c8-ec3a-4c81-8351-b668c668db2a}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files"> + <UniqueIdentifier>{31aaf58c-d3cb-4ed6-8eca-163b4a9b31a6}</UniqueIdentifier> + </Filter> + <Filter Include="scripts"> + <UniqueIdentifier>{f980f6fb-41b6-4161-b035-58b200c85cad}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\codeblocks.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\create_project.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\msvc.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\msbuild.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\visualstudio.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\xcode.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\config.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\codeblocks.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\create_project.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\msvc.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\msbuild.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\visualstudio.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\xcode.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <None Include="..\scripts\prebuild.cmd"> + <Filter>scripts</Filter> + </None> + <None Include="..\scripts\revision.vbs"> + <Filter>scripts</Filter> + </None> + <None Include="..\scripts\postbuild.cmd"> + <Filter>scripts</Filter> + </None> + <None Include="..\scripts\installer.vbs"> + <Filter>scripts</Filter> + </None> + </ItemGroup> + <ItemGroup> + <Natvis Include="..\scripts\scummvm.natvis"> + <Filter>scripts</Filter> + </Natvis> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp index 9b928bf520..96fdbdf27a 100644 --- a/devtools/create_project/visualstudio.cpp +++ b/devtools/create_project/visualstudio.cpp @@ -230,7 +230,7 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of "\t\tDisableSpecificWarnings=\"" << warnings << "\"\n" "\t\tAdditionalIncludeDirectories=\".\\;" << prefix << ";" << prefix << "\\engines;$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\SDL;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "$(TargetDir)\"\n" "\t\tPreprocessorDefinitions=\"" << definesList << "\"\n" - "\t\tExceptionHandling=\"" << ((setup.devTools || setup.tests) ? "1" : "0") << "\"\n"; + "\t\tExceptionHandling=\"" << ((setup.devTools || setup.tests || _version == 14) ? "1" : "0") << "\"\n"; #if NEEDS_RTTI properties << "\t\tRuntimeTypeInfo=\"true\"\n"; diff --git a/devtools/scumm-md5.txt b/devtools/scumm-md5.txt index ffde276a3d..d758111ff1 100644 --- a/devtools/scumm-md5.txt +++ b/devtools/scumm-md5.txt @@ -492,6 +492,7 @@ freddi Freddi Fish 1: The Case of the Missing Kelp Seeds 5ebb57234b2fe5c5dff641e00184ad81 -1 fr Windows HE 73 - - gist974 cf8ef3a1fb483c5c4b1c584d1167b2c4 -1 de Windows HE 73 - - Oncer 1f2e62b5a9c50589fc342285a6bb3a27 -1 he Windows HE 73 - - e_orz + 64a22be96d679018696e5c8d3ca8b71d 26375 jp Windows HE 73 - - sev 507bb360688dc4180fdf0d7597352a69 26402 se Windows HE 73 - - Sven Arvidsson df047cc4792150f601290357566d36a6 -1 us All HE 90 Updated - khalek e44ea295a3f8fe4f41983080dab1e9ce -1 fr Mac HE 90 Updated - ThierryFR diff --git a/dists/msvc14/create_msvc14.bat b/dists/msvc14/create_msvc14.bat new file mode 100644 index 0000000000..7082ac9680 --- /dev/null +++ b/dists/msvc14/create_msvc14.bat @@ -0,0 +1,105 @@ +@echo off + +echo. +echo Automatic creation of the MSVC14 project files +echo. + +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"=="/tests" goto tests +if "%~1"=="/TESTS" goto tests +if "%~1"=="/clean" goto clean_check +if "%~1"=="/CLEAN" goto clean_check +if "%~1"=="/help" goto command_help +if "%~1"=="/HELP" goto command_help +if "%~1"=="/?" goto command_help + +if "%~1"=="" goto check_tool + +echo Invalid command parameter: %~1 +echo. + +:command_help +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 + +:check_tool +if not exist create_project.exe goto no_tool + +:question +echo. +set batchanswer=S +set /p batchanswer="Enable stable engines only, or all engines? (S/a)" +if "%batchanswer%"=="s" goto stable +if "%batchanswer%"=="S" goto stable +if "%batchanswer%"=="a" goto all +if "%batchanswer%"=="A" goto all +goto question + +:no_tool +echo create_project.exe not found in the current folder. +echo You need to build it first and copy it in this +echo folder +goto done + +:all +echo. +echo Creating project files with all engines enabled (stable and unstable) +echo. +create_project ..\.. --enable-all-engines --msvc --msvc-version 14 --build-events +goto done + +:stable +echo. +echo Creating normal project files, with only the stable engines enabled +echo. +create_project ..\.. --msvc --msvc-version 14 +goto done + +:tools +echo. +echo Creating tools project files +echo. +create_project ..\.. --tools --msvc --msvc-version 14 +goto done + +:tests +echo. +echo Creating tests project files +echo. +create_project ..\.. --tests --msvc --msvc-version 14 +goto done + +:clean_check +echo. +set cleananswer=N +set /p cleananswer="This will remove all project files. Are you sure you want to continue? (N/y)" +if "%cleananswer%"=="n" goto done +if "%cleananswer%"=="N" goto done +if "%cleananswer%"=="y" goto clean +if "%cleananswer%"=="Y" goto clean +goto clean_check + +:clean +echo. +echo Removing all project files +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 +del /Q test_runner.cpp > NUL 2>&1 +goto done + +:done +echo. +pause diff --git a/dists/msvc14/readme.txt b/dists/msvc14/readme.txt new file mode 100644 index 0000000000..3d16c7b20b --- /dev/null +++ b/dists/msvc14/readme.txt @@ -0,0 +1,6 @@ +The Visual Studio project files can now be created automatically from the GCC +files using the create_project tool inside the /devtools/create_project folder. + +To create the default project files, build create_project.exe, copy it inside +this folder and run the create_msvc14.bat file for a default build. You can run +create_project.exe with no parameters to check the possible command-line options. diff --git a/doc/de/Neues b/doc/de/Neues index 2b67913359..3d155be825 100644 --- a/doc/de/Neues +++ b/doc/de/Neues @@ -17,7 +17,7 @@ Sie auf Englisch unter: AGI: - Es ist nun möglich, die Maus-UnterstĂĽtzung zu deaktivieren (auĂźer bei -Amiga-Versionen und Fan-Spielen, die eine Maus benötigen). + Amiga-Versionen und Fan-Spielen, die eine Maus benötigen). - Fehlerhafte Lautstärke-Dämpfung im PCjr-Sound-Code behoben (Fehler #6858). AGOS: @@ -26,6 +26,8 @@ Amiga-Versionen und Fan-Spielen, die eine Maus benötigen). - Verb-Feld in der Amiga-Version von Simon the Sorcerer 1 repariert. - Accolade AdLib- und MT32-Treiber fĂĽr folgende Spiele hinzugefĂĽgt: Elvira 1, Elvira 2, Waxworks und Simon the Sorcerer 1 (Demoversion) + - AdLib-Ausgabe in Simon the Sorcerer 1 hinzugefĂĽgt. Dies verbessert die AdLib- + Ausgabe erheblich und erhöht die Originaltreue. Baphomets Fluch 1: - Erkennung der Byte-Reihenfolge der Sprachausgabe auf Big-Endian-Systemen @@ -34,6 +36,9 @@ Amiga-Versionen und Fan-Spielen, die eine Maus benötigen). das Spiel in der Szene am Bull's Head Hill befindet, behoben (Fehler #6728). Dieser Fehler trat womöglich auch in anderen Szenen auf. + CinE: + - UnterstĂĽtzung fĂĽr Musik in der CD-Version von Future Wars hinzugefĂĽgt. + MADE: - UnterstĂĽtzung fĂĽr AdLib-Musik in Return to Zork verbessert. diff --git a/engines/cine/cine.cpp b/engines/cine/cine.cpp index 5fed92051c..d2f088dcd8 100644 --- a/engines/cine/cine.cpp +++ b/engines/cine/cine.cpp @@ -22,10 +22,14 @@ #include "common/config-manager.h" #include "common/debug-channels.h" +#include "common/events.h" #include "engines/util.h" #include "graphics/cursorman.h" +#include "graphics/palette.h" + +#include "image/iff.h" #include "cine/cine.h" #include "cine/bg_list.h" @@ -89,6 +93,10 @@ void CineEngine::syncSoundSettings() { } Common::Error CineEngine::run() { + if (g_cine->getGameType() == GType_FW && (g_cine->getFeatures() & GF_CD)) { + showSplashScreen(); + } + // Initialize backend initGraphics(320, 200, false); @@ -239,4 +247,45 @@ void CineEngine::initialize() { } } +void CineEngine::showSplashScreen() { + Common::File file; + if (!file.open("sony.lbm")) + return; + + Image::IFFDecoder decoder; + if (!decoder.loadStream(file)) + return; + + const Graphics::Surface *surface = decoder.getSurface(); + if (surface->w == 640 && surface->h == 480) { + initGraphics(640, 480, true); + + const byte *palette = decoder.getPalette(); + int paletteColorCount = decoder.getPaletteColorCount(); + g_system->getPaletteManager()->setPalette(palette, 0, paletteColorCount); + + g_system->copyRectToScreen(surface->getPixels(), 640, 0, 0, 640, 480); + g_system->updateScreen(); + + Common::EventManager *eventMan = g_system->getEventManager(); + + bool done = false; + uint32 now = g_system->getMillis(); + + while (!done && g_system->getMillis() - now < 2000) { + Common::Event event; + while (eventMan->pollEvent(event)) { + if (event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE) { + done = true; + break; + } + if (shouldQuit()) + done = true; + } + } + } + + decoder.destroy(); +} + } // End of namespace Cine diff --git a/engines/cine/cine.h b/engines/cine/cine.h index e620d2ffa5..71a0c242b6 100644 --- a/engines/cine/cine.h +++ b/engines/cine/cine.h @@ -145,6 +145,7 @@ public: private: void initialize(); + void showSplashScreen(); void resetEngine(); bool loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFormat saveGameFormat); bool loadTempSaveOS(Common::SeekableReadStream &in); diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp index 7815475d37..68b63d398a 100644 --- a/engines/fullpipe/gameloader.cpp +++ b/engines/fullpipe/gameloader.cpp @@ -419,7 +419,7 @@ bool GameLoader::unloadScene(int sceneId) { if (_sc2array[sceneTag]._isLoaded) saveScenePicAniInfos(sceneId); - _sc2array[sceneTag]._motionController->freeItems(); + _sc2array[sceneTag]._motionController->detachAllObjects(); delete tag->_scene; tag->_scene = 0; diff --git a/engines/fullpipe/interaction.cpp b/engines/fullpipe/interaction.cpp index 84e9688e30..4aac3485f4 100644 --- a/engines/fullpipe/interaction.cpp +++ b/engines/fullpipe/interaction.cpp @@ -311,7 +311,7 @@ LABEL_38: if (abs(xpos - subj->_ox) > 1 || abs(ypos - subj->_oy) > 1 || (inter->_staticsId2 != 0 && (subj->_statics == 0 || subj->_statics->_staticsId != inter->_staticsId2))) { - mq = getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->method34(subj, xpos, ypos, 1, inter->_staticsId2); + mq = getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->startMove(subj, xpos, ypos, 1, inter->_staticsId2); if (!mq) return false; diff --git a/engines/fullpipe/lift.cpp b/engines/fullpipe/lift.cpp index 9a3d91540a..d066c89d4a 100644 --- a/engines/fullpipe/lift.cpp +++ b/engines/fullpipe/lift.cpp @@ -324,7 +324,7 @@ void FullpipeEngine::lift_walkAndGo() { ExCommand *ex; if (abs(_liftX - _aniMan->_ox) > 1 || abs(_liftY - _aniMan->_oy) > 1 || _aniMan->_movement || _aniMan->_statics->_staticsId != ST_MAN_UP) { - mq = getCurrSceneSc2MotionController()->method34(_aniMan, _liftX, _liftY, 1, ST_MAN_UP); + mq = getCurrSceneSc2MotionController()->startMove(_aniMan, _liftX, _liftY, 1, ST_MAN_UP); if (mq) { ex = new ExCommand(0, 17, MSG_LIFT_CLICKBUTTON, 0, 0, 0, 1, 0, 0, 0); diff --git a/engines/fullpipe/messagehandlers.cpp b/engines/fullpipe/messagehandlers.cpp index d4f79d1dd8..94754ad22a 100644 --- a/engines/fullpipe/messagehandlers.cpp +++ b/engines/fullpipe/messagehandlers.cpp @@ -781,7 +781,7 @@ int MovGraph_messageHandler(ExCommand *cmd) { int off = (node->_field_14 >> 16) & 0xFF; double off2 = ((link->_movGraphNode2->_field_14 >> 8) & 0xff) - off; - top = off + (int)(sqrt(sq) * off2 / link->_distance); + top = off + (int)(sqrt(sq) * off2 / link->_z); } else { top = (gr->calcOffset(ani->_ox, ani->_oy)->_field_14 >> 8) & 0xff; } diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp index 5845ad1501..1a61cb742a 100644 --- a/engines/fullpipe/motion.cpp +++ b/engines/fullpipe/motion.cpp @@ -88,7 +88,7 @@ bool MctlCompound::load(MfcArchive &file) { for (int i = 0; i < count; i++) { debug(6, "CompoundArray[%d]", i); - MctlCompoundArrayItem *obj = new MctlCompoundArrayItem(); + MctlItem *obj = new MctlItem(); obj->_motionControllerObj = (MotionController *)file.readClass(); @@ -114,14 +114,14 @@ bool MctlCompound::load(MfcArchive &file) { return true; } -void MctlCompound::addObject(StaticANIObject *obj) { +void MctlCompound::attachObject(StaticANIObject *obj) { for (uint i = 0; i < _motionControllers.size(); i++) - _motionControllers[i]->_motionControllerObj->addObject(obj); + _motionControllers[i]->_motionControllerObj->attachObject(obj); } -int MctlCompound::removeObject(StaticANIObject *obj) { +int MctlCompound::detachObject(StaticANIObject *obj) { for (uint i = 0; i < _motionControllers.size(); i++) - _motionControllers[i]->_motionControllerObj->removeObject(obj); + _motionControllers[i]->_motionControllerObj->detachObject(obj); return 1; } @@ -150,12 +150,12 @@ void MctlCompound::initMovGraph2() { } } -void MctlCompound::freeItems() { +void MctlCompound::detachAllObjects() { for (uint i = 0; i < _motionControllers.size(); i++) - _motionControllers[i]->_motionControllerObj->freeItems(); + _motionControllers[i]->_motionControllerObj->detachAllObjects(); } -MessageQueue *MctlCompound::method34(StaticANIObject *ani, int sourceX, int sourceY, int fuzzyMatch, int staticsId) { +MessageQueue *MctlCompound::startMove(StaticANIObject *ani, int sourceX, int sourceY, int fuzzyMatch, int staticsId) { int idx = -1; int sourceIdx = -1; @@ -187,7 +187,7 @@ MessageQueue *MctlCompound::method34(StaticANIObject *ani, int sourceX, int sour return 0; if (idx == sourceIdx) - return _motionControllers[idx]->_motionControllerObj->method34(ani, sourceX, sourceY, fuzzyMatch, staticsId); + return _motionControllers[idx]->_motionControllerObj->startMove(ani, sourceX, sourceY, fuzzyMatch, staticsId); double dist; MctlConnectionPoint *cp = findClosestConnectionPoint(ani->_ox, ani->_oy, idx, sourceX, sourceY, sourceIdx, &dist); @@ -195,7 +195,7 @@ MessageQueue *MctlCompound::method34(StaticANIObject *ani, int sourceX, int sour if (!cp) return 0; - MessageQueue *mq = _motionControllers[idx]->_motionControllerObj->doWalkTo(ani, cp->_connectionX, cp->_connectionY, 1, cp->_field_14); + MessageQueue *mq = _motionControllers[idx]->_motionControllerObj->doWalkTo(ani, cp->_connectionX, cp->_connectionY, 1, cp->_mctlmirror); if (!mq) return 0; @@ -264,7 +264,7 @@ MessageQueue *MctlCompound::doWalkTo(StaticANIObject *subj, int xpos, int ypos, if (!closestP) return 0; - MessageQueue *mq = _motionControllers[match1]->_motionControllerObj->doWalkTo(subj, closestP->_connectionX, closestP->_connectionY, 1, closestP->_field_14); + MessageQueue *mq = _motionControllers[match1]->_motionControllerObj->doWalkTo(subj, closestP->_connectionX, closestP->_connectionY, 1, closestP->_mctlmirror); ExCommand *ex; @@ -287,7 +287,7 @@ MessageQueue *MctlCompound::doWalkTo(StaticANIObject *subj, int xpos, int ypos, return mq; } -MctlCompoundArrayItem::~MctlCompoundArrayItem() { +MctlItem::~MctlItem() { delete _movGraphReactObj; delete _motionControllerObj; } @@ -304,7 +304,7 @@ MctlLadder::MctlLadder() { } MctlLadder::~MctlLadder() { - freeItems(); + detachAllObjects(); } int MctlLadder::collisionDetection(StaticANIObject *man) { @@ -326,7 +326,7 @@ int MctlLadder::collisionDetection(StaticANIObject *man) { return res; } -void MctlLadder::addObject(StaticANIObject *obj) { +void MctlLadder::attachObject(StaticANIObject *obj) { if (findObjectPos(obj) < 0) { MctlLadderMovement *movement = new MctlLadderMovement; @@ -391,7 +391,7 @@ bool MctlLadder::initMovement(StaticANIObject *ani, MctlLadderMovement *movement return true; } -void MctlLadder::freeItems() { +void MctlLadder::detachAllObjects() { _mgm.clear(); for (uint i = 0; i < _ladmovements.size(); i++) { @@ -402,7 +402,7 @@ void MctlLadder::freeItems() { _ladmovements.clear(); } -MessageQueue *MctlLadder::method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { +MessageQueue *MctlLadder::startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { MessageQueue *mq = doWalkTo(subj, xpos, ypos, fuzzyMatch, staticsId); if (mq) { @@ -661,7 +661,7 @@ void MctlCompound::replaceNodeX(int from, int to) { node->_x = to; } - gr->calcNodeDistancesAndAngles(); + gr->recalcLinkParams(); } } } @@ -669,10 +669,9 @@ void MctlCompound::replaceNodeX(int from, int to) { MctlConnectionPoint::MctlConnectionPoint() { _connectionX = 0; _connectionY = 0; - _field_C = 0; - _field_10 = 0; - _field_14 = 0; - _field_16 = 0; + _mctlflags = 0; + _mctlstatic = 0; + _mctlmirror = 0; _messageQueueObj = 0; _motionControllerObj = 0; } @@ -779,7 +778,7 @@ bool MovGraph::load(MfcArchive &file) { return true; } -void MovGraph::addObject(StaticANIObject *obj) { +void MovGraph::attachObject(StaticANIObject *obj) { _mgm.clear(); _mgm.addItem(obj->_id); @@ -796,13 +795,13 @@ void MovGraph::addObject(StaticANIObject *obj) { _mgm.addItem(obj->_id); // FIXME: Is it really needed? } -int MovGraph::removeObject(StaticANIObject *obj) { - warning("STUB: MovGraph::removeObject()"); +int MovGraph::detachObject(StaticANIObject *obj) { + warning("STUB: MovGraph::detachObject()"); return 0; } -void MovGraph::freeItems() { +void MovGraph::detachAllObjects() { for (uint i = 0; i < _items.size(); i++) { _items[i]->free(); @@ -812,7 +811,7 @@ void MovGraph::freeItems() { _items.clear(); } -Common::Array<MovItem *> *MovGraph::method28(StaticANIObject *ani, int x, int y, int flag1, int *rescount) { +Common::Array<MovItem *> *MovGraph::getPaths(StaticANIObject *ani, int x, int y, int flag1, int *rescount) { *rescount = 0; if (_items.size() <= 0) @@ -828,7 +827,7 @@ Common::Array<MovItem *> *MovGraph::method28(StaticANIObject *ani, int x, int y, } _items[idx]->free(); - calcNodeDistancesAndAngles(); + recalcLinkParams(); _items[idx]->movarr._movSteps.clear(); @@ -838,7 +837,7 @@ Common::Array<MovItem *> *MovGraph::method28(StaticANIObject *ani, int x, int y, point.y = ani->_oy; if (!calcChunk(idx, ani->_ox, ani->_oy, &_items[idx]->movarr, 0)) - findClosestLink(idx, &point, &_items[idx]->movarr); + getNearestPoint(idx, &point, &_items[idx]->movarr); _items[idx]->count = 0; @@ -873,12 +872,12 @@ Common::Array<MovItem *> *MovGraph::method28(StaticANIObject *ani, int x, int y, return 0; } -bool MovGraph::method2C(StaticANIObject *obj, int x, int y) { +bool MovGraph::setPosImmediate(StaticANIObject *obj, int x, int y) { obj->setOXY(x, y); - return method3C(obj, 1); + return resetPosition(obj, 1); } -MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int fuzzyMatch, int staticsId) { +MessageQueue *MovGraph::startMove(StaticANIObject *ani, int xpos, int ypos, int fuzzyMatch, int staticsId) { if (!ani) { if (!_items.size()) return 0; @@ -896,7 +895,7 @@ MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int f return 0; int count; - Common::Array<MovItem *> *movitems = method28(ani, xpos, ypos, fuzzyMatch, &count); + Common::Array<MovItem *> *movitems = getPaths(ani, xpos, ypos, fuzzyMatch, &count); if (!movitems) return 0; @@ -941,9 +940,9 @@ MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int f int count2; ani->setSomeDynamicPhaseIndex(ex->_field_14); - method28(ani, xpos, ypos, fuzzyMatch, &count2); + getPaths(ani, xpos, ypos, fuzzyMatch, &count2); - int idx = getItemIndexByStaticAni(ani); + int idx = getObjectIndex(ani); count = _items[idx]->count; movitems = _items[idx]->movitems; } @@ -951,12 +950,12 @@ MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int f return method50(ani, _callback1(ani, movitems, count), staticsId); } -void MovGraph::changeCallback(MovArr *(*callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) { +void MovGraph::setSelFunc(MovArr *(*callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) { _callback1 = callback1; } -bool MovGraph::method3C(StaticANIObject *ani, int flag) { - int idx = getItemIndexByStaticAni(ani); +bool MovGraph::resetPosition(StaticANIObject *ani, int flag) { + int idx = getObjectIndex(ani); if (idx == -1) return false; @@ -967,7 +966,7 @@ bool MovGraph::method3C(StaticANIObject *ani, int flag) { point.x = ani->_ox; point.y = ani->_oy; - findClosestLink(idx, &point, &movarr); + getNearestPoint(idx, &point, &movarr); ani->setOXY(point.x, point.y); if (flag) { @@ -990,15 +989,15 @@ bool MovGraph::method3C(StaticANIObject *ani, int flag) { return true; } -bool MovGraph::method44(StaticANIObject *ani, int x, int y) { - int idx = getItemIndexByStaticAni(ani); +bool MovGraph::canDropInventory(StaticANIObject *ani, int x, int y) { + int idx = getObjectIndex(ani); MovArr m; if (idx != -1) { if (x != -1 || y != -1) { int counter; - Common::Array<MovItem *> *movitem = method28(ani, x, y, 0, &counter); + Common::Array<MovItem *> *movitem = getPaths(ani, x, y, 0, &counter); if (movitem) { MovArr *movarr = _callback1(ani, movitem, counter); @@ -1021,13 +1020,13 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int PicAniInfo picAniInfo; int ss; - Common::Array<MovItem *> *movitem = method28(subj, xpos, ypos, fuzzyMatch, &ss); + Common::Array<MovItem *> *movitem = getPaths(subj, xpos, ypos, fuzzyMatch, &ss); subj->getPicAniInfo(&picAniInfo); if (movitem) { MovArr *goal = _callback1(subj, movitem, ss); - int idx = getItemIndexByStaticAni(subj); + int idx = getObjectIndex(subj); for (int i = 0; i < _items[idx]->count; i++) { if ((*_items[idx]->movitems)[i]->movarr == goal) { @@ -1052,10 +1051,10 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int } } - movitem = method28(subj, xpos, ypos, fuzzyMatch, &ss); + movitem = getPaths(subj, xpos, ypos, fuzzyMatch, &ss); if (movitem) { MovArr *goal = _callback1(subj, movitem, ss); - int idx = getItemIndexByStaticAni(subj); + int idx = getObjectIndex(subj); if (_items[idx]->count > 0) { int arridx = 0; @@ -1106,7 +1105,7 @@ MessageQueue *MovGraph::sub1(StaticANIObject *ani, int x, int y, int stid, int x int rescount; - Common::Array<MovItem *> *movitems = method28(ani, x1, y1, flag1, &rescount); + Common::Array<MovItem *> *movitems = getPaths(ani, x1, y1, flag1, &rescount); if (!movitems) { ani->setPicAniInfo(&picinfo); @@ -1117,7 +1116,7 @@ MessageQueue *MovGraph::sub1(StaticANIObject *ani, int x, int y, int stid, int x MessageQueue *res = 0; MovArr *goal = _callback1(ani, movitems, rescount); - int idx = getItemIndexByStaticAni(ani); + int idx = getObjectIndex(ani); MovGraphItem *movgitem = _items[idx]; int cnt = movgitem->count; @@ -1177,16 +1176,16 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st if (i == movarr->_movStepCount - 1) { nx = movarr->_point.x; ny = movarr->_point.y; - nd = st->link->_movGraphNode1->_distance; + nd = st->link->_movGraphNode1->_z; } else { if (st->sfield_0) { nx = st->link->_movGraphNode1->_x; ny = st->link->_movGraphNode1->_y; - nd = st->link->_movGraphNode1->_distance; + nd = st->link->_movGraphNode1->_z; } else { nx = st->link->_movGraphNode2->_x; ny = st->link->_movGraphNode2->_y; - nd = st->link->_movGraphNode2->_distance; + nd = st->link->_movGraphNode2->_z; } } @@ -1294,14 +1293,14 @@ double MovGraph::calcDistance(Common::Point *point, MovGraphLink *link, int fuzz double dist2x = (double)(n2x - n1x); double dist2y = (double)(n2y - n1y); double dist1 = sqrt(dist1y * dist1y + dist1x * dist1x); - double dist2 = ((double)(n1y - n2y) * dist1y + dist2x * dist1x) / link->_distance / dist1; + double dist2 = ((double)(n1y - n2y) * dist1y + dist2x * dist1x) / link->_z / dist1; double distm = dist2 * dist1; double res = sqrt(1.0 - dist2 * dist2) * dist1; - if (dist2 <= 0.0 || distm >= link->_distance) { + if (dist2 <= 0.0 || distm >= link->_z) { if (fuzzyMatch) { if (dist2 > 0.0) { - if (distm >= link->_distance) { + if (distm >= link->_z) { point->x = n2x; point->y = n2y; } @@ -1313,14 +1312,14 @@ double MovGraph::calcDistance(Common::Point *point, MovGraphLink *link, int fuzz return -1.0; } } else { - point->x = (int)(n1x + (dist2x * distm / link->_distance)); - point->y = (int)(n1y + (dist2y * distm / link->_distance)); + point->x = (int)(n1x + (dist2x * distm / link->_z)); + point->y = (int)(n1y + (dist2y * distm / link->_z)); } return res; } -void MovGraph::calcNodeDistancesAndAngles() { +void MovGraph::recalcLinkParams() { for (ObList::iterator i = _links.begin(); i != _links.end(); ++i) { assert(((CObject *)*i)->_objtype == kObjTypeMovGraphLink); @@ -1328,11 +1327,11 @@ void MovGraph::calcNodeDistancesAndAngles() { lnk->_flags &= 0x7FFFFFFF; - lnk->calcNodeDistanceAndAngle(); + lnk->recalcLength(); } } -bool MovGraph::findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr) { +bool MovGraph::getNearestPoint(int unusedArg, Common::Point *p, MovArr *movarr) { MovGraphLink *link = 0; double mindist = 1.0e20; int resx = 0, resy = 0; @@ -1348,7 +1347,7 @@ bool MovGraph::findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr) double dx3 = lnk->_movGraphNode2->_x - lnk->_movGraphNode1->_x; double dy3 = lnk->_movGraphNode2->_y - lnk->_movGraphNode1->_y; double sq1 = sqrt(dy1 * dy1 + dx1 * dx1); - double sdist = (dy3 * dy1 + dx3 * dx1) / lnk->_distance / sq1; + double sdist = (dy3 * dy1 + dx3 * dx1) / lnk->_z / sq1; double ldist = sdist * sq1; double dist = sqrt(1.0 - sdist * sdist) * sq1; @@ -1357,14 +1356,14 @@ bool MovGraph::findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr) dist = sqrt(dx1 * dx1 + dy1 * dy1); } - if (ldist > lnk->_distance) { - ldist = lnk->_distance; + if (ldist > lnk->_z) { + ldist = lnk->_z; dist = sqrt(dx2 * dx2 + dy2 * dy2); } - if (ldist >= 0.0 && ldist <= lnk->_distance && dist < mindist) { - resx = lnk->_movGraphNode1->_x + (int)(dx3 * ldist / lnk->_distance); - resy = lnk->_movGraphNode1->_y + (int)(dy3 * ldist / lnk->_distance); + if (ldist >= 0.0 && ldist <= lnk->_z && dist < mindist) { + resx = lnk->_movGraphNode1->_x + (int)(dx3 * ldist / lnk->_z); + resy = lnk->_movGraphNode1->_y + (int)(dy3 * ldist / lnk->_z); mindist = dist; link = lnk; @@ -1387,7 +1386,7 @@ bool MovGraph::findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr) return false; } -int MovGraph::getItemIndexByStaticAni(StaticANIObject *ani) { +int MovGraph::getObjectIndex(StaticANIObject *ani) { for (uint i = 0; i < _items.size(); i++) if (_items[i]->ani == ani) return i; @@ -1418,7 +1417,7 @@ Common::Array<MovArr *> *MovGraph::genMovArr(int x, int y, int *arrSize, int fla movarr->_link = lnk; movarr->_dist = ((double)(lnk->_movGraphNode1->_y - lnk->_movGraphNode2->_y) * (double)(lnk->_movGraphNode1->_y - point.y) + (double)(lnk->_movGraphNode2->_x - lnk->_movGraphNode1->_x) * (double)(point.x - lnk->_movGraphNode1->_x)) / - lnk->_distance / lnk->_distance; + lnk->_z / lnk->_z; movarr->_point = point; arr->push_back(movarr); @@ -1447,7 +1446,7 @@ Common::Array<MovArr *> *MovGraph::genMovArr(int x, int y, int *arrSize, int fla movarr->_link = lnk; movarr->_dist = ((double)(lnk->_movGraphNode1->_y - lnk->_movGraphNode2->_y) * (double)(lnk->_movGraphNode1->_y - y) + (double)(lnk->_movGraphNode2->_x - lnk->_movGraphNode1->_x) * (double)(x - lnk->_movGraphNode1->_x)) / - lnk->_distance / lnk->_distance; + lnk->_z / lnk->_z; movarr->_point.x = x; movarr->_point.y = y; @@ -1548,7 +1547,7 @@ bool MovGraph::calcChunk(int idx, int x, int y, MovArr *arr, int a6) { Common::Array<MovArr *> *movarr = genMovArr(x, y, &arrSize, 0, 1); if (!movarr) - return findClosestLink(idx, 0, arr); + return getNearestPoint(idx, 0, arr); bool res = false; @@ -1777,8 +1776,8 @@ bool MovGraph2::initDirections(StaticANIObject *obj, MovGraph2Item *item) { return true; } -void MovGraph2::addObject(StaticANIObject *obj) { - MovGraph::addObject(obj); +void MovGraph2::attachObject(StaticANIObject *obj) { + MovGraph::attachObject(obj); int id = getItemIndexByGameObjectId(obj->_id); @@ -2031,20 +2030,20 @@ MessageQueue *MovGraph2::buildMovInfo1MessageQueue(MovInfo1 *movInfo) { return mq; } -int MovGraph2::removeObject(StaticANIObject *obj) { - warning("STUB: MovGraph2::removeObject()"); +int MovGraph2::detachObject(StaticANIObject *obj) { + warning("STUB: MovGraph2::detachObject()"); return 0; } -void MovGraph2::freeItems() { +void MovGraph2::detachAllObjects() { for (uint i = 0; i < _items2.size(); i++) delete _items2[i]; _items2.clear(); } -MessageQueue *MovGraph2::method34(StaticANIObject *ani, int xpos, int ypos, int fuzzyMatch, int staticsId) { +MessageQueue *MovGraph2::startMove(StaticANIObject *ani, int xpos, int ypos, int fuzzyMatch, int staticsId) { if (!ani->isIdle()) return 0; @@ -2240,9 +2239,9 @@ MessageQueue *MovGraph2::doWalkTo(StaticANIObject *obj, int xpos, int ypos, int int dx2, dy2; if (linkInfoSource.node) - movInfo1.distance1 = linkInfoSource.node->_distance; + movInfo1.distance1 = linkInfoSource.node->_z; else - movInfo1.distance1 = linkInfoSource.link->_movGraphNode1->_distance; + movInfo1.distance1 = linkInfoSource.link->_movGraphNode1->_z; if (linkInfoDest.node) { dx2 = linkInfoDest.node->_x; @@ -2251,16 +2250,16 @@ MessageQueue *MovGraph2::doWalkTo(StaticANIObject *obj, int xpos, int ypos, int movInfo1.pt2.x = linkInfoDest.node->_x; movInfo1.pt2.y = linkInfoDest.node->_y; - movInfo1.distance2 = linkInfoDest.node->_distance; + movInfo1.distance2 = linkInfoDest.node->_z; } else { movInfo1.pt2.x = xpos; movInfo1.pt2.y = ypos; MovGraphNode *nod = linkInfoDest.link->_movGraphNode1; double dst1 = sqrt((double)((ypos - nod->_y) * (ypos - nod->_y) + (xpos - nod->_x) * (xpos - nod->_x))); - int dst = linkInfoDest.link->_movGraphNode2->_distance - nod->_distance; + int dst = linkInfoDest.link->_movGraphNode2->_z - nod->_z; - movInfo1.distance2 = (int)(nod->_distance + (dst1 * (double)dst / linkInfoDest.link->_distance)); + movInfo1.distance2 = (int)(nod->_z + (dst1 * (double)dst / linkInfoDest.link->_z)); calcDistance(&movInfo1.pt2, linkInfoDest.link, 1); @@ -2397,8 +2396,8 @@ int MovGraph2::findLink(Common::Array<MovGraphLink *> *linkList, int idx, Common rect->bottom = node2->_y; } if (point) { - point->x = node3->_distance; - point->y = node2->_distance; + point->x = node3->_z; + point->y = node2->_z; } if (abs(node3->_x - node2->_x) <= abs(node3->_y - node2->_y)) @@ -2659,7 +2658,7 @@ MovGraphLink *MovGraph2::findLink2(int x, int y) { double n1dx = n1x - x; double n1dy = n1y - y; double dst1 = sqrt(n1dy * n1dy + n1dx * n1dx); - double coeff1 = ((n1y - n2y) * n1dy + (n2x - n1x) * n1dx) / lnk->_distance / dst1; + double coeff1 = ((n1y - n2y) * n1dy + (n2x - n1x) * n1dx) / lnk->_z / dst1; double dst3 = coeff1 * dst1; double dst2 = sqrt(1.0 - coeff1 * coeff1) * dst1; @@ -2667,11 +2666,11 @@ MovGraphLink *MovGraph2::findLink2(int x, int y) { dst3 = 0.0; dst2 = sqrt(n1dy * n1dy + n1dx * n1dx); } - if (dst3 > lnk->_distance) { - dst3 = lnk->_distance; + if (dst3 > lnk->_z) { + dst3 = lnk->_z; dst2 = sqrt((n2x - x) * (n2x - x) + (n2y - y) * (n2y - y)); } - if (dst3 >= 0.0 && dst3 <= lnk->_distance && dst2 < mindist) { + if (dst3 >= 0.0 && dst3 <= lnk->_z && dst2 < mindist) { mindist = dst2; res = lnk; } @@ -2704,11 +2703,11 @@ double MovGraph2::findMinPath(LinkInfo *linkInfoSource, LinkInfo *linkInfoDest, double newDistance = findMinPath(&linkInfoWorkSource, linkInfoDest, &tmpList); - if (newDistance >= 0.0 && (minDistance < 0.0 || newDistance + lnk->_distance < minDistance)) { + if (newDistance >= 0.0 && (minDistance < 0.0 || newDistance + lnk->_z < minDistance)) { listObj->clear(); listObj->push_back(tmpList); - minDistance = newDistance + lnk->_distance; + minDistance = newDistance + lnk->_z; } lnk->_flags &= 0x7FFFFFFF; @@ -2775,7 +2774,7 @@ MovGraphNode *MovGraph::calcOffset(int ox, int oy) { } MovGraphLink::MovGraphLink() { - _distance = 0; + _z = 0; _angle = 0; _flags = 0x10000000; _movGraphNode2 = 0; @@ -2809,10 +2808,10 @@ bool MovGraphLink::load(MfcArchive &file) { debug(8, "GraphNode2"); _movGraphNode2 = (MovGraphNode *)file.readClass(); - _distance = file.readDouble(); + _z = file.readDouble(); _angle = file.readDouble(); - debug(8, "distance: %g, angle: %g", _distance, _angle); + debug(8, "distance: %g, angle: %g", _z, _angle); _movGraphReact = (MovGraphReact *)file.readClass(); _name = file.readPascalString(); @@ -2820,12 +2819,12 @@ bool MovGraphLink::load(MfcArchive &file) { return true; } -void MovGraphLink::calcNodeDistanceAndAngle() { +void MovGraphLink::recalcLength() { if (_movGraphNode1) { double dx = _movGraphNode2->_x - _movGraphNode1->_x; double dy = _movGraphNode2->_y - _movGraphNode1->_y; - _distance = sqrt(dy * dy + dx * dx); + _z = sqrt(dy * dy + dx * dx); _angle = atan2(dx, dy); } } @@ -2836,7 +2835,7 @@ bool MovGraphNode::load(MfcArchive &file) { _field_14 = file.readUint32LE(); _x = file.readUint32LE(); _y = file.readUint32LE(); - _distance = file.readUint32LE(); + _z = file.readUint32LE(); return true; } @@ -3032,7 +3031,7 @@ int startWalkTo(int objId, int objKey, int x, int y, int fuzzyMatch) { MctlCompound *mc = getCurrSceneSc2MotionController(); if (mc) - return (mc->method34(g_fp->_currentScene->getStaticANIObject1ById(objId, objKey), x, y, fuzzyMatch, 0) != 0); + return (mc->startMove(g_fp->_currentScene->getStaticANIObject1ById(objId, objKey), x, y, fuzzyMatch, 0) != 0); return 0; } @@ -3042,7 +3041,7 @@ bool doSomeAnimation(int objId, int objKey, int a3) { MctlCompound *cmp = getCurrSceneSc2MotionController(); if (ani && cmp) - return cmp->method3C(ani, a3); + return cmp->resetPosition(ani, a3); return false; } diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h index c488039e22..a40d810ffa 100644 --- a/engines/fullpipe/motion.h +++ b/engines/fullpipe/motion.h @@ -48,19 +48,19 @@ public: virtual bool load(MfcArchive &file); virtual void methodC() {} virtual void method10() {} - virtual void clearEnabled() { _isEnabled = false; } - virtual void setEnabled() { _isEnabled = true; } - virtual void addObject(StaticANIObject *obj) {} - virtual int removeObject(StaticANIObject *obj) { return 0; } - virtual void freeItems() {} - virtual Common::Array<MovItem *> *method28(StaticANIObject *ani, int x, int y, int flag1, int *rescount) { return 0; } - virtual bool method2C(StaticANIObject *obj, int x, int y) { return false; } + virtual void deactivate() { _isEnabled = false; } + virtual void activate() { _isEnabled = true; } + virtual void attachObject(StaticANIObject *obj) {} + virtual int detachObject(StaticANIObject *obj) { return 0; } + virtual void detachAllObjects() {} + virtual Common::Array<MovItem *> *getPaths(StaticANIObject *ani, int x, int y, int flag1, int *rescount) { return 0; } + virtual bool setPosImmediate(StaticANIObject *obj, int x, int y) { return false; } virtual int method30() { return 0; } - virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { return 0; } - virtual void changeCallback(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {} - virtual bool method3C(StaticANIObject *ani, int flag) { return 0; } + virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { return 0; } + virtual void setSelFunc(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {} + virtual bool resetPosition(StaticANIObject *ani, int flag) { return 0; } virtual int method40() { return 0; } - virtual bool method44(StaticANIObject *ani, int x, int y) { return false; } + virtual bool canDropInventory(StaticANIObject *ani, int x, int y) { return false; } virtual int method48() { return -1; } virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { return 0; } @@ -82,7 +82,7 @@ public: virtual bool pointInRegion(int x, int y); }; -class MctlCompoundArrayItem : public CObject { +class MctlItem : public CObject { public: MotionController *_motionControllerObj; MovGraphReact *_movGraphReactObj; @@ -92,11 +92,11 @@ public: int _field_28; public: - MctlCompoundArrayItem() : _movGraphReactObj(0), _motionControllerObj(0), _field_20(0), _field_24(0), _field_28(0) {} - ~MctlCompoundArrayItem(); + MctlItem() : _movGraphReactObj(0), _motionControllerObj(0), _field_20(0), _field_24(0), _field_28(0) {} + ~MctlItem(); }; -class MctlCompoundArray : public Common::Array<MctlCompoundArrayItem *>, public CObject { +class MctlCompoundArray : public Common::Array<MctlItem *>, public CObject { public: virtual bool load(MfcArchive &file); }; @@ -109,10 +109,10 @@ public: virtual bool load(MfcArchive &file); - virtual void addObject(StaticANIObject *obj); - virtual int removeObject(StaticANIObject *obj); - virtual void freeItems(); - virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); + virtual void attachObject(StaticANIObject *obj); + virtual int detachObject(StaticANIObject *obj); + virtual void detachAllObjects(); + virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); void initMovGraph2(); @@ -156,10 +156,10 @@ public: virtual ~MctlLadder(); int collisionDetection(StaticANIObject *man); - virtual void addObject(StaticANIObject *obj); - virtual int removeObject(StaticANIObject *obj) { return 1; } - virtual void freeItems(); - virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); + virtual void attachObject(StaticANIObject *obj); + virtual int detachObject(StaticANIObject *obj) { return 1; } + virtual void detachAllObjects(); + virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); MessageQueue *controllerWalkTo(StaticANIObject *ani, int off); @@ -173,12 +173,12 @@ class MovGraphNode : public CObject { public: int _x; int _y; - int _distance; + int _z; int16 _field_10; int _field_14; public: - MovGraphNode() : _x(0), _y(0), _distance(0), _field_10(0), _field_14(0) { _objtype = kObjTypeMovGraphNode; } + MovGraphNode() : _x(0), _y(0), _z(0), _field_10(0), _field_14(0) { _objtype = kObjTypeMovGraphNode; } virtual bool load(MfcArchive &file); }; @@ -225,7 +225,7 @@ class MovGraphLink : public CObject { int _flags; int _field_38; int _field_3C; - double _distance; + double _z; double _angle; MovGraphReact *_movGraphReact; char *_name; @@ -236,7 +236,7 @@ class MovGraphLink : public CObject { virtual bool load(MfcArchive &file); - void calcNodeDistanceAndAngle(); + void recalcLength(); }; struct MovStep { @@ -290,23 +290,23 @@ public: virtual bool load(MfcArchive &file); - virtual void addObject(StaticANIObject *obj); - virtual int removeObject(StaticANIObject *obj); - virtual void freeItems(); - virtual Common::Array<MovItem *> *method28(StaticANIObject *ani, int x, int y, int flag1, int *rescount); - virtual bool method2C(StaticANIObject *obj, int x, int y); - virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); - virtual void changeCallback(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)); - virtual bool method3C(StaticANIObject *ani, int flag); - virtual bool method44(StaticANIObject *ani, int x, int y); + virtual void attachObject(StaticANIObject *obj); + virtual int detachObject(StaticANIObject *obj); + virtual void detachAllObjects(); + virtual Common::Array<MovItem *> *getPaths(StaticANIObject *ani, int x, int y, int flag1, int *rescount); + virtual bool setPosImmediate(StaticANIObject *obj, int x, int y); + virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); + virtual void setSelFunc(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)); + virtual bool resetPosition(StaticANIObject *ani, int flag); + virtual bool canDropInventory(StaticANIObject *ani, int x, int y); virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); virtual MessageQueue *method50(StaticANIObject *ani, MovArr *movarr, int staticsId); double calcDistance(Common::Point *point, MovGraphLink *link, int fuzzyMatch); - void calcNodeDistancesAndAngles(); - bool findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr); + void recalcLinkParams(); + bool getNearestPoint(int unusedArg, Common::Point *p, MovArr *movarr); MovGraphNode *calcOffset(int ox, int oy); - int getItemIndexByStaticAni(StaticANIObject *ani); + int getObjectIndex(StaticANIObject *ani); Common::Array<MovArr *> *genMovArr(int x, int y, int *arrSize, int flag1, int flag2); void findAllPaths(MovGraphLink *lnk, MovGraphLink *lnk2, Common::Array<MovGraphLink *> &tempObList1, Common::Array<MovGraphLink *> &tempObList2); Common::Array<MovItem *> *calcMovItems(MovArr *movarr1, MovArr *movarr2, int *listCount); @@ -374,10 +374,10 @@ public: Common::Array<MovGraph2Item *> _items2; public: - virtual void addObject(StaticANIObject *obj); - virtual int removeObject(StaticANIObject *obj); - virtual void freeItems(); - virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); + virtual void attachObject(StaticANIObject *obj); + virtual int detachObject(StaticANIObject *obj); + virtual void detachAllObjects(); + virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId); int getItemIndexByGameObjectId(int objectId); @@ -404,10 +404,9 @@ class MctlConnectionPoint : public CObject { public: int _connectionX; int _connectionY; - int _field_C; - int _field_10; - int16 _field_14; - int16 _field_16; + int _mctlflags; + int _mctlstatic; + int16 _mctlmirror; MessageQueue *_messageQueueObj; int _motionControllerObj; diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index 13c653ad09..32aa955a61 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -583,8 +583,8 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) { _aniMan2 = _aniMan; MctlCompound *cmp = getSc2MctlCompoundBySceneId(entrance->_sceneId); cmp->initMovGraph2(); - cmp->addObject(_aniMan); - cmp->setEnabled(); + cmp->attachObject(_aniMan); + cmp->activate(); getGameLoaderInteractionController()->enableFlag24(); setInputDisabled(0); diff --git a/engines/fullpipe/scenes/scene04.cpp b/engines/fullpipe/scenes/scene04.cpp index 4a87ae5b87..c0f0960aba 100644 --- a/engines/fullpipe/scenes/scene04.cpp +++ b/engines/fullpipe/scenes/scene04.cpp @@ -275,7 +275,7 @@ void sceneHandler04_clickButton() { } void sceneHandler04_downLadder(int x, int y) { - g_vars->scene04_ladder->method34(g_fp->_aniMan, x + g_vars->scene04_ladder->_ladder_field_20, y + g_vars->scene04_ladder->_ladder_field_24, 0, 0); + g_vars->scene04_ladder->startMove(g_fp->_aniMan, x + g_vars->scene04_ladder->_ladder_field_20, y + g_vars->scene04_ladder->_ladder_field_24, 0, 0); } void sceneHandler04_walkClimbLadder(ExCommand *ex) { @@ -321,7 +321,7 @@ void sceneHandler04_walkClimbLadder(ExCommand *ex) { g_vars->scene04_ladder->_ladder_field_20 = 0; g_vars->scene04_ladder->_ladder_field_24 = -60; - g_vars->scene04_ladder->addObject(g_fp->_aniMan); + g_vars->scene04_ladder->attachObject(g_fp->_aniMan); if (g_vars->scene04_soundPlaying) { g_vars->scene04_ladder->_ladmovements.front()->movVars->varUpStart = MV_MAN_STARTLADDER2; @@ -337,7 +337,7 @@ void sceneHandler04_walkClimbLadder(ExCommand *ex) { g_fp->_aniMan->_priority = 12; - getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->clearEnabled(); + getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->deactivate(); getGameLoaderInteractionController()->disableFlag24(); } @@ -368,7 +368,7 @@ void sceneHandler04_clickLadder() { } else { if (g_fp->_aniMan->isIdle() && !(g_fp->_aniMan->_flags & 0x100)) { if (abs(1095 - g_vars->scene04_dudePosX) > 1 || abs(434 - g_vars->scene04_dudePosY) > 1) { - MessageQueue *mq = getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->method34(g_fp->_aniMan, 1095, 434, 1, ST_MAN_UP); + MessageQueue *mq = getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->startMove(g_fp->_aniMan, 1095, 434, 1, ST_MAN_UP); if (mq) { ExCommand *ex = new ExCommand(0, 17, MSG_SC4_CLICKLADDER, 0, 0, 0, 1, 0, 0, 0); @@ -533,7 +533,7 @@ void sceneHandler04_manFromBottle() { g_vars->scene04_ladder = 0; - getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->setEnabled(); + getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->activate(); getGameLoaderInteractionController()->enableFlag24(); } @@ -1120,7 +1120,7 @@ void sceneHandler04_leaveLadder(ExCommand *ex) { ex->_messageKind = 0; - mc->setEnabled(); + mc->activate(); getGameLoaderInteractionController()->enableFlag24(); } else { delete mq; @@ -1275,7 +1275,7 @@ void sceneHandler04_winArcade() { g_vars->scene04_objectIsTaken = false; g_vars->scene04_soundPlaying = false; - getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->setEnabled(); + getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->activate(); getGameLoaderInteractionController()->enableFlag24(); diff --git a/engines/fullpipe/scenes/scene06.cpp b/engines/fullpipe/scenes/scene06.cpp index 06ec20dcb5..e9cecc42f0 100644 --- a/engines/fullpipe/scenes/scene06.cpp +++ b/engines/fullpipe/scenes/scene06.cpp @@ -118,7 +118,7 @@ void sceneHandler06_winArcade() { sceneHandler06_setExits(g_fp->_currentScene); - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); } @@ -300,7 +300,7 @@ void sceneHandler06_startAiming() { if (getCurrSceneSc2MotionController()->_isEnabled) g_fp->_updateScreenCallback = sceneHandler06_updateScreenCallback; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_vars->scene06_ballDrop->queueMessageQueue(0); @@ -313,7 +313,7 @@ void sceneHandler06_takeBall() { || abs(452 - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != (0x4000 | ST_MAN_RIGHT)) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1158, 452, 1, (0x4000 | ST_MAN_RIGHT)); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1158, 452, 1, (0x4000 | ST_MAN_RIGHT)); if (mq) { ExCommand *ex = new ExCommand(0, 17, MSG_SC6_TAKEBALL, 0, 0, 0, 1, 0, 0, 0); @@ -562,7 +562,7 @@ int sceneHandler06(ExCommand *ex) { case MSG_SC6_RESTORESCROLL: g_fp->_aniMan2 = g_fp->_aniMan; - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); sceneHandler06_setExits(g_fp->_currentScene); break; diff --git a/engines/fullpipe/scenes/scene08.cpp b/engines/fullpipe/scenes/scene08.cpp index a5f5a8b389..d64df8688e 100644 --- a/engines/fullpipe/scenes/scene08.cpp +++ b/engines/fullpipe/scenes/scene08.cpp @@ -224,7 +224,7 @@ void sceneHandler08_startArcade() { g_vars->scene08_onBelly = false; getGameLoaderInteractionController()->disableFlag24(); - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); g_vars->scene08_batuta->stopAnim_maybe(); @@ -276,7 +276,7 @@ void sceneHandler08_finishArcade() { g_vars->scene08_inArcade = false; getGameLoaderInteractionController()->enableFlag24(); - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); } void sceneHandler08_jumpOff(ExCommand *cmd) { diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp index 99cf0b20fd..ffe8a1b2de 100644 --- a/engines/fullpipe/scenes/scene09.cpp +++ b/engines/fullpipe/scenes/scene09.cpp @@ -271,7 +271,7 @@ void sceneHandler09_spitterClick() { g_vars->scene09_spitter->setPicAniInfo(&info); if (ABS(x - g_fp->_aniMan->_ox) > 1 || ABS(y - g_fp->_aniMan->_oy) > 1) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, x, y, 1, ST_MAN_UP); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, x, y, 1, ST_MAN_UP); if (mq) { ExCommand *ex = new ExCommand(0, 17, MSG_SC9_PLVCLICK, 0, 0, 0, 1, 0, 0, 0); @@ -602,14 +602,14 @@ int sceneHandler09(ExCommand *cmd) { break; case MSG_SC9_FROMLADDER: - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_vars->scene09_dudeIsOnLadder = false; break; case MSG_SC9_TOLADDER: - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_vars->scene09_dudeIsOnLadder = true; diff --git a/engines/fullpipe/scenes/scene10.cpp b/engines/fullpipe/scenes/scene10.cpp index 8c9e0b67d0..3e2a918b64 100644 --- a/engines/fullpipe/scenes/scene10.cpp +++ b/engines/fullpipe/scenes/scene10.cpp @@ -82,7 +82,7 @@ void sceneHandler10_clickGum() { int y = g_vars->scene10_gum->_oy - 48; if (abs(x - g_fp->_aniMan->_ox) > 1 || abs(y - g_fp->_aniMan->_oy) > 1) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, x, y, 1, ST_MAN_RIGHT); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, x, y, 1, ST_MAN_RIGHT); if (mq) { ExCommand *ex = new ExCommand(0, 17, MSG_SC10_CLICKGUM, 0, 0, 0, 1, 0, 0, 0); ex->_excFlags = 2; diff --git a/engines/fullpipe/scenes/scene11.cpp b/engines/fullpipe/scenes/scene11.cpp index 0ce82f5d5f..1fa5cabc15 100644 --- a/engines/fullpipe/scenes/scene11.cpp +++ b/engines/fullpipe/scenes/scene11.cpp @@ -191,7 +191,7 @@ void sceneHandler11_restartMan() { chainObjQueue(0, QU_SC11_RESTARTMAN, 1); getGameLoaderInteractionController()->enableFlag24(); - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); g_vars->scene11_scrollIsEnabled = false; } @@ -234,7 +234,7 @@ int sceneHandler11_updateScreenCallback() { void sceneHandler11_manToSwing() { g_vars->scene11_arcadeIsOn = true; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_aniMan2->hide(); @@ -271,7 +271,7 @@ void sceneHandler11_putABoot() { void sceneHandler11_putBoot() { if (abs(353 - g_fp->_aniMan->_ox) > 1 || abs(498 - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 353, 498, 1, ST_MAN_RIGHT); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 353, 498, 1, ST_MAN_RIGHT); if (mq) { ExCommand *ex = new ExCommand(0, 17, MSG_SC11_PUTBOOT, 0, 0, 0, 1, 0, 0, 0); @@ -299,7 +299,7 @@ void sceneHandler11_jumpFromSwing() { g_vars->scene11_hint->_flags &= 0xFFFB; g_vars->scene11_scrollIsEnabled = false; - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_vars->scene11_swingOldAngle = 0.0; diff --git a/engines/fullpipe/scenes/scene14.cpp b/engines/fullpipe/scenes/scene14.cpp index 446f477133..dc919c6d7f 100644 --- a/engines/fullpipe/scenes/scene14.cpp +++ b/engines/fullpipe/scenes/scene14.cpp @@ -174,7 +174,7 @@ void sceneHandler14_exitScene() { chainQueue(QU_SC14_ENDARCADE, 0); getGameLoaderInteractionController()->disableFlag24(); - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); } void sceneHandler14_showBallMan() { @@ -284,7 +284,7 @@ void sceneHandler14_endArcade() { setInputDisabled(0); getGameLoaderInteractionController()->enableFlag24(); - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); BehaviorEntryInfo *beh = g_fp->_behaviorManager->getBehaviorEntryInfoByMessageQueueDataId(g_vars->scene14_grandma, ST_GMA_SIT, QU_GMA_BLINK); if (beh) @@ -365,7 +365,7 @@ void sceneHandler14_startArcade() { g_fp->_aniMan->_priority = 25; } - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_aniMan2 = 0; @@ -458,7 +458,7 @@ bool sceneHandler14_arcadeProcessClick(ExCommand *cmd) { if (cmd->_sceneClickX > 1237) return false; - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1237, 451, 1, 0); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1237, 451, 1, 0); if (!mq) return false; @@ -473,7 +473,7 @@ bool sceneHandler14_arcadeProcessClick(ExCommand *cmd) { cmd->_messageKind = 0; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); return true; } diff --git a/engines/fullpipe/scenes/scene16.cpp b/engines/fullpipe/scenes/scene16.cpp index df005950d2..5079863b4e 100644 --- a/engines/fullpipe/scenes/scene16.cpp +++ b/engines/fullpipe/scenes/scene16.cpp @@ -298,7 +298,7 @@ void sceneHandler16_drink() { void sceneHandler16_mugClick() { if (abs(310 - g_fp->_aniMan->_ox) >= 1 || abs(449 - g_fp->_aniMan->_oy) >= 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 310, 449, 1, ST_MAN_RIGHT); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 310, 449, 1, ST_MAN_RIGHT); if (mq) { ExCommand *ex = new ExCommand(0, 17, MSG_SC16_MUGCLICK, 0, 0, 0, 1, 0, 0, 0); diff --git a/engines/fullpipe/scenes/scene18and19.cpp b/engines/fullpipe/scenes/scene18and19.cpp index 4f6677876b..5af7ef9043 100644 --- a/engines/fullpipe/scenes/scene18and19.cpp +++ b/engines/fullpipe/scenes/scene18and19.cpp @@ -379,7 +379,7 @@ int scene19_updateCursor() { void sceneHandler18_clickBoard() { if (ABS(967 - g_fp->_aniMan->_ox) > 1 || ABS(379 - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 967, 379, 1, ST_MAN_RIGHT); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 967, 379, 1, ST_MAN_RIGHT); ExCommand *ex = new ExCommand(0, 17, MSG_SC18_MANREADY, 0, 0, 0, 1, 0, 0, 0); ex->_excFlags = 2; diff --git a/engines/fullpipe/scenes/scene22.cpp b/engines/fullpipe/scenes/scene22.cpp index 542834b51a..f51469da69 100644 --- a/engines/fullpipe/scenes/scene22.cpp +++ b/engines/fullpipe/scenes/scene22.cpp @@ -191,7 +191,7 @@ void sceneHandler22_stoolLogic(ExCommand *cmd) { xpos = 841; manId = ST_MAN_RIGHT; LABEL_31: - mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, xpos, 449, 1, manId); + mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, xpos, 449, 1, manId); if (!mq) return; @@ -278,7 +278,7 @@ void sceneHandler22_stoolLogic(ExCommand *cmd) { } } - mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1010, 443, 1, ST_MAN_UP); + mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1010, 443, 1, ST_MAN_UP); if (mq) { mq->addExCommandToEnd(cmd->createClone()); @@ -318,13 +318,13 @@ int sceneHandler22(ExCommand *cmd) { g_vars->scene22_dudeIsOnStool = false; g_vars->scene22_interactionIsDisabled = false; - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); break; case MSG_SC22_ONSTOOL: g_vars->scene22_dudeIsOnStool = true; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0); break; diff --git a/engines/fullpipe/scenes/scene23.cpp b/engines/fullpipe/scenes/scene23.cpp index ded467e438..d6075c271b 100644 --- a/engines/fullpipe/scenes/scene23.cpp +++ b/engines/fullpipe/scenes/scene23.cpp @@ -296,7 +296,7 @@ void sceneHandler23_pushButton(ExCommand *cmd) { if (g_fp->_msgX == 276 && g_fp->_msgY == 438 ) return; - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 276, 438, 1, ST_MAN_RIGHT); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 276, 438, 1, ST_MAN_RIGHT); if (mq) { mq->addExCommandToEnd(cmd->createClone()); @@ -424,7 +424,7 @@ int sceneHandler23(ExCommand *cmd) { case MSG_SC23_FROMSTOOL: g_vars->scene23_isOnStool = false; - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); @@ -438,7 +438,7 @@ int sceneHandler23(ExCommand *cmd) { case MSG_SC23_ONSTOOL: g_vars->scene23_isOnStool = true; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0); diff --git a/engines/fullpipe/scenes/scene25.cpp b/engines/fullpipe/scenes/scene25.cpp index a07330f057..07eda73cf2 100644 --- a/engines/fullpipe/scenes/scene25.cpp +++ b/engines/fullpipe/scenes/scene25.cpp @@ -153,7 +153,7 @@ void sceneHandler25_enterMan() { if (g_vars->scene25_waterIsPresent) { chainQueue(QU_SC25_ENTERUP_WATER, 1); - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); } else { chainQueue(QU_SC25_ENTERUP_FLOOR, 1); } diff --git a/engines/fullpipe/scenes/scene26.cpp b/engines/fullpipe/scenes/scene26.cpp index b9d9161e7d..baed928d00 100644 --- a/engines/fullpipe/scenes/scene26.cpp +++ b/engines/fullpipe/scenes/scene26.cpp @@ -257,7 +257,7 @@ void sceneHandler26_clickVent(StaticANIObject *ani, ExCommand *cmd) { int y = ani->_oy + 61; if (abs(x - g_fp->_aniMan->_ox) > 1 || abs(y - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_UP) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, x, y, 1, ST_MAN_UP); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, x, y, 1, ST_MAN_UP); if (mq) { ExCommand *ex = new ExCommand(0, 17, MSG_SC26_CLICKVENT, 0, 0, 0, 1, 0, 0, 0); diff --git a/engines/fullpipe/scenes/scene27.cpp b/engines/fullpipe/scenes/scene27.cpp index 8ec05caaff..9570d30913 100644 --- a/engines/fullpipe/scenes/scene27.cpp +++ b/engines/fullpipe/scenes/scene27.cpp @@ -159,7 +159,7 @@ void sceneHandler27_driverGiveVent() { g_vars->scene27_driverHasVent = false; - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); @@ -226,7 +226,7 @@ void sceneHandler27_throwBat() { g_fp->_aniMan->startAnim(MV_MAN27_THROWBET, 0, -1); - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0); @@ -247,7 +247,7 @@ void sceneHandler27_clickBat(ExCommand *cmd) { if (ABS(bx - g_fp->_aniMan->_ox) > 1 || ABS(by - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, bx, by, 1, ST_MAN_RIGHT); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, bx, by, 1, ST_MAN_RIGHT); if (mq) { mq->addExCommandToEnd(cmd->createClone()); @@ -501,7 +501,7 @@ void sceneHandler27_batLogic() { default: chainQueue(QU_SC27_RESTARTBETS, 1); - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); diff --git a/engines/fullpipe/scenes/scene28.cpp b/engines/fullpipe/scenes/scene28.cpp index de5a96e70d..75ba2567b2 100644 --- a/engines/fullpipe/scenes/scene28.cpp +++ b/engines/fullpipe/scenes/scene28.cpp @@ -258,7 +258,7 @@ void sceneHandler28_clickLift(int keycode) { if (abs(x - g_fp->_aniMan->_ox) > 1 || abs(472 - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_UP) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, x, 472, 1, ST_MAN_UP); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, x, 472, 1, ST_MAN_UP); if (mq) { ExCommand *ex = new ExCommand(0, 17, MSG_SC28_CLICKLIFT, 0, 0, 0, 1, 0, 0, 0); ex->_excFlags |= 3; diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp index 222a541554..a03671a4d0 100644 --- a/engines/fullpipe/scenes/scene29.cpp +++ b/engines/fullpipe/scenes/scene29.cpp @@ -687,7 +687,7 @@ void sceneHandler29_ballHitCheck() { void sceneHandler29_manFromL() { if (g_vars->scene29_manX < 497 && !g_vars->scene29_scrollingDisabled) { - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_aniMan->changeStatics2(ST_MAN_RIGHT | 0x4000); @@ -700,7 +700,7 @@ void sceneHandler29_manFromL() { } void sceneHandler29_manFromR() { - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); chainQueue(QU_SC29_MANFROM_R, 1); @@ -721,7 +721,7 @@ int sceneHandler29_updateScreenCallback() { } void sceneHandler29_manToL() { - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); chainQueue(QU_SC29_MANTO_L, 1); @@ -737,7 +737,7 @@ void sceneHandler29_manToL() { } void sceneHandler29_manToR() { - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); chainQueue(QU_SC29_MANTO_R, 1); @@ -763,7 +763,7 @@ void sceneHandler29_clickPorter(ExCommand *cmd) { if (ABS(351 - g_vars->scene29_manX) > 1 || ABS(443 - g_vars->scene29_manY) > 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) { if (g_fp->_msgX != 351 || g_fp->_msgY != 443) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 351, 443, 1, ST_MAN_RIGHT); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 351, 443, 1, ST_MAN_RIGHT); if (mq) { mq->addExCommandToEnd(cmd->createClone()); @@ -781,7 +781,7 @@ void sceneHandler29_clickPorter(ExCommand *cmd) { if (ABS(1582 - g_vars->scene29_manX) > 1 || ABS(445 - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != (0x4000 | ST_MAN_RIGHT)) { if (g_fp->_msgX != 1582 || g_fp->_msgY != 445) { - MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1582, 445, 1, (0x4000 | ST_MAN_RIGHT)); + MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1582, 445, 1, (0x4000 | ST_MAN_RIGHT)); if (mq) { mq->addExCommandToEnd(cmd->createClone()); @@ -1001,7 +1001,7 @@ int sceneHandler29(ExCommand *cmd) { g_vars->scene29_reachedFarRight = false; g_vars->scene29_rideBackEnabled = false; - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); break; diff --git a/engines/fullpipe/scenes/scene32.cpp b/engines/fullpipe/scenes/scene32.cpp index 9279db7513..05b78efb3d 100644 --- a/engines/fullpipe/scenes/scene32.cpp +++ b/engines/fullpipe/scenes/scene32.cpp @@ -189,7 +189,7 @@ void sceneHandler32_trySit(ExCommand *cmd) { g_vars->scene32_dudeIsSitting = true; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); } } @@ -236,7 +236,7 @@ void sceneHandler32_ladderLogic(ExCommand *cmd) { g_vars->scene32_dudeOnLadder = false; - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); } @@ -258,7 +258,7 @@ void sceneHandler32_potLogic(ExCommand *cmd) { mq->setFlags(mq->getFlags() | 1); mq->chain(0); - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_vars->scene32_dudeIsSitting = false; @@ -330,7 +330,7 @@ int sceneHandler32(ExCommand *cmd) { case MSG_SC32_ONLADDER: g_vars->scene32_dudeOnLadder = true; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); break; diff --git a/engines/fullpipe/scenes/scene34.cpp b/engines/fullpipe/scenes/scene34.cpp index 1c8c8b4855..32fb192756 100644 --- a/engines/fullpipe/scenes/scene34.cpp +++ b/engines/fullpipe/scenes/scene34.cpp @@ -115,7 +115,7 @@ int scene34_updateCursor() { } void sceneHandler34_leaveBoard() { - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); @@ -124,7 +124,7 @@ void sceneHandler34_leaveBoard() { } void sceneHandler34_onBoard() { - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0); @@ -149,7 +149,7 @@ void sceneHandler34_hideStool() { } void sceneHandler34_climb() { - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0); @@ -287,7 +287,7 @@ void sceneHandler34_showStool() { } void sceneHandler34_unclimb() { - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); @@ -323,7 +323,7 @@ int sceneHandler34(ExCommand *cmd) { case MSG_SC34_FROMCACTUS: g_vars->scene34_dudeOnCactus = false; - getCurrSceneSc2MotionController()->setEnabled(); + getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); @@ -381,7 +381,7 @@ int sceneHandler34(ExCommand *cmd) { case MSG_SC34_ONCACTUS: g_vars->scene34_dudeOnCactus = true; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0); diff --git a/engines/fullpipe/scenes/sceneFinal.cpp b/engines/fullpipe/scenes/sceneFinal.cpp index d0040463ef..8b3ecb1025 100644 --- a/engines/fullpipe/scenes/sceneFinal.cpp +++ b/engines/fullpipe/scenes/sceneFinal.cpp @@ -97,7 +97,7 @@ void sceneHandlerFinal_goto2() { void sceneHandlerFinal_startFinal() { g_vars->sceneFinal_var01 = 1; - getCurrSceneSc2MotionController()->clearEnabled(); + getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_aniMan2 = 0; diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 55305c4b42..ffbe3aecaf 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -4185,7 +4185,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { FANMADE_L("Grostesteing: Plus Mechant que Jamais", "ec9a97ccb134f69249f6ea8b16c13d8e", 1500, "b869f5f11bfe2ab5f67f4f0c618f2ce1", 464657, Common::FR_FRA), // FIXME: Accent FANMADE("Humanoid Demo", "97d8331293a6d57e8bad58c1efc89a63", 624, "fb354b9abe64011b12159e45d724633f", 452320), FANMADE("Island of Secrets Demo 0.3", "61279176c3e4530fec9b578877aecda7", 504, "7f4ed7a81b86bea22c62bc98e6d9ec39", 197790), - FANMADE("Jim’s Quest 1: The Phantom Thesis", "0af50be1d3f0cb77a09137709a76ef4f", 960, "9c042c136548b20d9183495668e03526", 496446), + FANMADE("Jim's Quest 1: The Phantom Thesis", "0af50be1d3f0cb77a09137709a76ef4f", 960, "9c042c136548b20d9183495668e03526", 496446), FANMADE("King's Quest II SCI Pre-Alpha Version", "cdea1c081022e7697a1afffb1d2f9f6a", 2646, "fb2ce39002c3e05f3d83533638dea105", 2310356), FANMADE("Knight's Quest Demo 1.0", "5e816edf993956752ed06fccfeeae6d9", 1260, "959321f88a22905fa1f8c6d897874744", 703836), FANMADE("LockerGnome Quest", "3eeff9130206cad0c4e1551e2b9dd2c5", 420, "ae05ca90806fd90cc43f147c82d3547c", 158906), diff --git a/engines/scumm/POTFILES b/engines/scumm/POTFILES index 6d10537d3c..246f14d3f0 100644 --- a/engines/scumm/POTFILES +++ b/engines/scumm/POTFILES @@ -1,5 +1,6 @@ engines/scumm/dialogs.cpp engines/scumm/help.cpp +engines/scumm/input.cpp engines/scumm/scumm.cpp engines/scumm/players/player_v3m.cpp engines/scumm/players/player_v5m.cpp diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp index 86048af57c..3ce053f6bc 100644 --- a/engines/scumm/input.cpp +++ b/engines/scumm/input.cpp @@ -23,6 +23,7 @@ #include "common/config-manager.h" #include "common/events.h" #include "common/system.h" +#include "common/translation.h" #include "gui/message.h" #include "gui/gui-manager.h" @@ -568,9 +569,9 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) { lastKeyHit.hasFlags(Common::KBD_CTRL)) { _snapScroll ^= 1; if (_snapScroll) { - messageDialog("Snap scroll on"); + messageDialog(_("Snap scroll on")); } else { - messageDialog("Snap scroll off"); + messageDialog(_("Snap scroll off")); } if (VAR_CAMERA_FAST_X != 0xFF) @@ -583,7 +584,7 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) { vol--; // Display the music volume - ValueDisplayDialog dlg("Music volume: ", 0, 16, vol, ']', '['); + ValueDisplayDialog dlg(_("Music volume: "), 0, 16, vol, ']', '['); vol = runDialog(dlg); vol *= 16; @@ -600,7 +601,7 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) { _defaultTalkDelay++; // Display the talk speed - ValueDisplayDialog dlg("Subtitle speed: ", 0, 9, 9 - _defaultTalkDelay, '+', '-'); + ValueDisplayDialog dlg(_("Subtitle speed: "), 0, 9, 9 - _defaultTalkDelay, '+', '-'); _defaultTalkDelay = 9 - runDialog(dlg); // Save the new talkspeed value to ConfMan diff --git a/engines/scumm/scumm-md5.h b/engines/scumm/scumm-md5.h index a836cf12bc..c85073b877 100644 --- a/engines/scumm/scumm-md5.h +++ b/engines/scumm/scumm-md5.h @@ -1,5 +1,5 @@ /* - This file was generated by the md5table tool on Sun Jun 28 03:19:52 2015 + This file was generated by the md5table tool on Thu Aug 27 23:44:49 2015 DO NOT EDIT MANUALLY! */ @@ -288,6 +288,7 @@ static const MD5Table md5table[] = { { "62b8c16b6db226ba95aaa8be73f9885c", "indy3", "EGA", "EGA", -1, Common::ES_ESP, Common::kPlatformAmiga }, { "632d2fddb8ba97723fa15334763ae857", "thinker1", "", "", 33270, Common::EN_ANY, Common::kPlatformWindows }, { "63fdcdc95cdeea00060883aed38e5504", "PuttTime", "HE 85", "", -1, Common::EN_ANY, Common::kPlatformUnknown }, + { "64a22be96d679018696e5c8d3ca8b71d", "freddi", "HE 73", "", 26375, Common::JA_JPN, Common::kPlatformWindows }, { "6508fd55530e6915507e1cc37f7f045d", "indy3", "EGA", "EGA", -1, Common::EN_ANY, Common::kPlatformDOS }, { "65563295c3a06493351870f20a1630cf", "spyozon", "HE CUP", "Preview", 5235008, Common::UNK_LANG, Common::kPlatformUnknown }, { "659942b9a6b519f123a13cca3c333a13", "jungle", "", "", -1, Common::EN_ANY, Common::kPlatformMacintosh }, diff --git a/engines/sherlock/detection_tables.h b/engines/sherlock/detection_tables.h index d028c4af6c..6567369528 100644 --- a/engines/sherlock/detection_tables.h +++ b/engines/sherlock/detection_tables.h @@ -162,7 +162,7 @@ static const SherlockGameDescription gameDescriptions[] = { "rosetattoo", "CD", AD_ENTRY1s("talk.lib", "22e8e6406dd2fbbb238c9898928df42e", 770756), - Common::EN_ANY, + Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO3(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TRANSPARENT_WINDOWS) diff --git a/engines/sherlock/events.cpp b/engines/sherlock/events.cpp index c6a223b6d9..4b0b7dfb3f 100644 --- a/engines/sherlock/events.cpp +++ b/engines/sherlock/events.cpp @@ -263,6 +263,10 @@ void Events::setFrameRate(int newRate) { _frameRate = newRate; } +void Events::toggleSpeed() { + _frameRate = (_frameRate == GAME_FRAME_RATE) ? GAME_FRAME_RATE * 2 : GAME_FRAME_RATE; +} + bool Events::checkForNextFrameCounter() { // Check for next game frame uint32 milli = g_system->getMillis(); @@ -346,7 +350,8 @@ bool Events::delay(uint32 time, bool interruptable) { g_system->delayMillis(time); bool result = !(interruptable && (kbHit() || _pressed || _vm->shouldQuit())); - clearEvents(); + if (interruptable) + clearEvents(); return result; } else { // For long periods go into a loop where we delay by 10ms at a time and then diff --git a/engines/sherlock/events.h b/engines/sherlock/events.h index e13ef18822..711804dfdf 100644 --- a/engines/sherlock/events.h +++ b/engines/sherlock/events.h @@ -149,6 +149,11 @@ public: void setFrameRate(int newRate); /** + * Toggle between standard game speed and an "extra fast" mode + */ + void toggleSpeed(); + + /** * Return the current game frame number */ uint32 getFrameCounter() const { return _frameCounter; } diff --git a/engines/sherlock/fonts.cpp b/engines/sherlock/fonts.cpp index b607891d06..4d0991a47c 100644 --- a/engines/sherlock/fonts.cpp +++ b/engines/sherlock/fonts.cpp @@ -62,6 +62,43 @@ void Fonts::setFont(int fontNum) { // load font data _font = new ImageFile(fontFilename); + + if (IS_SERRATED_SCALPEL) { + if (_vm->getLanguage() == Common::ES_ESP) { + if (_fontNumber == 1) { + // Create a new character - inverted exclamation mark (0x88) + // Seems this wasn't included originally, but some text has it + // This was obviously not done in the original game interpreter + ImageFrame &frameExclamationMark = (*_font)[0]; // get actual exclamation mark + ImageFrame frameRevExclamationMark; + + frameRevExclamationMark._width = frameExclamationMark._width; + frameRevExclamationMark._height = frameExclamationMark._height; + frameRevExclamationMark._paletteBase = frameExclamationMark._paletteBase; + frameRevExclamationMark._rleEncoded = frameExclamationMark._rleEncoded; + frameRevExclamationMark._size = frameExclamationMark._size; + frameRevExclamationMark._frame.create(frameExclamationMark._width, frameExclamationMark._height, Graphics::PixelFormat::createFormatCLUT8()); + + byte *frameExclMarkPixels = (byte *)frameExclamationMark._frame.getPixels(); + byte *frameRevExclMarkPixels = (byte *)frameRevExclamationMark._frame.getPixels(); + + uint16 revExclMarkY = frameExclamationMark._height - 1; + frameRevExclMarkPixels += frameExclamationMark._width * (frameExclamationMark._height - 1); + for (uint16 exclMarkY = 0; exclMarkY < frameExclamationMark._height; exclMarkY++) { + memcpy(frameRevExclMarkPixels, frameExclMarkPixels, frameExclamationMark._width); + revExclMarkY--; + frameRevExclMarkPixels -= frameExclamationMark._width; + frameExclMarkPixels += frameExclamationMark._width; + } + + frameRevExclamationMark._offset.x = frameExclamationMark._offset.x; + frameRevExclamationMark._offset.y = frameExclamationMark._offset.y + 1; + + _font->push_back(frameRevExclamationMark); + } + } + } + } else { // 3DO switch (fontNum) { @@ -81,7 +118,7 @@ void Fonts::setFont(int fontNum) { } _charCount = _font->size(); - + // Iterate through the frames to find the widest and tallest font characters _fontHeight = _widestChar = 0; for (uint idx = 0; idx < _charCount; ++idx) { @@ -118,6 +155,24 @@ inline byte Fonts::translateChar(byte c) { return 135; // and this for SH1 default: if (IS_SERRATED_SCALPEL) { + if (_vm->getLanguage() == Common::ES_ESP) { + if (_fontNumber == 1) { + // Special workarounds for translated game text, which was skipped because of effectively a bug + // This was not done in the original interpreter + // It seems at least the inverted exclamation mark was skipped by the original interpreter / + // wasn't shown at all. + // This character is used for example in the alley room, when talking with the inspector after + // searching the corpse. "[0xAD]Claro! Mi experiencia profesional revela que esta mujer fue asesinada..." + // The same text gets put inside Watson's journal as well and should be on page 10 right after + // talking with the inspector. For further study see bug #6931 + // Inverted question mark was also skipped, but at least that character is inside the font already. + if (c == 0xAD) { + // inverted exclamation mark + return 0x88; // our own font character, created during setFont() + } + // Inverted question mask is 0x86 (mapped from 0x88) + } + } if (c >= 0x80) { // German SH1 version did this, but not German SH2 c--; } diff --git a/engines/sherlock/image_file.cpp b/engines/sherlock/image_file.cpp index 1a1f295c5c..971980a2ac 100644 --- a/engines/sherlock/image_file.cpp +++ b/engines/sherlock/image_file.cpp @@ -1049,10 +1049,12 @@ void StreamingImageFile::close() { _stream = nullptr; _frameNumber = -1; _active = false; + _imageFrame._frame.free(); } bool StreamingImageFile::getNextFrame() { // Don't proceed if we're already at the end of the stream + assert(_stream); if (_stream->pos() >= _stream->size()) { _active = false; return false; @@ -1079,6 +1081,9 @@ bool StreamingImageFile::getNextFrame() { _imageFrame._size = frameStream->readUint16LE() - 11; _imageFrame._rleMarker = frameStream->readByte(); + // Free the previous frame + _imageFrame._frame.free(); + // Decode the frame if (_compressed) { delete frameStream; diff --git a/engines/sherlock/journal.cpp b/engines/sherlock/journal.cpp index e442a3c903..e443b6f727 100644 --- a/engines/sherlock/journal.cpp +++ b/engines/sherlock/journal.cpp @@ -24,6 +24,7 @@ #include "sherlock/scalpel/scalpel.h" #include "sherlock/scalpel/scalpel_fixed_text.h" #include "sherlock/scalpel/scalpel_journal.h" +#include "sherlock/scalpel/scalpel_talk.h" #include "sherlock/tattoo/tattoo.h" #include "sherlock/tattoo/tattoo_fixed_text.h" #include "sherlock/tattoo/tattoo_journal.h" @@ -485,9 +486,9 @@ void Journal::loadJournalFile(bool alreadyLoaded) { // Copy text from the place until either the reply ends, a comment // {} block is started, or a control character is encountered journalString += c; - do { + while (*replyP && *replyP < opcodes[0] && *replyP != '{' && *replyP != '}') { journalString += *replyP++; - } while (*replyP && *replyP < opcodes[0] && *replyP != '{' && *replyP != '}'); + } commentJustPrinted = false; } @@ -525,6 +526,9 @@ void Journal::loadJournalFile(bool alreadyLoaded) { else journalString += people._characters[c]._name; + if (IS_SERRATED_SCALPEL && _vm->getLanguage() == Common::DE_DEU) + Scalpel::ScalpelTalk::skipBadText(replyP); + const byte *strP = replyP; byte v; do { diff --git a/engines/sherlock/music.cpp b/engines/sherlock/music.cpp index 7ab5cd4b4f..8b8f359de3 100644 --- a/engines/sherlock/music.cpp +++ b/engines/sherlock/music.cpp @@ -225,6 +225,7 @@ Music::Music(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) { _musicOn = false; _midiOption = false; _musicVolume = 0; + _midiMusicData = nullptr; if (IS_3DO) { // 3DO - uses digital samples for music @@ -470,8 +471,8 @@ bool Music::playMusic(const Common::String &name) { } } + _midiMusicData = midiMusicData; _midiParser->loadMusic(midiMusicData, midiMusicDataSize); - } else { // 3DO: sample based Audio::AudioStream *musicStream; @@ -517,6 +518,8 @@ void Music::freeSong() { _midiParser->unloadMusic(); } + delete[] _midiMusicData; + _midiMusicData = nullptr; _musicPlaying = false; } diff --git a/engines/sherlock/music.h b/engines/sherlock/music.h index 72a5f48833..186e2aa2dc 100644 --- a/engines/sherlock/music.h +++ b/engines/sherlock/music.h @@ -68,6 +68,7 @@ private: MidiDriver *_midiDriver; Audio::SoundHandle _digitalMusicHandle; MusicType _musicType; + byte *_midiMusicData; /** * Play the specified music resource diff --git a/engines/sherlock/objects.cpp b/engines/sherlock/objects.cpp index 093f666a46..0856c226f1 100644 --- a/engines/sherlock/objects.cpp +++ b/engines/sherlock/objects.cpp @@ -539,7 +539,7 @@ int BaseObject::checkNameForCodes(const Common::String &name, FixedTextActionId // G: Have object go somewhere // A: Add onto existing co-ordinates Common::String sx(name.c_str() + 2, name.c_str() + 5); - Common::String sy(name.c_str() + 6, name.c_str() + 9); + Common::String sy(name.c_str() + 5, name.c_str() + 8); if (ch == 'G') _position = Common::Point(atoi(sx.c_str()), atoi(sy.c_str())); diff --git a/engines/sherlock/people.cpp b/engines/sherlock/people.cpp index 09dba25475..8057e26204 100644 --- a/engines/sherlock/people.cpp +++ b/engines/sherlock/people.cpp @@ -185,7 +185,8 @@ void People::reset() { if (IS_SERRATED_SCALPEL) { p._type = _holmesOn ? CHARACTER : HIDDEN; - p._position = Point32(100 * FIXED_INT_MULTIPLIER, 110 * FIXED_INT_MULTIPLIER); + if (!saves._justLoaded) + p._position = Point32(100 * FIXED_INT_MULTIPLIER, 110 * FIXED_INT_MULTIPLIER); } else if (!talk._scriptMoreFlag && !saves._justLoaded) { p._type = (idx == 0) ? CHARACTER : INVALID; p._position = Point32(36 * FIXED_INT_MULTIPLIER, 29 * FIXED_INT_MULTIPLIER); diff --git a/engines/sherlock/scalpel/scalpel.cpp b/engines/sherlock/scalpel/scalpel.cpp index 17e60f5365..b17f38b218 100644 --- a/engines/sherlock/scalpel/scalpel.cpp +++ b/engines/sherlock/scalpel/scalpel.cpp @@ -102,78 +102,78 @@ static const byte MAP_SEQUENCES[3][MAX_FRAME] = { struct PeopleData { const char *portrait; - const char *name; + int fixedTextId; byte stillSequences[MAX_TALK_SEQUENCES]; byte talkSequences[MAX_TALK_SEQUENCES]; }; const PeopleData PEOPLE_DATA[MAX_PEOPLE] = { - { "HOLM", "Sherlock Holmes", { 1, 0, 0 }, { 1, 0, 0 } }, - { "WATS", "Dr. Watson", { 6, 0, 0 }, { 5, 5, 6, 7, 8, 7, 8, 6, 0, 0 } }, - { "LEST", "Inspector Lestrade", { 4, 0, 0 }, { 2, 0, 0 } }, - { "CON1", "Constable O'Brien", { 2, 0, 0 }, { 1, 0, 0 } }, - { "CON2", "Constable Lewis", { 2, 0, 0 }, { 1, 0, 0 } }, - { "SHEI", "Sheila Parker", { 2, 0, 0 }, { 2, 3, 0, 0 } }, - { "HENR", "Henry Carruthers", { 3, 0, 0 }, { 3, 0, 0 } }, - { "LESL", "Lesley", { 9, 0, 0 }, { 1, 2, 3, 2, 1, 2, 3, 0, 0 } }, - { "USH1", "An Usher", { 13, 0, 0 }, { 13, 14, 0, 0 } }, - { "USH2", "An Usher", { 2, 0, 0 }, { 2, 0, 0 } }, - { "FRED", "Fredrick Epstein", { 4, 0, 0 }, { 1, 2, 3, 4, 3, 4, 3, 2, 0, 0 } }, - { "WORT", "Mrs. Worthington", { 9, 0, 0 }, { 8, 0, 0 } }, - { "COAC", "The Coach", { 2, 0, 0 }, { 1, 2, 3, 4, 5, 4, 3, 2, 0, 0 } }, - { "PLAY", "A Player", { 8, 0, 0 }, { 7, 8, 0, 0 } }, - { "WBOY", "Tim", { 13, 0, 0 }, { 12, 13, 0, 0 } }, - { "JAME", "James Sanders", { 6, 0, 0 }, { 3, 4, 0, 0 } }, - { "BELL", "Belle", { 1, 0, 0 }, { 4, 5, 0, 0 } }, - { "GIRL", "Cleaning Girl", { 20, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 20, 20, 0, 0 } }, - { "EPST", "Fredrick Epstein", { 17, 0, 0 }, { 16, 17, 18, 18, 18, 17, 17, 0, 0 } }, - { "WIGG", "Wiggins", { 3, 0, 0 }, { 2, 3, 0, 0 } }, - { "PAUL", "Paul", { 2, 0, 0 }, { 1, 2, 0, 0 } }, - { "BART", "The Bartender", { 1, 0, 0 }, { 1, 0, 0 } }, - { "DIRT", "A Dirty Drunk", { 1, 0, 0 }, { 1, 0, 0 } }, - { "SHOU", "A Shouting Drunk", { 1, 0, 0 }, { 1, 0, 0 } }, - { "STAG", "A Staggering Drunk", { 1, 0, 0 }, { 1, 0, 0 } }, - { "BOUN", "The Bouncer", { 1, 0, 0 }, { 1, 0, 0 } }, - { "SAND", "James Sanders", { 6, 0, 0 }, { 5, 6, 0, 0 } }, - { "CORO", "The Coroner", { 6, 0, 0 }, { 4, 5, 0, 0 } }, - { "EQUE", "Reginald Snipes", { 1, 0, 0 }, { 1, 0, 0 } }, - { "GEOR", "George Blackwood", { 1, 0, 0 }, { 1, 0, 0 } }, - { "LARS", "Lars", { 7, 0, 0 }, { 5, 6, 0, 0 } }, - { "PARK", "Sheila Parker", { 1, 0, 0 }, { 1, 0, 0 } }, - { "CHEM", "The Chemist", { 8, 0, 0 }, { 8, 9, 0, 0 } }, - { "GREG", "Inspector Gregson", { 6, 0, 0 }, { 5, 6, 0, 0 } }, - { "LAWY", "Jacob Farthington", { 1, 0, 0 }, { 1, 0, 0 } }, - { "MYCR", "Mycroft", { 1, 0, 0 }, { 1, 0, 0 } }, - { "SHER", "Old Sherman", { 7, 0, 0 }, { 7, 8, 0, 0 } }, - { "CHMB", "Richard", { 1, 0, 0 }, { 1, 0, 0 } }, - { "BARM", "The Barman", { 1, 0, 0 }, { 1, 0, 0 } }, - { "DAND", "A Dandy Player", { 1, 0, 0 }, { 1, 0, 0 } }, - { "ROUG", "A Rough-looking Player", { 1, 0, 0 }, { 1, 0, 0 } }, - { "SPEC", "A Spectator", { 1, 0, 0 }, { 1, 0, 0 } }, - { "HUNT", "Robert Hunt", { 1, 0, 0 }, { 1, 0, 0 } }, - { "VIOL", "Violet", { 3, 0, 0 }, { 3, 4, 0, 0 } }, - { "PETT", "Pettigrew", { 1, 0, 0 }, { 1, 0, 0 } }, - { "APPL", "Augie", { 8, 0, 0 }, { 14, 15, 0, 0 } }, - { "ANNA", "Anna Carroway", { 16, 0, 0 }, { 3, 4, 5, 6, 0, 0 } }, - { "GUAR", "A Guard", { 1, 0, 0 }, { 4, 5, 6, 0, 0 } }, - { "ANTO", "Antonio Caruso", { 8, 0, 0 }, { 7, 8, 0, 0 } }, - { "TOBY", "Toby the Dog", { 1, 0, 0 }, { 1, 0, 0 } }, - { "KING", "Simon Kingsley", { 13, 0, 0 }, { 13, 14, 0, 0 } }, - { "ALFR", "Alfred", { 2, 0, 0 }, { 2, 3, 0, 0 } }, - { "LADY", "Lady Brumwell", { 1, 0, 0 }, { 3, 4, 0, 0 } }, - { "ROSA", "Madame Rosa", { 1, 0, 0 }, { 1, 30, 0, 0 } }, - { "LADB", "Lady Brumwell", { 1, 0, 0 }, { 3, 4, 0, 0 } }, - { "MOOR", "Joseph Moorehead", { 1, 0, 0 }, { 1, 0, 0 } }, - { "BEAL", "Mrs. Beale", { 5, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 0, 0 } }, - { "LION", "Felix", { 1, 0, 0 }, { 1, 0, 0 } }, - { "HOLL", "Hollingston", { 1, 0, 0 }, { 1, 0, 0 } }, - { "CALL", "Constable Callaghan", { 1, 0, 0 }, { 1, 0, 0 } }, - { "JERE", "Sergeant Duncan", { 2, 0, 0 }, { 1, 1, 2, 2, 0, 0 } }, - { "LORD", "Lord Brumwell", { 1, 0, 0 }, { 9, 10, 0, 0 } }, - { "NIGE", "Nigel Jaimeson", { 1, 0, 0 }, { 1, 2, 0, 138, 3, 4, 0, 138, 0, 0 } }, - { "JONA", "Jonas", { 1, 0, 0 }, { 1, 8, 0, 0 } }, - { "DUGA", "Constable Dugan", { 1, 0, 0 }, { 1, 0, 0 } }, - { "INSP", "Inspector Lestrade", { 4, 0, 0 }, { 2, 0, 0 } } + { "HOLM", kFixedText_People_SherlockHolmes, { 1, 0, 0 }, { 1, 0, 0 } }, + { "WATS", kFixedText_People_DrWatson, { 6, 0, 0 }, { 5, 5, 6, 7, 8, 7, 8, 6, 0, 0 } }, + { "LEST", kFixedText_People_InspectorLestrade, { 4, 0, 0 }, { 2, 0, 0 } }, + { "CON1", kFixedText_People_ConstableOBrien, { 2, 0, 0 }, { 1, 0, 0 } }, + { "CON2", kFixedText_People_ConstableLewis, { 2, 0, 0 }, { 1, 0, 0 } }, + { "SHEI", kFixedText_People_SheilaParker, { 2, 0, 0 }, { 2, 3, 0, 0 } }, + { "HENR", kFixedText_People_HenryCarruthers, { 3, 0, 0 }, { 3, 0, 0 } }, + { "LESL", kFixedText_People_Lesley, { 9, 0, 0 }, { 1, 2, 3, 2, 1, 2, 3, 0, 0 } }, + { "USH1", kFixedText_People_AnUsher, { 13, 0, 0 }, { 13, 14, 0, 0 } }, + { "USH2", kFixedText_People_AnUsher, { 2, 0, 0 }, { 2, 0, 0 } }, + { "FRED", kFixedText_People_FredrickEpstein, { 4, 0, 0 }, { 1, 2, 3, 4, 3, 4, 3, 2, 0, 0 } }, + { "WORT", kFixedText_People_MrsWorthington, { 9, 0, 0 }, { 8, 0, 0 } }, + { "COAC", kFixedText_People_TheCoach, { 2, 0, 0 }, { 1, 2, 3, 4, 5, 4, 3, 2, 0, 0 } }, + { "PLAY", kFixedText_People_APlayer, { 8, 0, 0 }, { 7, 8, 0, 0 } }, + { "WBOY", kFixedText_People_Tim, { 13, 0, 0 }, { 12, 13, 0, 0 } }, + { "JAME", kFixedText_People_JamesSanders, { 6, 0, 0 }, { 3, 4, 0, 0 } }, + { "BELL", kFixedText_People_Belle, { 1, 0, 0 }, { 4, 5, 0, 0 } }, + { "GIRL", kFixedText_People_CleaningGirl, { 20, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 20, 20, 0, 0 } }, + { "EPST", kFixedText_People_FredrickEpstein, { 17, 0, 0 }, { 16, 17, 18, 18, 18, 17, 17, 0, 0 } }, + { "WIGG", kFixedText_People_Wiggins, { 3, 0, 0 }, { 2, 3, 0, 0 } }, + { "PAUL", kFixedText_People_Paul, { 2, 0, 0 }, { 1, 2, 0, 0 } }, + { "BART", kFixedText_People_TheBartender, { 1, 0, 0 }, { 1, 0, 0 } }, + { "DIRT", kFixedText_People_ADirtyDrunk, { 1, 0, 0 }, { 1, 0, 0 } }, + { "SHOU", kFixedText_People_AShoutingDrunk, { 1, 0, 0 }, { 1, 0, 0 } }, + { "STAG", kFixedText_People_AStaggeringDrunk, { 1, 0, 0 }, { 1, 0, 0 } }, + { "BOUN", kFixedText_People_TheBouncer, { 1, 0, 0 }, { 1, 0, 0 } }, + { "SAND", kFixedText_People_JamesSanders, { 6, 0, 0 }, { 5, 6, 0, 0 } }, + { "CORO", kFixedText_People_TheCoroner, { 6, 0, 0 }, { 4, 5, 0, 0 } }, + { "EQUE", kFixedText_People_ReginaldSnipes, { 1, 0, 0 }, { 1, 0, 0 } }, + { "GEOR", kFixedText_People_GeorgeBlackwood, { 1, 0, 0 }, { 1, 0, 0 } }, + { "LARS", kFixedText_People_Lars, { 7, 0, 0 }, { 5, 6, 0, 0 } }, + { "PARK", kFixedText_People_SheilaParker, { 1, 0, 0 }, { 1, 0, 0 } }, + { "CHEM", kFixedText_People_TheChemist, { 8, 0, 0 }, { 8, 9, 0, 0 } }, + { "GREG", kFixedText_People_InspectorGregson, { 6, 0, 0 }, { 5, 6, 0, 0 } }, + { "LAWY", kFixedText_People_JacobFarthington, { 1, 0, 0 }, { 1, 0, 0 } }, + { "MYCR", kFixedText_People_Mycroft, { 1, 0, 0 }, { 1, 0, 0 } }, + { "SHER", kFixedText_People_OldSherman, { 7, 0, 0 }, { 7, 8, 0, 0 } }, + { "CHMB", kFixedText_People_Richard, { 1, 0, 0 }, { 1, 0, 0 } }, + { "BARM", kFixedText_People_TheBarman, { 1, 0, 0 }, { 1, 0, 0 } }, + { "DAND", kFixedText_People_ADandyPlayer, { 1, 0, 0 }, { 1, 0, 0 } }, + { "ROUG", kFixedText_People_ARoughlookingPlayer, { 1, 0, 0 }, { 1, 0, 0 } }, + { "SPEC", kFixedText_People_ASpectator, { 1, 0, 0 }, { 1, 0, 0 } }, + { "HUNT", kFixedText_People_RobertHunt, { 1, 0, 0 }, { 1, 0, 0 } }, + { "VIOL", kFixedText_People_Violet, { 3, 0, 0 }, { 3, 4, 0, 0 } }, + { "PETT", kFixedText_People_Pettigrew, { 1, 0, 0 }, { 1, 0, 0 } }, + { "APPL", kFixedText_People_Augie, { 8, 0, 0 }, { 14, 15, 0, 0 } }, + { "ANNA", kFixedText_People_AnnaCarroway, { 16, 0, 0 }, { 3, 4, 5, 6, 0, 0 } }, + { "GUAR", kFixedText_People_AGuard, { 1, 0, 0 }, { 4, 5, 6, 0, 0 } }, + { "ANTO", kFixedText_People_AntonioCaruso, { 8, 0, 0 }, { 7, 8, 0, 0 } }, + { "TOBY", kFixedText_People_TobyTheDog, { 1, 0, 0 }, { 1, 0, 0 } }, + { "KING", kFixedText_People_SimonKingsley, { 13, 0, 0 }, { 13, 14, 0, 0 } }, + { "ALFR", kFixedText_People_Alfred, { 2, 0, 0 }, { 2, 3, 0, 0 } }, + { "LADY", kFixedText_People_LadyBrumwell, { 1, 0, 0 }, { 3, 4, 0, 0 } }, + { "ROSA", kFixedText_People_MadameRosa, { 1, 0, 0 }, { 1, 30, 0, 0 } }, + { "LADB", kFixedText_People_LadyBrumwell, { 1, 0, 0 }, { 3, 4, 0, 0 } }, + { "MOOR", kFixedText_People_JosephMoorehead, { 1, 0, 0 }, { 1, 0, 0 } }, + { "BEAL", kFixedText_People_MrsBeale, { 5, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 0, 0 } }, + { "LION", kFixedText_People_Felix, { 1, 0, 0 }, { 1, 0, 0 } }, + { "HOLL", kFixedText_People_Hollingston, { 1, 0, 0 }, { 1, 0, 0 } }, + { "CALL", kFixedText_People_ConstableCallaghan, { 1, 0, 0 }, { 1, 0, 0 } }, + { "JERE", kFixedText_People_SergeantDuncan, { 2, 0, 0 }, { 1, 1, 2, 2, 0, 0 } }, + { "LORD", kFixedText_People_LordBrumwell, { 1, 0, 0 }, { 9, 10, 0, 0 } }, + { "NIGE", kFixedText_People_NigelJaimeson, { 1, 0, 0 }, { 1, 2, 0, 138, 3, 4, 0, 138, 0, 0 } }, + { "JONA", kFixedText_People_Jonas, { 1, 0, 0 }, { 1, 8, 0, 0 } }, + { "DUGA", kFixedText_People_ConstableDugan, { 1, 0, 0 }, { 1, 0, 0 } }, + { "INSP", kFixedText_People_InspectorLestrade, { 4, 0, 0 }, { 2, 0, 0 } } }; uint INFO_BLACK; @@ -295,9 +295,14 @@ void ScalpelEngine::initialize() { loadInventory(); // Set up list of people - for (int idx = 0; idx < MAX_PEOPLE; ++idx) - _people->_characters.push_back(PersonData(PEOPLE_DATA[idx].name, PEOPLE_DATA[idx].portrait, + ScalpelFixedText &fixedText = *(ScalpelFixedText *)_fixedText; + const char *peopleNamePtr = nullptr; + + for (int idx = 0; idx < MAX_PEOPLE; ++idx) { + peopleNamePtr = fixedText.getText(PEOPLE_DATA[idx].fixedTextId); + _people->_characters.push_back(PersonData(peopleNamePtr, PEOPLE_DATA[idx].portrait, PEOPLE_DATA[idx].stillSequences, PEOPLE_DATA[idx].talkSequences)); + } _animation->setPrologueNames(&PROLOGUE_NAMES[0], PROLOGUE_NAMES_COUNT); _animation->setPrologueFrames(&PROLOGUE_FRAMES[0][0], 6, 9); diff --git a/engines/sherlock/scalpel/scalpel_fixed_text.cpp b/engines/sherlock/scalpel/scalpel_fixed_text.cpp index 63f84d68c6..372fbc3e7e 100644 --- a/engines/sherlock/scalpel/scalpel_fixed_text.cpp +++ b/engines/sherlock/scalpel/scalpel_fixed_text.cpp @@ -55,6 +55,11 @@ static const char *const fixedTextEN[] = { "Backward", "Forward", "Text Not Found !", + // SH1: Press key text + "Press any Key for More.", + "P", + "Press any Key to Continue.", + "P", // SH1: Initial Inventory "A message requesting help", "A number of business cards", @@ -68,11 +73,67 @@ static const char *const fixedTextEN[] = { "Tarot Cards", "An ornate key", "A pawn ticket", - // SH2: Verbs - "Open", - "Look", - "Talk", - "Journal" + // SH1: People names + "Sherlock Holmes", + "Dr. Watson", + "Inspector Lestrade", + "Constable O'Brien", + "Constable Lewis", + "Sheila Parker", + "Henry Carruthers", + "Lesley", + "An Usher", + "Fredrick Epstein", + "Mrs. Worthington", + "The Coach", + "A Player", + "Tim", + "James Sanders", + "Belle", + "Cleaning Girl", + "Wiggins", + "Paul", + "The Bartender", + "A Dirty Drunk", + "A Shouting Drunk", + "A Staggering Drunk", + "The Bouncer", + "The Coroner", + "Reginald Snipes", + "George Blackwood", + "Lars", + "The Chemist", + "Inspector Gregson", + "Jacob Farthington", + "Mycroft", + "Old Sherman", + "Richard", + "The Barman", + "A Dandy Player", + "A Rough-looking Player", + "A Spectator", + "Robert Hunt", + "Violet", + "Pettigrew", + "Augie", + "Anna Carroway", + "A Guard", + "Antonio Caruso", + "Toby the Dog", + "Simon Kingsley", + "Alfred", + "Lady Brumwell", + "Madame Rosa", + "Joseph Moorehead", + "Mrs. Beale", + "Felix", + "Hollingston", + "Constable Callaghan", + "Sergeant Duncan", + "Lord Brumwell", + "Nigel Jaimeson", + "Jonas", + "Constable Dugan" }; // sharp-s : 0xE1 / octal 341 @@ -107,6 +168,11 @@ static const char *const fixedTextDE[] = { "R\201ckw\204rts", // original: "Backward" "Vorw\204rts", // original: "Forward" "Text nicht gefunden!", + // SH1: Press key text + "Mehr auf Tastendruck...", + "M", + "Beliebige Taste dr\201cken.", + "B", // SH1: Initial Inventory "Ein Hilferuf von Lestrade", "Holmes' Visitenkarten", @@ -117,14 +183,70 @@ static const char *const fixedTextDE[] = { "Eine offene Taschenuhr", "Ein Zettel mit Zahlen drauf", "Ein mehrfach gefalteter Briefbogen", - "Ein Tarock-Kartenspiel", // [sic] + "Ein Tarot-Kartenspiel", // original interpreter: "Ein Tarock-Kartenspiel" [sic] "Ein verzierter Schl\201ssel", "Ein Pfandschein", - // SH2: Verbs - "\231ffne", - "Schau", - "Rede", - "Tagebuch" + // SH1: People names + "Sherlock Holmes", + "Dr. Watson", + "Inspektor Lestrade", + "Konstabler O'Brien", + "Konstabler Lewis", + "Sheila Parker", + "Henry Carruthers", + "Lesley", + "Platzanweiser", + "Fredrick Epstein", + "Mrs. Worthington", + "Der Trainer", + "Ein Spieler", + "Tim", + "James Sanders", + "Belle", + "Putzm\204dchen", + "Wiggins", + "Paul", + "Gastwirt", + "Schmutziger Betrunkener", + "Lallender Betrunkener", + "Torkelnder Betrunkener", + "The Bouncer", + "Der Leichenbeschauer", + "Reginald Snipes", + "George Blackwood", + "Lars", + "Apotheker", + "Inspektor Gregson", + "Jacob Farthington", + "Mycroft", + "Old Sherman", + "Richard", + "Barkeeper", + "Jock Mahoney", + "Nobby Charleton", + "Zuschauer", + "Robert Hunt", + "Violet", + "Pettigrew", + "Augie", + "Anna Carroway", + "Wache", + "Antonio Caruso", + "Toby the Dog", + "Simon Kingsley", + "Alfred", + "Lady Brumwell", + "Madame Rosa", + "Joseph Moorehead", + "Mrs. Beale", + "Felix", + "Hollingston", + "Konstabler Callaghan", + "Sergeant Duncan", + "Lord Brumwell", + "Nigel Jaimeson", + "Jonas", + "Konstabler Dugan" }; // up-side down exclamation mark - 0xAD / octal 255 @@ -132,11 +254,11 @@ static const char *const fixedTextDE[] = { // n with a wave on top - 0xA4 / octal 244 static const char *const fixedTextES[] = { // SH1: Window buttons - "Exit", + "Salir", // original interpreter: "Exit" "Subir", "Bajar", // SH1: Inventory buttons - "Exit", + "Salir", // original interpreter: "Exit" "Mirar", "Usar", "Dar", @@ -144,7 +266,7 @@ static const char *const fixedTextES[] = { "Diario de Watson", "Pagina %d", // SH1: Journal buttons - "Exit", + "Salir", // original interpreter: "Exit" "Retroceder", "Subir", "baJar", @@ -154,10 +276,15 @@ static const char *const fixedTextES[] = { "Ult pagina", "Imprimir", // SH1: Journal search - "Exit", + "Salir", // original interpreter: "Exit" "Retroceder", "Avanzar", "Texto no encontrado!", + // SH1: Press key text + "Tecla para ver mas", + "T", + "Tecla para continuar", + "T", // SH1: Initial Inventory "Un mensaje solicitando ayuda", "Unas cuantas tarjetas de visita", @@ -171,6 +298,67 @@ static const char *const fixedTextES[] = { "Unas cartas de Tarot", "Una llave muy vistosa", "Una papeleta de empe\244o", + // SH1: People names + "Sherlock Holmes", + "Dr. Watson", + "El inspector Lestrade", + "El agente O'Brien", + "El agente Lewis", + "Sheila Parker", + "Henry Carruthers", + "Lesley", + "Un ujier", + "Fredrick Epstein", + "Mrs. Worthington", + "El entrenador", + "El jugador", + "Tim", + "James Sanders", + "Belle", + "La chica de la limpieza", + "Wiggins", + "Paul", + "El barman", + "Un sucio borracho", + "Un borracho griton", + "Un tambaleante borracho", + "El gorila", + "El forense", + "Reginald Snipes", + "George Blackwood", + "Lars", + "El quimico", + "El inspector Gregson", + "Jacob Farthington", + "Mycroft", + "Old Sherman", + "Richard", + "El barman", + "Un jugador dandy", + "Un duro jugador", + "Un espectador", + "Robert Hunt", + "Violeta", + "Pettigrew", + "Augie", + "Anna Carroway", + "Un guarda", + "Antonio Caruso", + "El perro Toby", + "Simon Kingsley", + "Alfred", + "Lady Brumwell", + "Madame Rosa", + "Joseph Moorehead", + "Mrs. Beale", + "Felix", + "Hollingston", + "El agente Callaghan", + "El sargento Duncan", + "Lord Brumwell", + "Nigel Jaimeson", + "Jonas", + "El agente Dugan" }; // ========================================= diff --git a/engines/sherlock/scalpel/scalpel_fixed_text.h b/engines/sherlock/scalpel/scalpel_fixed_text.h index eae86b8f27..f46587ce81 100644 --- a/engines/sherlock/scalpel/scalpel_fixed_text.h +++ b/engines/sherlock/scalpel/scalpel_fixed_text.h @@ -57,6 +57,11 @@ enum FixedTextId { kFixedText_JournalSearch_Backward, kFixedText_JournalSearch_Forward, kFixedText_JournalSearch_NotFound, + // Press key text + kFixedText_PressKey_ForMore, + kFixedText_PressKey_ForMoreHotkey, + kFixedText_PressKey_ToContinue, + kFixedText_PressKey_ToContinueHotkey, // Initial inventory kFixedText_InitInventory_Message, kFixedText_InitInventory_HolmesCard, @@ -69,7 +74,68 @@ enum FixedTextId { kFixedText_InitInventory_Letter, kFixedText_InitInventory_Tarot, kFixedText_InitInventory_OrnateKey, - kFixedText_InitInventory_PawnTicket + kFixedText_InitInventory_PawnTicket, + // People names + kFixedText_People_SherlockHolmes, + kFixedText_People_DrWatson, + kFixedText_People_InspectorLestrade, + kFixedText_People_ConstableOBrien, + kFixedText_People_ConstableLewis, + kFixedText_People_SheilaParker, + kFixedText_People_HenryCarruthers, + kFixedText_People_Lesley, + kFixedText_People_AnUsher, + kFixedText_People_FredrickEpstein, + kFixedText_People_MrsWorthington, + kFixedText_People_TheCoach, + kFixedText_People_APlayer, + kFixedText_People_Tim, + kFixedText_People_JamesSanders, + kFixedText_People_Belle, + kFixedText_People_CleaningGirl, + kFixedText_People_Wiggins, + kFixedText_People_Paul, + kFixedText_People_TheBartender, + kFixedText_People_ADirtyDrunk, + kFixedText_People_AShoutingDrunk, + kFixedText_People_AStaggeringDrunk, + kFixedText_People_TheBouncer, + kFixedText_People_TheCoroner, + kFixedText_People_ReginaldSnipes, + kFixedText_People_GeorgeBlackwood, + kFixedText_People_Lars, + kFixedText_People_TheChemist, + kFixedText_People_InspectorGregson, + kFixedText_People_JacobFarthington, + kFixedText_People_Mycroft, + kFixedText_People_OldSherman, + kFixedText_People_Richard, + kFixedText_People_TheBarman, + kFixedText_People_ADandyPlayer, + kFixedText_People_ARoughlookingPlayer, + kFixedText_People_ASpectator, + kFixedText_People_RobertHunt, + kFixedText_People_Violet, + kFixedText_People_Pettigrew, + kFixedText_People_Augie, + kFixedText_People_AnnaCarroway, + kFixedText_People_AGuard, + kFixedText_People_AntonioCaruso, + kFixedText_People_TobyTheDog, + kFixedText_People_SimonKingsley, + kFixedText_People_Alfred, + kFixedText_People_LadyBrumwell, + kFixedText_People_MadameRosa, + kFixedText_People_JosephMoorehead, + kFixedText_People_MrsBeale, + kFixedText_People_Felix, + kFixedText_People_Hollingston, + kFixedText_People_ConstableCallaghan, + kFixedText_People_SergeantDuncan, + kFixedText_People_LordBrumwell, + kFixedText_People_NigelJaimeson, + kFixedText_People_Jonas, + kFixedText_People_ConstableDugan }; struct FixedTextActionEntry { diff --git a/engines/sherlock/scalpel/scalpel_journal.cpp b/engines/sherlock/scalpel/scalpel_journal.cpp index 787d899aee..5c2b8f77f3 100644 --- a/engines/sherlock/scalpel/scalpel_journal.cpp +++ b/engines/sherlock/scalpel/scalpel_journal.cpp @@ -104,6 +104,25 @@ void ScalpelJournal::loadLocations() { while ((c = loc->readByte()) != 0) line += c; + // WORKAROUND: Special fixes for faulty translations + // Was obviously not done in the original interpreter + if (_vm->getLanguage() == Common::ES_ESP) { + // Spanish version + // We fix all sorts of typos + // see bug #6931 + if (line == "En el cajellon destras del teatro Regency") { + line = "En el callejon detras del teatro Regency"; + } else if (line == "En el apartamente de Simon Kingsley") { + line = "En el apartamento de Simon Kingsley"; + } else if (line == "Bajo la muelle de Savoy Pier") { + line = "Bajo el muelle de Savoy Pier"; + } else if (line == "En le viejo Sherman") { + line = "En el viejo Sherman"; + } else if (line == "En la entrada de la cada de Anna Carroway") { + line = "En la entrada de la casa de Anna Carroway"; + } + } + _locations.push_back(line); } diff --git a/engines/sherlock/scalpel/scalpel_map.cpp b/engines/sherlock/scalpel/scalpel_map.cpp index 369822ba02..0924581e38 100644 --- a/engines/sherlock/scalpel/scalpel_map.cpp +++ b/engines/sherlock/scalpel/scalpel_map.cpp @@ -100,6 +100,21 @@ void ScalpelMap::loadData() { while ((c = txtStream->readByte()) != '\0') line += c; + // WORKAROUND: Special fixes for faulty translations + // Was obviously not done in the original interpreter + if (_vm->getLanguage() == Common::ES_ESP) { + // Spanish version + if (line == " Alley") { + // The "Alley" location was not translated, we do this now + // see bug #6931 + line = " Callejon"; + } else if (line == " Alamacen") { + // "Warehouse" location has a typo, we fix it + // see bug #6931 + line = " Almacen"; + } + } + _locationNames.push_back(line); } diff --git a/engines/sherlock/scalpel/scalpel_scene.cpp b/engines/sherlock/scalpel/scalpel_scene.cpp index b2c7339363..b62703e0fb 100644 --- a/engines/sherlock/scalpel/scalpel_scene.cpp +++ b/engines/sherlock/scalpel/scalpel_scene.cpp @@ -40,6 +40,11 @@ const int FS_TRANS[8] = { /*----------------------------------------------------------------*/ +ScalpelScene::~ScalpelScene() { + for (uint idx = 0; idx < _canimShapes.size(); ++idx) + delete _canimShapes[idx]; +} + bool ScalpelScene::loadScene(const Common::String &filename) { ScalpelMap &map = *(ScalpelMap *)_vm->_map; bool result = Scene::loadScene(filename); @@ -71,9 +76,9 @@ void ScalpelScene::drawAllShapes() { // Draw all canimations which are behind the person for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - if (_canimShapes[idx]._type == ACTIVE_BG_SHAPE && _canimShapes[idx]._misc == BEHIND) - screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, - _canimShapes[idx]._position, _canimShapes[idx]._flags & OBJ_FLIPPED); + if (_canimShapes[idx]->_type == ACTIVE_BG_SHAPE && _canimShapes[idx]->_misc == BEHIND) + screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, + _canimShapes[idx]->_position, _canimShapes[idx]->_flags & OBJ_FLIPPED); } // Draw all active shapes which are normal and behind the person @@ -84,9 +89,9 @@ void ScalpelScene::drawAllShapes() { // Draw all canimations which are normal and behind the person for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - if (_canimShapes[idx]._type == ACTIVE_BG_SHAPE && _canimShapes[idx]._misc == NORMAL_BEHIND) - screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position, - _canimShapes[idx]._flags & OBJ_FLIPPED); + if (_canimShapes[idx]->_type == ACTIVE_BG_SHAPE && _canimShapes[idx]->_misc == NORMAL_BEHIND) + screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position, + _canimShapes[idx]->_flags & OBJ_FLIPPED); } // Draw any active characters @@ -113,10 +118,10 @@ void ScalpelScene::drawAllShapes() { // Draw all static and active canimations that are NORMAL and are in front of the player for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - if ((_canimShapes[idx]._type == ACTIVE_BG_SHAPE || _canimShapes[idx]._type == STATIC_BG_SHAPE) && - _canimShapes[idx]._misc == NORMAL_FORWARD) - screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position, - _canimShapes[idx]._flags & OBJ_FLIPPED); + if ((_canimShapes[idx]->_type == ACTIVE_BG_SHAPE || _canimShapes[idx]->_type == STATIC_BG_SHAPE) && + _canimShapes[idx]->_misc == NORMAL_FORWARD) + screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position, + _canimShapes[idx]->_flags & OBJ_FLIPPED); } // Draw all static and active shapes that are FORWARD @@ -133,10 +138,10 @@ void ScalpelScene::drawAllShapes() { // Draw all static and active canimations that are forward for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - if ((_canimShapes[idx]._type == ACTIVE_BG_SHAPE || _canimShapes[idx]._type == STATIC_BG_SHAPE) && - _canimShapes[idx]._misc == FORWARD) - screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position, - _canimShapes[idx]._flags & OBJ_FLIPPED); + if ((_canimShapes[idx]->_type == ACTIVE_BG_SHAPE || _canimShapes[idx]->_type == STATIC_BG_SHAPE) && + _canimShapes[idx]->_misc == FORWARD) + screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position, + _canimShapes[idx]->_flags & OBJ_FLIPPED); } screen.resetDisplayBounds(); @@ -152,7 +157,7 @@ void ScalpelScene::checkBgShapes() { // Iterate through the canim list for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - Object &obj = _canimShapes[idx]; + Object &obj = *_canimShapes[idx]; if (obj._type == STATIC_BG_SHAPE || obj._type == ACTIVE_BG_SHAPE) { if ((obj._flags & 5) == 1) { obj._misc = (pt.y < (obj._position.y + obj._imageFrame->_frame.h - 1)) ? @@ -221,8 +226,8 @@ void ScalpelScene::doBgAnim() { people._portrait.checkObject(); for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - if (_canimShapes[idx]._type != INVALID && _canimShapes[idx]._type != REMOVE) - _canimShapes[idx].checkObject(); + if (_canimShapes[idx]->_type != INVALID && _canimShapes[idx]->_type != REMOVE) + _canimShapes[idx]->checkObject(); } if (_currentScene == DRAWING_ROOM) @@ -266,7 +271,7 @@ void ScalpelScene::doBgAnim() { } for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - Object &o = _canimShapes[idx]; + Object &o = *_canimShapes[idx]; if (o._type == ACTIVE_BG_SHAPE || o._type == HIDE_SHAPE || o._type == REMOVE) screen.restoreBackground(Common::Rect(o._oldPosition.x, o._oldPosition.y, o._oldPosition.x + o._oldSize.x, o._oldPosition.y + o._oldSize.y)); @@ -287,8 +292,8 @@ void ScalpelScene::doBgAnim() { people._portrait.adjustObject(); for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - if (_canimShapes[idx]._type != INVALID) - _canimShapes[idx].adjustObject(); + if (_canimShapes[idx]->_type != INVALID) + _canimShapes[idx]->adjustObject(); } if (people[HOLMES]._type == CHARACTER && people._holmesOn) @@ -309,7 +314,7 @@ void ScalpelScene::doBgAnim() { // Draw all canimations which are behind the person for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - Object &o = _canimShapes[idx]; + Object &o = *_canimShapes[idx]; if (o._type == ACTIVE_BG_SHAPE && o._misc == BEHIND) { screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED); } @@ -324,14 +329,14 @@ void ScalpelScene::doBgAnim() { // Draw all canimations which are NORMAL and behind the person for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - Object &o = _canimShapes[idx]; + Object &o = *_canimShapes[idx]; if (o._type == ACTIVE_BG_SHAPE && o._misc == NORMAL_BEHIND) { screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED); } } - // Draw the person if not animating - if (people[HOLMES]._type == CHARACTER && people[HOLMES]._walkLoaded) { + // Draw the player if he's active and his walk has been loaded into memory + if (people[HOLMES]._type == CHARACTER && people[HOLMES]._walkLoaded && people._holmesOn) { // If Holmes is too far to the right, move him back so he's on-screen int xRight = SHERLOCK_SCREEN_WIDTH - 2 - people[HOLMES]._imageFrame->_frame.w; int tempX = MIN(people[HOLMES]._position.x / FIXED_INT_MULTIPLIER, xRight); @@ -352,7 +357,7 @@ void ScalpelScene::doBgAnim() { // Draw all static and active canimations that are NORMAL and are in front of the person for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - Object &o = _canimShapes[idx]; + Object &o = *_canimShapes[idx]; if ((o._type == ACTIVE_BG_SHAPE || o._type == STATIC_BG_SHAPE) && o._misc == NORMAL_FORWARD) { screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED); } @@ -372,7 +377,7 @@ void ScalpelScene::doBgAnim() { // Draw all static and active canimations that are in front of the person for (uint idx = 0; idx < _canimShapes.size(); ++idx) { - Object &o = _canimShapes[idx]; + Object &o = *_canimShapes[idx]; if ((o._type == ACTIVE_BG_SHAPE || o._type == STATIC_BG_SHAPE) && o._misc == FORWARD) { screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED); } @@ -450,16 +455,18 @@ void ScalpelScene::doBgAnim() { } for (int idx = _canimShapes.size() - 1; idx >= 0; --idx) { - Object &o = _canimShapes[idx]; + Object &o = *_canimShapes[idx]; if (o._type == INVALID) { // Anim shape was invalidated by checkEndOfSequence, so at this point we can remove it + delete _canimShapes[idx]; _canimShapes.remove_at(idx); } else if (o._type == REMOVE) { if (_goToScene == -1) screen.slamArea(o._position.x, o._position.y, o._delta.x, o._delta.y); // Shape for an animation is no longer needed, so remove it completely + delete _canimShapes[idx]; _canimShapes.remove_at(idx); } else if (o._type == ACTIVE_BG_SHAPE) { screen.flushImage(o._imageFrame, o._position, @@ -496,6 +503,7 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) { int tpDir, walkDir; int tFrames = 0; int gotoCode = -1; + Object *cObj; // Validation if (cAnimNum >= (int)_cAnim.size()) @@ -533,33 +541,33 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) { return 1; // Add new anim shape entry for displaying the animation - _canimShapes.push_back(Object()); - Object &cObj = _canimShapes[_canimShapes.size() - 1]; + cObj = new Object(); + _canimShapes.push_back(cObj); // Copy the canimation into the bgShapes type canimation structure so it can be played - cObj._allow = cAnimNum + 1; // Keep track of the parent structure - cObj._name = _cAnim[cAnimNum]._name; // Copy name + cObj->_allow = cAnimNum + 1; // Keep track of the parent structure + cObj->_name = _cAnim[cAnimNum]._name; // Copy name // Remove any attempt to draw object frame if (cAnim._type == NO_SHAPE && cAnim._sequences[0] < 100) cAnim._sequences[0] = 0; - cObj._sequences = cAnim._sequences; - cObj._images = nullptr; - cObj._position = cAnim._position; - cObj._delta = Common::Point(0, 0); - cObj._type = cAnim._type; - cObj._flags = cAnim._flags; - - cObj._maxFrames = 0; - cObj._frameNumber = -1; - cObj._sequenceNumber = cAnimNum; - cObj._oldPosition = Common::Point(0, 0); - cObj._oldSize = Common::Point(0, 0); - cObj._goto = Common::Point(0, 0); - cObj._status = 0; - cObj._misc = 0; - cObj._imageFrame = nullptr; + cObj->_sequences = cAnim._sequences; + cObj->_images = nullptr; + cObj->_position = cAnim._position; + cObj->_delta = Common::Point(0, 0); + cObj->_type = cAnim._type; + cObj->_flags = cAnim._flags; + + cObj->_maxFrames = 0; + cObj->_frameNumber = -1; + cObj->_sequenceNumber = cAnimNum; + cObj->_oldPosition = Common::Point(0, 0); + cObj->_oldSize = Common::Point(0, 0); + cObj->_goto = Common::Point(0, 0); + cObj->_status = 0; + cObj->_misc = 0; + cObj->_imageFrame = nullptr; if (cAnim._name.size() > 0 && cAnim._type != NO_SHAPE) { if (tpPos.x != -1) @@ -584,25 +592,25 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) { // Now load the resource as an image if (!IS_3DO) { - cObj._images = new ImageFile(fname); + cObj->_images = new ImageFile(fname); } else { - cObj._images = new ImageFile3DO(fname, kImageFile3DOType_RoomFormat); + cObj->_images = new ImageFile3DO(fname, kImageFile3DOType_RoomFormat); } - cObj._imageFrame = &(*cObj._images)[0]; - cObj._maxFrames = cObj._images->size(); + cObj->_imageFrame = &(*cObj->_images)[0]; + cObj->_maxFrames = cObj->_images->size(); int frames = 0; if (playRate < 0) { // Reverse direction // Count number of frames - while (frames < MAX_FRAME && cObj._sequences[frames]) + while (frames < MAX_FRAME && cObj->_sequences[frames]) ++frames; } else { // Forward direction BaseObject::_countCAnimFrames = true; - while (cObj._type == ACTIVE_BG_SHAPE) { - cObj.checkObject(); + while (cObj->_type == ACTIVE_BG_SHAPE) { + cObj->checkObject(); ++frames; if (frames >= 1000) @@ -614,10 +622,10 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) { BaseObject::_countCAnimFrames = false; - cObj._type = cAnim._type; - cObj._frameNumber = -1; - cObj._position = cAnim._position; - cObj._delta = Common::Point(0, 0); + cObj->_type = cAnim._type; + cObj->_frameNumber = -1; + cObj->_position = cAnim._position; + cObj->_delta = Common::Point(0, 0); } // Return if animation has no frames in it @@ -631,7 +639,7 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) { if (playRate < 0) { // Play in reverse dir = -2; - cObj._frameNumber = frames - 3; + cObj->_frameNumber = frames - 3; } else { dir = 0; } @@ -648,14 +656,14 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) { // Repeat same frame int temp = repeat; while (--temp > 0) { - cObj._frameNumber--; + cObj->_frameNumber--; doBgAnim(); if (_vm->shouldQuit()) return 0; } - cObj._frameNumber += dir; + cObj->_frameNumber += dir; } people[HOLMES]._type = CHARACTER; @@ -670,14 +678,18 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) { if (playRate < 0) // Reverse direction - set to end sequence - cObj._frameNumber = tFrames - 1; + cObj->_frameNumber = tFrames - 1; - if (cObj._frameNumber <= 26) - gotoCode = cObj._sequences[cObj._frameNumber + 3]; + if (cObj->_frameNumber <= 26) + gotoCode = cObj->_sequences[cObj->_frameNumber + 3]; - // Unless anim shape has already been freed, set it to REMOVE so doBgAnim can free it - if (_canimShapes.indexOf(cObj) != -1) - cObj.checkObject(); + // Unless anim shape has already been removed, do a final check to allow it to become REMOVEd + for (uint idx = 0; idx < _canimShapes.size(); ++idx) { + if (_canimShapes[idx] == cObj) { + cObj->checkObject(); + break; + } + } if (gotoCode > 0 && !talk._talkToAbort) { _goToScene = gotoCode; diff --git a/engines/sherlock/scalpel/scalpel_scene.h b/engines/sherlock/scalpel/scalpel_scene.h index 8fe3b66b38..8711fea2d0 100644 --- a/engines/sherlock/scalpel/scalpel_scene.h +++ b/engines/sherlock/scalpel/scalpel_scene.h @@ -75,6 +75,8 @@ protected: public: ScalpelScene(SherlockEngine *vm) : Scene(vm) {} + virtual ~ScalpelScene(); + /** * Draw all objects and characters. */ diff --git a/engines/sherlock/scalpel/scalpel_talk.cpp b/engines/sherlock/scalpel/scalpel_talk.cpp index 88a718ea4e..2c447b09ab 100644 --- a/engines/sherlock/scalpel/scalpel_talk.cpp +++ b/engines/sherlock/scalpel/scalpel_talk.cpp @@ -22,6 +22,7 @@ #include "sherlock/scalpel/scalpel_talk.h" #include "sherlock/scalpel/scalpel_fixed_text.h" +#include "sherlock/scalpel/scalpel_journal.h" #include "sherlock/scalpel/scalpel_map.h" #include "sherlock/scalpel/scalpel_people.h" #include "sherlock/scalpel/scalpel_scene.h" @@ -189,6 +190,9 @@ void ScalpelTalk::talkInterface(const byte *&str) { ScalpelScreen &screen = *(ScalpelScreen *)_vm->_screen; UserInterface &ui = *_vm->_ui; + if (_vm->getLanguage() == Common::DE_DEU) + skipBadText(str); + // If the window isn't yet open, draw the window before printing starts if (!ui._windowOpen && _noTextYet) { _noTextYet = false; @@ -705,10 +709,14 @@ void ScalpelTalk::drawInterface() { screen.makeButton(Common::Rect(181, CONTROLS_Y, 221, CONTROLS_Y + 10), 200 - screen.stringWidth(fixedText_Down) / 2, fixedText_Down); } else { - int strWidth = screen.stringWidth(Scalpel::PRESS_KEY_TO_CONTINUE); + Common::String fixedText_PressKeyToContinue = fixedText.getText(kFixedText_PressKey_ToContinue); + Common::String fixedText_PressKeyToContinueHotkey = fixedText.getText(kFixedText_PressKey_ToContinueHotkey); + int fixedText_PressKeyToContinueLen = screen.stringWidth(fixedText_PressKeyToContinue); + screen.makeButton(Common::Rect(46, CONTROLS_Y, 273, CONTROLS_Y + 10), - 160 - strWidth / 2, Scalpel::PRESS_KEY_TO_CONTINUE); - screen.gPrint(Common::Point(160 - strWidth / 2, CONTROLS_Y), COMMAND_FOREGROUND, "P"); + 160 - fixedText_PressKeyToContinueLen / 2, fixedText_PressKeyToContinue); + screen.gPrint(Common::Point(160 - fixedText_PressKeyToContinueLen / 2, CONTROLS_Y), COMMAND_FOREGROUND, + "%s", fixedText_PressKeyToContinueHotkey.c_str()); } } @@ -1006,6 +1014,14 @@ void ScalpelTalk::clearSequences() { _sequenceStack.clear(); } +void ScalpelTalk::skipBadText(const byte *&msgP) { + // WORKAROUND: Skip over bad text in the original game + const char *BAD_PHRASE1 = "Change Speaker to Sherlock Holmes "; + + if (!strncmp((const char *)msgP, BAD_PHRASE1, strlen(BAD_PHRASE1))) + msgP += strlen(BAD_PHRASE1); +} + } // End of namespace Scalpel } // End of namespace Sherlock diff --git a/engines/sherlock/scalpel/scalpel_talk.h b/engines/sherlock/scalpel/scalpel_talk.h index a9a3753b64..3ba61dadc1 100644 --- a/engines/sherlock/scalpel/scalpel_talk.h +++ b/engines/sherlock/scalpel/scalpel_talk.h @@ -132,6 +132,11 @@ public: bool talk3DOMovieTrigger(int subIndex); /** + * Handles skipping over bad text in conversations + */ + static void skipBadText(const byte *&msgP); + + /** * Push the details of a passed object onto the saved sequences stack */ virtual void pushSequenceEntry(Object *obj); diff --git a/engines/sherlock/scalpel/scalpel_user_interface.cpp b/engines/sherlock/scalpel/scalpel_user_interface.cpp index 44189075b1..79d74ba999 100644 --- a/engines/sherlock/scalpel/scalpel_user_interface.cpp +++ b/engines/sherlock/scalpel/scalpel_user_interface.cpp @@ -67,8 +67,6 @@ const int INVENTORY_POINTS[8][3] = { const char COMMANDS[13] = "LMTPOCIUGJFS"; const char COMMANDS_3DO[13] = "LMTPOCIUGSFF"; const char INVENTORY_COMMANDS[9] = { "ELUG-+,." }; -const char *const PRESS_KEY_FOR_MORE = "Press any Key for More."; -const char *const PRESS_KEY_TO_CONTINUE = "Press any Key to Continue."; const int UI_OFFSET_3DO = 16; // (320 - 288) / 2 /*----------------------------------------------------------------*/ @@ -1300,9 +1298,11 @@ void ScalpelUserInterface::doMainControl() { // Keyboard control _keyboardInput = true; - if (_keyPress >= 'A' && _keyPress <= 'Z') { - const char *c = strchr(commands, _keyPress); - _temp = !c ? 12 : c - commands; + char key = toupper(_keyPress); + const char *c = strchr(commands, key); + if (c) { + _temp = c - commands; + _key = key; } else { _temp = 12; } @@ -1808,6 +1808,7 @@ void ScalpelUserInterface::printObjectDesc(const Common::String &str, bool first ScalpelInventory &inv = *(ScalpelInventory *)_vm->_inventory; ScalpelScreen &screen = *(ScalpelScreen *)_vm->_screen; Talk &talk = *_vm->_talk; + FixedText &fixedText = *_vm->_fixedText; if (str.hasPrefix("_")) { _lookScriptFlag = true; @@ -1938,20 +1939,26 @@ void ScalpelUserInterface::printObjectDesc(const Common::String &str, bool first // Handle display depending on whether all the message was shown if (!endOfStr) { + Common::String fixedText_PressKeyForMore = fixedText.getText(kFixedText_PressKey_ForMore); + Common::String fixedText_PressKeyForMoreHotkey = fixedText.getText(kFixedText_PressKey_ForMoreHotkey); + int fixedText_PressKeyForMoreLen = screen.stringWidth(fixedText_PressKeyForMore); + screen.makeButton(Common::Rect(46, CONTROLS_Y, 272, CONTROLS_Y + 10), - (SHERLOCK_SCREEN_WIDTH - screen.stringWidth(PRESS_KEY_FOR_MORE)) / 2, - PRESS_KEY_FOR_MORE); - screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH - - screen.stringWidth(PRESS_KEY_FOR_MORE)) / 2, CONTROLS_Y), - COMMAND_FOREGROUND, "P"); + (SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyForMoreLen) / 2, + fixedText_PressKeyForMore); + screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyForMoreLen) / 2, CONTROLS_Y), + COMMAND_FOREGROUND, "%s", fixedText_PressKeyForMoreHotkey.c_str()); _descStr = msgP; } else { + Common::String fixedText_PressKeyToContinue = fixedText.getText(kFixedText_PressKey_ToContinue); + Common::String fixedText_PressKeyToContinueHotkey = fixedText.getText(kFixedText_PressKey_ToContinueHotkey); + int fixedText_PressKeyToContinueLen = screen.stringWidth(fixedText_PressKeyToContinue); + screen.makeButton(Common::Rect(46, CONTROLS_Y, 272, CONTROLS_Y + 10), - (SHERLOCK_SCREEN_WIDTH - screen.stringWidth(PRESS_KEY_TO_CONTINUE)) / 2, - PRESS_KEY_TO_CONTINUE); - screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH - - screen.stringWidth(PRESS_KEY_TO_CONTINUE)) / 2, CONTROLS_Y), - COMMAND_FOREGROUND, "P"); + (SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyToContinueLen) / 2, + fixedText_PressKeyToContinue); + screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyToContinueLen) / 2, CONTROLS_Y), + COMMAND_FOREGROUND, "%s", fixedText_PressKeyToContinueHotkey.c_str()); _descStr = ""; } diff --git a/engines/sherlock/scalpel/scalpel_user_interface.h b/engines/sherlock/scalpel/scalpel_user_interface.h index d88e607c2a..8c2f3f9e3b 100644 --- a/engines/sherlock/scalpel/scalpel_user_interface.h +++ b/engines/sherlock/scalpel/scalpel_user_interface.h @@ -39,8 +39,6 @@ extern const int MENU_POINTS[12][4]; extern const int INVENTORY_POINTS[8][3]; extern const char INVENTORY_COMMANDS[9]; -extern const char *const PRESS_KEY_FOR_MORE; -extern const char *const PRESS_KEY_TO_CONTINUE; class Settings; diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp index c86282fe0e..6f9ef179a3 100644 --- a/engines/sherlock/scene.cpp +++ b/engines/sherlock/scene.cpp @@ -216,7 +216,6 @@ Scene::Scene(SherlockEngine *vm): _vm(vm) { _currentScene = -1; _goToScene = -1; - _loadingSavedGame = false; _walkedInScene = false; _version = 0; _compressed = false; @@ -274,6 +273,8 @@ void Scene::selectScene() { } void Scene::freeScene() { + SaveManager &saves = *_vm->_saves; + if (_currentScene == -1) return; @@ -284,10 +285,8 @@ void Scene::freeScene() { _vm->_music->freeSong(); _vm->_sound->freeLoadedSounds(); - if (!_loadingSavedGame) + if (!saves._justLoaded) saveSceneStatus(); - else - _loadingSavedGame = false; _sequenceBuffer.clear(); _descText.clear(); @@ -1390,7 +1389,6 @@ void Scene::synchronize(Serializer &s) { s.syncAsSint16LE(_currentScene); } else { s.syncAsSint16LE(_goToScene); - _loadingSavedGame = true; } for (int sceneNum = 1; sceneNum < SCENES_COUNT; ++sceneNum) { diff --git a/engines/sherlock/scene.h b/engines/sherlock/scene.h index f75dfb40cd..f7aa39fd41 100644 --- a/engines/sherlock/scene.h +++ b/engines/sherlock/scene.h @@ -145,8 +145,6 @@ public: class Scene { private: - bool _loadingSavedGame; - /** * Loads sounds for the scene */ @@ -229,7 +227,7 @@ public: Common::Array<Exit> _exits; SceneEntry _entrance; Common::Array<SceneSound> _sounds; - ObjectArray _canimShapes; + Common::Array<Object *> _canimShapes; Common::Array<ScaleZone> _scaleZones; Common::StringArray _objSoundList; bool _restoreFlag; diff --git a/engines/sherlock/sound.cpp b/engines/sherlock/sound.cpp index a653db51a3..56ac2a5d9a 100644 --- a/engines/sherlock/sound.cpp +++ b/engines/sherlock/sound.cpp @@ -123,25 +123,9 @@ byte Sound::decodeSample(byte sample, byte &reference, int16 &scale) { bool Sound::playSound(const Common::String &name, WaitType waitType, int priority, const char *libraryFilename) { stopSound(); - Common::String filename = name; - if (!filename.contains('.')) { - if (!IS_3DO) { - if (IS_SERRATED_SCALPEL) { - filename += ".SND"; - } else { - filename += ".WAV"; - } - } else { - // 3DO uses .aiff extension - filename += ".AIFF"; - if (!filename.contains('/')) { - // if no directory was given, use the room sounds directory - filename = "rooms/sounds/" + filename; - } - } - } + Common::String filename = formFilename(name); - Audio::SoundHandle soundHandle = (IS_SERRATED_SCALPEL) ? _scalpelEffectsHandle : getFreeSoundHandle(); + Audio::SoundHandle &soundHandle = (IS_SERRATED_SCALPEL) ? _scalpelEffectsHandle : getFreeSoundHandle(); if (!playSoundResource(filename, libraryFilename, Audio::Mixer::kSFXSoundType, soundHandle)) error("Could not find sound resource - %s", filename.c_str()); @@ -168,6 +152,29 @@ bool Sound::playSound(const Common::String &name, WaitType waitType, int priorit return retval; } +Common::String Sound::formFilename(const Common::String &name) { + Common::String filename = name; + + if (!filename.contains('.')) { + if (!IS_3DO) { + if (IS_SERRATED_SCALPEL) { + filename += ".SND"; + } else { + filename += ".WAV"; + } + } else { + // 3DO uses .aiff extension + filename += ".AIFF"; + if (!filename.contains('/')) { + // if no directory was given, use the room sounds directory + filename = "rooms/sounds/" + filename; + } + } + } + + return filename; +} + void Sound::playAiff(const Common::String &name, int volume, bool loop) { Common::File *file = new Common::File(); if (!file->open(name)) { @@ -222,7 +229,7 @@ void Sound::freeDigiSound() { _soundPlaying = false; } -Audio::SoundHandle Sound::getFreeSoundHandle() { +Audio::SoundHandle &Sound::getFreeSoundHandle() { for (int i = 0; i < MAX_MIXER_CHANNELS; i++) { if (!_mixer->isSoundHandleActive(_tattooEffectsHandle[i])) return _tattooEffectsHandle[i]; @@ -238,29 +245,32 @@ void Sound::setVolume(int volume) { void Sound::playSpeech(const Common::String &name) { Resources &res = *_vm->_res; Scene &scene = *_vm->_scene; - stopSpeech(); - - // TODO: Technically Scalpel has an sfx command which I've set to call this method because it sets the - // _voice variable as if it were speech. Need to do a play-through of Scalpel and see if it's ever called. - // If so, will need to enhance this method to handle the Serrated Scalpel voice resources - assert(IS_ROSE_TATTOO); - // Figure out which speech library to use - Common::String libraryName = Common::String::format("speech%02d.lib", scene._currentScene); - if ((!scumm_strnicmp(name.c_str(), "SLVE12S", 7)) || (!scumm_strnicmp(name.c_str(), "WATS12X", 7)) - || (!scumm_strnicmp(name.c_str(), "HOLM12X", 7))) - libraryName = "SPEECH12.LIB"; + // Stop any previously playing speech + stopSpeech(); - // If the speech library file doesn't even exist, then we can't play anything - Common::File f; - if (!f.exists(libraryName)) - return; + if (IS_SERRATED_SCALPEL) { + Common::String filename = formFilename(name); + if (playSoundResource(filename, Common::String(), Audio::Mixer::kSFXSoundType, _speechHandle)) + _speechPlaying = true; + } else { + // Figure out which speech library to use + Common::String libraryName = Common::String::format("speech%02d.lib", scene._currentScene); + if ((!scumm_strnicmp(name.c_str(), "SLVE12S", 7)) || (!scumm_strnicmp(name.c_str(), "WATS12X", 7)) + || (!scumm_strnicmp(name.c_str(), "HOLM12X", 7))) + libraryName = "SPEECH12.LIB"; + + // If the speech library file doesn't even exist, then we can't play anything + Common::File f; + if (!f.exists(libraryName)) + return; - // Ensure the given library is in the cache - res.addToCache(libraryName); + // Ensure the given library is in the cache + res.addToCache(libraryName); - if (playSoundResource(name, libraryName, Audio::Mixer::kSpeechSoundType, _speechHandle)) - _speechPlaying = true; + if (playSoundResource(name, libraryName, Audio::Mixer::kSpeechSoundType, _speechHandle)) + _speechPlaying = true; + } } void Sound::stopSpeech() { diff --git a/engines/sherlock/sound.h b/engines/sherlock/sound.h index 44969b8923..0a0ff83d1f 100644 --- a/engines/sherlock/sound.h +++ b/engines/sherlock/sound.h @@ -61,6 +61,11 @@ private: */ bool playSoundResource(const Common::String &name, const Common::String &libFilename, Audio::Mixer::SoundType soundType, Audio::SoundHandle &handle); + + /** + * Form a filename from a passed sound resource name + */ + Common::String formFilename(const Common::String &name); public: bool _digitized; int _voices; @@ -116,8 +121,14 @@ public: void freeDigiSound(); - Audio::SoundHandle getFreeSoundHandle(); + /** + * Return a sound handle to use + */ + Audio::SoundHandle &getFreeSoundHandle(); + /** + * Set the volume + */ void setVolume(int volume); /** diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp index 4150835fb8..e9c52276f6 100644 --- a/engines/sherlock/talk.cpp +++ b/engines/sherlock/talk.cpp @@ -575,6 +575,7 @@ void Talk::loadTalkFile(const Common::String &filename) { _converseNum = res.resourceIndex(); talkStream->skip(2); // Skip talk file version num + _statements.clear(); _statements.resize(talkStream->readByte()); for (uint idx = 0; idx < _statements.size(); ++idx) _statements[idx].load(*talkStream, IS_ROSE_TATTOO); @@ -597,7 +598,7 @@ void Talk::stripVoiceCommands() { // rest of the name following it statement._reply = Common::String(statement._reply.c_str(), statement._reply.c_str() + idx) + " " + - Common::String(statement._reply.c_str() + 9); + Common::String(statement._reply.c_str() + idx + 9); } } @@ -750,17 +751,31 @@ void Talk::doScript(const Common::String &script) { // Start of comment, so skip over it while (*str++ != '}') ; - } else if (isPossibleOpcode(c)) { - if (isOpcode(c)) { - // Handle control code - switch ((this->*_opcodeTable[c - _opcodes[0]])(str)) { - case RET_EXIT: - return; - case RET_CONTINUE: - continue; - default: - break; - } + } else if (isOpcode(c)) { + // the original interpreter checked for c being >= 0x80 + // and if that is the case, it tried to process it as opcode, BUT ALSO ALWAYS skipped over it + // This was done inside the Spanish + German interpreters of Serrated Scalpel, not the original + // English interpreter (reverse engineered from the binaries). + // + // This resulted in special characters not getting shown in case they occurred at the start + // of sentences like for example the inverted exclamation mark and the inverted question mark. + // For further study see fonts.cpp + // + // We create an inverted exclamation mark for the Spanish version and we show it. + // + // Us not skipping over those characters may result in an assert() happening inside fonts.cpp + // in case more invalid characters exist. + // More information see bug #6931 + // + + // Handle control code + switch ((this->*_opcodeTable[c - _opcodes[0]])(str)) { + case RET_EXIT: + return; + case RET_CONTINUE: + continue; + default: + break; } ++str; @@ -832,7 +847,7 @@ int Talk::waitForMore(int delay) { playingSpeech = sound.isSpeechPlaying(); do { - if (IS_SERRATED_SCALPEL && sound._speechOn && !sound.isSpeechPlaying()) + if (IS_SERRATED_SCALPEL && playingSpeech && !sound.isSpeechPlaying()) people._portrait._frameNumber = -1; scene.doBgAnim(); @@ -876,7 +891,7 @@ int Talk::waitForMore(int delay) { } while (!_vm->shouldQuit() && key2 == 254 && (delay || (playingSpeech && sound.isSpeechPlaying())) && !events._released && !events._rightReleased); - // If voices was set 2 to indicate a voice file was place, then reset it back to 1 + // If voices was set 2 to indicate a Scalpel voice file was playing, then reset it back to 1 if (sound._voices == 2) sound._voices = 1; @@ -914,15 +929,6 @@ bool Talk::isOpcode(byte checkCharacter) { return false; } -bool Talk::isPossibleOpcode(byte checkCharacter) { - // Some conversations in the Spanish version, such as the first conversation with Lastrade, - // start with an invalid character. Hence isPossibleOpcode being separate from isOpcode - if (IS_SERRATED_SCALPEL && _vm->getLanguage() == Common::ES_ESP) - return checkCharacter >= 128; - - return isOpcode(checkCharacter); -} - void Talk::popStack() { if (!_scriptStack.empty()) { ScriptStackEntry scriptEntry = _scriptStack.pop(); @@ -1190,7 +1196,7 @@ void Talk::talkWait(const byte *&str) { _endStr = true; // If a key was pressed to finish the window, see if further voice files should be skipped - if (_wait >= 0 && _wait < 254) { + if (IS_SERRATED_SCALPEL && _wait >= 0 && _wait < 254) { if (str[0] == _opcodes[OP_SFX_COMMAND]) str += 9; } diff --git a/engines/sherlock/talk.h b/engines/sherlock/talk.h index a0845efb2c..2c0da24d69 100644 --- a/engines/sherlock/talk.h +++ b/engines/sherlock/talk.h @@ -218,11 +218,6 @@ protected: * Checks if a character is an opcode */ bool isOpcode(byte checkCharacter); - - /** - * Checks if a character might be an opcode - */ - bool isPossibleOpcode(byte checkCharacter); /** * Form a table of the display indexes for statements diff --git a/engines/sherlock/tattoo/tattoo.cpp b/engines/sherlock/tattoo/tattoo.cpp index bfb35565bc..3131df7649 100644 --- a/engines/sherlock/tattoo/tattoo.cpp +++ b/engines/sherlock/tattoo/tattoo.cpp @@ -65,10 +65,15 @@ void TattooEngine::initialize() { _res->addToCache("walk.lib"); // Set up list of people + TattooFixedText &fixedText = *(TattooFixedText *)_fixedText; + const char *peopleNamePtr = nullptr; + for (int idx = 0; idx < TATTOO_MAX_PEOPLE; ++idx) { + peopleNamePtr = fixedText.getText(PEOPLE_DATA[idx].fixedTextId); + _people->_characters.push_back(PersonData( - getLanguage() == Common::FR_FRA ? FRENCH_NAMES[idx] : ENGLISH_NAMES[idx], - PORTRAITS[idx], nullptr, nullptr)); + peopleNamePtr, + PEOPLE_DATA[idx].portrait, nullptr, nullptr)); } // Load the inventory diff --git a/engines/sherlock/tattoo/tattoo_darts.cpp b/engines/sherlock/tattoo/tattoo_darts.cpp index 6d6c74dcf6..274d80e3e1 100644 --- a/engines/sherlock/tattoo/tattoo_darts.cpp +++ b/engines/sherlock/tattoo/tattoo_darts.cpp @@ -30,7 +30,8 @@ namespace Tattoo { enum { DART_COLOR_FORE = 5, - PLAYER_COLOR = 11 + PLAYER_COLOR = 11, + DART_BAR_FORE = 208 }; static const int STATUS_INFO_X = 430; @@ -89,6 +90,7 @@ void Darts::playDarts(GameType gameType) { // Load dart graphics and initialize values loadDarts(); initDarts(); + events.hideCursor(); while (!done && !_vm->shouldQuit()) { int roundStart, score; @@ -415,7 +417,7 @@ void Darts::erasePowerBars() { bool Darts::dartHit() { Events &events = *_vm->_events; - events.pollEventsAndWait(); + events.pollEvents(); events.setButtonState(); // Keyboard check @@ -440,10 +442,7 @@ int Darts::doPowerBar(const Common::Point &pt, byte color, int goToPower, int or events.clearEvents(); events.delay(100); - while (!_vm->shouldQuit()) { - if (idx >= DART_BAR_SIZE) - break; - + while (!_vm->shouldQuit() && idx < DART_BAR_SIZE) { if ((goToPower - 1) == idx) break; else if (goToPower == 0) { @@ -491,11 +490,8 @@ int Darts::drawHand(int goToPower, int computer) { Common::Point pt(DARTBOARD_LEFT - HAND_OFFSET[hand], SHERLOCK_SCREEN_HEIGHT - _handSize.y); int x = 0; - while (!_vm->shouldQuit()) { - if (x >= DARTBOARD_WIDTH) - break; - - if ((goToPower - 1) == x) + while (!_vm->shouldQuit() && x < DARTBOARD_WIDTH) { + if (computer && x >= (goToPower - 1)) break; else if (goToPower == 0) { if (dartHit()) @@ -560,7 +556,6 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) { Events &events = *_vm->_events; Screen &screen = *_vm->_screen; int cx, cy; - int drawX = 0, drawY = 0, oldDrawX = 0, oldDrawY = 0; int xSize = 0, ySize = 0, oldxSize = 0, oldySize = 0; int handOCx = 0, handOCy = 0; int ocx = 0, ocy = 0; @@ -568,6 +563,7 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) { int delta = 9; int dartNum; int hddy; + Common::Point drawPos, oldDrawPos; // Draw the animation of the hand throwing the dart first // See which hand animation to use @@ -607,37 +603,37 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) { xSize = (*_dartGraphics)[dartNum]._width; ySize = (*_dartGraphics)[dartNum]._height; - ocx = drawX = cx - (*_dartGraphics)[dartNum]._width / 2; - ocy = drawY = cy - (*_dartGraphics)[dartNum]._height; + ocx = drawPos.x = cx - (*_dartGraphics)[dartNum]._width / 2; + ocy = drawPos.y = cy - (*_dartGraphics)[dartNum]._height; // Draw dart - screen._backBuffer1.transBlitFrom((*_dartGraphics)[dartNum], dartPos); + screen._backBuffer1.transBlitFrom((*_dartGraphics)[dartNum], drawPos); - if (drawX < 0) { - xSize += drawX; + if (drawPos.x < 0) { + xSize += drawPos.x; if (xSize < 0) xSize = 1; - drawX = 0; + drawPos.x = 0; } - if (drawY < 0) { - ySize += drawY; + if (drawPos.y < 0) { + ySize += drawPos.y; if (ySize < 0) ySize = 1; - drawY = 0; + drawPos.y = 0; } // Flush the drawn dart to the screen - screen.slamArea(drawX, drawY, xSize, ySize); - if (oldDrawX != -1) + screen.slamArea(drawPos.x, drawPos.y, xSize, ySize); + if (oldDrawPos.x != -1) // Flush the erased dart area - screen.slamArea(oldDrawX, oldDrawY, oldxSize, oldySize); + screen.slamArea(oldDrawPos.x, oldDrawPos.y, oldxSize, oldySize); - screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawX, drawY), - Common::Rect(drawX, drawY, drawX + xSize, drawY + ySize)); + screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawPos.x, drawPos.y), + Common::Rect(drawPos.x, drawPos.y, drawPos.x + xSize, drawPos.y + ySize)); - oldDrawX = drawX; - oldDrawY = drawY; + oldDrawPos.x = drawPos.x; + oldDrawPos.y = drawPos.y; oldxSize = xSize; oldySize = ySize; @@ -651,15 +647,15 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) { screen.slamArea(handOCx, handOCy, handOldxSize, handOldySize); // Erase the old dart - if (oldDrawX != -1) - screen.slamArea(oldDrawX, oldDrawY, oldxSize, oldySize); + if (oldDrawPos.x != -1) + screen.slamArea(oldDrawPos.x, oldDrawPos.y, oldxSize, oldySize); - screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawX, drawY), - Common::Rect(drawX, drawY, drawX + xSize, drawY + ySize)); + screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawPos.x, drawPos.y), + Common::Rect(drawPos.x, drawPos.y, drawPos.x + xSize, drawPos.y + ySize)); cx = dartPos.x; cy = dartPos.y + 2; - oldDrawX = oldDrawY = -1; + oldDrawPos.x = oldDrawPos.y = -1; for (int idx = 5; idx <= 23; ++idx) { dartNum = idx - 4; @@ -677,38 +673,37 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) { xSize = (*_dartGraphics)[dartNum]._width; ySize = (*_dartGraphics)[dartNum]._height; - ocx = drawX = cx - (*_dartGraphics)[dartNum]._width / 2; - ocy = drawY = cy - (*_dartGraphics)[dartNum]._height; + ocx = drawPos.x = cx - (*_dartGraphics)[dartNum]._width / 2; + ocy = drawPos.y = cy - (*_dartGraphics)[dartNum]._height; - screen._backBuffer1.transBlitFrom((*_dartGraphics)[dartNum], Common::Point(drawX, drawY)); + screen._backBuffer1.transBlitFrom((*_dartGraphics)[dartNum], Common::Point(drawPos.x, drawPos.y)); - if (drawX < 0) { - xSize += drawX; + if (drawPos.x < 0) { + xSize += drawPos.x; if (xSize < 0) xSize = 1; - drawX = 0; + drawPos.x = 0; } - if (drawY < 0) { - ySize += drawY; + if (drawPos.y < 0) { + ySize += drawPos.y; if (ySize < 0) ySize = 1; - drawY = 0; + drawPos.y = 0; } // flush the dart - screen.slamArea(drawX, drawY, xSize, ySize); - if (oldDrawX != -1) - screen.slamArea(oldDrawX, oldDrawY, oldxSize, oldySize); + screen.slamArea(drawPos.x, drawPos.y, xSize, ySize); + if (oldDrawPos.x != -1) + screen.slamArea(oldDrawPos.x, oldDrawPos.y, oldxSize, oldySize); if (idx != 23) - screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawX, drawY), - Common::Rect(drawX, drawY, drawX + xSize, drawY + ySize)); // erase dart + screen._backBuffer1.blitFrom(screen._backBuffer2, drawPos, + Common::Rect(drawPos.x, drawPos.y, drawPos.x + xSize, drawPos.y + ySize)); // erase dart events.wait(1); - oldDrawX = drawX; - oldDrawY = drawY; + oldDrawPos = drawPos; oldxSize = xSize; oldySize = ySize; } @@ -903,7 +898,7 @@ int Darts::throwDart(int dartNum, int computer) { if (!computer) { // Wait for a hit while (!dartHit() && !_vm->shouldQuit()) - ; + events.wait(1); if (_escapePressed) return 0; } else { @@ -927,7 +922,7 @@ int Darts::throwDart(int dartNum, int computer) { if (_escapePressed) return 0; - height = doPowerBar(Common::Point(DART_BAR_VX, DART_HEIGHT_Y), DART_COLOR_FORE, targetPos.y, 1); + height = doPowerBar(Common::Point(DART_BAR_VX, DART_HEIGHT_Y), DART_BAR_FORE, targetPos.y, 1); if (_escapePressed) return 0; diff --git a/engines/sherlock/tattoo/tattoo_fixed_text.cpp b/engines/sherlock/tattoo/tattoo_fixed_text.cpp index c9345e44d1..8475870b19 100644 --- a/engines/sherlock/tattoo/tattoo_fixed_text.cpp +++ b/engines/sherlock/tattoo/tattoo_fixed_text.cpp @@ -27,23 +27,22 @@ namespace Sherlock { namespace Tattoo { -static const char *const FIXED_TEXT_ENGLISH[] = { +static const char *const fixedTextEN[] = { "Money", - "Card", - "Tobacco", - "Timetable", - "Summons", - "Foolscap", - "Damp Paper", - "Bull's Eye", - "Money", "Card", + "Card", + "Tobacco", "Tobacco", "Timetable", + "Timetable", + "Summons", "Summons", "Foolscap", "Foolscap", + "Damp Paper", + "Foolscap", + "Bull's Eye", "Bull's Eye Lantern", "Open", @@ -77,13 +76,13 @@ static const char *const FIXED_TEXT_ENGLISH[] = { "to start", "Hit a key", "Press a key", - "bullseye", + "bullseye", // ?? "GAME OVER", "BUSTED", "Wins", "Scored", "points", - "Hit", + "Hit %s %d", "Double", "Triple", @@ -106,65 +105,167 @@ static const char *const FIXED_TEXT_ENGLISH[] = { "Yes", "No", "Enter Password", - "Going East" + "Going East", // correct password, was not and should not to be translated + // SH2: People names + "Sherlock Holmes", + "Dr. Watson", + "Mrs. Hudson", + "Stanley Forbes", + "Mycroft Holmes", + "Wiggins", + "Police Constable Burns", + "Augustus Trimble", + "Police Constable Daley", + "Matron", + "Sister Grace", + "Preston McCabe", + "Bob Colleran", + "Jonas Rigby", + "Police Constable Roach", + "James Dewar", + "Sergeant Jeremy Duncan", + "Inspector Gregson", + "Inspector Lestrade", + "Jesse Needhem", + "Arthur Fleming", + "Mr. Thomas Pratt", + "Mathilda (Tillie) Mason", + "Adrian Russell", + "Eldridge Whitney", + "Hepplethwaite", + "Horace Silverbridge", + "Old Sherman", + "Maxwell Verner", + "Millicent Redding", + "Virgil Silverbridge", + "George O'Keeffe", + "Lord Denys Lawton", + "Jenkins", + "Jock Mahoney", + "Bartender", + "Lady Cordelia Lockridge", + "Pettigrew", + "Sir Avery Fanshawe", + "Hodgkins", + "Wilbur \"Birdy\" Heywood", + "Jacob Farthington", + "Philip Bledsoe", + "Sidney Fowler", + "Professor Theodore Totman", + "Rose Hinchem", + "Tallboy", + "Ethlebert \"Stitch\" Rumsey", + "Charles Freedman", + "Nigel Hemmings", + "Fairfax Carter", + "Wilhelm II", + "Wachthund", + "Jonathan Wilson", + "David Lloyd-Jones", + "Edward Hargrove", + "Misteray", + "The Lascar", + "Parrot", + "Vincent Scarrett", + "Alexandra", + "Queen Victoria", + "John Brown", + "A Patient", + "A Patient", + "Patron", + "Queen Victoria", + "Patient in white", + "Lush", + "Drunk", + "Prostitute", + "Mudlark", + "Grinder", + "Bouncer", + "Agnes Ratchet", + "Aloysius Ratchet", + "Real Estate Agent", + "Candy Clerk", + "Beadle", + "Prussian", + "Mrs. Rowbottom", + "Miss Lloyd-Jones", + "Tavern patron", + "User", + "Toby", + "Stationer", + "Law Clerk", + "Ministry Clerk", + "Bather", + "Maid", + "Lady Fanshawe", + "Sidney Ratchet", + "Boy", + "Patron", + "Constable Brit", + "Wagon Driver" }; -static const char *const FIXED_TEXT_GERMAN[] = { +// sharp-s : 0xE1 / octal 341 +// small a-umlaut: 0x84 / octal 204 +// small o-umlaut: 0x94 / octal 224 +// small u-umlaut: 0x81 / octal 201 +// large O-umlaut: 0x99 / octal 231 +static const char *const fixedTextDE[] = { "Geld", - "S. Holmes", - "Tabak", - "Plan", - "Aufforderg.", - "Blatt pap.", - "Dunstig pap", - "Handlampe", - "Geld", "S. Holmes", + "S. Holmes", "Tabak", + "Tabak", + "Plan", "Plan", "Aufforderg.", + "Aufforderg.", + "Blatt pap.", "Pergament", "Dunstig pap", + "Dunstig pap", + "Handlampe", "Handlampe", - "ffne", + "\231ffne", "Schau", "Rede", "Benutze", - "Journal", - "Inventory", - "Options", - "Losen", + "Tagebuch", + "Tasche", + "Optionen", + "L\224osen", "mit", "Keine Wirkung...", - "Diese Person weic im Augenblick nichts zu berichten.", + "Diese Person wei\341 im Augenblick nichts zu berichten.", + "Picked up", // <-- ?? "Seite %d", - "Schliecen", - "Lessen", + "Schlie\341en", + "Lessen", // <-- "In Datei sichern", "Suche abbrechen", - "Rbckwarts suchen ", + "R\201ckw\204rts suchen ", "Vorwarts suchen ", "Text nicht gefunden", "Holmes", "Jock", "Bull", - "Runde", - "Gesamt", - "Pfeil", + "Runde: %d", + "Gesamt: %d", + "Pfeil # %d", "zum Starten", - "Taste dracken", - "Taste dracken", - "Bullseye", - "SPIEL BEENDET", - "VERLOREN", - "Gewinnt", - "Erzielte", - "Punkte", - "Treffer", + "Taste dr\201cken", + "Taste dr\201cken", + "Bullseye", // ?? + "SPIEL BEENDET!", + "VERLOREN!", + "Gewinnt!", // "Holmes Gewinnt!", "%s Gewinnt!" + "Erzielte %d Punkte", + "Punkte", // ?? + "Treffer %s %d", "Doppel", "Dreifach", @@ -177,7 +278,7 @@ static const char *const FIXED_TEXT_GERMAN[] = { "Soundeffekte", "Voices", "Textfenster", - "Transparente Menbs", + "Transparente Men\201s", "Schriftart andern", "Aus", "An", @@ -186,19 +287,499 @@ static const char *const FIXED_TEXT_GERMAN[] = { "Sind Sie sicher ?", "Ja", "Nein", - "Pacwort eingeben", - "Going East" + "Pa\341wort eingeben", + "Going East", // correct password, was not and should not to be translated + // SH2: People names + "Sherlock Holmes", // note: People names were not translated in the German interpreter + "Dr. Watson", + "Mrs. Hudson", + "Stanley Forbes", + "Mycroft Holmes", + "Wiggins", + "Police Constable Burns", + "Augustus Trimble", + "Police Constable Daley", + "Matron", + "Sister Grace", + "Preston McCabe", + "Bob Colleran", + "Jonas Rigby", + "Police Constable Roach", + "James Dewar", + "Sergeant Jeremy Duncan", + "Inspector Gregson", + "Inspector Lestrade", + "Jesse Needhem", + "Arthur Fleming", + "Mr. Thomas Pratt", + "Mathilda (Tillie) Mason", + "Adrian Russell", + "Eldridge Whitney", + "Hepplethwaite", + "Horace Silverbridge", + "Old Sherman", + "Maxwell Verner", + "Millicent Redding", + "Virgil Silverbridge", + "George O'Keeffe", + "Lord Denys Lawton", + "Jenkins", + "Jock Mahoney", + "Bartender", + "Lady Cordelia Lockridge", + "Pettigrew", + "Sir Avery Fanshawe", + "Hodgkins", + "Wilbur \"Birdy\" Heywood", + "Jacob Farthington", + "Philip Bledsoe", + "Sidney Fowler", + "Professor Theodore Totman", + "Rose Hinchem", + "Tallboy", + "Ethlebert \"Stitch\" Rumsey", + "Charles Freedman", + "Nigel Hemmings", + "Fairfax Carter", + "Wilhelm II", + "Wachthund", + "Jonathan Wilson", + "David Lloyd-Jones", + "Edward Hargrove", + "Misteray", + "The Lascar", + "Parrot", + "Vincent Scarrett", + "Alexandra", + "Queen Victoria", + "John Brown", + "A Patient", + "A Patient", + "Patron", + "Queen Victoria", + "Patient in white", + "Lush", + "Drunk", + "Prostitute", + "Mudlark", + "Grinder", + "Bouncer", + "Agnes Ratchet", + "Aloysius Ratchet", + "Real Estate Agent", + "Candy Clerk", + "Beadle", + "Prussian", + "Mrs. Rowbottom", + "Miss Lloyd-Jones", + "Tavern patron", + "User", + "Toby", + "Stationer", + "Law Clerk", + "Ministry Clerk", + "Bather", + "Maid", + "Lady Fanshawe", + "Sidney Ratchet", + "Boy", + "Patron", + "Constable Brit", + "Wagon Driver" +}; + +// small a w/ accent grave: 0x85 / octal 205 +// small e w/ accent acute: 0x82 / octal 202 +// small e w/ accent grave: 0x8A / octal 212 +// small e w/ circonflexe: 0x88 / octal 210 +// small cedilla: 0x87 / octal 207 +static const char *const fixedTextFR[] = { + "Argent", + "Argent", + "S. Holmes", + "S. Holmes", + "Tabac", + "Tabac", + "Horaire", + "Horaire", + "Convocation", + "Convocation", + "Feuille", + "Feuille", + "F. humide", + "Feuille", + "Lanterne", + "Lanterne", + + "Ouvrir", + "Regarder", + "Parler", + "Utiliser", + "Journal", // <-- + "Inventaire", + "Options", + "R\202soudre", + "avec", + "Sans effet...", + "Cette personne n'a rien \205 ajouter pour le moment.", + "Picked up", // <-- ?? + + "Page %d", + "Fermer", + "Lessen", // <-- + "Sauvegarder", + "Annuler ", + "Chercher avant", + "Chercher apr\212s", + "Texte introuvable !", + + "Holmes", + "Jock", + "Bull", + "Tour: %d", + "Total: %d", + "Fl\202chette # %d", + "pour commencer", + "Appuyez sur C", + "Appuyez sur C", + "Bullseye", // ?? + "FIN DE LA PARTIE!", // original: "Fin de la partie!" + "FIASCO!", + "Gagnant!", // "Holmes Gagnant!", "%s Gagnant!" + "Total des points: %d", + "Punkte", // ?? + "Treffer %s %d", + "double", + "triple", + + "Mouillez", + "Puis", + "Chauffez", + "Charger", + "Sauvegarder", + "Musique", + "Sons", + "Voix", + "Fen\210tres de texte", // 0x88 + "Menu Transparent", + "Changer la fonte", + "Aus", // ??? + "An", // ??? + "Quitter", + "Voulez-vous quitter?", + "Sind Sie sicher ?", // ??? + "Oui", + "Non", + "Entrez le mot de passe", + "Going East", // correct password, was not and should not to be translated + // SH2: People names + "Sherlock Holmes", + "Dr. Watson", + "Mme. Hudson", + "Stanley Forbes", + "Mycroft Holmes", + "Wiggins", + "Sergent Burns", + "Augustus Trimble", + "Sergent Daley", + "Infirmi\212re chef", + "Mme. Grace", + "Preston McCabe", + "Bob Colleran", + "Jonas Rigby", + "Sergent Roach", + "James Dewar", + "Sergent Jeremy Duncan", + "Inspecteur Gregson", + "Inspecteur Lestrade", + "Jesse Needhem", + "Arthur Fleming", + "M. Thomas Pratt", + "Mathilda (Tillie) Mason", + "Adrian Russell", + "Eldridge Whitney", + "Hepplethwaite", + "Horace Silverbridge", + "Sherman", + "Maxwell Verner", + "Millicent Redding", + "Virgil Silverbridge", + "George O'Keeffe", + "Lord Denys Lawton", + "Jenkins", + "Jock Mahoney", + "Serveur", + "Lady Cordelia Lockridge", + "Pettigrew", + "Sir Avery Fanshawe", + "Hodgkins", + "Wilbur \"Birdy\" Heywood", + "Jacob Farthington", + "Philip Bledsoe", + "Sidney Fowler", + "Professeur Theodore Totman", + "Rose Hinchem", + "Tallboy", + "Ethlebert \"Stitch\" Rumsey", + "Charles Freedman", + "Nigel Hemmings", + "Fairfax Carter", + "Wilhelm II", + "Wachthund", + "Jonathan Wilson", + "David Lloyd-Jones", + "Edward Hargrove", + "Misteray", + "Le Lascar", + "Oiseau", + "Vincent Scarrett", + "Alexandra", + "Queen Victoria", + "John Brown", + "Patient", + "Patient", + "Client", + "Queen Victoria", + "Patient en blanc", + "Ivrogne", + "Ivrogne", + "Belle femme", + "Mudlark", + "Broyeur", + "Videur", + "Agnes Ratchet", + "Aloysius Ratchet", + "Immobilier", + "Gar\207on", + "Beadle", + "Prussian", + "Mme. Rowbottom", + "Mme Lloyd-Jones", + "Tavern Client", + "User", + "Toby", + "Papeterie", + "Law Clerc", + "Ministry Employ\202", + "Clint du thermes", + "Bonne", + "Lady Fanshawe", + "Sidney Ratchet", + "Gar\207on", + "Client", + "Sergent Brit", + "Wagon Driver" +}; + +// small a w/ accent bottom to top : 0xA0 / octal 240 +// small i w/ accent bottom to top : 0xA1 / octal 241 +// small o w/ accent bottom to top : 0xA2 / octal 242 +// small u w/ accent bottom to top : 0xA3 / octal 243 +// small n w/ wavy line : 0xA4 / octal 244 +// inverted question mark : 0xA8 / octal 250 +static const char *const fixedTextES[] = { + "Dinero", + "Dinero", + "Tarjeta", + "Tarjeta", + "Tabaco", + "Tabaco", + "Horarios", + "Horarios", + "Mensaje", + "Mensaje", + "Papel", + "Papel", + "Papel", + "Papel", + "Linterna", + "Linterna", + + "Abrir", + "Mirar", + "Hablar", + "Usar", + "Diario", + "Inventario", + "Opciones", + "Resolver", + "con", + "Sin Efecto...", + "Esta persona no tiene nada que decir en este momento", + "Picked up", // <-- ?? + + "P\240gina %d", + "Cerrar Diario", + "Lessen", // <-- not included?!?! + "Salvar en Archivo", + "Detener B\243squeda", + "Buscar Hacia Atr\240s", + "Buscar Hacia Delante", + "Texto No Encontrado !", + + "Holmes", // + "Jock", + "Bull", + "Vuelta: %d", + "Total del Turno: %d", + "Dardo # %d", + "para empezar", + "Pulsa una tecla", + "Pulsa una tecla", + "Golpe %s ojo de buey", // ?? + "FIN DE LA PARTIDA!", + "ROTO!", + "Gana!", // "Holmes Gana!", "%s Gana!" + "Puntuado %d puntos", + "puntos", // ?? + "Golpe %s %d", + "doble", + "triple", + + "aplicar", + "Agua", + "Calentar", + "Cargar Partida", + "Salvar Partida", + "M\243sica", + "Efectos de Sonido", + "Voces", + "Ventanas de Texto", + "Men\243s Transparentes", + "Cambiar Tipo de Letra", + "Off", // ??? + "On", // ??? + "Salir", + "quieres salir?", + "\250Est s seguro de que", + "Si", + "Non", + "Introducir Palabra Clave", + "Vas al Este", // correct password, was translated in Spanish version (???) + // SH2: People names + "Sherlock Holmes", + "Dr. Watson", + "Sta. Hudson", + "Stanley Forbes", + "Mycroft Holmes", + "Wiggins", + "Agente de Polic\241a Burns", + "Augustus Trimble", + "Agente de Polic\241a Daley", + "Enfermera", + "Hermana Grace", + "Preston McCabe", + "Bob Colleran", + "Jonas Rigby", + "Agente de Polic\241a Roach", + "James Dewar", + "Sargento Jeremy Duncan", + "Inspector Gregson", + "Inspector Lestrade", + "Jesse Needhem", + "Arthur Fleming", + "Sr. Thomas Pratt", + "Mathilda (Tillie) Mason", + "Adrian Russell", + "Eldridge Whitney", + "Hepplethwaite", + "Horace Silverbridge", + "Old Sherman", + "Maxwell Verner", + "Millicent Redding", + "Virgil Silverbridge", + "George O'Keeffe", + "Lord Denys Lawton", + "Jenkins", + "Jock Mahoney", + "Camarero", + "Lady Cordelia Lockridge", + "Pettigrew", + "Sir Avery Fanshawe", + "Hodgkins", + "Wilbur \"Birdy\" Heywood", + "Jacob Farthington", + "Philip Bledsoe", + "Sidney Fowler", + "Profesor Theodore Totman", + "Rose Hinchem", + "Tallboy", + "Ethlebert \"Stitch\" Rumsey", + "Charles Freedman", + "Nigel Hemmings", + "Fairfax Carter", + "Guillermo II", + "Wachthund", + "Jonathan Wilson", + "David Lloyd-Jones", + "Edward Hargrove", + "Misteray", + "The Lascar", + "Loro", + "Vincent Scarrett", + "Alexandra", + "Reina Victoria", + "John Brown", + "Un Paciente", + "Un Paciente", + "Cliente", + "Reina Victoria", + "Paciente de blanco", + "Exuberante", + "Borracho", + "Prostituta", + "Mudlark", + "Grinder", + "Mat\242n", // sic? means block in Spanish and not bouncer?! + "Agnes Ratchet", + "Aloysius Ratchet", + "Agente de Bienes Ra\241ces", + "Candy Clerk", + "Beadle", + "Prusiano", + "Sta. Rowbottom", + "Sra. Lloyd-Jones", + "Parroquiano", + "Usuario", + "Toby", + "Papelero", + "Secretario de Justicia", + "Secreatrio del Ministerio", + "Ba\244ista", + "Criada", + "Lady Fanshawe", + "Sidney Ratchet", + "Chico", + "Patron", // ??? not found?? + "Agente Brit", + "Cochero" +}; + +// TODO: There also was a Spanish version of Sherlock Holmes 2 +static const FixedTextLanguageEntry fixedTextLanguages[] = { + { Common::DE_DEU, fixedTextDE }, + { Common::ES_ESP, fixedTextES }, + { Common::EN_ANY, fixedTextEN }, + { Common::FR_FRA, fixedTextFR }, + { Common::UNK_LANG, fixedTextEN } }; TattooFixedText::TattooFixedText(SherlockEngine *vm) : FixedText(vm) { - if (vm->getLanguage() == Common::DE_DEU) - _fixedText = FIXED_TEXT_GERMAN; - else - _fixedText = FIXED_TEXT_ENGLISH; + // Figure out which fixed texts to use + Common::Language curLanguage = _vm->getLanguage(); + + const FixedTextLanguageEntry *curLanguageEntry = fixedTextLanguages; + + while (curLanguageEntry->language != Common::UNK_LANG) { + if (curLanguageEntry->language == curLanguage) + break; // found current language + curLanguageEntry++; + } + _curLanguageEntry = curLanguageEntry; } const char *TattooFixedText::getText(int fixedTextId) { - return _fixedText[fixedTextId]; + return _curLanguageEntry->fixedTextArray[fixedTextId]; } const Common::String TattooFixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) { diff --git a/engines/sherlock/tattoo/tattoo_fixed_text.h b/engines/sherlock/tattoo/tattoo_fixed_text.h index 3f43678ca2..48d237db3c 100644 --- a/engines/sherlock/tattoo/tattoo_fixed_text.h +++ b/engines/sherlock/tattoo/tattoo_fixed_text.h @@ -31,20 +31,20 @@ namespace Tattoo { enum FixedTextId { kFixedText_Inv1, - kFixedText_Inv2, - kFixedText_Inv3, - kFixedText_Inv4, - kFixedText_Inv5, - kFixedText_Inv6, - kFixedText_Inv7, - kFixedText_Inv8, kFixedText_InvDesc1, + kFixedText_Inv2, kFixedText_InvDesc2, + kFixedText_Inv3, kFixedText_InvDesc3, + kFixedText_Inv4, kFixedText_InvDesc4, + kFixedText_Inv5, kFixedText_InvDesc5, + kFixedText_Inv6, kFixedText_InvDesc6, + kFixedText_Inv7, kFixedText_InvDesc7, + kFixedText_Inv8, kFixedText_InvDesc8, kFixedText_Open, kFixedText_Look, @@ -106,12 +106,114 @@ enum FixedTextId { kFixedText_Yes, kFixedText_No, kFixedText_EnterPassword, - kFixedText_CorrectPassword + kFixedText_CorrectPassword, + // SH2: People names + kFixedText_People_SherlockHolmes, + kFixedText_People_DrWatson, + kFixedText_People_MrsHudson, + kFixedText_People_StanleyForbes, + kFixedText_People_MycroftHolmes, + kFixedText_People_Wiggins, + kFixedText_People_PoliceConstableBurns, + kFixedText_People_AugustusTrimble, + kFixedText_People_PoliceConstableDaley, + kFixedText_People_Matron, + kFixedText_People_SisterGrace, + kFixedText_People_PrestonMcCabe, + kFixedText_People_BobColleran, + kFixedText_People_JonasRigby, + kFixedText_People_PoliceConstableRoach, + kFixedText_People_JamesDewar, + kFixedText_People_SergeantJeremyDuncan, + kFixedText_People_InspectorGregson, + kFixedText_People_InspectorLestrade, + kFixedText_People_JesseNeedhem, + kFixedText_People_ArthurFleming, + kFixedText_People_MrThomasPratt, + kFixedText_People_MathildaTillieMason, + kFixedText_People_AdrianRussell, + kFixedText_People_EldridgeWhitney, + kFixedText_People_Hepplethwaite, + kFixedText_People_HoraceSilverbridge, + kFixedText_People_OldSherman, + kFixedText_People_MaxwellVerner, + kFixedText_People_MillicentRedding, + kFixedText_People_VirgilSilverbridge, + kFixedText_People_GeorgeOKeeffe, + kFixedText_People_LordDenysLawton, + kFixedText_People_Jenkins, + kFixedText_People_JockMahoney, + kFixedText_People_Bartender, + kFixedText_People_LadyCordeliaLockridge, + kFixedText_People_Pettigrew, + kFixedText_People_SirAveryFanshawe, + kFixedText_People_Hodgkins, + kFixedText_People_WilburBirdyHeywood, + kFixedText_People_JacobFarthington, + kFixedText_People_PhilipBledsoe, + kFixedText_People_SidneyFowler, + kFixedText_People_ProfessorTheodoreTotman, + kFixedText_People_RoseHinchem, + kFixedText_People_Tallboy, + kFixedText_People_EthlebertStitchRumsey, + kFixedText_People_CharlesFreedman, + kFixedText_People_NigelHemmings, + kFixedText_People_FairfaxCarter, + kFixedText_People_WilhelmII, + kFixedText_People_Wachthund, + kFixedText_People_JonathanWilson, + kFixedText_People_DavidLloydJones, + kFixedText_People_EdwardHargrove, + kFixedText_People_Misteray, + kFixedText_People_TheLascar, + kFixedText_People_Parrot, + kFixedText_People_VincentScarrett, + kFixedText_People_Alexandra, + kFixedText_People_QueenVictoria, + kFixedText_People_JohnBrown, + kFixedText_People_APatient1, + kFixedText_People_APatient2, + kFixedText_People_Patron, + kFixedText_People_QueenVictoria2, + kFixedText_People_PatientInWhite, + kFixedText_People_Lush, + kFixedText_People_Drunk, + kFixedText_People_Prostitute, + kFixedText_People_Mudlark, + kFixedText_People_Grinder, + kFixedText_People_Bouncer, + kFixedText_People_AgnesRatchet, + kFixedText_People_AloysiusRatchet, + kFixedText_People_RealEstateAgent, + kFixedText_People_CandyClerk, + kFixedText_People_Beadle, + kFixedText_People_Prussian, + kFixedText_People_MrsRowbottom, + kFixedText_People_MissLloydJones, + kFixedText_People_TavernPatron, + kFixedText_People_User, + kFixedText_People_Toby, + kFixedText_People_Stationer, + kFixedText_People_LawClerk, + kFixedText_People_MinistryClerk, + kFixedText_People_Bather, + kFixedText_People_Maid, + kFixedText_People_LadyFanshawe, + kFixedText_People_SidneyRatchet, + kFixedText_People_Boy, + kFixedText_People_Patron2, + kFixedText_People_ConstableBrit, + kFixedText_People_WagonDriver +}; + +struct FixedTextLanguageEntry { + Common::Language language; + const char *const *fixedTextArray; }; class TattooFixedText: public FixedText { private: - const char *const *_fixedText; + const FixedTextLanguageEntry *_curLanguageEntry; public: TattooFixedText(SherlockEngine *vm); virtual ~TattooFixedText() {} diff --git a/engines/sherlock/tattoo/tattoo_people.cpp b/engines/sherlock/tattoo/tattoo_people.cpp index 46d91cead8..0af8deff9f 100644 --- a/engines/sherlock/tattoo/tattoo_people.cpp +++ b/engines/sherlock/tattoo/tattoo_people.cpp @@ -121,12 +121,13 @@ TattooPerson::TattooPerson() : Person() { _lookHolmes = false; } -void TattooPerson::freeAltGraphics() { - if (_altImages != nullptr) { - delete _altImages; - _altImages = nullptr; - } +TattooPerson::~TattooPerson() { + delete _altImages; +} +void TattooPerson::freeAltGraphics() { + delete _altImages; + _altImages = nullptr; _altSeq = 0; } diff --git a/engines/sherlock/tattoo/tattoo_people.h b/engines/sherlock/tattoo/tattoo_people.h index 722c4a9aaa..e0d53c67dd 100644 --- a/engines/sherlock/tattoo/tattoo_people.h +++ b/engines/sherlock/tattoo/tattoo_people.h @@ -128,7 +128,7 @@ public: bool _lookHolmes; public: TattooPerson(); - virtual ~TattooPerson() {} + virtual ~TattooPerson(); /** * Clear the NPC related data diff --git a/engines/sherlock/tattoo/tattoo_resources.cpp b/engines/sherlock/tattoo/tattoo_resources.cpp index 3be41e2650..4b73356d58 100644 --- a/engines/sherlock/tattoo/tattoo_resources.cpp +++ b/engines/sherlock/tattoo/tattoo_resources.cpp @@ -21,309 +21,111 @@ */ #include "sherlock/tattoo/tattoo_resources.h" +#include "sherlock/tattoo/tattoo_fixed_text.h" namespace Sherlock { namespace Tattoo { -const char PORTRAITS[TATTOO_MAX_PEOPLE][5] = { - { "HOLM" }, // Sherlock Holmes - { "WATS" }, // Dr. Watson - { "HUDS" }, // Mrs. Hudson - { "FORB" }, // Stanley Forbes - { "MYCR" }, // Mycroft Holmes - { "WIGG" }, // Wiggins - { "BURN" }, // Police Constable Burns - { "TRIM" }, // Augustus Trimble - { "DALE" }, // Police Constable Daley - { "MATR" }, // Matron - { "GRAC" }, // Sister Grace - { "MCCA" }, // Preston McCabe - { "COLL" }, // Bob Colleran - { "JONA" }, // Jonas Rigby - { "ROAC" }, // Police Constable Roach - { "DEWA" }, // James Dewar - { "JERE" }, // Sergeant Jeremy Duncan - { "GREG" }, // Inspector Gregson - { "LEST" }, // Inspector Lestrade - { "NEED" }, // Jesse Needhem - { "FLEM" }, // Arthur Fleming - { "PRAT" }, // Mr. Thomas Pratt - { "TILL" }, // Mathilda (Tillie) Mason - { "RUSS" }, // Adrian Russell - { "WHIT" }, // Eldridge Whitney - { "HEPP" }, // Hepplethwaite - { "HORA" }, // Horace Silverbridge - { "SHER" }, // Old Sherman - { "VERN" }, // Maxwell Verner - { "REDD" }, // Millicent Redding - { "VIRG" }, // Virgil Silverbridge - { "GEOR" }, // George O'Keeffe - { "LAWT" }, // Lord Denys Lawton - { "JENK" }, // Jenkins - { "JOCK" }, // Jock Mahoney - { "BART" }, // Bartender - { "LADY" }, // Lady Cordelia Lockridge - { "PETT" }, // Pettigrew - { "FANS" }, // Sir Avery Fanshawe - { "HODG" }, // Hodgkins - { "WILB" }, // Wilbur "Birdy" Heywood - { "JACO" }, // Jacob Farthington - { "BLED" }, // Philip Bledsoe - { "FOWL" }, // Sidney Fowler - { "PROF" }, // Professor Theodore Totman - { "ROSE" }, // Rose Hinchem - { "TALL" }, // Tallboy - { "STIT" }, // Ethlebert "Stitch" Rumsey - { "FREE" }, // Charles Freedman - { "HEMM" }, // Nigel Hemmings - { "CART" }, // Fairfax Carter - { "WILH" }, // Wilhelm II - { "WACH" }, // Wachthund - { "WILS" }, // Jonathan Wilson - { "DAVE" }, // David Lloyd-Jones - { "HARG" }, // Edward Hargrove - { "MORI" }, // Professor James Moriarty - { "LASC" }, // The Lascar - { "PARR" }, // Parrot - { "SCAR" }, // Vincent Scarrett - { "ALEX" }, // Alexandra - { "QUEE" }, // Queen Victoria - { "JOHN" }, // John Brown - { "PAT1" }, // Patient #1 - { "PAT2" }, // Patient #2 - { "PATR" }, // Patron - { "QUEN" }, // Queen Victoria - { "WITE" }, // Patient in White - { "LUSH" }, // Lush - { "DRNK" }, // Drunk - { "PROS" }, // Prostitute - { "MUDL" }, // Mudlark - { "GRIN" }, // Grinder - { "BOUN" }, // Bouncer - { "RATC" }, // Agnes Ratchet - { "ALOY" }, // Aloysius Ratchet - { "REAL" }, // Real Estate Agent - { "CAND" }, // Candy Clerk - { "BEAD" }, // Beadle - { "PRUS" }, // Prussian - { "ROWB" }, // Mrs. Rowbottom - { "MSLJ" }, // Miss Lloyd-Jones - { "TPAT" }, // Tavern patron - { "USER" }, // User - { "TOBY" }, // Toby - { "STAT" }, // Stationer - { "CLRK" }, // Law Clerk - { "CLER" }, // Ministry Clerk - { "BATH" }, // Bather - { "MAID" }, // Maid - { "LADF" }, // Lady Fanshawe - { "SIDN" }, // Sidney Ratchet - { "BOYO" }, // Boy - { "PTR2" }, // Second Patron - { "BRIT" }, // Constable Brit - { "DROV" } // Wagon Driver +const PeopleData PEOPLE_DATA[TATTOO_MAX_PEOPLE] = { + { "HOLM", kFixedText_People_SherlockHolmes }, + { "WATS", kFixedText_People_DrWatson }, + { "HUDS", kFixedText_People_MrsHudson }, + { "FORB", kFixedText_People_StanleyForbes }, + { "MYCR", kFixedText_People_MycroftHolmes }, + { "WIGG", kFixedText_People_Wiggins }, + { "BURN", kFixedText_People_PoliceConstableBurns }, + { "TRIM", kFixedText_People_AugustusTrimble }, + { "DALE", kFixedText_People_PoliceConstableDaley }, + { "MATR", kFixedText_People_Matron }, + { "GRAC", kFixedText_People_SisterGrace }, + { "MCCA", kFixedText_People_PrestonMcCabe }, + { "COLL", kFixedText_People_BobColleran }, + { "JONA", kFixedText_People_JonasRigby }, + { "ROAC", kFixedText_People_PoliceConstableRoach }, + { "DEWA", kFixedText_People_JamesDewar }, + { "JERE", kFixedText_People_SergeantJeremyDuncan }, + { "GREG", kFixedText_People_InspectorGregson }, + { "LEST", kFixedText_People_InspectorLestrade }, + { "NEED", kFixedText_People_JesseNeedhem }, + { "FLEM", kFixedText_People_ArthurFleming }, + { "PRAT", kFixedText_People_MrThomasPratt }, + { "TILL", kFixedText_People_MathildaTillieMason }, + { "RUSS", kFixedText_People_AdrianRussell }, + { "WHIT", kFixedText_People_EldridgeWhitney }, + { "HEPP", kFixedText_People_Hepplethwaite }, + { "HORA", kFixedText_People_HoraceSilverbridge }, + { "SHER", kFixedText_People_OldSherman }, + { "VERN", kFixedText_People_MaxwellVerner }, + { "REDD", kFixedText_People_MillicentRedding }, + { "VIRG", kFixedText_People_VirgilSilverbridge }, + { "GEOR", kFixedText_People_GeorgeOKeeffe }, + { "LAWT", kFixedText_People_LordDenysLawton }, + { "JENK", kFixedText_People_Jenkins }, + { "JOCK", kFixedText_People_JockMahoney }, + { "BART", kFixedText_People_Bartender }, + { "LADY", kFixedText_People_LadyCordeliaLockridge }, + { "PETT", kFixedText_People_Pettigrew }, + { "FANS", kFixedText_People_SirAveryFanshawe }, + { "HODG", kFixedText_People_Hodgkins }, + { "WILB", kFixedText_People_WilburBirdyHeywood }, + { "JACO", kFixedText_People_JacobFarthington }, + { "BLED", kFixedText_People_PhilipBledsoe }, + { "FOWL", kFixedText_People_SidneyFowler }, + { "PROF", kFixedText_People_ProfessorTheodoreTotman }, + { "ROSE", kFixedText_People_RoseHinchem }, + { "TALL", kFixedText_People_Tallboy }, + { "STIT", kFixedText_People_EthlebertStitchRumsey }, + { "FREE", kFixedText_People_CharlesFreedman }, + { "HEMM", kFixedText_People_NigelHemmings }, + { "CART", kFixedText_People_FairfaxCarter }, + { "WILH", kFixedText_People_WilhelmII }, + { "WACH", kFixedText_People_Wachthund }, + { "WILS", kFixedText_People_JonathanWilson }, + { "DAVE", kFixedText_People_DavidLloydJones }, + { "HARG", kFixedText_People_EdwardHargrove }, + { "MORI", kFixedText_People_Misteray }, + { "LASC", kFixedText_People_TheLascar }, + { "PARR", kFixedText_People_Parrot }, + { "SCAR", kFixedText_People_VincentScarrett }, + { "ALEX", kFixedText_People_Alexandra }, + { "QUEE", kFixedText_People_QueenVictoria }, + { "JOHN", kFixedText_People_JohnBrown }, + { "PAT1", kFixedText_People_APatient1 }, + { "PAT2", kFixedText_People_APatient2 }, + { "PATR", kFixedText_People_Patron }, + { "QUEN", kFixedText_People_QueenVictoria }, + { "WITE", kFixedText_People_PatientInWhite }, + { "LUSH", kFixedText_People_Lush }, + { "DRNK", kFixedText_People_Drunk }, + { "PROS", kFixedText_People_Prostitute }, + { "MUDL", kFixedText_People_Mudlark }, + { "GRIN", kFixedText_People_Grinder }, + { "BOUN", kFixedText_People_Bouncer }, + { "RATC", kFixedText_People_AgnesRatchet }, + { "ALOY", kFixedText_People_AloysiusRatchet }, + { "REAL", kFixedText_People_RealEstateAgent }, + { "CAND", kFixedText_People_CandyClerk }, + { "BEAD", kFixedText_People_Beadle }, + { "PRUS", kFixedText_People_Prussian }, + { "ROWB", kFixedText_People_MrsRowbottom }, + { "MSLJ", kFixedText_People_MissLloydJones }, + { "TPAT", kFixedText_People_TavernPatron }, + { "USER", kFixedText_People_User }, + { "TOBY", kFixedText_People_Toby }, + { "STAT", kFixedText_People_Stationer }, + { "CLRK", kFixedText_People_LawClerk }, + { "CLER", kFixedText_People_MinistryClerk }, + { "BATH", kFixedText_People_Bather }, + { "MAID", kFixedText_People_Maid }, + { "LADF", kFixedText_People_LadyFanshawe }, + { "SIDN", kFixedText_People_SidneyRatchet }, + { "BOYO", kFixedText_People_Boy }, + { "PTR2", kFixedText_People_Patron2 }, + { "BRIT", kFixedText_People_ConstableBrit }, + { "DROV", kFixedText_People_WagonDriver } }; -const char *const FRENCH_NAMES[TATTOO_MAX_PEOPLE] = { - "Sherlock Holmes", - "Dr. Watson", - "Mme. Hudson", - "Stanley Forbes", - "Mycroft Holmes", - "Wiggins", - "Sergent Burns", - "Augustus Trimble", - "Sergent Daley", - "Infirmi?re chef", - "Mme. Grace", - "Preston McCabe", - "Bob Colleran", - "Jonas Rigby", - "Sergent Roach", - "James Dewar", - "Sergent Jeremy Duncan", - "Inspecteur Gregson", - "Inspecteur Lestrade", - "Jesse Needhem", - "Arthur Fleming", - "M. Thomas Pratt", - "Mathilda (Tillie) Mason", - "Adrian Russell", - "Eldridge Whitney", - "Hepplethwaite", - "Horace Silverbridge", - "Sherman", - "Maxwell Verner", - "Millicent Redding", - "Virgil Silverbridge", - "George O'Keeffe", - "Lord Denys Lawton", - "Jenkins", - "Jock Mahoney", - "Serveur", - "Lady Cordelia Lockridge", - "Pettigrew", - "Sir Avery Fanshawe", - "Hodgkins", - "Wilbur \"Birdy\" Heywood", - "Jacob Farthington", - "Philip Bledsoe", - "Sidney Fowler", - "Professeur Theodore Totman", - "Rose Hinchem", - "Tallboy", - "Ethlebert \"Stitch\" Rumsey", - "Charles Freedman", - "Nigel Hemmings", - "Fairfax Carter", - "Wilhelm II", - "Wachthund", - "Jonathan Wilson", - "David Lloyd-Jones", - "Edward Hargrove", - "Misteray", - "Le Lascar", - "Oiseau", - "Vincent Scarrett", - "Alexandra", - "Queen Victoria", - "John Brown", - "Patient", - "Patient", - "Client", - "Queen Victoria", - "Patient en blanc", - "Ivrogne", - "Ivrogne", - "Belle femme", - "Mudlark", - "Broyeur", - "Videur", - "Agnes Ratchet", - "Aloysius Ratchet", - "Immobilier", - "Gar?on", - "Beadle", - "Prussian", - "Mme. Rowbottom", - "Mme Lloyd-Jones", - "Tavern Client", - "User", - "Toby", - "Papeterie", - "Law Clerc", - "Ministry Employ?", - "Clint du thermes", - "Bonne", - "Lady Fanshawe", - "Sidney Ratchet", - "Gar?on", - "Client", - "Sergent Brit", - "Wagon Driver" -}; - -const char *const ENGLISH_NAMES[TATTOO_MAX_PEOPLE] = { - "Sherlock Holmes", - "Dr. Watson", - "Mrs. Hudson", - "Stanley Forbes", - "Mycroft Holmes", - "Wiggins", - "Police Constable Burns", - "Augustus Trimble", - "Police Constable Daley", - "Matron", - "Sister Grace", - "Preston McCabe", - "Bob Colleran", - "Jonas Rigby", - "Police Constable Roach", - "James Dewar", - "Sergeant Jeremy Duncan", - "Inspector Gregson", - "Inspector Lestrade", - "Jesse Needhem", - "Arthur Fleming", - "Mr. Thomas Pratt", - "Mathilda (Tillie) Mason", - "Adrian Russell", - "Eldridge Whitney", - "Hepplethwaite", - "Horace Silverbridge", - "Old Sherman", - "Maxwell Verner", - "Millicent Redding", - "Virgil Silverbridge", - "George O'Keeffe", - "Lord Denys Lawton", - "Jenkins", - "Jock Mahoney", - "Bartender", - "Lady Cordelia Lockridge", - "Pettigrew", - "Sir Avery Fanshawe", - "Hodgkins", - "Wilbur \"Birdy\" Heywood", - "Jacob Farthington", - "Philip Bledsoe", - "Sidney Fowler", - "Professor Theodore Totman", - "Rose Hinchem", - "Tallboy", - "Ethlebert \"Stitch\" Rumsey", - "Charles Freedman", - "Nigel Hemmings", - "Fairfax Carter", - "Wilhelm II", - "Wachthund", - "Jonathan Wilson", - "David Lloyd-Jones", - "Edward Hargrove", - "Misteray", - "The Lascar", - "Parrot", - "Vincent Scarrett", - "Alexandra", - "Queen Victoria", - "John Brown", - "A Patient", - "A Patient", - "Patron", - "Queen Victoria", - "Patient in white", - "Lush", - "Drunk", - "Prostitute", - "Mudlark", - "Grinder", - "Bouncer", - "Agnes Ratchet", - "Aloysius Ratchet", - "Real Estate Agent", - "Candy Clerk", - "Beadle", - "Prussian", - "Mrs. Rowbottom", - "Miss Lloyd-Jones", - "Tavern patron", - "User", - "Toby", - "Stationer", - "Law Clerk", - "Ministry Clerk", - "Bather", - "Maid", - "Lady Fanshawe", - "Sidney Ratchet", - "Boy", - "Patron", - "Constable Brit", - "Wagon Driver" -}; - - } // End of namespace Tattoo } // End of namespace Sherlock diff --git a/engines/sherlock/tattoo/tattoo_resources.h b/engines/sherlock/tattoo/tattoo_resources.h index b706d90f2d..85a78734b9 100644 --- a/engines/sherlock/tattoo/tattoo_resources.h +++ b/engines/sherlock/tattoo/tattoo_resources.h @@ -31,9 +31,12 @@ namespace Tattoo { #define TATTOO_MAX_PEOPLE 96 -extern const char PORTRAITS[TATTOO_MAX_PEOPLE][5]; -extern const char *const FRENCH_NAMES[TATTOO_MAX_PEOPLE]; -extern const char *const ENGLISH_NAMES[TATTOO_MAX_PEOPLE]; +struct PeopleData { + const char *portrait; + int fixedTextId; +}; + +extern const PeopleData PEOPLE_DATA[TATTOO_MAX_PEOPLE]; } // End of namespace Tattoo diff --git a/engines/sherlock/tattoo/tattoo_scene.cpp b/engines/sherlock/tattoo/tattoo_scene.cpp index ca536f3e64..27f37665dc 100644 --- a/engines/sherlock/tattoo/tattoo_scene.cpp +++ b/engines/sherlock/tattoo/tattoo_scene.cpp @@ -90,20 +90,25 @@ bool TattooScene::loadScene(const Common::String &filename) { } } + // Handle loading music for the scene + if (talk._scriptMoreFlag != 1 && talk._scriptMoreFlag != 3) + music._nextSongName = Common::String::format("res%02d", _currentScene); + // Set the NPC paths for the scene setNPCPath(WATSON); - // Handle loading music for the scene - if (music._musicOn) { - if (talk._scriptMoreFlag != 1 && talk._scriptMoreFlag != 3) - music._nextSongName = Common::String::format("res%02d", _currentScene); - - // If it's a new song, then start it up - if (music._currentSongName.compareToIgnoreCase(music._nextSongName)) { - if (music.loadSong(music._nextSongName)) { - if (music._musicOn) - music.startSong(); - } + // If it's a new song, then start it up + if (music._currentSongName.compareToIgnoreCase(music._nextSongName)) { + // WORKAROUND: Stop playing music after Diogenes fire scene in the intro, + // since it overlaps slightly into the next scene + if (talk._scriptName == "prol80p" && _currentScene == 80) { + music.stopMusic(); + events.wait(5); + } + + if (music.loadSong(music._nextSongName)) { + if (music._musicOn) + music.startSong(); } } @@ -655,8 +660,6 @@ int TattooScene::startCAnim(int cAnimNum, int playRate) { if (ui._windowOpen) ui.banishWindow(); - //_activeCAnim._filesize = cAnim._size; - // Open up the room resource file and get the data for the animation Common::SeekableReadStream *stream = res.load(_roomFilename); stream->seek(44 + cAnimNum * 4); @@ -692,6 +695,7 @@ int TattooScene::startCAnim(int cAnimNum, int playRate) { _goToScene = STARTING_GAME_SCENE; talk._talkToAbort = true; _activeCAnim.close(); + break; } } } @@ -718,6 +722,7 @@ int TattooScene::startCAnim(int cAnimNum, int playRate) { // Flag the Canimation to be cleared _activeCAnim._zPlacement = REMOVE; _activeCAnim._removeBounds = _activeCAnim._oldBounds; + _vm->_ui->_bgFound = -1; // Free up the animation _activeCAnim.close(); diff --git a/engines/sherlock/tattoo/tattoo_talk.cpp b/engines/sherlock/tattoo/tattoo_talk.cpp index a4ceca042b..a5ada7b63e 100644 --- a/engines/sherlock/tattoo/tattoo_talk.cpp +++ b/engines/sherlock/tattoo/tattoo_talk.cpp @@ -341,6 +341,10 @@ OpcodeReturn TattooTalk::cmdNextSong(const byte *&str) { music._nextSongName += str[idx]; str += 7; + // WORKAROUND: Original game set wrong music name at the end of the introduction sequence + if (_scriptName == "prol80p" && music._nextSongName == "default") + music._nextSongName = "01cue90"; + return RET_SUCCESS; } diff --git a/engines/sherlock/tattoo/tattoo_user_interface.cpp b/engines/sherlock/tattoo/tattoo_user_interface.cpp index 623fb8dbf5..ee028f89c2 100644 --- a/engines/sherlock/tattoo/tattoo_user_interface.cpp +++ b/engines/sherlock/tattoo/tattoo_user_interface.cpp @@ -277,7 +277,7 @@ void TattooUserInterface::handleInput() { scene._goToScene = STARTING_GAME_SCENE; } else if (_menuMode == STD_MODE) { if (_keyState.keycode == Common::KEYCODE_s && vm._allowFastMode) { - vm._fastMode = !vm._fastMode; + events.toggleSpeed(); } else if (_keyState.keycode == Common::KEYCODE_l && _bgFound != -1) { // Beging used for testing that Look dialogs work @@ -375,6 +375,7 @@ void TattooUserInterface::doStandardControl() { TattooEngine &vm = *(TattooEngine *)_vm; Events &events = *_vm->_events; People &people = *_vm->_people; + SaveManager &saves = *_vm->_saves; TattooScene &scene = *(TattooScene *)_vm->_scene; Talk &talk = *_vm->_talk; Common::Point mousePos = events.mousePos(); @@ -472,6 +473,7 @@ void TattooUserInterface::doStandardControl() { if (events._rightReleased) { // Show the verbs menu for the highlighted object _tooltipWidget.banishWindow(); + saves.createThumbnail(); _verbsWidget.load(!noDesc); _verbsWidget.summonWindow(); diff --git a/engines/sherlock/tattoo/widget_inventory.cpp b/engines/sherlock/tattoo/widget_inventory.cpp index 3555ecdffd..b49e30b30d 100644 --- a/engines/sherlock/tattoo/widget_inventory.cpp +++ b/engines/sherlock/tattoo/widget_inventory.cpp @@ -641,10 +641,12 @@ void WidgetInventory::handleEvents() { bool found = false; if (ui._bgFound != -1) { if (ui._personFound) { + Person &person = people[ui._bgFound - 1000]; + for (int idx = 0; idx < 2; ++idx) { - if (!people[ui._bgFound - 1000]._use[idx]._verb.compareToIgnoreCase(_verb) && - !people[ui._bgFound - 1000]._use[idx]._target.compareToIgnoreCase(_invTarget)) { - ui.checkAction(people[ui._bgFound - 1000]._use[idx], ui._bgFound); + if (!person._use[idx]._verb.compareToIgnoreCase(_verb) && + !person._use[idx]._target.compareToIgnoreCase(_invTarget)) { + ui.checkAction(person._use[idx], ui._bgFound); found = true; } } diff --git a/gui/recorderdialog.cpp b/gui/recorderdialog.cpp index 5617d2ba9a..2d74cebbb6 100644 --- a/gui/recorderdialog.cpp +++ b/gui/recorderdialog.cpp @@ -171,7 +171,7 @@ void RecorderDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat const EnginePlugin *plugin = 0; GameDescriptor desc = EngineMan.findGame(gameId, &plugin); g_system->getTimeAndDate(t); - EditRecordDialog editDlg("Unknown Author", Common::String::format("%.2d.%.2d.%.4d ", t.tm_mday, t.tm_mon, 1900 + t.tm_year) + desc.description(), ""); + EditRecordDialog editDlg(_("Unknown Author"), Common::String::format("%.2d.%.2d.%.4d ", t.tm_mday, t.tm_mon, 1900 + t.tm_year) + desc.description(), ""); if (editDlg.runModal() != kOKCmd) { return; } diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat Binary files differindex 4225994810..ec86f36518 100644 --- a/gui/themes/translations.dat +++ b/gui/themes/translations.dat diff --git a/po/be_BY.po b/po/be_BY.po index 66697d9899..5b22098c1c 100644 --- a/po/be_BY.po +++ b/po/be_BY.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.7.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-02 17:22+0300\n" "Last-Translator: Ivan Lukyanov <greencis@mail.ru>\n" "Language-Team: Ivan Lukyanov <greencis@mail.ru>\n" @@ -1044,6 +1044,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "˛ë áĐßŕĐţÔë ÖĐÔĐŐćŐ ŇëÔĐŰöćě ÓíâĐ ×ĐĺĐŇĐÝÝŐ?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "˝ŐŇďÔŢÜĐď ßĐÜëŰÚĐ" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "˛ëÓŰďÔ áßöáă" @@ -1827,8 +1832,9 @@ msgstr "ĹăâÚö ŕíÖëÜ" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "˛ëĺĐÔ" @@ -3333,6 +3339,25 @@ msgstr "»ďćŐćě ÝĐßŕĐŇĐ" msgid "Fly to lower right" msgstr "»ďćŐćě ÝĐßŕĐŇĐ-ţÝö×" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "żŰëţÝĐď ßŕĐÓŢŕâÚĐ" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "łăçÝ. Üă×ëÚö:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "ĹăâÚĐáćě âëâŕĐţ:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/ca_ES.po b/po/ca_ES.po index 1a0a756253..096990848c 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2013-05-05 14:16+0100\n" "Last-Translator: Jordi Vilalta Prat <jvprat@jvprat.com>\n" "Language-Team: Catalan <scummvm-devel@lists.sf.net>\n" @@ -1047,6 +1047,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Realment voleu suprimir aquesta partida?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Error desconegut" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Vista de llistat" @@ -1832,8 +1837,9 @@ msgstr "Mode rŕpid" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Surt" @@ -3338,6 +3344,25 @@ msgstr "Vola a la dreta" msgid "Fly to lower right" msgstr "Vola avall i a la dreta" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Desplaçament suau" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Volum de música:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Velocitat de subt.:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 28c50ed514..aa3fc856b8 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.7.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2015-07-26 18:51+0200\n" "Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n" "Language-Team: \n" @@ -1039,6 +1039,11 @@ msgstr "Poznámky:" msgid "Do you really want to delete this record?" msgstr "Opravdu chcete tento záznam smazat?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Neznámá chyba" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Seznam" @@ -1820,8 +1825,9 @@ msgstr "Rychlý reľim" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Ukončit" @@ -3332,6 +3338,25 @@ msgstr "Letět doprava" msgid "Fly to lower right" msgstr "Letět doprava dolů" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Plynulé posunování" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Hlasitost hudby" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Rychlost titulků:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/da_DA.po b/po/da_DA.po index 8556dd7734..0da2db01f3 100644 --- a/po/da_DA.po +++ b/po/da_DA.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-09 17:34+0100\n" "Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n" "Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n" @@ -1038,6 +1038,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Vil du virkelig slette denne gemmer?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Ukendt fejl" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Liste visning" @@ -1820,8 +1825,9 @@ msgstr "Hurtig tilstand" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Afslut" @@ -3323,6 +3329,25 @@ msgstr "Flyv til hřjre" msgid "Fly to lower right" msgstr "Flyv nederst til hřjre" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Jćvn bevćgelse" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Musik lydstyrke:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Tekst hastighed:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/de_DE.po b/po/de_DE.po index 56d363b597..60fd903be9 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" -"PO-Revision-Date: 2015-07-04 12:06+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"PO-Revision-Date: 2015-10-16 11:00+0200\n" "Last-Translator: Lothar Serra Mari <scummvm@rootfather.de>\n" "Language-Team: Simon Sawatzki <SimSaw@gmx.de>, Lothar Serra Mari " "<scummvm@rootfather.de>\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 1.8.2\n" +"X-Generator: Poedit 1.8.5\n" #: gui/about.cpp:94 #, c-format @@ -75,7 +75,6 @@ msgid "Choose" msgstr "Auswählen" #: gui/editrecorddialog.cpp:58 -#, fuzzy msgid "Author:" msgstr "Autor:" @@ -84,13 +83,12 @@ msgid "Name:" msgstr "Name:" #: gui/editrecorddialog.cpp:60 -#, fuzzy msgid "Notes:" msgstr "Notizen:" #: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75 msgid "Ok" -msgstr "" +msgstr "OK" #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 @@ -579,19 +577,17 @@ msgstr "%d neue Spiele gefunden, %d bereits hinzugefügte Spiele ignoriert..." #: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103 msgid "Stop" -msgstr "" +msgstr "Anhalten" #: gui/onscreendialog.cpp:106 msgid "Edit record description" -msgstr "" +msgstr "Aufnahme-Beschreibung ändern" #: gui/onscreendialog.cpp:108 -#, fuzzy msgid "Switch to Game" msgstr "Wechsle" #: gui/onscreendialog.cpp:110 -#, fuzzy msgid "Fast replay" msgstr "Schneller Modus" @@ -879,7 +875,7 @@ msgstr "Musiklautstärke:" #: gui/options.cpp:968 msgid "Mute All" -msgstr "Alles stumm" +msgstr "Alles aus" #: gui/options.cpp:971 msgid "SFX volume:" @@ -1000,29 +996,28 @@ msgstr "" #. I18N: You must leave "#" as is, only word 'next' is translatable #: gui/predictivedialog.cpp:87 msgid "# next" -msgstr "" +msgstr "# nächste" #: gui/predictivedialog.cpp:88 msgid "add" -msgstr "" +msgstr "hinzufügen" #: gui/predictivedialog.cpp:92 -#, fuzzy msgid "Delete char" msgstr "Löschen" #: gui/predictivedialog.cpp:96 msgid "<" -msgstr "" +msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is #: gui/predictivedialog.cpp:98 msgid "* Pre" -msgstr "" +msgstr "* Vorschau" #: gui/recorderdialog.cpp:64 msgid "Recorder or Playback Gameplay" -msgstr "Spiel aufzeichnen oder wiedergeben" +msgstr "Spiel aufzeichnen/wiedergeben" #: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 @@ -1055,6 +1050,10 @@ msgstr "Notizen:" msgid "Do you really want to delete this record?" msgstr "Möchten Sie diese Aufnahme wirklich löschen?" +#: gui/recorderdialog.cpp:174 +msgid "Unknown Author" +msgstr "Unbekannter Autor" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Listenansicht" @@ -1520,7 +1519,7 @@ msgstr "DOSBox-OPL-Emulator" #: audio/fmopl.cpp:67 msgid "ALSA Direct FM" -msgstr "" +msgstr "ALSA Direct FM" #: audio/mididrv.cpp:209 #, c-format @@ -3371,6 +3370,22 @@ msgstr "Nach rechts fliegen" msgid "Fly to lower right" msgstr "Nach unten rechts fliegen" +#: engines/scumm/input.cpp:572 +msgid "Snap scroll on" +msgstr "Blättern einschalten" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "Blättern ausschalten" + +#: engines/scumm/input.cpp:587 +msgid "Music volume: " +msgstr "Musiklautstärke:" + +#: engines/scumm/input.cpp:604 +msgid "Subtitle speed: " +msgstr "Untertitel-Tempo:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" @@ -3538,7 +3553,6 @@ msgstr "" "Zeige die aktuelle Anzahl von Bildern pro Sekunde in der oberen linken Ecke" #: engines/zvision/detection_tables.h:52 -#, fuzzy msgid "Use the original save/load screens instead of the ScummVM interface" msgstr "" "Verwendet die originalen Menüs zum Speichern und Laden statt der von ScummVM." @@ -3548,7 +3562,6 @@ msgid "Double FPS" msgstr "FPS verdoppeln" #: engines/zvision/detection_tables.h:62 -#, fuzzy msgid "Increase framerate from 30 to 60 FPS" msgstr "Bilder pro Sekunde im Spiel von 30 auf 60 erhöhen" @@ -3565,17 +3578,14 @@ msgid "Disable animation while turning" msgstr "Animation während Drehen ausschalten" #: engines/zvision/detection_tables.h:82 -#, fuzzy msgid "Disable animation while turning in panorama mode" msgstr "Animation während Drehen im Panorama-Modus ausschalten" #: engines/zvision/detection_tables.h:91 -#, fuzzy msgid "Use high resolution MPEG video" msgstr "Nutze hochauflösende MPEG-Filme" #: engines/zvision/detection_tables.h:92 -#, fuzzy msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" msgstr "" "Verwende hochauflösende MPEG-Filme der DVD-Version anstelle der AVI-Filme" diff --git a/po/es_ES.po b/po/es_ES.po index 3398957b22..9d2e236d46 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.4.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-06 20:39+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -1045,6 +1045,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "żSeguro que quieres borrar esta partida?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Error desconocido" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Modo lista" @@ -1828,8 +1833,9 @@ msgstr "Modo rápido" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Salir" @@ -3335,6 +3341,25 @@ msgstr "Volar a la derecha" msgid "Fly to lower right" msgstr "Volar abajo y a la derecha" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Desplazamiento suave" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Música:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Vel. de subtítulos:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.5.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2011-12-15 14:53+0100\n" "Last-Translator: Mikel Iturbe Urretxa <mikel@hamahiru.org>\n" "Language-Team: Librezale <librezale@librezale.org>\n" @@ -1045,6 +1045,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Ezabatu partida gorde hau?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Errore ezezaguna" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "" @@ -1834,8 +1839,9 @@ msgstr "Modu bizkorra" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Irten" @@ -3340,6 +3346,25 @@ msgstr "Eskuinera hegan egin" msgid "Fly to lower right" msgstr "Behera eta eskuinera hegan egin" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Behera" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Musika:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Azpitit. abiadura:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/fi_FI.po b/po/fi_FI.po index 7851775712..aeed76304e 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2012-12-01 19:37+0200\n" "Last-Translator: Toni Saarela <saarela@gmail.com>\n" "Language-Team: Finnish\n" @@ -1046,6 +1046,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Haluatko varmasti poistaa tämän pelitallennuksen?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Tuntematon virhe" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Listanäkymä" @@ -1834,8 +1839,9 @@ msgstr "Nopea moodi" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Lopeta" @@ -3334,6 +3340,25 @@ msgstr "Lennä oikealle" msgid "Fly to lower right" msgstr "Lennä alas oikealle" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Pehmeä vieritys" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Musiikki:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Tekstin nopeus:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/fr_FR.po b/po/fr_FR.po index 64247a45bf..c6b785c794 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-05 13:49-0000\n" "Last-Translator: Thierry Crozat <criezy@scummvm.org>\n" "Language-Team: French <scummvm-devel@lists.sf.net>\n" @@ -1051,6 +1051,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Voulez-vous vraiment supprimer cette sauvegarde ?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Erreur inconnue" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Vue en liste" @@ -1833,8 +1838,9 @@ msgstr "Mode rapide" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Quitter" @@ -3342,6 +3348,25 @@ msgstr "Voler vers la droite" msgid "Fly to lower right" msgstr "Voler vers la bas ŕ droite" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Défilement régulier" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Volume Musique:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Vitesse des ST:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/gl_ES.po b/po/gl_ES.po index cec2582c0a..905c87d316 100644 --- a/po/gl_ES.po +++ b/po/gl_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-02 09:51+0100\n" "Last-Translator: Santiago G. Sanz <s.sanz@uvigo.es>\n" "Language-Team: Santiago G. Sanz <s.sanz@uvigo.es>\n" @@ -1038,6 +1038,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Seguro que queres eliminar esta partida?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Erro descońecido" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Lista" @@ -1820,8 +1825,9 @@ msgstr "Modo rápido" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Saír" @@ -3325,6 +3331,25 @@ msgstr "Voar á dereita" msgid "Fly to lower right" msgstr "Voar á dereita abaixo" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Desprazamento suave" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Volume de música:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Velocidade dos subtítulos:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/hu_HU.po b/po/hu_HU.po index ac48bd5e62..89538e9f61 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" -"PO-Revision-Date: 2014-02-18 06:30+0100\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" +"PO-Revision-Date: 2015-10-12 11:10+0200\n" "Last-Translator: George Kormendi <grubycza@hotmail.com>\n" "Language-Team: Hungarian\n" "Language: Magyar\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-SourceCharset: iso-8859-1\n" -"X-Generator: Poedit 1.6.4\n" +"X-Generator: Poedit 1.8.5\n" #: gui/about.cpp:94 #, c-format @@ -75,7 +75,7 @@ msgstr "Választ" #: gui/editrecorddialog.cpp:58 msgid "Author:" -msgstr "" +msgstr "Szerző:" #: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204 msgid "Name:" @@ -83,11 +83,11 @@ msgstr "Név:" #: gui/editrecorddialog.cpp:60 msgid "Notes:" -msgstr "" +msgstr "Megjegyzés:" #: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75 msgid "Ok" -msgstr "" +msgstr "Ok" #: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53 #: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 @@ -414,7 +414,7 @@ msgstr "A választott játék indítása" #: gui/launcher.cpp:633 msgid "~L~oad..." -msgstr "Betöltés" +msgstr "~B~etölt..." #: gui/launcher.cpp:633 msgid "Load saved game for selected game" @@ -545,7 +545,7 @@ msgstr "Masszív mód..." #: gui/launcher.cpp:1161 msgid "Record..." -msgstr "" +msgstr "Felvétel..." #: gui/massadd.cpp:79 gui/massadd.cpp:82 msgid "... progress ..." @@ -572,21 +572,19 @@ msgstr "%d új játékot találtam, %d előzőleg hozzáadott játék kihagyva..." #: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103 msgid "Stop" -msgstr "" +msgstr "Állj" #: gui/onscreendialog.cpp:106 msgid "Edit record description" -msgstr "" +msgstr "Felvétel leírás szerkesztése" #: gui/onscreendialog.cpp:108 -#, fuzzy msgid "Switch to Game" -msgstr "Kapcsol" +msgstr "Átvált játékra" #: gui/onscreendialog.cpp:110 -#, fuzzy msgid "Fast replay" -msgstr "Gyors mód" +msgstr "Gyors visszajátszás" #: gui/options.cpp:85 msgid "Never" @@ -980,29 +978,28 @@ msgstr "" #. I18N: You must leave "#" as is, only word 'next' is translatable #: gui/predictivedialog.cpp:87 msgid "# next" -msgstr "" +msgstr "# következő" #: gui/predictivedialog.cpp:88 msgid "add" -msgstr "" +msgstr "hozzáad" #: gui/predictivedialog.cpp:92 -#, fuzzy msgid "Delete char" -msgstr "Töröl" +msgstr "Karakter törlés" #: gui/predictivedialog.cpp:96 msgid "<" -msgstr "" +msgstr "<" #. I18N: Pre means 'Predictive', leave '*' as is #: gui/predictivedialog.cpp:98 msgid "* Pre" -msgstr "" +msgstr "* Előző" #: gui/recorderdialog.cpp:64 msgid "Recorder or Playback Gameplay" -msgstr "" +msgstr "Játékmenet felvétel vagy lejátszás" #: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156 #: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276 @@ -1011,31 +1008,33 @@ msgstr "Töröl" #: gui/recorderdialog.cpp:71 msgid "Record" -msgstr "" +msgstr "Felvétel" #: gui/recorderdialog.cpp:72 -#, fuzzy msgid "Playback" -msgstr "Játék" +msgstr "Visszajátszás" #: gui/recorderdialog.cpp:74 msgid "Edit" -msgstr "" +msgstr "Javít" #: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243 #: gui/recorderdialog.cpp:253 msgid "Author: " -msgstr "" +msgstr "Szerző:" #: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244 #: gui/recorderdialog.cpp:254 msgid "Notes: " -msgstr "" +msgstr "Megjegyzés:" #: gui/recorderdialog.cpp:155 -#, fuzzy msgid "Do you really want to delete this record?" -msgstr "Biztos hogy törölni akarod ezt a játékállást?" +msgstr "Biztos hogy törölni akarod ezt a felvételt?" + +#: gui/recorderdialog.cpp:174 +msgid "Unknown Author" +msgstr "Ismeretlen Szerző" #: gui/saveload-dialog.cpp:167 msgid "List view" @@ -1336,7 +1335,7 @@ msgstr "Folytatás" #: engines/dialogs.cpp:87 msgid "~L~oad" -msgstr "Betöltés" +msgstr "~B~etöltés" #: engines/dialogs.cpp:91 msgid "~S~ave" @@ -1410,7 +1409,7 @@ msgstr "~O~K" #: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:110 #: engines/mohawk/dialogs.cpp:171 engines/tsage/dialogs.cpp:107 msgid "~C~ancel" -msgstr "Mégse" +msgstr "~M~égse" #: engines/dialogs.cpp:311 msgid "~K~eys" @@ -1493,7 +1492,7 @@ msgstr "DOSBox OPL emulátor" #: audio/fmopl.cpp:67 msgid "ALSA Direct FM" -msgstr "" +msgstr "ALSA Direct FM" #: audio/mididrv.cpp:209 #, c-format @@ -1609,7 +1608,7 @@ msgstr "ScummVM Főmenü" #: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" -msgstr "Balkezes mód:" +msgstr "~B~alkezes mód" #: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" @@ -1814,8 +1813,9 @@ msgstr "Gyors mód" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Kilépés" @@ -2069,7 +2069,7 @@ msgstr "Válassz egy billentyűt az 'Eszköztár rejtés' művelethez" #: backends/platform/wince/wince-sdl.cpp:542 msgid "Map Zoom Up action (optional)" -msgstr "Nagyítás művelet (opcionális)" +msgstr "Térkép nagyítás művelet (opcionális)" #: backends/platform/wince/wince-sdl.cpp:545 msgid "Map Zoom Down action (optional)" @@ -2182,25 +2182,27 @@ msgid "Use the original save/load screens, instead of the ScummVM ones" msgstr "Az eredeti mentés/betöltés képernyő használata a ScummVM képek helyett" #: engines/agi/detection.cpp:157 -#, fuzzy msgid "Use an alternative palette" -msgstr "Alternatív játékintro használata (csak CD verziónál)" +msgstr "Alternatív paletta használat" #: engines/agi/detection.cpp:158 msgid "" "Use an alternative palette, common for all Amiga games. This was the old " "behavior" msgstr "" +"Alternatív paletta használat, közös minden Amiga játéknál. Ez egy régi " +"megoldás" #: engines/agi/detection.cpp:167 -#, fuzzy msgid "Mouse support" -msgstr "Átugrás támogatás" +msgstr "Egér támogatás" #: engines/agi/detection.cpp:168 msgid "" "Enables mouse support. Allows to use mouse for movement and in game menus." msgstr "" +"Egérmód engélyezve. Lehetővé teszi az egérrel mozgatást játékban és " +"játékmenükben." #: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349 #: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886 @@ -2253,13 +2255,12 @@ msgid "Cutscene file '%s' not found!" msgstr "'%s' átvezető fájl nem található" #: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101 -#, fuzzy msgid "Color Blind Mode" -msgstr "Kattintás Mód" +msgstr "Színvak Mód" #: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102 msgid "Enable Color Blind Mode by default" -msgstr "" +msgstr "Szinvak mód engedélyezve alapértelmezett" #: engines/drascula/saveload.cpp:47 msgid "" @@ -2314,11 +2315,11 @@ msgstr "Játék mentés nem sikerült" #: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86 msgid "Gore Mode" -msgstr "" +msgstr "Gore Mód" #: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87 msgid "Enable Gore Mode when available" -msgstr "" +msgstr "Gore mód engedélyezés ha elérhető" #. I18N: Studio audience adds an applause and cheering sounds whenever #. Malcolm makes a joke. @@ -2450,6 +2451,12 @@ msgid "" "Do you wish to use this save game file with ScummVM?\n" "\n" msgstr "" +"A következő eredeti játékmentés fájlt találtam a játékkönyvtárban:\n" +"\n" +"%s %s\n" +"\n" +"Akarod hogy ezt a játékmentés fájlt használja a ScummVM?\n" +"\n" #: engines/kyra/saveload_eob.cpp:590 #, c-format @@ -2457,6 +2464,8 @@ msgid "" "A save game file was found in the specified slot %d. Overwrite?\n" "\n" msgstr "" +"Játékmentés található a választott %d slotban. Felülírjam?\n" +"\n" #: engines/kyra/saveload_eob.cpp:623 #, c-format @@ -2468,6 +2477,11 @@ msgid "" "'import_savefile'.\n" "\n" msgstr "" +"%d eredeti játékmentés fájlt sikeresen importálta a\n" +"ScummVM. Ha később manuálisan akarod importálni az eredeti játékmentéseket\n" +"meg kell nyitnod a ScummVM debug konzolt és használd az 'import_savefile' " +"utasítást.\n" +"\n" #. I18N: Option for fast scene switching #: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167 @@ -2476,7 +2490,7 @@ msgstr "~Z~ip Mód aktiválva" #: engines/mohawk/dialogs.cpp:93 msgid "~T~ransitions Enabled" -msgstr "Átmenetek engedélyezve" +msgstr "~Á~tmenetek engedélyezve" #. I18N: Drop book page #: engines/mohawk/dialogs.cpp:95 @@ -2607,11 +2621,12 @@ msgstr "Alternatív játékintro használata (csak CD verziónál)" #: engines/sci/detection.cpp:374 msgid "Skip EGA dithering pass (full color backgrounds)" -msgstr "" +msgstr "EGA színmoduláció átugrása (Színes háttereknél)" #: engines/sci/detection.cpp:375 msgid "Skip dithering pass in EGA games, graphics are shown with full colors" msgstr "" +"Színmoduláció átugrása EGA játékoknál, grafikák teljes színben láthatók" #: engines/sci/detection.cpp:384 msgid "Prefer digital sound effects" @@ -2682,15 +2697,13 @@ msgstr "Játék szünetel. SPACE a folytatáshoz." #. "Moechten Sie wirklich neu starten? (J/N)J" #. Will react to J as 'Yes' #: engines/scumm/dialogs.cpp:183 -#, fuzzy msgid "Are you sure you want to restart? (Y/N)Y" -msgstr "Biztos hogy újra akarod indítani? (Y/N)" +msgstr "Biztos hogy újra akarod indítani? (I/N)I" #. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment #: engines/scumm/dialogs.cpp:185 -#, fuzzy msgid "Are you sure you want to quit? (Y/N)Y" -msgstr "Biztos hogy ki akarsz lépni? (Y/N)" +msgstr "Biztos hogy ki akarsz lépni? (I/N)I" #: engines/scumm/dialogs.cpp:190 msgid "Play" @@ -2737,7 +2750,7 @@ msgstr "Játék címe)" #. I18N: Previous page button #: engines/scumm/dialogs.cpp:288 msgid "~P~revious" -msgstr "Előző" +msgstr "~E~lőző" #. I18N: Next page button #: engines/scumm/dialogs.cpp:290 @@ -3198,25 +3211,24 @@ msgid "Third kid" msgstr "Harmadik gyerek" #: engines/scumm/help.cpp:292 -#, fuzzy msgid "Toggle Inventory/IQ Points display" -msgstr "Adatképernyő kapcsoló" +msgstr "Leltár/IQ pont kijelző kapcsoló" #: engines/scumm/help.cpp:293 msgid "Toggle Keyboard/Mouse Fighting (*)" -msgstr "" +msgstr "Billentyűzet/Egér harc kapcsoló (*)" #: engines/scumm/help.cpp:295 msgid "* Keyboard Fighting is always on," -msgstr "" +msgstr "* Harc billentyűzetről mindíg aktív," #: engines/scumm/help.cpp:296 msgid " so despite the in-game message this" -msgstr "" +msgstr " so despite the in-game message this" #: engines/scumm/help.cpp:297 msgid " actually toggles Mouse Fighting Off/On" -msgstr "" +msgstr " egérrel harcolás mód átkapcsolás Be/Ki" #: engines/scumm/help.cpp:304 msgid "Fighting controls (numpad):" @@ -3253,7 +3265,7 @@ msgstr "Alsó ütés" #: engines/scumm/help.cpp:315 msgid "Sucker punch" -msgstr "" +msgstr "Váratlan ütés" #: engines/scumm/help.cpp:318 msgid "These are for Indy on left." @@ -3311,6 +3323,22 @@ msgstr "Jobbra repülés" msgid "Fly to lower right" msgstr "Jobbra le repülés" +#: engines/scumm/input.cpp:572 +msgid "Snap scroll on" +msgstr "Finomgörgetés be" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "Finomgörgetés ki" + +#: engines/scumm/input.cpp:587 +msgid "Music volume: " +msgstr "Zene hangereje:" + +#: engines/scumm/input.cpp:604 +msgid "Subtitle speed: " +msgstr "Felirat sebesség:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" @@ -3321,27 +3349,30 @@ msgstr "" "a %s hiányzik. AdLib-ot használok helyette." #: engines/scumm/scumm.cpp:2644 -#, fuzzy msgid "" "Usually, Maniac Mansion would start now. But for that to work, the game " "files for Maniac Mansion have to be in the 'Maniac' directory inside the " "Tentacle game directory, and the game has to be added to ScummVM." msgstr "" -"Á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." +"Általában a Maniac Mansion indulna most. De a működéshez a Maniac Mansion " +"fájljainak, a 'Maniac' mappában kell lenni a Tentacle játékmappáján belül, " +"és a játékot így adja hozzá a ScummVM a listához." #: engines/scumm/players/player_v3m.cpp:129 msgid "" "Could not find the 'Loom' Macintosh executable to read the\n" "instruments from. Music will be disabled." msgstr "" +"Nem található a 'Loom' Macintosh futtató állomány, hogy \n" +"beolvassa a hangszereket. Zene le lessz tiltva." #: engines/scumm/players/player_v5m.cpp:107 msgid "" "Could not find the 'Monkey Island' Macintosh executable to read the\n" "instruments from. Music will be disabled." msgstr "" +"Nem található a 'Monkey Island' Macintosh futtató állomány, hogy \n" +"beolvassa a hangszereket. Zene le lessz tiltva." #: engines/sky/compact.cpp:130 msgid "" @@ -3457,51 +3488,48 @@ msgstr "" #: engines/wintermute/detection.cpp:58 msgid "Show FPS-counter" -msgstr "" +msgstr "FPS számláló látszik" #: engines/wintermute/detection.cpp:59 msgid "Show the current number of frames per second in the upper left corner" msgstr "" +"A jelenlegi másodpercenkénti képkocka szám kijelzése a bal felső sarokban" #: engines/zvision/detection_tables.h:52 -#, fuzzy msgid "Use the original save/load screens instead of the ScummVM interface" -msgstr "Az eredeti mentés/betöltés képernyő használata a ScummVM képek helyett" +msgstr "Használd az eredeti mentés/töltés képet a ScummVM felület helyett" #: engines/zvision/detection_tables.h:61 msgid "Double FPS" -msgstr "" +msgstr "Dupla FPS" #: engines/zvision/detection_tables.h:62 msgid "Increase framerate from 30 to 60 FPS" -msgstr "" +msgstr "Növeli a képfrissítést 30 ról 60 FPS-re" #: engines/zvision/detection_tables.h:71 -#, fuzzy msgid "Enable Venus" -msgstr "Helium mód engedélyezve" +msgstr "Venus engedélyezve" #: engines/zvision/detection_tables.h:72 -#, fuzzy msgid "Enable the Venus help system" -msgstr "Helium mód engedélyezve" +msgstr "Venus súgórendszer engedélyezve" #: engines/zvision/detection_tables.h:81 msgid "Disable animation while turning" -msgstr "" +msgstr "Animáció tiltás bekapcsolás közben" #: engines/zvision/detection_tables.h:82 msgid "Disable animation while turning in panorama mode" -msgstr "" +msgstr "Animáció tiltása panoráma mód bekapcsolása közben" #: engines/zvision/detection_tables.h:91 msgid "Use high resolution MPEG video" -msgstr "" +msgstr "Nagyfelbontású MPEG videó használat" #: engines/zvision/detection_tables.h:92 -#, fuzzy msgid "Use MPEG video from the DVD version, instead of lower resolution AVI" -msgstr "Alternatív ezüst kurzorszett használata, a normál arany helyett" +msgstr "MPEG videót használ DVD verziónál, a kisebb felbontású AVI helyett" #~ msgid "EGA undithering" #~ msgstr "EGA szinjavítás" diff --git a/po/it_IT.po b/po/it_IT.po index 28ec2960db..21c4341570 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-03 17:59-0600\n" "Last-Translator: Matteo 'Maff' Angelino <matteo.maff at gmail dot com>\n" "Language-Team: Italian\n" @@ -1042,6 +1042,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Sei sicuro di voler eliminare questo salvataggio?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Errore sconosciuto" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Elenco" @@ -1827,8 +1832,9 @@ msgstr "Modalitŕ veloce" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Esci" @@ -3332,6 +3338,25 @@ msgstr "Vola a destra" msgid "Fly to lower right" msgstr "Vola in basso a destra" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Scorrimento morbido" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Volume musica:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Velocitŕ testo:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/nb_NO.po b/po/nb_NO.po index 0b2816ad2f..086cb488a7 100644 --- a/po/nb_NO.po +++ b/po/nb_NO.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-11 00:02+0100\n" "Last-Translator: Einar Johan Trřan Sřmĺen <einarjohants@gmail.com>\n" "Language-Team: somaen <einarjohants@gmail.com>\n" @@ -1039,6 +1039,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Vil du virkelig slette dette lagrede spillet?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Ukjent feil" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Listevisning" @@ -1820,8 +1825,9 @@ msgstr "Rask modus" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Avslutt" @@ -3322,6 +3328,25 @@ msgstr "Fly til hřyre" msgid "Fly to lower right" msgstr "Fly til nedre hřyre" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Myk scrolling" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Musikkvolum:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Teksthastighet:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/nl_NL.po b/po/nl_NL.po index 0cca1a004e..0f4548951d 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-11-25 20:46+0100\n" "Last-Translator: Ben Castricum <scummvm@bencastricum.nl>\n" "Language-Team: Ben Castricum <scummvm@bencastricum.nl>\n" @@ -1051,6 +1051,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Wilt u dit opgeslagen spel echt verwijderen?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Onbekende fout" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Lijstopmaak" @@ -1837,8 +1842,9 @@ msgstr "Snelle modus" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Stoppen" @@ -3358,6 +3364,25 @@ msgstr "Vlieg naar rechts" msgid "Fly to lower right" msgstr "Vlieg naar rechts omlaag" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Vloeiend scrollen" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Muziek volume:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Snelheid tekst:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/nn_NO.po b/po/nn_NO.po index 35f461e6d2..a6af5e4b60 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-11 00:04+0100\n" "Last-Translator: Einar Johan Trřan Sřmĺen <einarjohants@gmail.com>\n" "Language-Team: somaen <einarjohants@gmail.com>\n" @@ -1038,6 +1038,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Vil du verkeleg slette det lagra spelet?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Ukjend feil" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Listevisning" @@ -1802,8 +1807,9 @@ msgstr "Rask modus" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Avslutt" @@ -3304,6 +3310,25 @@ msgstr "Fly til hřgre" msgid "Fly to lower right" msgstr "Fly til nedre hřgre" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Bla liste ned" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Musikkvolum:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Undertekstfart:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/pl_PL.po b/po/pl_PL.po index 233fa02599..477ecb6e69 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-02 12:28+0100\n" "Last-Translator: Michał Zi±bkowski <mziab@o2.pl>\n" "Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n" @@ -1039,6 +1039,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Na pewno chcesz skasować ten zapis?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Nieznany bł±d" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Widok listy" @@ -1815,8 +1820,9 @@ msgstr "Tryb szybki" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Zakończ" @@ -3312,6 +3318,25 @@ msgstr "Leć w prawo" msgid "Fly to lower right" msgstr "Leć w dół, w prawo" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Płynne przewijanie" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Gło¶no¶ć muzyki:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Pręd. napisów:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/pt_BR.po b/po/pt_BR.po index dae84f8e09..a406d5e096 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2011-10-21 21:30-0300\n" "Last-Translator: Saulo Benigno <saulobenigno@gmail.com>\n" "Language-Team: ScummBR (www.scummbr.com) <scummbr@yahoo.com.br>\n" @@ -1051,6 +1051,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Vocę realmente quer excluir este jogo salvo?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Erro desconhecido" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "" @@ -1849,8 +1854,9 @@ msgstr "Modo rápido" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Sair" @@ -3366,6 +3372,25 @@ msgstr "Voar para direita" msgid "Fly to lower right" msgstr "Voar para direita inferior" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Descer na lista" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Volume da Música:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Rapidez legendas:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/ru_RU.po b/po/ru_RU.po index 6941d5773a..871f7cd414 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-02 17:20+0300\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Russian\n" @@ -1044,6 +1044,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "˛ë ÔŐŮáâŇŘâŐŰěÝŢ ĺŢâŘâŐ ăÔĐŰŘâě íâŢ áŢĺŕĐÝŐÝŘŐ?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "˝ŐŘ×ŇŐáâÝĐď ŢčŘŃÚĐ" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "˛ŘÔ áßŘáÚĐ" @@ -1829,8 +1834,9 @@ msgstr "±ëáâŕëŮ ŕŐÖŘÜ" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "˛ëĺŢÔ" @@ -3335,6 +3341,25 @@ msgstr "»ŐâŐâě ŇßŕĐŇŢ" msgid "Fly to lower right" msgstr "»ŐâŐâě ŇßŕĐŇŢ-ŇÝŘ×" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "żŰĐŇÝĐď ßŕŢÚŕăâÚĐ" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "łŕŢÜÚ. Üă×ëÚŘ:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "ÁÚŢŕŢáâě âŘâŕŢŇ:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/scummvm.pot b/po/scummvm.pot index 7036c41f91..1d6b4028bc 100644 --- a/po/scummvm.pot +++ b/po/scummvm.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -1017,6 +1017,10 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "" +#: gui/recorderdialog.cpp:174 +msgid "Unknown Author" +msgstr "" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "" @@ -1768,8 +1772,9 @@ msgstr "" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "" @@ -3222,6 +3227,22 @@ msgstr "" msgid "Fly to lower right" msgstr "" +#: engines/scumm/input.cpp:572 +msgid "Snap scroll on" +msgstr "" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +msgid "Music volume: " +msgstr "" + +#: engines/scumm/input.cpp:604 +msgid "Subtitle speed: " +msgstr "" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/se_SE.po b/po/se_SE.po index b74f82805c..814a5b1e86 100644 --- a/po/se_SE.po +++ b/po/se_SE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.5.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-02 16:30+0100\n" "Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n" "Language-Team: \n" @@ -1042,6 +1042,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "Vill du verkligen radera den här spardatan?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "Okänt fel" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "Visa som lista" @@ -1825,8 +1830,9 @@ msgstr "Snabbläge" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "Avsluta" @@ -3328,6 +3334,25 @@ msgstr "Flyg ĺt höger" msgid "Fly to lower right" msgstr "Flyg ĺt nedre höger" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "Mjuk rullning" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "Musikvolym:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "Texthastighet:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" diff --git a/po/uk_UA.po b/po/uk_UA.po index c9f722c700..12e601bb06 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2015-09-06 15:14+0200\n" +"POT-Creation-Date: 2015-10-11 18:59+0100\n" "PO-Revision-Date: 2014-07-01 02:34+0300\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Ukrainian\n" @@ -1044,6 +1044,11 @@ msgstr "" msgid "Do you really want to delete this record?" msgstr "˛Ř ÔöŮáÝŢ ĺŢçŐâŐ ŇŘÔĐŰŘâŘ ćŐ ×ŃŐŕŐÖŐÝÝď?" +#: gui/recorderdialog.cpp:174 +#, fuzzy +msgid "Unknown Author" +msgstr "˝ŐŇöÔŢÜĐ ßŢÜŘŰÚĐ" + #: gui/saveload-dialog.cpp:167 msgid "List view" msgstr "˛ŘÓŰďÔ áßŘáÚă" @@ -1825,8 +1830,9 @@ msgstr "ČŇŘÔÚŘŮ ŕŐÖŘÜ" #: backends/platform/symbian/src/SymbianActions.cpp:52 #: backends/platform/wince/CEActionsPocket.cpp:44 #: backends/platform/wince/CEActionsSmartphone.cpp:52 -#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192 -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85 +#: backends/events/default/default-events.cpp:218 +#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:85 msgid "Quit" msgstr "˛ŘĺöÔ" @@ -3326,6 +3332,25 @@ msgstr "»ŐâöâŘ ÝĐßŕĐŇŢ" msgid "Fly to lower right" msgstr "»ŐâöâŘ ÔŢÝŘ×ă ÝĐßŕĐŇŢ" +#: engines/scumm/input.cpp:572 +#, fuzzy +msgid "Snap scroll on" +msgstr "żŰĐŇÝĐ ßŕŢÚŕăâÚĐ" + +#: engines/scumm/input.cpp:574 +msgid "Snap scroll off" +msgstr "" + +#: engines/scumm/input.cpp:587 +#, fuzzy +msgid "Music volume: " +msgstr "łăçÝöáâě Üă×ŘÚŘ:" + +#: engines/scumm/input.cpp:604 +#, fuzzy +msgid "Subtitle speed: " +msgstr "ČŇŘÔ. áăŃâŘâŕöŇ:" + #: engines/scumm/scumm.cpp:1832 #, c-format msgid "" |