diff --git a/.gitignore b/.gitignore index c4365f72a..1450388ae 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ ipch/* *.vcxproj.user *.VC.opendb *.VC.db +/.vscode/ # cmake stuff CMakeCache.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index b4b4b7cd8..a7b709f73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,7 @@ if(SUPPORTS_X11) option(USE_X11 "Support X11 window system" ON) endif() if(SUPPORTS_WAYLAND) - option(USE_WAYLAND "Support Wayland window system" OFF) + option(USE_WAYLAND "Support Wayland window system" ON) endif() if((LINUX OR FREEBSD) OR ANDROID) option(USE_EGL "Support EGL OpenGL context creation" ON) @@ -53,6 +53,7 @@ if((LINUX OR FREEBSD) AND NOT ANDROID) option(USE_DRMKMS "Support DRM/KMS OpenGL contexts" OFF) option(USE_FBDEV "Support FBDev OpenGL contexts" OFF) option(USE_EVDEV "Support EVDev controller interface" OFF) + option(USE_DBUS "Enable DBus support for screensaver inhibiting" ON) endif() # Force EGL when using Wayland diff --git a/README.md b/README.md index 1bfb40704..7e75d4aad 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # DuckStation - PlayStation 1, aka. PSX Emulator [Latest News](#latest-news) | [Features](#features) | [Screenshots](#screenshots) | [Downloading and Running](#downloading-and-running) | [Building](#building) | [Disclaimers](#disclaimers) -**Discord Server:** https://discord.gg/Buktv3t - **Latest Builds for Windows and Linux (AppImage)** https://github.com/stenzek/duckstation/releases/tag/latest **Game Compatibility List:** https://docs.google.com/spreadsheets/d/1H66MxViRjjE5f8hOl5RQmF5woS1murio2dsLn14kEqo/edit @@ -144,14 +142,14 @@ Requirements: ### Linux Requirements (Debian/Ubuntu package names): - CMake (`cmake`) - - SDL2 (at least version 2.0.22) (`libsdl2-dev`, `libxrandr-dev`) + - SDL2 (at least version 2.0.22) (`libsdl2-dev` `libxrandr-dev`) - pkgconfig (`pkg-config`) - - Qt 6 (at least version 6.1.0) (`qtbase6-dev`, `qtbase6-private-dev`, `qtbase6-dev-tools`, `qttools6-dev`) + - Qt 6 (at least version 6.1.0) (`qt6-base-dev` `qt6-base-private-dev` `qt6-base-dev-tools` `qt6-tools-dev` `libqt6svg6`) - libevdev (`libevdev-dev`) - git (`git`) (Note: needed to clone the repository and at build time) - - When Wayland is enabled (default): `libwayland-dev` `libwayland-egl-backend-dev` `extra-cmake-modules` + - When Wayland is enabled (default): (`libwayland-dev` `libwayland-egl-backend-dev` `extra-cmake-modules` `qt6-wayland`) - Optional for RetroAchievements (on by default): libcurl (`libcurl4-gnutls-dev`) - - Optional for framebuffer output: DRM/GBM (`libgbm-dev`, `libdrm-dev`) + - Optional for framebuffer output: DRM/GBM (`libgbm-dev` `libdrm-dev`) - Optional for faster building: Ninja (`ninja-build`) 1. Clone the repository. Submodules aren't necessary, there is only one and it is only used for Windows (`git clone https://github.com/stenzek/duckstation.git -b dev`). diff --git a/README.pt-br.md b/README.pt-br.md index 0a15c7bc7..7d57a390f 100644 --- a/README.pt-br.md +++ b/README.pt-br.md @@ -202,14 +202,14 @@ Requisitos: ### Linux Requisitos (Debian/Ubuntu): - CMake (`cmake`) - - SDL2 (`libsdl2-dev`, `libxrandr-dev`) + - SDL2 (`libsdl2-dev` `libxrandr-dev`) - pkgconfig (`pkg-config`) - - Qt 5 (`qtbase5-dev`, `qtbase5-private-dev`, `qtbase5-dev-tools`, `qttools5-dev`) + - Qt 6 (`qt6-base-dev` `qt6-base-private-dev` `qt6-base-dev-tools` `qt6-tools-dev` `libqt6svg6`) - libevdev (`libevdev-dev`) - git (`git`) (Nota: necessário para clonar o repositório e em tempo de construção) - - Quando o wayland está ativado (padrão): `libwayland-dev` `libwayland-egl-backend-dev` `extra-cmake-modules` + - Quando o wayland está ativado (padrão): (`libwayland-dev` `libwayland-egl-backend-dev` `extra-cmake-modules` `qt6-wayland`) - Opcional para RetroAchievements (ativado por padrão): libcurl (`libcurl4-gnutls-dev`) - - Opcional para saída do framebuffer: DRM/GBM (`libgbm-dev`, `libdrm-dev`) + - Opcional para saída do framebuffer: DRM/GBM (`libgbm-dev` `libdrm-dev`) - Opcional para construção rápida: Ninja (`ninja-build`) 1. Clone o repositório. Submódulos não são necessários, há apenas um e é usado apenas para Windows (`git clone https://github.com/stenzek/duckstation.git -b dev`). @@ -293,4 +293,4 @@ Atalhos: Ícone feito icons8: https://icons8.com/icon/74847/platforms.undefined.short-title "PlayStation" e "PSX" são marcas registradas da Sony Interactive Entertainment Europe Limited. -Este projeto não é afiliado de forma alguma com a Sony Interactive Entertainment. \ No newline at end of file +Este projeto não é afiliado de forma alguma com a Sony Interactive Entertainment. diff --git a/scripts/make-appimage.sh b/scripts/make-appimage.sh index 25518b484..2d04d0df6 100755 --- a/scripts/make-appimage.sh +++ b/scripts/make-appimage.sh @@ -148,6 +148,7 @@ declare -a SYSLIBS=( "libhx509.so.5" "libsqlite3.so.0" "libcrypt.so.1" + "libdbus-1.so.3" ) declare -a DEPLIBS=( diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 44036ab25..370a89849 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -125,6 +125,8 @@ endif() if(USE_WAYLAND) target_compile_definitions(common PRIVATE "-DUSE_WAYLAND=1") +elseif(SUPPORTS_WAYLAND) + message(WARNING "Wayland support for renderers is disabled.\nDuckStation will FAIL to start on Wayland.") endif() if(USE_DRMKMS) diff --git a/src/common/gl/context.cpp b/src/common/gl/context.cpp index a6d2c926d..266a2b976 100644 --- a/src/common/gl/context.cpp +++ b/src/common/gl/context.cpp @@ -4,6 +4,7 @@ #include "context.h" #include "../log.h" #include "loader.h" +#include #include #ifdef __APPLE__ #include diff --git a/src/common/log.h b/src/common/log.h index 49179a923..d68b55605 100644 --- a/src/common/log.h +++ b/src/common/log.h @@ -4,6 +4,7 @@ #pragma once #include "types.h" #include +#include #include enum LOGLEVEL diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 31f4d449f..158af6b30 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -76,6 +76,8 @@ add_library(core negcon.h pad.cpp pad.h + pcdrv.cpp + pcdrv.h pgxp.cpp pgxp.h playstation_mouse.cpp diff --git a/src/core/bus.cpp b/src/core/bus.cpp index 13c591ef1..5460a5379 100644 --- a/src/core/bus.cpp +++ b/src/core/bus.cpp @@ -2019,6 +2019,27 @@ bool SafeReadMemoryWord(VirtualMemoryAddress addr, u32* value) return true; } +bool SafeReadMemoryCString(VirtualMemoryAddress addr, std::string* value, u32 max_length /*= 1024*/) +{ + value->clear(); + + u8 ch; + while (SafeReadMemoryByte(addr, &ch)) + { + if (ch == 0) + return true; + + value->push_back(ch); + if (value->size() >= max_length) + return true; + + addr++; + } + + value->clear(); + return false; +} + bool SafeWriteMemoryByte(VirtualMemoryAddress addr, u8 value) { u32 temp = ZeroExtend32(value); diff --git a/src/core/controller.cpp b/src/core/controller.cpp index 757025a23..1d623eed1 100644 --- a/src/core/controller.cpp +++ b/src/core/controller.cpp @@ -7,13 +7,14 @@ #include "digital_controller.h" #include "fmt/format.h" #include "guncon.h" +#include "host.h" #include "negcon.h" #include "playstation_mouse.h" #include "util/state_wrapper.h" static const Controller::ControllerInfo s_none_info = {ControllerType::None, "None", - "Not Connected", + TRANSLATABLE("ControllerType", "Not Connected"), nullptr, 0, nullptr, diff --git a/src/core/core.vcxproj b/src/core/core.vcxproj index ad9ba3965..a80cc475d 100644 --- a/src/core/core.vcxproj +++ b/src/core/core.vcxproj @@ -65,6 +65,7 @@ + @@ -141,6 +142,7 @@ + diff --git a/src/core/core.vcxproj.filters b/src/core/core.vcxproj.filters index c2b246773..9524a6535 100644 --- a/src/core/core.vcxproj.filters +++ b/src/core/core.vcxproj.filters @@ -59,6 +59,7 @@ + @@ -126,6 +127,7 @@ + - \ No newline at end of file + diff --git a/src/core/cpu_core.cpp b/src/core/cpu_core.cpp index 427ba36da..62296e25e 100644 --- a/src/core/cpu_core.cpp +++ b/src/core/cpu_core.cpp @@ -11,6 +11,7 @@ #include "cpu_recompiler_thunks.h" #include "gte.h" #include "host.h" +#include "pcdrv.h" #include "pgxp.h" #include "settings.h" #include "system.h" @@ -293,6 +294,20 @@ void RaiseException(Exception excode) g_state.current_instruction_pc, GetExceptionVector()); } +void RaiseBreakException(u32 CAUSE_bits, u32 EPC, u32 instruction_bits) +{ + if (PCDrv::HandleSyscall(instruction_bits, g_state.regs)) + { + // immediately return + g_state.regs.npc = EPC + 4; + FlushPipeline(); + return; + } + + // normal exception + RaiseException(CAUSE_bits, EPC, GetExceptionVector()); +} + void SetExternalInterrupt(u8 bit) { g_state.cop0_regs.cause.Ip |= static_cast(1u << bit); @@ -1109,7 +1124,10 @@ restart_instruction: case InstructionFunct::break_: { - RaiseException(Exception::BP); + RaiseBreakException(Cop0Registers::CAUSE::MakeValueForException( + Exception::BP, g_state.current_instruction_in_branch_delay_slot, + g_state.current_instruction_was_branch_taken, g_state.current_instruction.cop.cop_n), + g_state.current_instruction_pc, g_state.current_instruction.bits); } break; diff --git a/src/core/cpu_core.h b/src/core/cpu_core.h index d2e0e07e1..4e749eb72 100644 --- a/src/core/cpu_core.h +++ b/src/core/cpu_core.h @@ -8,6 +8,7 @@ #include "types.h" #include #include +#include #include class StateWrapper; @@ -147,6 +148,7 @@ ALWAYS_INLINE bool InKernelMode() bool SafeReadMemoryByte(VirtualMemoryAddress addr, u8* value); bool SafeReadMemoryHalfWord(VirtualMemoryAddress addr, u16* value); bool SafeReadMemoryWord(VirtualMemoryAddress addr, u32* value); +bool SafeReadMemoryCString(VirtualMemoryAddress addr, std::string* value, u32 max_length = 1024); bool SafeWriteMemoryByte(VirtualMemoryAddress addr, u8 value); bool SafeWriteMemoryHalfWord(VirtualMemoryAddress addr, u16 value); bool SafeWriteMemoryWord(VirtualMemoryAddress addr, u32 value); diff --git a/src/core/cpu_core_private.h b/src/core/cpu_core_private.h index eb5e4b97c..8a5caae39 100644 --- a/src/core/cpu_core_private.h +++ b/src/core/cpu_core_private.h @@ -10,6 +10,7 @@ namespace CPU { // exceptions void RaiseException(Exception excode); void RaiseException(u32 CAUSE_bits, u32 EPC); +void RaiseBreakException(u32 CAUSE_bits, u32 EPC, u32 instruction_bits); ALWAYS_INLINE bool HasPendingInterrupt() { diff --git a/src/core/cpu_recompiler_code_generator.cpp b/src/core/cpu_recompiler_code_generator.cpp index 10c69c880..02965cc2e 100644 --- a/src/core/cpu_recompiler_code_generator.cpp +++ b/src/core/cpu_recompiler_code_generator.cpp @@ -931,8 +931,17 @@ void CodeGenerator::GenerateExceptionExit(const CodeBlockInstruction& cbi, Excep m_register_cache.FlushAllGuestRegisters(true, true); m_register_cache.FlushLoadDelay(true); - EmitFunctionCall(nullptr, static_cast(&CPU::RaiseException), CAUSE_bits, - GetCurrentInstructionPC()); + if (excode == Exception::BP) + { + EmitFunctionCall(nullptr, static_cast(&CPU::RaiseBreakException), CAUSE_bits, + GetCurrentInstructionPC(), Value::FromConstantU32(cbi.instruction.bits)); + } + else + { + EmitFunctionCall(nullptr, static_cast(&CPU::RaiseException), CAUSE_bits, + GetCurrentInstructionPC()); + } + return; } diff --git a/src/core/host_display.cpp b/src/core/host_display.cpp index bb6f189b0..5da2f140d 100644 --- a/src/core/host_display.cpp +++ b/src/core/host_display.cpp @@ -232,18 +232,20 @@ void HostDisplay::CalculateDrawRect(s32 window_width, s32 window_height, float* apply_aspect_ratio ? (display_aspect_ratio / (static_cast(m_display_width) / static_cast(m_display_height))) : 1.0f; - const float display_width = g_settings.display_stretch_vertically ? - static_cast(m_display_width) : static_cast(m_display_width) * x_scale; - const float display_height = g_settings.display_stretch_vertically ? - static_cast(m_display_height) / x_scale : static_cast(m_display_height); - const float active_left = g_settings.display_stretch_vertically ? - static_cast(m_display_active_left) : static_cast(m_display_active_left) * x_scale; - const float active_top = g_settings.display_stretch_vertically ? - static_cast(m_display_active_top) / x_scale : static_cast(m_display_active_top); + const float display_width = g_settings.display_stretch_vertically ? static_cast(m_display_width) : + static_cast(m_display_width) * x_scale; + const float display_height = g_settings.display_stretch_vertically ? static_cast(m_display_height) / x_scale : + static_cast(m_display_height); + const float active_left = g_settings.display_stretch_vertically ? static_cast(m_display_active_left) : + static_cast(m_display_active_left) * x_scale; + const float active_top = g_settings.display_stretch_vertically ? static_cast(m_display_active_top) / x_scale : + static_cast(m_display_active_top); const float active_width = g_settings.display_stretch_vertically ? - static_cast(m_display_active_width) : static_cast(m_display_active_width) * x_scale; + static_cast(m_display_active_width) : + static_cast(m_display_active_width) * x_scale; const float active_height = g_settings.display_stretch_vertically ? - static_cast(m_display_active_height) / x_scale : static_cast(m_display_active_height); + static_cast(m_display_active_height) / x_scale : + static_cast(m_display_active_height); if (out_x_scale) *out_x_scale = x_scale; @@ -500,11 +502,13 @@ bool HostDisplay::WriteDisplayTextureToFile(std::string filename, bool full_reso const float ss_height_scale = static_cast(m_display_active_height) / static_cast(m_display_height); const float ss_aspect_ratio = m_display_aspect_ratio * ss_width_scale / ss_height_scale; resize_width = g_settings.display_stretch_vertically ? - m_display_texture_view_width : static_cast(static_cast(resize_height) * ss_aspect_ratio); + m_display_texture_view_width : + static_cast(static_cast(resize_height) * ss_aspect_ratio); resize_height = g_settings.display_stretch_vertically ? - static_cast(static_cast(resize_height) / - (m_display_aspect_ratio / (static_cast(m_display_width) / static_cast(m_display_height)))) : - resize_height; + static_cast(static_cast(resize_height) / + (m_display_aspect_ratio / + (static_cast(m_display_width) / static_cast(m_display_height)))) : + resize_height; } else { @@ -614,17 +618,65 @@ bool HostDisplay::WriteDisplayTextureToBuffer(std::vector* buffer, u32 resi return true; } -bool HostDisplay::WriteScreenshotToFile(std::string filename, bool compress_on_thread /*= false*/) +bool HostDisplay::WriteScreenshotToFile(std::string filename, bool internal_resolution /* = false */, + bool compress_on_thread /* = false */) { - const u32 width = m_window_info.surface_width; - const u32 height = m_window_info.surface_height; + u32 width = m_window_info.surface_width; + u32 height = m_window_info.surface_height; + auto [draw_left, draw_top, draw_width, draw_height] = CalculateDrawRect(width, height); + + if (internal_resolution && m_display_texture_view_width != 0 && m_display_texture_view_height != 0) + { + // If internal res, scale the computed draw rectangle to the internal res. + // We re-use the draw rect because it's already been AR corrected. + const float sar = + static_cast(m_display_texture_view_width) / static_cast(m_display_texture_view_height); + const float dar = static_cast(draw_width) / static_cast(draw_height); + if (sar >= dar) + { + // stretch height, preserve width + const float scale = static_cast(m_display_texture_view_width) / static_cast(draw_width); + width = m_display_texture_view_width; + height = static_cast(std::round(static_cast(draw_height) * scale)); + } + else + { + // stretch width, preserve height + const float scale = static_cast(m_display_texture_view_height) / static_cast(draw_height); + width = static_cast(std::round(static_cast(draw_width) * scale)); + height = m_display_texture_view_height; + } + + // DX11 won't go past 16K texture size. + constexpr u32 MAX_TEXTURE_SIZE = 16384; + if (width > MAX_TEXTURE_SIZE) + { + height = static_cast(static_cast(height) / + (static_cast(width) / static_cast(MAX_TEXTURE_SIZE))); + width = MAX_TEXTURE_SIZE; + } + if (height > MAX_TEXTURE_SIZE) + { + height = MAX_TEXTURE_SIZE; + width = static_cast(static_cast(width) / + (static_cast(height) / static_cast(MAX_TEXTURE_SIZE))); + } + + // Remove padding, it's not part of the framebuffer. + draw_left = 0; + draw_top = 0; + draw_width = static_cast(width); + draw_height = static_cast(height); + } if (width == 0 || height == 0) return false; std::vector pixels; u32 pixels_stride; GPUTexture::Format pixels_format; - if (!RenderScreenshot(width, height, &pixels, &pixels_stride, &pixels_format)) + if (!RenderScreenshot(width, height, + Common::Rectangle::FromExtents(draw_top, draw_left, draw_width, draw_height), &pixels, + &pixels_stride, &pixels_format)) { Log_ErrorPrintf("Failed to render %ux%u screenshot", width, height); return false; diff --git a/src/core/host_display.h b/src/core/host_display.h index f406ef4de..cd23b93af 100644 --- a/src/core/host_display.h +++ b/src/core/host_display.h @@ -104,8 +104,8 @@ public: virtual bool Render(bool skip_present) = 0; /// Renders the display with postprocessing to the specified image. - virtual bool RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) = 0; + virtual bool RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, + std::vector* out_pixels, u32* out_stride, GPUTexture::Format* out_format) = 0; ALWAYS_INLINE bool IsVsyncEnabled() const { return m_vsync_enabled; } virtual void SetVSync(bool enabled) = 0; @@ -206,7 +206,7 @@ public: bool clear_alpha = true); /// Helper function to save screenshot to PNG. - bool WriteScreenshotToFile(std::string filename, bool compress_on_thread = false); + bool WriteScreenshotToFile(std::string filename, bool internal_resolution = false, bool compress_on_thread = false); protected: ALWAYS_INLINE bool HasSoftwareCursor() const { return static_cast(m_cursor_texture); } @@ -251,7 +251,7 @@ protected: bool m_vsync_enabled = false; }; -/// Returns a pointer to the current host display abstraction. Assumes AcquireHostDisplay() has been caled. +/// Returns a pointer to the current host display abstraction. Assumes AcquireHostDisplay() has been called. extern std::unique_ptr g_host_display; namespace Host { diff --git a/src/core/pcdrv.cpp b/src/core/pcdrv.cpp new file mode 100644 index 000000000..4a055e9f5 --- /dev/null +++ b/src/core/pcdrv.cpp @@ -0,0 +1,330 @@ +// SPDX-FileCopyrightText: 2023 Connor McLaughlin +// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) + +#include "pcdrv.h" +#include "common/file_system.h" +#include "common/log.h" +#include "common/path.h" +#include "common/string_util.h" +#include "cpu_core.h" +#include "settings.h" +Log_SetChannel(PCDrv); + +static constexpr u32 MAX_FILES = 100; + +static std::vector s_files; + +enum PCDrvAttribute : u32 +{ + PCDRV_ATTRIBUTE_READ_ONLY = (1 << 0), + PCDRV_ATTRIBUTE_HIDDEN = (1 << 1), + PCDRV_ATTRIBUTE_SYSTEM = (1 << 2), + PCDRV_ATTRIBUTE_DIRECTORY = (1 << 4), + PCDRV_ATTRIBUTE_ARCHIVE = (1 << 5), +}; + +static s32 GetFreeFileHandle() +{ + for (s32 i = 0; i < static_cast(s_files.size()); i++) + { + if (!s_files[i]) + return i; + } + + if (s_files.size() >= MAX_FILES) + { + Log_ErrorPrint("Too many open files."); + return -1; + } + + const s32 index = static_cast(s_files.size()); + s_files.emplace_back(nullptr, [](std::FILE*) {}); + return index; +} + +static void CloseAllFiles() +{ + if (!s_files.empty()) + Log_DevPrintf("Closing %zu open files.", s_files.size()); + + s_files.clear(); +} + +static FILE* GetFileFromHandle(u32 handle) +{ + if (handle >= static_cast(s_files.size()) || !s_files[handle]) + { + Log_ErrorPrintf("Invalid file handle %d", static_cast(handle)); + return nullptr; + } + + return s_files[handle].get(); +} + +static bool CloseFileHandle(u32 handle) +{ + if (handle >= static_cast(s_files.size()) || !s_files[handle]) + { + Log_ErrorPrintf("Invalid file handle %d", static_cast(handle)); + return false; + } + + s_files[handle].reset(); + while (!s_files.empty() && !s_files.back()) + s_files.pop_back(); + return true; +} + +static std::string ResolveHostPath(const std::string& path) +{ + // Double-check that it falls within the directory of the elf. + // Not a real sandbox, but emulators shouldn't be treated as such. Don't run untrusted code! + const std::string& root = g_settings.pcdrv_root; + std::string canonicalized_path = Path::Canonicalize(Path::Combine(root, path)); + if (canonicalized_path.length() < root.length() || // Length has to be longer (a file), + !StringUtil::StartsWith(canonicalized_path, root) || // and start with the host root, + canonicalized_path[root.length()] != FS_OSPATH_SEPARATOR_CHARACTER) // and we can't access a sibling. + { + Log_ErrorPrintf("Denying access to path outside of PCDrv directory. Requested path: '%s', " + "Resolved path: '%s', Root directory: '%s'", + path.c_str(), root.c_str(), canonicalized_path.c_str()); + canonicalized_path.clear(); + } + + return canonicalized_path; +} + +void PCDrv::Initialize() +{ + if (!g_settings.pcdrv_enable) + return; + + Log_WarningPrintf("%s PCDrv is enabled at '%s'", g_settings.pcdrv_enable_writes ? "Read/Write" : "Read-Only", + g_settings.pcdrv_root.c_str()); +} + +void PCDrv::Reset() +{ + CloseAllFiles(); +} + +void PCDrv::Shutdown() +{ + CloseAllFiles(); +} + +bool PCDrv::HandleSyscall(u32 instruction_bits, CPU::Registers& regs) +{ + // Based on https://problemkaputt.de/psxspx-bios-pc-file-server.htm + +#define RETURN_ERROR() \ + regs.v0 = 0xffffffff; \ + regs.v1 = 0xffffffff; // error code + + if (!g_settings.pcdrv_enable) + return false; + + const u32 code = (instruction_bits >> 6) & 0xfffff; // 20 bits, funct = 0 + switch (code) + { + case 0x101: // PCinit + { + Log_DevPrintf("PCinit"); + CloseAllFiles(); + regs.v0 = 0; + regs.v1 = 0; + return true; + } + + case 0x102: // PCcreat + case 0x103: // PCopen + { + const bool is_open = (code == 0x103); + const char* func = (code == 0x102) ? "PCcreat" : "PCopen"; + const u32 mode = regs.a2; + std::string filename; + if (!CPU::SafeReadMemoryCString(regs.a1, &filename)) + { + Log_ErrorPrintf("%s: Invalid string", func); + return false; + } + + Log_DebugPrintf("%s: '%s' mode %u", func, filename.c_str(), mode); + if ((filename = ResolveHostPath(filename)).empty()) + { + RETURN_ERROR(); + return true; + } + + if (!is_open && !g_settings.pcdrv_enable_writes) + { + Log_ErrorPrintf("%s: Writes are not enabled", func); + RETURN_ERROR(); + return true; + } + + // Directories are unsupported for now, ignore other attributes + if (mode & PCDRV_ATTRIBUTE_DIRECTORY) + { + Log_ErrorPrintf("%s: Directories are unsupported", func); + RETURN_ERROR(); + return true; + } + + // Create empty file, truncate if exists. + const s32 handle = GetFreeFileHandle(); + if (handle < 0) + { + RETURN_ERROR(); + return true; + } + + s_files[handle] = FileSystem::OpenManagedCFile(filename.c_str(), + is_open ? (g_settings.pcdrv_enable_writes ? "r+b" : "rb") : "w+b"); + if (!s_files[handle]) + { + Log_ErrorPrintf("%s: Failed to open '%s'", func, filename.c_str()); + RETURN_ERROR(); + return true; + } + + Log_DebugPrintf("PCDrv: Opened '%s' => %d", filename.c_str(), handle); + regs.v0 = 0; + regs.v1 = static_cast(handle); + return true; + } + + case 0x104: // PCclose + { + Log_DebugPrintf("PCclose(%u)", regs.a1); + + if (!CloseFileHandle(regs.a1)) + { + RETURN_ERROR(); + return true; + } + + regs.v0 = 0; + regs.v1 = 0; + return true; + } + + case 0x105: // PCread + { + Log_DebugPrintf("PCread(%u, %u, 0x%08x)", regs.a1, regs.a2, regs.a3); + + std::FILE* fp = GetFileFromHandle(regs.a1); + if (!fp) + { + RETURN_ERROR(); + return true; + } + + const u32 count = regs.a2; + u32 dstaddr = regs.a3; + for (u32 i = 0; i < count; i++) + { + // Certainly less than optimal, but it's not like you're going to be reading megabytes of data here. + u8 val; + if (std::fread(&val, 1, 1, fp) != 1) + { + // Does not stop at EOF according to psx-spx. + if (std::ferror(fp) != 0) + { + RETURN_ERROR(); + return true; + } + + val = 0; + } + + CPU::SafeWriteMemoryByte(dstaddr, val); + dstaddr++; + } + + regs.v0 = 0; + regs.v1 = count; + return true; + } + + case 0x106: // PCwrite + { + Log_DebugPrintf("PCwrite(%u, %u, 0x%08x)", regs.a1, regs.a2, regs.a3); + + std::FILE* fp = GetFileFromHandle(regs.a1); + if (!fp) + { + RETURN_ERROR(); + return true; + } + + const u32 count = regs.a2; + u32 srcaddr = regs.a3; + u32 written = 0; + for (u32 i = 0; i < count; i++) + { + u8 val; + if (!CPU::SafeReadMemoryByte(srcaddr, &val)) + break; + + if (std::fwrite(&val, 1, 1, fp) != 1) + { + RETURN_ERROR(); + return true; + } + + srcaddr++; + written++; + } + + regs.v0 = 0; + regs.v1 = written; + return true; + } + + case 0x107: // PClseek + { + Log_DebugPrintf("PClseek(%u, %u, %u)", regs.a1, regs.a2, regs.a3); + + std::FILE* fp = GetFileFromHandle(regs.a1); + if (!fp) + { + RETURN_ERROR(); + return true; + } + + const s32 offset = static_cast(regs.a2); + const u32 mode = regs.a3; + int hmode; + switch (mode) + { + case 0: + hmode = SEEK_SET; + break; + case 1: + hmode = SEEK_CUR; + break; + case 2: + hmode = SEEK_END; + break; + default: + RETURN_ERROR(); + return true; + } + + if (FileSystem::FSeek64(fp, offset, hmode) != 0) + { + Log_ErrorPrintf("FSeek for PCDrv failed: %d %u", offset, hmode); + RETURN_ERROR(); + return true; + } + + regs.v0 = 0; + regs.v1 = static_cast(static_cast(FileSystem::FTell64(fp))); + return true; + } + + default: + return false; + } +} diff --git a/src/core/pcdrv.h b/src/core/pcdrv.h new file mode 100644 index 000000000..fd7a2eaf8 --- /dev/null +++ b/src/core/pcdrv.h @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2023 Connor McLaughlin +// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) + +#pragma once +#include "cpu_types.h" +#include "types.h" + +////////////////////////////////////////////////////////////////////////// +// HLE Implementation of PCDrv +////////////////////////////////////////////////////////////////////////// + +namespace PCDrv { +void Initialize(); +void Reset(); +void Shutdown(); + +bool HandleSyscall(u32 instruction_bits, CPU::Registers& regs); +} diff --git a/src/core/settings.cpp b/src/core/settings.cpp index f3a927969..bd9c67648 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -303,6 +303,9 @@ void Settings::Load(SettingsInterface& si) audio_dump_on_boot = si.GetBoolValue("Audio", "DumpOnBoot", false); use_old_mdec_routines = si.GetBoolValue("Hacks", "UseOldMDECRoutines", false); + pcdrv_enable = si.GetBoolValue("PCDrv", "Enabled", false); + pcdrv_enable_writes = si.GetBoolValue("PCDrv", "EnableWrites", false); + pcdrv_root = si.GetStringValue("PCDrv", "Root"); dma_max_slice_ticks = si.GetIntValue("Hacks", "DMAMaxSliceTicks", DEFAULT_DMA_MAX_SLICE_TICKS); dma_halt_ticks = si.GetIntValue("Hacks", "DMAHaltTicks", DEFAULT_DMA_HALT_TICKS); @@ -522,6 +525,10 @@ void Settings::Save(SettingsInterface& si) const si.SetIntValue("Hacks", "GPUFIFOSize", gpu_fifo_size); si.SetIntValue("Hacks", "GPUMaxRunAhead", gpu_max_run_ahead); + si.SetBoolValue("PCDrv", "Enabled", pcdrv_enable); + si.SetBoolValue("PCDrv", "EnableWrites", pcdrv_enable_writes); + si.SetStringValue("PCDrv", "Root", pcdrv_root.c_str()); + si.SetBoolValue("BIOS", "PatchTTYEnable", bios_patch_tty_enable); si.SetBoolValue("BIOS", "PatchFastBoot", bios_patch_fast_boot); @@ -610,10 +617,17 @@ void Settings::FixIncompatibleSettings(bool display_osd_messages) g_settings.cdrom_mute_cd_audio = false; g_settings.texture_replacements.enable_vram_write_replacements = false; g_settings.use_old_mdec_routines = false; + g_settings.pcdrv_enable = false; g_settings.bios_patch_fast_boot = false; g_settings.bios_patch_tty_enable = false; } + if (g_settings.pcdrv_enable && g_settings.pcdrv_root.empty()) + { + Log_WarningPrintf("Disabling PCDrv because no root directory is specified."); + g_settings.pcdrv_enable = false; + } + if (g_settings.display_integer_scaling && g_settings.display_linear_filtering) { Log_WarningPrintf("Disabling linear filter due to integer upscaling."); diff --git a/src/core/settings.h b/src/core/settings.h index 5d383f566..061e4483c 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -170,6 +170,7 @@ struct Settings bool audio_dump_on_boot = false; bool use_old_mdec_routines = false; + bool pcdrv_enable = false; // timing hacks section TickCount dma_max_slice_ticks = DEFAULT_DMA_MAX_SLICE_TICKS; @@ -228,8 +229,6 @@ struct Settings } } texture_replacements; - // TODO: Controllers, memory cards, etc. - bool bios_patch_tty_enable = false; bool bios_patch_fast_boot = DEFAULT_FAST_BOOT_VALUE; bool enable_8mb_ram = false; @@ -243,6 +242,9 @@ struct Settings MultitapMode multitap_mode = DEFAULT_MULTITAP_MODE; + std::string pcdrv_root; + bool pcdrv_enable_writes = false; + std::array GeneratePortLabels() const; LOGLEVEL log_level = DEFAULT_LOG_LEVEL; diff --git a/src/core/spu.cpp b/src/core/spu.cpp index 02fc3e5cd..31dd26b28 100644 --- a/src/core/spu.cpp +++ b/src/core/spu.cpp @@ -5,8 +5,8 @@ #include "cdrom.h" #include "common/bitfield.h" #include "common/fifo_queue.h" -#include "common/file_system.h" #include "common/log.h" +#include "common/path.h" #include "dma.h" #include "host.h" #include "imgui.h" @@ -1493,7 +1493,7 @@ bool SPU::StartDumpingAudio(const char* filename) else new_suffix.Format("voice%u.wav", i); - std::string voice_filename(FileSystem::ReplaceExtension(filename, new_suffix)); + const std::string voice_filename = Path::ReplaceExtension(filename, new_suffix); if (!s_voice_dump_writers[i]->Open(voice_filename.c_str(), SAMPLE_RATE, 2)) { Log_ErrorPrintf("Failed to open voice dump filename '%s'", voice_filename.c_str()); diff --git a/src/core/system.cpp b/src/core/system.cpp index 32fb651b6..606db61d4 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -35,6 +35,7 @@ #include "multitap.h" #include "netplay.h" #include "pad.h" +#include "pcdrv.h" #include "pgxp.h" #include "psf_loader.h" #include "save_state_version.h" @@ -1418,6 +1419,7 @@ bool System::Initialize(bool force_software_renderer) SPU::Initialize(); MDEC::Initialize(); SIO::Initialize(); + PCDrv::Initialize(); static constexpr float WARNING_DURATION = 15.0f; @@ -1473,6 +1475,7 @@ void System::DestroySystem() g_texture_replacements.Shutdown(); + PCDrv::Shutdown(); SIO::Shutdown(); MDEC::Shutdown(); SPU::Shutdown(); @@ -1831,6 +1834,7 @@ void System::InternalReset() SPU::Reset(); MDEC::Reset(); SIO::Reset(); + PCDrv::Reset(); s_frame_number = 1; s_internal_frame_number = 0; TimingEvents::Reset(); @@ -2064,8 +2068,9 @@ bool System::InternalSaveState(ByteStream* state, u32 screenshot_size /* = 256 * std::vector screenshot_buffer; u32 screenshot_stride; GPUTexture::Format screenshot_format; - if (g_host_display->RenderScreenshot(screenshot_width, screenshot_height, &screenshot_buffer, &screenshot_stride, - &screenshot_format) && + if (g_host_display->RenderScreenshot(screenshot_width, screenshot_height, + Common::Rectangle::FromExtents(0, 0, screenshot_width, screenshot_height), + &screenshot_buffer, &screenshot_stride, &screenshot_format) && GPUTexture::ConvertTextureDataToRGBA8(screenshot_width, screenshot_height, screenshot_buffer, screenshot_stride, screenshot_format)) { @@ -3912,10 +3917,8 @@ bool System::SaveScreenshot(const char* filename /* = nullptr */, bool full_reso return false; } - const bool screenshot_saved = - g_settings.display_internal_resolution_screenshots ? - g_host_display->WriteDisplayTextureToFile(filename, full_resolution, apply_aspect_ratio, compress_on_thread) : - g_host_display->WriteScreenshotToFile(filename, compress_on_thread); + const bool screenshot_saved = g_host_display->WriteScreenshotToFile( + filename, g_settings.display_internal_resolution_screenshots, compress_on_thread); if (!screenshot_saved) { diff --git a/src/duckstation-qt/advancedsettingswidget.cpp b/src/duckstation-qt/advancedsettingswidget.cpp index b189bb2f9..840478489 100644 --- a/src/duckstation-qt/advancedsettingswidget.cpp +++ b/src/duckstation-qt/advancedsettingswidget.cpp @@ -175,6 +175,52 @@ static void addMSAATweakOption(SettingsDialog* dialog, QTableWidget* table, cons table->setCellWidget(row, 1, msaa); } +static void addDirectoryOption(SettingsDialog* dialog, QTableWidget* table, const QString& name, std::string section, + std::string key) +{ + const int row = table->rowCount(); + + table->insertRow(row); + + QTableWidgetItem* name_item = new QTableWidgetItem(name); + name_item->setFlags(name_item->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable)); + table->setItem(row, 0, name_item); + + QWidget* container = new QWidget(table); + + QHBoxLayout* layout = new QHBoxLayout(container); + layout->setContentsMargins(0, 0, 0, 0); + + QLineEdit* value = new QLineEdit(container); + value->setObjectName(QStringLiteral("value")); + SettingWidgetBinder::BindWidgetToStringSetting(dialog->getSettingsInterface(), value, std::move(section), + std::move(key)); + layout->addWidget(value, 1); + + QPushButton* browse = new QPushButton(container); + browse->setText(QStringLiteral("...")); + browse->setMaximumWidth(32); + QObject::connect(browse, &QPushButton::clicked, browse, [browse, value, name]() { + const QString path(QDir::toNativeSeparators(QFileDialog::getExistingDirectory( + QtUtils::GetRootWidget(browse), qApp->translate("AdvancedSettingsWidget", "Select folder for %1").arg(name), + value->text()))); + if (!path.isEmpty()) + value->setText(path); + }); + layout->addWidget(browse, 0); + + table->setCellWidget(row, 1, container); +} + +static void setDirectoryOption(QTableWidget* table, int row, const char* value) +{ + QWidget* widget = table->cellWidget(row, 1); + Assert(widget); + QLineEdit* valuew = widget->findChild(QStringLiteral("value")); + Assert(valuew); + valuew->setText(QString::fromUtf8(value)); +} + AdvancedSettingsWidget::AdvancedSettingsWidget(SettingsDialog* dialog, QWidget* parent) : QWidget(parent), m_dialog(dialog) { @@ -299,6 +345,10 @@ void AdvancedSettingsWidget::addTweakOptions() addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Create Save State Backups"), "General", "CreateSaveStateBackups", false); + + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Enable PCDrv"), "PCDrv", "Enabled", false); + addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Enable PCDrv Writes"), "PCDrv", "EnableWrites", false); + addDirectoryOption(m_dialog, m_ui.tweakOptionTable, tr("PCDrv Root Directory"), "PCDrv", "Root"); } void AdvancedSettingsWidget::onResetToDefaultClicked() @@ -338,9 +388,13 @@ void AdvancedSettingsWidget::onResetToDefaultClicked() setIntRangeTweakOption(m_ui.tweakOptionTable, i++, static_cast(Settings::DEFAULT_GPU_MAX_RUN_AHEAD)); // GPU max run-ahead setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Use debug host GPU device - setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Increase timer resolution + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Stretch Display Vertically + setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Increase Timer Resolution setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Allow booting without SBI file setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Create save state backups + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Enable PCDRV + setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Enable PCDRV Writes + setDirectoryOption(m_ui.tweakOptionTable, i++, ""); // PCDrv Root Directory return; } @@ -378,9 +432,13 @@ void AdvancedSettingsWidget::onResetToDefaultClicked() sif->DeleteValue("Hacks", "GPUFIFOSize"); sif->DeleteValue("Hacks", "GPUMaxRunAhead"); sif->DeleteValue("GPU", "UseDebugDevice"); + sif->DeleteValue("Display", "StretchVertically"); sif->DeleteValue("Main", "IncreaseTimerResolution"); sif->DeleteValue("CDROM", "AllowBootingWithoutSBIFile"); sif->DeleteValue("General", "CreateSaveStateBackups"); + sif->DeleteValue("PCDrv", "Enabled"); + sif->DeleteValue("PCDrv", "EnableWrites"); + sif->DeleteValue("PCDrv", "Root"); sif->Save(); while (m_ui.tweakOptionTable->rowCount() > 0) m_ui.tweakOptionTable->removeRow(m_ui.tweakOptionTable->rowCount() - 1); diff --git a/src/duckstation-qt/controllersettingsdialog.cpp b/src/duckstation-qt/controllersettingsdialog.cpp index ac07b3e2c..6a4ac1b35 100644 --- a/src/duckstation-qt/controllersettingsdialog.cpp +++ b/src/duckstation-qt/controllersettingsdialog.cpp @@ -392,7 +392,7 @@ void ControllerSettingsDialog::createWidgets() const Controller::ControllerInfo* ci = Controller::GetControllerInfo(m_port_bindings[global_slot]->getControllerType()); - const QString display_name(ci ? QString::fromUtf8(ci->display_name) : QStringLiteral("Unknown")); + const QString display_name(ci ? qApp->translate("ControllerType", ci->display_name) : QStringLiteral("Unknown")); QListWidgetItem* item = new QListWidgetItem(); item->setText(mtap_enabled[port] ? @@ -433,7 +433,7 @@ void ControllerSettingsDialog::updateListDescription(u32 global_slot, Controller const bool mtap_enabled = getBoolValue("Pad", (port == 0) ? "MultitapPort1" : "MultitapPort2", false); const Controller::ControllerInfo* ci = Controller::GetControllerInfo(widget->getControllerType()); - const QString display_name(ci ? QString::fromUtf8(ci->display_name) : QStringLiteral("Unknown")); + const QString display_name(ci ? qApp->translate("ControllerType", ci->display_name) : QStringLiteral("Unknown")); item->setText(mtap_enabled ? (tr("Controller Port %1%2\n%3").arg(port + 1).arg(s_mtap_slot_names[slot]).arg(display_name)) : diff --git a/src/duckstation-qt/qttranslations.cpp b/src/duckstation-qt/qttranslations.cpp index d50a10360..a1524bd07 100644 --- a/src/duckstation-qt/qttranslations.cpp +++ b/src/duckstation-qt/qttranslations.cpp @@ -148,7 +148,7 @@ static const ImWchar* QtHost::GetGlyphRangesJapanese() { // clang-format off // auto update by generate_update_glyph_ranges.py with duckstation-qt_ja.ts - static const char16_t chars[] = u"←↑→↓□△○ 、。々「」〜あいうえおかがきぎくぐけげこごさざしじすずせそただちっつづてでとどなにぬねのはばびへべほぼぽまみむめもやゆよらりるれろわをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソタダチッツテデトドナニネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロワンー一上下不与両並中主了予事二互交人今介他付代令以件任休伸位低体作使例供依価係保信修個倍値停側傍備像優元先光入全公共具典内再凍処出分切初別利到制削前割力加効動勧化十協単去参及反収取古可右号各合同名向含告周呼命問善回囲固国圧在地垂型埋域基報場境増壊声売変外多大央失奨妥始子字存学安完定宛実密対専射小少岐左差巻帰常幅平年度座延式引弱張強当形影役待後従得御復微心必忘応性恐情意感態成我戻所手扱投択押拡持指振挿排探接推描提換損摩撃撮操改敗数整文料断新方既日早明映昨時景更書替最有望期未本来析枚果枠栄検概構標権機欄次止正歪残毎比水永求汎決況法波注海消深混済減測源準滑演点無照版牲特犠状獲率現理生用申画界番異疑発登的目直相瞬知短破確示禁秒称移程種穴空立端符等算管範簡粋精約純索細終組結統続維緑線編縮績繰置翻者耗背能自致般良色荷行表装補製複要見規視覧観解言計記設許訳証試詳認語説読調識警護象負販費質赤起超跡転軸軽較込近返追送逆通速連進遅遊達遠適遷選部重野量録長閉開間関防降限除隅隠集離電青非面音響頂順領頭頻頼題類飛高鮮黒%?X"; + static const char16_t chars[] = u"←↑→↓□△○ 、。々「」〜あいうえおかがきぎくぐけげこごさざしじすずせそただちっつづてでとどなにぬねのはばびへべほぼぽまみむめもやゆよらりるれろわをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソタダチッツテデトドナニネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロワンー一上下不与両並中主了予事二互交人今介他付代令以件任休伸位低体作使例供依価係保信修個倍値停側傍備像優元先光入全公共具典内再凍処出分切初別利到制削前割力加効動勧化十協単去参及反収取古可右号各合同名向含告周呼命問善回囲固国圧在地垂型埋域基報場境増壊声売変外多大央失奨妥始子字存学安完定宛実密対専射小少岐左差巻帰常幅平年度座延式引弱張強当形影役待後従得御復微心必忘応性恐情意感態成我戻所手扱投択押拡持指振挿排探接推描提換損摩撃撮操改敗数整文料断新方既日早明昔映昨時景更書替最有望期未本来析枚果枠栄検概構標権機欄次止正歪残毎比水永求汎決況法波注海消深混済減測源準滑演点無照版牲特犠状獲率現理生用申画界番異疑発登的目直相瞬知短破確示禁秒称移程種穴空立端符等算管範簡粋精約純索細終組結統続維緑線編縮績繰置翻者耗背能自致般良色荷行表装補製複要見規視覧観解言計記設許訳証試詳認語説読調識警護象負販費質赤起超跡転軸軽較込近返追送逆通速連進遅遊達遠適遷選部重野量録長閉開間関防降限除隅隠集離電青非面音響頂順領頭頻頼題類飛高鮮黒%?X"; const int chars_length = sizeof(chars) / sizeof(chars[0]); // clang-format on diff --git a/src/duckstation-qt/translations/duckstation-qt_es-es.ts b/src/duckstation-qt/translations/duckstation-qt_es-es.ts index add047570..7d16afdcb 100644 --- a/src/duckstation-qt/translations/duckstation-qt_es-es.ts +++ b/src/duckstation-qt/translations/duckstation-qt_es-es.ts @@ -178,7 +178,7 @@ - + Login... Acceso... @@ -266,29 +266,29 @@ Muestra iconos en la esquina inferior derecha de la pantalla cuando haya activo un logro cercano o un desafío. - + Reset System Reiniciar sistema - + Hardcore mode will not be enabled until the system is reset. Do you want to reset the system now? El modo «hardcore» no se activará hasta que se reinicie el sistema. ¿Deseas hacerlo ahora? - + Username: %1 Login token generated on %2. Nombre de usuario: %1 Token de inicio de sesión generado en %2. - + Logout Cerrar sesión - + Not Logged In. Sesión no iniciada. @@ -296,17 +296,17 @@ Token de inicio de sesión generado en %2. Achievements - + Loading state Cargando estado - + Resuming state Reanudando estado - + Hardcore mode disabled by state switch. El cambio de estados guardados ha desactivado el modo «hardcore». @@ -351,34 +351,34 @@ Token de inicio de sesión generado en %2. No hay logros para este juego. - + Your Score: {} (Best: {}) Leaderboard Position: {} of {} Tu puntuación: {} (mejor: {}) Posición en la tabla de puntuaciones: {} de {} - + This game has {} leaderboards. Este juego tiene {} tablas de puntuaciones. - + Submitting scores is disabled because hardcore mode is off. Leaderboards are read-only. No se enviarán puntuaciones porque el modo «hardcore» está desactivado. Las tablas de puntuaciones permanecerán en modo solo lectura. - + Time Tiempo - + Score Puntuación - + Downloading leaderboard data, please wait... Descargando datos de tablas de puntuaciones, espera... @@ -407,31 +407,31 @@ Posición en la tabla de puntuaciones: {} de {} - + Log To System Console Registrar en consola del sistema - + Log To Window Registrar en ventana - + Log To Debug Console Registrar en consola de depuración - + Log To File Registrar en archivo - + Show Debug Menu Mostrar menú de depuración @@ -456,195 +456,230 @@ Posición en la tabla de puntuaciones: {} de {} Restablecer valores predeterminados - + Show Status Indicators Mostrar indicadores de estado - + Multisample Antialiasing - Suavizado de bordes de muestreo múltiple + Suavizado de bordes de muestreo múltiple (MSAA) - + PGXP Vertex Cache Caché de vértices de la PGXP - + PGXP Geometry Tolerance Tolerancia geométrica de la PGXP - + PGXP Depth Clear Threshold Umbral de limpieza de profundidad de la PGXP - + Enable Recompiler Memory Exceptions Excepciones de memoria del recompilador - + Enable Recompiler Block Linking Vinculación de bloques del recompilador - + Enable Recompiler Fast Memory Access Memoria de acceso rápido del recompilador - + Apply Compatibility Settings Aplicar configuración de compatibilidad - + + Select folder for %1 + Seleccionar carpeta de %1 + + + + Show Frame Times + Mostrar duración de fotogramas + + + Display Active Start Offset Compensación del inicio de imagen activa - + Display Active End Offset Compensación del final de imagen activa - + Display Line Start Offset Compensación de la primera línea de imagen - + Display Line End Offset Compensación de la última línea de imagen - + + Use Old MDEC Routines + Utilizar rutinas MDEC antiguas + + + Enable VRAM Write Texture Replacement Escritura de la VRAM a las texturas de reemplazo - + Preload Texture Replacements Precargar reemplazos de texturas - + Dump Replaceable VRAM Writes Volcar escrituras de VRAM reemplazables - + Set Dumped VRAM Write Alpha Channel Establecer canal alfa de los volcados de escritura VRAM - + Minimum Dumped VRAM Write Width Anchura mínima de volcados de escrituras de VRAM - + Minimum Dumped VRAM Write Height Altura mínima de volcados de escrituras de VRAM - + DMA Max Slice Ticks Duración máxima de los cortes de la DMA - + DMA Halt Ticks Duración de las paradas de la DMA - + GPU FIFO Size Tamaño del FIFO de la GPU - + GPU Max Run-Ahead Predicción máxima de la GPU - + + Stretch Display Vertically + Estirar imagen verticalmente + + + Allow Booting Without SBI File Arrancar sin un archivo SBI - + Create Save State Backups Crear copias de seguridad de los estados guardados - + + Enable PCDrv + Habilitar PCDrv + + + + Enable PCDrv Writes + Escrituras de PCDrv + + + + PCDrv Root Directory + Directorio raíz de PCDrv + + + Log Level Nivel de registro - + Information Información - + Sets the verbosity of messages logged. Higher levels will log more messages. Establece el grado de detalle de los mensajes del registro. Los niveles más altos mostrarán más mensajes. - - - - + + + + User Preference Preferencia de usuario - + Logs messages to the console window. Muestra los mensajes en la ventana de la consola. - + Logs messages to the debug console where supported. Muestra los mensajes en la consola de depuración cuando sea posible. - + Logs messages to the window. Muestra los mensajes en la ventana. - + Logs messages to duckstation.log in the user directory. Copia los mensajes al archivo duckstation.log, en el directorio del usuario. - + Unchecked Deshabilitado - + Shows a debug menu bar with additional statistics and quick settings. Muestra un menú de depuración con estadísticas adicionales y configuraciones rápidas. - + Display FPS Limit Mostrar límite de FPS - + Disable All Enhancements Desactivar todas las mejoras - + Increase Timer Resolution Incrementar la resolución del temporizador @@ -654,7 +689,7 @@ Posición en la tabla de puntuaciones: {} de {} Opciones del sistema - + Use Debug Host GPU Device Usar dispositivo gráfico de depuración @@ -662,14 +697,12 @@ Posición en la tabla de puntuaciones: {} de {} AnalogController - Controller %u is locked to analog mode by the game. - Mando %u bloqueado en modo analógico por el juego. + Mando %u bloqueado en modo analógico por el juego. - Controller %u is locked to digital mode by the game. - Mando %u bloqueado en modo digital por el juego. + Mando %u bloqueado en modo digital por el juego. @@ -683,6 +716,16 @@ Posición en la tabla de puntuaciones: {} de {} Controller {} switched to digital mode. Mando {} cambiado a modo digital. + + + Controller {} is locked to analog mode by the game. + Mando {} bloqueado en modo analógico por el juego. + + + + Controller {} is locked to digital mode by the game. + Mando {} bloqueado en modo digital por el juego. + Not Inverted @@ -744,15 +787,45 @@ Posición en la tabla de puntuaciones: {} de {} Establece el factor de escalado para los ejes de los joysticks analógicos. Se recomienda un valor entre 130 % y 140 % cuando se usen mandos modernos, como el DualShock 4 o el mando de Xbox One. - + + Button/Trigger Deadzone + Zona muerta de botón/gatillo + + + + Sets the deadzone for activating buttons/triggers, i.e. the fraction of the trigger which will be ignored. + Establece la zona de inactividad para activar botones o gatillos, es decir, la distancia de la pulsación que será ignorada. + + + Vibration Bias Fuerza de vibración - + Sets the rumble bias value. If rumble in some games is too weak or not functioning, try increasing this value. Indica la medida de la vibración. Si la vibración en algunos juegos es débil o no funciona, intenta incrementar este valor. + + + Invert Left Stick + Invertir joystick izquierdo + + + + Inverts the direction of the left analog stick. + Invierte la dirección del joystick analógico izquierdo. + + + + Invert Right Stick + Invertir joystick derecho + + + + Inverts the direction of the right analog stick. + Invierte la dirección del joystick analógico derecho. + AnalogJoystick @@ -808,21 +881,41 @@ Posición en la tabla de puntuaciones: {} de {} Sets the analog stick axis scaling factor. A value between 130% and 140% is recommended when using recent controllers, e.g. DualShock 4, Xbox One Controller. Establece el factor de escalado para los ejes de los joysticks analógicos. Se recomienda un valor entre 130 % y 140 % cuando se usen mandos modernos, como el DualShock 4 o el mando de Xbox One. + + + Invert Left Stick + Invertir joystick izquierdo + + + + Inverts the direction of the left analog stick. + Invierte la dirección del joystick analógico izquierdo. + + + + Invert Right Stick + Invertir joystick derecho + + + + Inverts the direction of the right analog stick. + Invierte la dirección del joystick analógico derecho. + AudioBackend - + Null (No Output) Nulo (sin salida) - + Cubeb Cubeb - + XAudio2 XAudio2 @@ -840,91 +933,96 @@ Posición en la tabla de puntuaciones: {} de {} Configuración - + Backend: Motor: - + Buffer Size: Tamaño de búfer: - + Maximum latency: 0 frames (0.00ms) Latencia máxima: 0 fotogramas (0.00ms) - + Start Dumping On Boot Volcar audio al arrancar - + Minimal Mínima - + Off (Noisy) Desactivado (con ruidos) - + Resampling (Pitch Shift) Remuestreo (alterará el tono) - + Time Stretch (Tempo Change, Best Sound) Estiramiento temporal (alterará el tempo, mejor calidad) - + Output Latency: Latencia de salida: - + Driver: Controlador: - + Stretch Mode: Modo de estiramiento: - + + Output Device: + Dispositivo de salida: + + + Controls Controles - + Output Volume: Volumen de salida: - + Fast Forward Volume: Volumen de avance rápido: - + Mute All Sound Silenciar todo - + Mute CD Audio Silenciar audio de CD - - + + 100% 100% @@ -984,12 +1082,18 @@ Posición en la tabla de puntuaciones: {} de {} Cuando el emulador se ejecute a una velocidad que no sea el 100 %, ajustará el tempo del audio para no eliminar fotogramas. Producirá un audio más agradable cuando haya avances rápidos o se frene la emulación a cambio de perder un poco de rendimiento. - + + + Default + Predeterminado + + + Maximum Latency: %1 frames / %2 ms (%3ms buffer + %5ms output) Latencia máxima: %1 fotogramas/%2ms (búfer de %3ms + %5ms de salida) - + Maximum Latency: %1 frames / %2 ms Latencia máxima: %1 fotogramas/%2ms @@ -1016,8 +1120,8 @@ Posición en la tabla de puntuaciones: {} de {} Silencia a la fuerza el audio CD-DA y XA del CD-ROM. Puede usarse para deshabilitar la música de fondo en algunos juegos. - - + + %1% %1% @@ -1221,17 +1325,17 @@ Posición en la tabla de puntuaciones: {} de {} CPUExecutionMode - + Interpreter (Slowest) Intérprete (el más lento) - + Cached Interpreter (Faster) Intérprete en caché (más rápido) - + Recompiler (Fastest) Recompilador (el más rápido) @@ -1239,17 +1343,17 @@ Posición en la tabla de puntuaciones: {} de {} CPUFastmemMode - + Disabled (Slowest) Deshabilitado (lo más lento) - + MMap (Hardware, Fastest, 64-Bit Only) MMap (por hardware, el más rápido, solo para 64 bits) - + LUT (Faster) LUT (más rápido) @@ -1791,10 +1895,26 @@ Posición en la tabla de puntuaciones: {} de {} Automática (al acabar el fotograma) + + ColorPickerButton + + + Select LED Color + Seleccionar color del LED + + + + CommonHost + + + Default Output Device + Dispositivo de salida predeterminado + + CommonHostInterface - + Invalid version %u (%s version %u) Versión %u inválida (versión %s %u) @@ -1802,22 +1922,22 @@ Posición en la tabla de puntuaciones: {} de {} ConsoleRegion - + Auto-Detect Detección automática - + NTSC-J (Japan) NTSC-J (Japón) - + NTSC-U/C (US, Canada) NTSC-U/C (EE. UU., Canadá) - + PAL (Europe, Australia) PAL (Europa, Australia) @@ -2837,7 +2957,7 @@ Esta advertencia se mostrará solo una vez. Dirección/Torcer - + %1% %1 % @@ -2845,22 +2965,22 @@ Esta advertencia se mostrará solo una vez. ControllerCustomSettingsWidget - + %1 Settings Configuración de %1 - + Restore Default Settings Restablecer valores predeterminados - + Browse... Buscar... - + Select File Seleccionar archivo @@ -2938,7 +3058,7 @@ Esta advertencia se mostrará solo una vez. Activar origen de entrada SDL - + DualShock 4 / DualSense Enhanced Mode Modo mejorado para DualShock 4/DualSense @@ -2948,72 +3068,105 @@ Esta advertencia se mostrará solo una vez. Dispositivos detectados - + Mouse/Pointer Source Origen para ratón/cursor - - + + 10 10 - + Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used. El uso de entradas sin procesar mejora la precisión a la hora de asignar joysticks de mandos al cursor del ratón. También permite el uso de varios ratones a la vez. - + Vertical Sensitivity: Sensibilidad vertical: - + Horizontal Sensitivity: Sensibilidad horizontal: - + Enable Mouse Mapping Permitir asignar el ratón - + Use Raw Input Utilizar entradas sin procesar - + XInput Source Origen XInput - + + Controller LED Settings + Configuración de LED + + + The XInput source provides support for XBox 360 / XBox One / XBox Series controllers, and third party controllers which implement the XInput protocol. El origen XInput permite el uso de mandos de XBox 360/XBox One/XBox Series y otros mandos de terceros que utilizan el protocolo XInput. - + Enable XInput Input Source Activar origen de entrada XInput - + Profile Settings Configuración del perfil - + When this option is enabled, hotkeys can be set in this input profile, and will be used instead of the global hotkeys. By default, hotkeys are always shared between all profiles. Al activar esta opción se podrán asignar atajos a este perfil de entrada, los cuales se utilizarán en lugar de los atajos globales. Los atajos siempre se comparten entre todos los perfiles de manera predeterminada. - + Use Per-Profile Hotkeys Cambiar atajos según el perfil + + ControllerLEDSettingsDialog + + + Controller LED Settings + Configuración de LED de mandos + + + + SDL-0 LED + LED SDL-0 + + + + SDL-1 LED + LED SDL-1 + + + + SDL-2 LED + LED SDL-2 + + + + SDL-3 LED + LED SDL-3 + + ControllerMacroEditWidget @@ -3062,27 +3215,27 @@ Esta advertencia se mostrará solo una vez. Establecer... - + Not Configured Sin configurar - + Set Frequency Establecer frecuencia - + Frequency: Frecuencia: - + Macro will not repeat. La macro no se repetirá. - + Macro will toggle buttons every %1 frames. La macro alternará pulsaciones cada %1 fotogramas. @@ -3260,47 +3413,47 @@ Esta acción no puede deshacerse. ControllerType - + None Ninguno - + Digital Controller Mando digital - + Analog Controller (DualShock) Mando analógico (DualShock) - - + + Analog Joystick Palancas analógicas - + PlayStation Mouse PlayStation Mouse - + NeGcon NeGcon - + Analog Controller Mando analógico - + GunCon GunCon @@ -3392,42 +3545,42 @@ Esta acción no puede deshacerse. DebuggerMessage - + Added breakpoint at 0x%08X. Punto de interrupción añadido en 0x%08X. - + Removed breakpoint at 0x%08X. Punto de interrupción en 0x%08X eliminado. - + 0x%08X is not a call instruction. 0x%08X no es una instrucción de llamada. - + Can't step over double branch at 0x%08X No se puede pasar por encima de la rama doble en 0x%08X - + Stepping over to 0x%08X. Pasando a 0x%08X. - + Instruction read failed at %08X while searching for function end. Error de lectura de instrucción en %08X mientras se buscaba el fin de la función. - + Stepping out to 0x%08X. Saliendo a 0x%08X. - + No return instruction found after %u instructions for step-out at %08X. No se ha encontrado instrucción de retorno después de %u instrucciones para la salida en%08X. @@ -3598,6 +3751,7 @@ Esta acción no puede deshacerse. + Toggle &Breakpoint Activar punto de &interrupción @@ -3633,6 +3787,7 @@ Esta acción no puede deshacerse. + &Run To Cursor &Ejecutar hasta cursor @@ -3771,23 +3926,33 @@ Este archivo puede llegar a ocupar varios gigabytes, así que ten cuidado con el Fallo al añadir el punto de interrupción de salida, ¿estás en una función valida? - - + + View in &Dump + Ver en vo&lcado + + + + Follow Load/Store + Seguir carga/almacenamiento + + + + Invalid search pattern. It should contain hex digits or question marks. El patrón de búsqueda no es válido, debería contener dígitos hexadecimales o signos de interrogación. - + Pattern not found. No se ha encontrado el patrón. - + Pattern found at 0x%1 (passed the end of memory). Patrón encontrado en 0x%1 (pasó el final de la memoria). - + Pattern found at 0x%1. Patrón encontrado en 0x%1. @@ -3813,22 +3978,22 @@ Este archivo puede llegar a ocupar varios gigabytes, así que ten cuidado con el DiscRegion - + NTSC-J (Japan) NTSC-J (Japón) - + NTSC-U/C (US, Canada) NTSC-U/C (EE. UU., Canadá) - + PAL (Europe, Australia) PAL (Europa, Australia) - + Other Otra @@ -3836,17 +4001,17 @@ Este archivo puede llegar a ocupar varios gigabytes, así que ten cuidado con el DisplayAlignment - + Left / Top Superior izquierda - + Center Centrada - + Right / Bottom Inferior derecha @@ -3854,17 +4019,17 @@ Este archivo puede llegar a ocupar varios gigabytes, así que ten cuidado con el DisplayAspectRatio - + Auto (Game Native) Automática (nativa del juego) - + Auto (Match Window) Automática (ajustada a la ventana) - + Custom Personalizada @@ -3872,17 +4037,17 @@ Este archivo puede llegar a ocupar varios gigabytes, así que ten cuidado con el DisplayCropMode - + None No recortar - + Only Overscan Area Solo el área de sobrebarrido - + All Borders Todos los bordes @@ -4234,17 +4399,17 @@ Este archivo puede llegar a ocupar varios gigabytes, así que ten cuidado con el EmuThread - + Error Error - + No resume save state found. No se han encontrado estados guardados para continuar. - + Game ID: %1 Game Title: %2 Achievements: %5 (%6) @@ -4257,7 +4422,7 @@ Logros: %5 (%6) - + %n points %n punto @@ -4265,27 +4430,27 @@ Logros: %5 (%6) - + Rich presence inactive or unsupported. «Rich Presence» inactiva o no compatible. - + Game not loaded or no RetroAchievements available. No se ha cargado un juego o RetroAchievements no está disponible. - + %1x%2 %1 × %2 - + Game: %1 FPS Juego: %1 FPS - + Video: %1 FPS (%2%) Vídeo: %1 FPS (%2 %) @@ -4893,17 +5058,17 @@ Logros: %5 (%6) GPUDownsampleMode - + Disabled Deshabilitado - + Box (Downsample 3D/Smooth All) Cuadro (reducir resolución 3D/suavizar todo) - + Adaptive (Preserve 3D/Smooth 2D) Adaptable (preservar 3D/suavizar 2D) @@ -4911,27 +5076,27 @@ Logros: %5 (%6) GPURenderer - + Hardware (D3D11) Hardware (D3D11) - + Hardware (D3D12) Hardware (D3D12) - + Hardware (Vulkan) Hardware (Vulkan) - + Hardware (OpenGL) Hardware (OpenGL) - + Software Software @@ -5042,37 +5207,37 @@ Logros: %5 (%6) GPUTextureFilter - + Nearest-Neighbor Vecino más cercano - + Bilinear Bilineal - + Bilinear (No Edge Blending) Bilineal (sin unión de bordes) - + JINC2 (Slow) JINC2 (lento) - + JINC2 (Slow, No Edge Blending) JINC2 (lento, sin unión de bordes) - + xBR (Very Slow) xBR (muy lento) - + xBR (Very Slow, No Edge Blending) xBR (muy lento, sin unión de bordes) @@ -5100,52 +5265,52 @@ Logros: %5 (%6) PSF - + Never Nunca - + Today Hoy - + Yesterday Ayer - + {}h {}m {} h {} min - + {}h {}m {}s {} h {} min {} s - + {}m {}s {} min {} s - + {}s {} s - + None Ninguno - + {} hours {} horas - + {} minutes {} minutos @@ -5193,7 +5358,7 @@ Logros: %5 (%6) Serial - Número de serie + N.º de serie @@ -5943,12 +6108,12 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es HostInterface - + Failed to load configured BIOS file '%s' Fallo al cargar la BIOS configurada «%s» - + No BIOS image found for %s region No se ha encontrado una imagen de BIOS para la región %s @@ -5956,470 +6121,470 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es Hotkeys - - - - - - - - - - - + + + + + + + + + + + General General - + Fast Forward Avance rápido - + Toggle Fast Forward Alternar avance rápido - + Turbo Turbo - + Toggle Turbo Alternar turbo - + Toggle Fullscreen Alternar pantalla completa - + Toggle Pause Alternar pausa - + Toggle Cheats Alternar trucos - + Power Off System Apagar sistema - + Toggle Patch Codes Alternar códigos de parche - + Reset System Reiniciar sistema - + Save Screenshot Capturar pantalla - + Change Disc Cambiar disco - + Frame Step Avanzar fotograma - + Rewind Rebobinar - + Toggle Clock Speed Control (Overclocking) Alternar control de velocidad de reloj («overclocking») - - - - - - - - - - + + + + + + + + + + Graphics Gráficos - + Toggle Software Rendering Alternar renderizado por software - + Toggle PGXP Alternar PGXP - + Toggle PGXP Depth Buffer Alternar búfer de profundidad de la PGXP - + Increase Resolution Scale Incrementar escala de resolución - + Open Pause Menu Abrir menú de pausa - + Open Achievement List Abrir lista de logros - + Open Leaderboard List Abrir tabla de clasificación - - - - - - - - - - - + + + + + + + + + + + System Sistema - + Swap Memory Card Slots Cambiar ranuras de Memory Card - + Increase Emulation Speed Incrementar velocidad de emulación - + Decrease Emulation Speed Disminuir velocidad de emulación - + Reset Emulation Speed Reiniciar velocidad de emulación - + Decrease Resolution Scale Disminuir escala de resolución - + Toggle Post-Processing Activar posprocesamiento - + Reload Post Processing Shaders Recargar sombreadores de posprocesamiento - + Reload Texture Replacements Recargar reemplazos de textura - + Toggle Widescreen Alternar pantalla panorámica - + Toggle PGXP CPU Mode Alternar modo CPU de la PGXP - - - - - - - + + + + + + + Save States Estados guardados - + Load From Selected Slot Cargar ranura seleccionada - + Save To Selected Slot Guardar en ranura seleccionada - + Select Previous Save Slot Seleccionar ranura de guardado anterior - + Select Next Save Slot Seleccionar ranura de guardado siguiente - + Undo Load State Deshacer carga de estado - + Load Game State 1 Cargar estado de juego 1 - + Load Game State 2 Cargar estado de juego 2 - + Load Game State 3 Cargar estado de juego 3 - + Load Game State 4 Cargar estado de juego 4 - + Load Game State 5 Cargar estado de juego 5 - + Load Game State 6 Cargar estado de juego 6 - + Load Game State 7 Cargar estado de juego 7 - + Load Game State 8 Cargar estado de juego 8 - + Load Game State 9 Cargar estado de juego 9 - + Load Game State 10 Cargar estado de juego 10 - + Save Game State 1 Guardar estado de juego 1 - + Save Game State 2 Guardar estado de juego 2 - + Save Game State 3 Guardar estado de juego 3 - + Save Game State 4 Guardar estado de juego 4 - + Save Game State 5 Guardar estado de juego 5 - + Save Game State 6 Guardar estado de juego 6 - + Save Game State 7 Guardar estado de juego 7 - + Save Game State 8 Guardar estado de juego 8 - + Save Game State 9 Guardar estado de juego 9 - + Save Game State 10 Guardar estado de juego 10 - + Load Global State 1 Cargar estado global 1 - + Load Global State 2 Cargar estado global 2 - + Load Global State 3 Cargar estado global 3 - + Load Global State 4 Cargar estado global 4 - + Load Global State 5 Cargar estado global 5 - + Load Global State 6 Cargar estado global 6 - + Load Global State 7 Cargar estado global 7 - + Load Global State 8 Cargar estado global 8 - + Load Global State 9 Cargar estado global 9 - + Load Global State 10 Cargar estado global 10 - + Save Global State 1 Guardar estado global 1 - + Save Global State 2 Guardar estado global 2 - + Save Global State 3 Guardar estado global 3 - + Save Global State 4 Guardar estado global 4 - + Save Global State 5 Guardar estado global 5 - + Save Global State 6 Guardar estado global 6 - + Save Global State 7 Guardar estado global 7 - + Save Global State 8 Guardar estado global 8 - + Save Global State 9 Guardar estado global 9 - + Save Global State 10 Guardar estado global 10 - - - - + + + + Audio Audio - + Toggle Mute Alternar silenciado de audio - + Toggle CD Audio Mute Alternar silenciado de audio CD - + Volume Up Subir volumen - + Volume Down Bajar volumen @@ -6452,18 +6617,18 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es Borrar asignaciones - + Bindings for %1 %2 Asignaciones para %1 %2 - + Close Cerrar - - + + Push Button/Axis... [%1] Pulsa un botón/eje... [%1] @@ -6471,7 +6636,7 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es InputBindingWidget - + %n bindings %n asignación @@ -6479,8 +6644,8 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es - - + + Push Button/Axis... [%1] Pulsa un botón/eje... [%1] @@ -6488,17 +6653,17 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es InputVibrationBindingWidget - + Error Error - + No devices with vibration motors were detected. No se han detectado dispositivos con motores de vibración. - + Select vibration motor for %1. Selecciona el motor de vibración para %1. @@ -6506,52 +6671,52 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es LogLevel - + None Ninguno - + Error Error - + Warning Alerta - + Performance Rendimiento - + Information Información - + Developer Desarrollador - + Profile Perfil - + Verbose Detalles - + Debug Depuración - + Trace Seguimiento @@ -6565,15 +6730,15 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es - - + + Change Disc Cambiar disco - - + + Load State Cargar estado @@ -6598,107 +6763,107 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es Idioma - + &Help &Ayuda - + &Debug &Depuración - + Switch GPU Renderer Cambiar renderizador de GPU - + Switch CPU Emulation Mode Cambiar modo de emulación de CPU - + toolBar Barra de herramientas - + Start &Disc... Iniciar &disco... - + Start &BIOS Iniciar &BIOS - + &Scan For New Games &Buscar juegos nuevos - + &Rescan All Games &Volver a buscar todos los juegos - + Power &Off &Apagar - + &Reset &Reiniciar - + &Pause &Pausar - + &Load State &Cargar estado - + &Save State &Guardar estado - + E&xit &Salir - + Fullscreen Pantalla completa - + Resolution Scale Escala de resolución - + &GitHub Repository... Repositorio en &GitHub... - + &Issue Tracker... &Gestor de problemas... - + &Discord Server... Servidor de &Discord... - + Check for &Updates... Buscar a&ctualizaciones... @@ -6713,486 +6878,496 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es Trucos - + Switch Crop Mode Cambiar modo de recorte - + &View &Vista - + &Window Size &Tamaño de ventana - + &Tools &Herramientas - + Start &File... Iniciar &archivo... - + About &Qt... Acerca de &Qt... - + &About DuckStation... &Acerca de DuckStation... - + Change Disc... Cambiar disco... - + Cheats... Trucos... - + B&IOS B&IOS - + C&onsole &Consola - + E&mulation &Emulación - + &Controllers Man&dos - + &Hotkeys &Atajos - + &Display &Pantalla - + &Enhancements Me&joras - + &Post-Processing &Posprocesado - + Audio Audio - + Achievements Logros - + Folders Carpetas - + Game List Lista de juegos - + General General - + Advanced Avanzada - + Add Game Directory... Añadir directorio de juegos... - &Settings... - &Configuración... + &Configuración... - + From File... Desde archivo... - + From Device... Desde dispositivo... - + From Game List... Desde lista de juegos... - + Remove Disc Quitar disco - + Resume State Reanudar estado - + Global State Estado global - + Show VRAM Mostrar VRAM - + Dump CPU to VRAM Copies Volcar copias de CPU a VRAM - + Dump VRAM to CPU Copies Volcar copias de VRAM a CPU - + Disable All Enhancements Desactivar todas las mejoras - + Disable Interlacing Deshabilitar entrelazado - + Force NTSC Timings Forzar velocidad NTSC - + Dump Audio Volcar audio - + Dump RAM... Volcar RAM... - + Dump VRAM... Volcar VRAM... - + Dump SPU RAM... Volcar RAM del SPU... - + Show GPU State Mostrar estado de la GPU - + Show CD-ROM State Mostrar estado del CD-ROM - + Show SPU State Mostrar estado de la SPU - + Show Timers State Mostrar estado de los temporizadores - + Show MDEC State Mostrar estado del MDEC - + Show DMA State Mostrar estado del DMA - + &Screenshot Cap&tura - + &Memory Cards &Memory Cards - + + Enable GDB server + Habilitar servidor GDB + + + Start Big Picture Mode Iniciar Big Picture - + Big Picture Big Picture - + Cover Downloader Descargador de carátulas - - + + Resume Continuar - + + + &Settings + &Configuración + + + Resumes the last save state created. Continúa desde el último estado guardado. - + &Toolbar Barra de &herramientas - + Lock Toolbar Bloquear barra de herramientas - + &Status Bar Barra de &estado - + Game &List &Lista de juegos - + System &Display &Ventana del sistema - + Game &Properties &Propiedades del juego - + Memory &Card Editor &Editor de Memory Cards - + C&heat Manager &Administrador de trucos - + CPU D&ebugger D&epurador de CPU - + Game &Grid &Cuadrícula de juegos - + Show Titles (Grid View) Mostrar títulos (vista en cuadrícula) - + Zoom &In (Grid View) &Aumentar tamaño (vista en cuadrícula) - + Ctrl++ Ctrl++ - + Zoom &Out (Grid View) &Disminuir tamaño (vista en cuadrícula) - + Ctrl+- Ctrl+- - + Refresh &Covers (Grid View) Actuali&zar carátulas (vista en cuadrícula) - + Open Memory Card Directory... Abrir directorio de Memory Cards... - + Open Data Directory... Abrir directorio de datos... - + Power Off &Without Saving Apagar &sin guardar - + Failed to create host display device context. Fallo al crear el contexto del dispositivo de vídeo del sistema. - - + + Select Disc Image Seleccionar imagen de disco - + Could not find any CD-ROM devices. Please ensure you have a CD-ROM drive connected and sufficient permissions to access it. No se ha encontrado un dispositivo de CD-ROM. Asegúrate de tener una unidad de CD-ROM conectada y los permisos necesarios de acceso. - + %1 (%2) %1 (%2) - + Select disc drive: Selecciona la unidad de disco: - + Start Disc Iniciar disco - - + + Cheat Manager Administrador de trucos - + Properties... Propiedades... - + Open Containing Directory... Abrir directorio contenedor... - + Set Cover Image... Establecer imagen de carátula... - + Default Boot Inicio predeterminado - + Fast Boot Inicio rápido - + Full Boot Inicio completo - + Boot and Debug Iniciar y depurar - + Exclude From List Excluir de la lista - + Add Search Directory... Añadir directorio de búsqueda... - + Select Cover Image Seleccionar imagen de carátula - + All Cover Image Types (*.jpg *.jpeg *.png) Todos los archivos de imágenes (*.jpg *.jpeg *.png) - + Cover Already Exists La carátula ya existe - + A cover image for this game already exists, do you wish to replace it? Ya existe una carátula para este juego, ¿quieres reemplazarla? - - + + Copy Error Error de copia - + Failed to remove existing cover '%1' Fallo al eliminar la carátula existente «%1» - + Failed to copy '%1' to '%2' Fallo al copiar «%1» a «%2» @@ -7202,58 +7377,58 @@ La búsqueda recursiva lleva más tiempo, pero identificará los archivos que es Todos los tipos de archivo (*.bin *.img *.iso *.cue *.chd *.ecm *.mds *.pbp *.exe *.psexe *.ps-exe *.psf *.minipsf *.m3u);;Imágenes RAW de una pista (*.bin *.img *.iso);;Archivo CUE (*.cue);;Imágenes CHD para MAME (*.chd);;Imágenes Error Code Modeler (*.ecm);;Imágenes de Media Descriptor (*.mds);;EBOOTs de PlayStation (*.pbp *.PBP);;Ejecutables de PlayStation (*.exe *.psexe *.ps-exe);;Archivos Portable Sound Format (*.psf *.minipsf);;Listas de reproducción (*.m3u) - - - - - + + + + + Error Error - + Failed to get window info from widget Fallo al obtener la información de la ventana a partir del widget - + Failed to get new window info from widget Fallo al obtener la información de la ventana nueva a partir del widget - + Paused En pausa - + Resume (%1) Continuar (%1) - - - + + + Game Save %1 (%2) Estado de juego %1 (%2) - + Edit Memory Cards... Editar Memory Cards... - + Delete Save States... Borrar estados guardados... - + Confirm Save State Deletion Confirmar borrado de estados guardados - + Are you sure you want to delete all save states for %1? The saves will not be recoverable. @@ -7262,67 +7437,67 @@ The saves will not be recoverable. Una vez sean borrados, no se podrán recuperar. - + Load From File... Cargar archivo... - - + + Select Save State File Seleccionar archivo de estado guardado - - + + Save States (*.sav) Estados guardados (*.sav) - + Undo Load State Deshacer carga de estado - - + + Game Save %1 (Empty) Estado de juego %1 (vacío) - - + + Global Save %1 (%2) Estado global %1 (%2) - - + + Global Save %1 (Empty) Estado global %1 (vacío) - + Save To File... Guardar en archivo... - + &Enabled Cheats &Trucos habilitados - + &Apply Cheats &Aplicar trucos - + Load Resume State Cargar estado para continuar - + A resume save state was found for this game, saved at: %1. @@ -7335,144 +7510,163 @@ Do you want to load this state, or start from a fresh boot? ¿Deseas cargar este estado o ejecutar el juego desde el principio? - + Fresh Boot Empezar de cero - + Delete And Boot Borrar y empezar - + Failed to delete save state file '%1'. Fallo al eliminar el estado guardado «%1». - + Confirm Disc Change Confirmación de cambio de disco - + Do you want to swap discs or boot the new image (via system reset)? ¿Deseas cambiar de disco o ejecutar la imagen nueva (reiniciando el sistema)? - + Swap Disc Cambiar disco - + Reset Reiniciar - + Cancel Cancelar - + You must select a disc to change discs. Para cambiar de disco, debes seleccionar uno. - + + Reset Play Time + Reiniciar tiempo jugado + + + + Confirm Reset + Confirmar reinicio + + + + Are you sure you want to reset the play time for '%1'? + +This action cannot be undone. + ¿Seguro que quieres reiniciar el tiempo jugado de «%1»? + +Esta acción no se puede deshacer. + + + %1x Scale Escala %1x - - - + + + Destination File Archivo de destino - - + + Binary Files (*.bin) Archivos BIN (*.bin) - + Binary Files (*.bin);;PNG Images (*.png) Archivos BIN (*.bin);;Imágenes PNG (*.png) - + Default Predeterminado - + Fusion Fusion - + Dark Fusion (Gray) Dark Fusion (gris) - + Dark Fusion (Blue) Dark Fusion (azul) - + QDarkStyle QDarkStyle - + Confirm Shutdown Confirmar apagado - + Are you sure you want to shut down the virtual machine? ¿Seguro que quieres apagar la máquina virtual? - + Save State For Resume Estado para continuar - - - - + + + + Memory Card Not Found Memory Card no encontrada - + Memory card '%1' does not exist. Do you want to create an empty memory card? La Memory Card «%1» no existe. ¿Quieres crear una Memory Card vacía? - + Failed to create memory card '%1' Fallo al crear la Memory Card «%1» - - + + Memory card '%1' could not be found. Try starting the game and saving to create it. No se ha encontrado la Memory Card «%1». Intenta iniciar el juego y guardar una partida para crearla. - + Do not show again No mostrar otra vez - + Using cheats can have unpredictable effects on games, causing crashes, graphical glitches, and corrupted saves. By using the cheat manager, you agree that it is an unsupported configuration, and we will not provide you with any assistance when games break. Cheats persist through save states even after being disabled, please remember to reset/reboot the game after turning off any codes. @@ -7485,17 +7679,17 @@ Los trucos persistirán a través de los estados de guardado incluso después de ¿Seguro que quieres continuar? - + Updater Error Error de actualización - + <p>Sorry, you are trying to update a DuckStation version which is not an official GitHub release. To prevent incompatibilities, the auto-updater is only enabled on official builds.</p><p>To obtain an official build, please follow the instructions under "Downloading and Running" at the link below:</p><p><a href="https://github.com/stenzek/duckstation/">https://github.com/stenzek/duckstation/</a></p> <p>Estás intentando actualizar a una versión de DuckStation no oficial de GitHub. Para evitar incompatibilidades, el actualizador automático solo buscará compilaciones oficiales.</p><p>Para obtener una versión oficial, sigue las instrucciones en el apartado «Downloading and Running» en el siguiente enlace:</p><p><a href="https://github.com/stenzek/duckstation/">https://github.com/stenzek/duckstation/</a></p> - + Automatic updating is not supported on the current platform. Las actualizaciones automáticas no son compatibles con la plataforma actual. @@ -7829,32 +8023,32 @@ Los trucos persistirán a través de los estados de guardado incluso después de MemoryCardType - + No Memory Card No utilizar una Memory Card - + Shared Between All Games Compartida entre todos los juegos - + Separate Card Per Game (Serial) Memory Card individual para cada juego (por número de serie) - + Separate Card Per Game (Title) Memory Card individual para cada juego (por título) - + Separate Card Per Game (File Title) Memory Card individual para cada juego (por nombre de archivo) - + Non-Persistent Card (Do Not Save) Memory Card no persistente (no guardar) @@ -7862,22 +8056,22 @@ Los trucos persistirán a través de los estados de guardado incluso después de MultitapMode - + Disabled Deshabilitado - + Enable on Port 1 Only Habilitar solamente en el puerto 1 - + Enable on Port 2 Only Habilitar solamente en el puerto 2 - + Enable on Ports 1 and 2 Habilitar en los puertos 1 y 2 @@ -7908,17 +8102,17 @@ Los trucos persistirán a través de los estados de guardado incluso después de OSDMessage - + Acquired exclusive fullscreen. Adquirida pantalla completa exclusiva. - + Failed to acquire exclusive fullscreen. Fallo al adquirir la pantalla completa exclusiva. - + Lost exclusive fullscreen. Se ha perdido la pantalla completa exclusiva. @@ -7963,77 +8157,76 @@ Los trucos persistirán a través de los estados de guardado incluso después de La escala de resolución %ux no es compatible con el suavizado adaptativo, se va a usar %ux. - OpenGL renderer unavailable, your driver or hardware is not recent enough. OpenGL 3.1 or OpenGL ES 3.0 is required. - Renderizador de OpenGL no disponible, tu hardware o tus controladores no son lo suficientemente modernos. Se requiere de OpenGL 3.1 o de OpenGL ES 3.0. + Renderizador de OpenGL no disponible, tu hardware o tus controladores no son lo suficientemente modernos. Se requiere de OpenGL 3.1 o de OpenGL ES 3.0. - + System reset. Reiniciando sistema. - + Loading state from '%s' failed. Resetting. Fallo al cargar el estado «%s». Reiniciando. - + Saving state to '%s' failed. Fallo al guardar el estado «%s». - + PGXP is incompatible with the software renderer, disabling PGXP. PGXP es incompatible con el renderizador por software, por lo tanto se deshabilitará. - + Rewind is not supported on 32-bit ARM for Android. La función de rebobinado no es compatible con las versiones ARM de 32 bits para Android. - + Runahead is not supported on 32-bit ARM for Android. La predicción de latencia no es compatible con las versiones ARM de 32 bits para Android. - + Rewind is disabled because runahead is enabled. Se ha desactivado la función de rebobinado porque la predicción de latencia está activada. - + Switching to %s%s GPU renderer. Cambiando al renderizador de GPU %s%s. - + Switching to %s audio backend. Cambiando al motor de audio %s. - + Switching to %s CPU execution mode. Cambiando al modo de ejecución de CPU %s. - + Recompiler options changed, flushing all blocks. Las opciones del recompilador han cambiado, limpiando los bloques. - + PGXP enabled, recompiling all blocks. PGXP habilitado, recompilando todos los bloques. - + PGXP disabled, recompiling all blocks. PGXP deshabilitado, recompilando todos los bloques. - + Switching to %s renderer... Cambiando al renderizador %s... @@ -8053,119 +8246,119 @@ Los trucos persistirán a través de los estados de guardado incluso después de Memory Card guardada en «{}». - + Save state contains controller type %s in port %u, but %s is used. Switching. El estado guardado contiene el tipo de mando %s en el puerto %u, pero se está utilizando %s. Cambiando. - + Ignoring mismatched controller type %s in port %u. Ignorando diferencias en el tipo de mando %s en el puerto %u. - + Memory card %u from save state does match current card data. Simulating replugging. La Memory Card %u del estado guardado no coincide con los datos de la Memory Card actual. Simulando reconexión. - + Memory card %u present in save state but not in system. Ignoring card. La Memory Card %u está presente en el estado guardado, pero no en el sistema. Ignorando Memory Card. - + Memory card %u present in system but not in save state. Replugging card. La Memory Card %u está presente en el sistema, pero no en el estado guardado. Reconectando Memory Card. - + Memory card %u present in save state but not in system. Creating temporary card. La Memory Card %u está presente en el estado guardado, pero no en el sistema. Creando Memory Card temporal. - + Memory card %u present in system but not in save state. Removing card. La Memory Card %u está presente en el sistema, pero no en el estado guardado. Quitando Memory Card. - + CD image preloading not available for multi-disc image '%s' La precarga de imagen de CD no está disponible para la imagen de varios discos «%s» - + Precaching CD image failed, it may be unreliable. Fallo al precachear la imagen de CD, el sistema podría ser inestable. - + CPU clock speed is set to %u%% (%u / %u). This may result in instability. La velocidad de reloj de la CPU está establecida en %u%% (%u / %u). Podría haber inestabilidades. - + CD-ROM read speedup set to %ux (effective speed %ux). This may result in instability. Aceleración de lectura del CDROM establecida en %ux (velocidad efectiva %ux). Podría haber inestabilidades. - + CD-ROM seek speedup set to instant. This may result in instability. Aceleración de búsqueda de CD-ROM establecida como instantánea. Podría haber inestabilidades. - + CD-ROM seek speedup set to %ux. This may result in instability. Aceleración de búsqueda de CD-ROM establecida en %ux. Podría haber inestabilidades. - + Failed to initialize %s renderer, falling back to software renderer. Fallo al inicializar el renderizador %s, cambiando al renderizador por software. - + WARNING: CPU overclock (%u%%) was different in save state (%u%%). AVISO: la velocidad de «overclocking» de la CPU (%u %%) es diferente a la del estado guardado (%u %%). - + Failed to open CD image from save state '%s': %s. Using existing image '%s', this may result in instability. Fallo al abrir la imagen de CD del estado guardado «%s»: %s. Usando la imagen existente «%s», podría haber inestabilidades. - + Failed to open disc image '%s': %s. Fallo al abrir la imagen de disco «%s»: %s. - + Failed to switch to subimage %u in '%s': %s. Error al cambiar la subimagen %u en «%s»: %s. - + Switched to sub-image %s (%u) in '%s'. Cambiado a la subimagen %s (%u) en «%s». - + Inserted disc '%s' (%s). Disco «%s» introducido (%s). - - + + Failed to load post processing shader chain. Error al cargar la cadena de sombreadores de posprocesamiento. - + No cheats are loaded. No hay trucos cargados. - + %n cheats are now active. %n truco está habilitado. @@ -8173,7 +8366,7 @@ Los trucos persistirán a través de los estados de guardado incluso después de - + %n cheats are now inactive. %n truco está deshabilitado. @@ -8181,147 +8374,147 @@ Los trucos persistirán a través de los estados de guardado incluso después de - + Cannot load state for game without serial. No se puede cargar el estado de un juego que no tenga número de serie. - + No save state found in slot {}. No se ha encontrado un estado guardado en la ranura {}. - + Cannot save state for game without serial. No se puede guardar el estado de un juego que no tenga número de serie. - + Achievements are disabled or unavailable for game. Este juego tiene los logros bloqueados o no disponibles. - + Leaderboards are disabled or unavailable for game. Este juego tiene las tablas de puntuaciones bloqueadas o no disponibles. - + CPU clock speed control enabled (%u%% / %.3f MHz). Control de velocidad de reloj del CPU habilitado (%u %% / %.3f MHz). - + CPU clock speed control disabled (%.3f MHz). Control de velocidad de reloj del CPU deshabilitado (%.3f MHz). - + PGXP is now enabled. PGXP habilitada. - + PGXP is now disabled. PGXP deshabilitada. - + PGXP Depth Buffer is now enabled. Búfer de profundidad de la PGXP habilitado. - + PGXP Depth Buffer is now disabled. Búfer de profundidad de la PGXP deshabilitado. - - - + + + Volume: {}% Volumen: {} % - + Texture replacements reloaded. Reemplazos de textura recargados. - + Failed to save undo load state. Fallo al guardar la acción para deshacer la carga del estado. - + Rewinding is not enabled. El rebobinado no está habilitado. - - - + + + Emulation speed set to %u%%. Velocidad de emulación establecida en %u %%. - + PGXP CPU mode is now enabled. Modo CPU de la PGXP habilitado. - + PGXP CPU mode is now disabled. Modo CPU de la PGXP deshabilitado. - + Volume: Muted Volumen: silenciado - + CD Audio Muted. Audio de CD silenciado. - + CD Audio Unmuted. Según la RAE es válido el uso del prefijo 'de-'. Audio de CD activado. - + Started dumping audio to '%s'. Comenzando a volcar audio en «%s». - + Failed to start dumping audio to '%s'. Fallo al iniciar el volcado de audio en «%s». - + Stopped dumping audio. Volcado de audio finalizado. - + Screenshot file '%s' already exists. El archivo de captura «%s» ya existe. - + Failed to save screenshot to '%s' Fallo al guardar la captura «%s» - + Screenshot saved to '%s'. Captura de pantalla guardada en «%s». - + Controller in port %u (%s) is not supported for %s. Supported controllers: %s Please configure a supported controller from the list above. @@ -8330,32 +8523,32 @@ Mandos soportados: %s Selecciona un control de la lista superior. - + Failed to load cheats from '%s'. Fallo al cargar trucos de «%s». - + Swapped memory card ports. Both ports have a memory card. Intercambiados los puertos de Memory Card. Ambos tienen una Memory Card. - + Swapped memory card ports. Port 2 has a memory card, Port 1 is empty. Intercambiados los puertos de Memory Card. El puerto 2 contiene una Memory Card y el puerto 1 está vacío. - + Swapped memory card ports. Port 1 has a memory card, Port 2 is empty. Intercambiados los puertos de Memory Card. El puerto 1 contiene una Memory Card y el puerto 2 está vacío. - + Swapped memory card ports. Neither port has a memory card. Intercambiados los puertos de Memory Card. Ninguno tiene una Memory Card. - + Saved %n cheats to '%s'. Se ha guardado %n truco en «%s». @@ -8363,37 +8556,42 @@ Selecciona un control de la lista superior. - + Widescreen hack is now enabled, and aspect ratio is set to %s. Hack para pantallas panorámicas habilitado, relación de aspecto configurada en %s. - + Widescreen hack is now disabled, and aspect ratio is set to %s. Hack para pantallas panorámicas deshabilitado, relación de aspecto configurada en %s. - + Failed to save cheat list to '%s' Fallo al guardar la lista de trucos en «%s» - + Loading state from '{}'... Cargando estado de «{}»... - + Save State Guardar estado - + State saved to '{}'. Estado guardado en «{}». + + + This save state was created with a different BIOS version or patch options. This may cause stability issues. + Este estado de guardado se creó con una versión de la BIOS o con opciones de parche distintas. Podría haber problemas de estabilidad. + - + %n cheats are enabled. This may result in instability. %n truco habilitado. Podría haber inestabilidades. @@ -8401,47 +8599,47 @@ Selecciona un control de la lista superior. - + Deleted cheat list '%s'. Lista de trucos «%s» borrada. - + Cheat '%s' enabled. Truco «%s» habilitado. - + Cheat '%s' disabled. Truco «%s» deshabilitado. - + Applied cheat '%s'. Aplicado truco «%s». - + Cheat '%s' is already enabled. El truco «%s» ya está activado. - + Post-processing is now enabled. Posprocesamiento habilitado. - + Post-processing is now disabled. Posprocesamiento deshabilitado. - + Failed to load post-processing shader chain. Fallo al cargar la cadena de sombreadores de posprocesamiento. - + Post-processing shaders reloaded. Sombreadores de posprocesamiento recargados. @@ -8457,66 +8655,71 @@ Selecciona un control de la lista superior. + Using software renderer for readbacks based on game settings. + Utilizando renderizador por software para cotejar por lo indicado en la configuración del juego. + + + Interlacing forced by game settings. Entrelazado forzado por la configuración del juego. - + True color disabled by game settings. Color verdadero deshabilitado por la configuración del juego. - + Upscaling disabled by game settings. Escalado deshabilitado por la configuración del juego. - + Scaled dithering disabled by game settings. Escalado de tramado deshabilitado por la configuración del juego. - + Widescreen disabled by game settings. Pantalla panorámica deshabilitada por la configuración del juego. - + Forcing NTSC Timings disallowed by game settings. Forzado de velocidad NTSC deshabilitado por la configuración del juego. - + PGXP geometry correction disabled by game settings. Corrección de geometría de la PGXP deshabilitada por la configuración del juego. - + PGXP culling disabled by game settings. «Culling» de la PGXP deshabilitado por la configuración del juego. - + PGXP perspective corrected textures disabled by game settings. Corrección de perspectiva de texturas de la PGXP deshabilitada por la configuración del juego. - + PGXP perspective corrected colors disabled by game settings. Corrección de perspectiva de colores de la PGXP deshabilitada por la configuración del juego. - + PGXP vertex cache forced by game settings. Caché de vértices de la PGXP forzada por la configuración del juego. - + PGXP CPU mode forced by game settings. Modo CPU de la PGXP forzado por la configuración del juego. - + PGXP Depth Buffer disabled by game settings. Búfer de profundidad de la PGXP deshabilitado por la configuración del juego. @@ -8525,6 +8728,11 @@ Selecciona un control de la lista superior. Analog mode forcing is disabled by game settings. Controller will start in digital mode. Forzado del modo analógico deshabilitado por la configuración del juego. El mando se iniciará en modo digital. + + + OpenGL renderer unavailable, your driver or hardware is not recent enough. OpenGL 3.1 or OpenGL ES 3.1 is required. + Renderizador de OpenGL no disponible: tu hardware o tus controladores no son lo suficientemente modernos. Se requiere de OpenGL 3.1 o de OpenGL ES 3.1. + PlayStationMouse @@ -8709,29 +8917,29 @@ La URL era: %1 QtHost - - - + + + Error Error - + File '%1' does not exist. El archivo «%1» no existe. - + The specified save state does not exist. El estado de guardado indicado no existe. - + Cannot use no-gui mode, because no boot filename was specified. No se puede utilizar el modo «no-gui» porque no se ha especificado un nombre del archivo de arranque. - + Cannot use batch mode, because no boot filename was specified. No se puede utilizar el modo por lotes porque no se ha especificado un nombre del archivo de arranque. @@ -8767,42 +8975,42 @@ La URL era: %1 SaveStateSelectorUI - + Load Cargar - + Save Guardar - + Select Previous Seleccionar anterior - + Select Next Seleccionar siguiente - + No Save State No hay estados guardados - + Global Slot %d Ranura global %d - + Game Slot %d Ranura de juego %d - + %s Slot %d Ranura %s %d @@ -9019,63 +9227,68 @@ La URL era: %1 System - + Failed to load %s BIOS. Fallo al cargar la BIOS %s. - - + + Error Error - + Failed to load save state file '{}' for booting. Fallo al arrancar con el archivo de estado «{}». - + + Incorrect BIOS image size + Tamaño de imagen de la BIOS incorrecto + + + Save state is incompatible: minimum version is %u but state is version %u. El estado guardado es incompatible: la versión mínima soportada es %u, pero el estado es para la versión %u. - + Save state is incompatible: maximum version is %u but state is version %u. El estado guardado es incompatible: la versión máxima soportada es %u, pero el estado es para la versión %u. - + Failed to open CD image '%s' used by save state: %s. Fallo al abrir la imagen de CD «%s» del estado guardado %s. - + Failed to switch to subimage %u in CD image '%s' used by save state: %s. Fallo al cambiar la subimagen %u en el CD «%s» utilizado por el estado guardado %s. - + Per-game memory card cannot be used for slot %u as the running game has no code. Using shared card instead. No puede usarse una Memory Card individual para el juego en la ranura %u ya que el juego no tiene un código. Se usará una Memory Card compartida. - + Per-game memory card cannot be used for slot %u as the running game has no title. Using shared card instead. No puede usarse una Memory Card individual para el juego en la ranura %u ya que el juego no tiene un título. Se usará una Memory Card compartida. - + Per-game memory card cannot be used for slot %u as the running game has no path. Using shared card instead. No puede usarse una Memory Card individual para el juego en la ranura %u ya que el juego no tiene una ruta. Se usará una Memory Card compartida. - + Game changed, reloading memory cards. Juego cambiado, volviendo a cargar las Memory Cards. - + You are attempting to run a libcrypt protected game without an SBI file: %s: %s @@ -9096,7 +9309,7 @@ Revisa las instrucciones del archivo README sobre como agregar un archivo SBI. ¿Quieres continuar? - + You are attempting to run a libcrypt protected game without an SBI file: %s: %s diff --git a/src/duckstation-qt/translations/duckstation-qt_ja.ts b/src/duckstation-qt/translations/duckstation-qt_ja.ts index 52b03ab52..beb72b86f 100644 --- a/src/duckstation-qt/translations/duckstation-qt_ja.ts +++ b/src/duckstation-qt/translations/duckstation-qt_ja.ts @@ -172,7 +172,7 @@ - + Login... ログイン... @@ -266,29 +266,29 @@ チャレンジ可能な実績がある場合、画面の右下隅にアイコンを表示します。 - + Reset System システムリセット - + Hardcore mode will not be enabled until the system is reset. Do you want to reset the system now? システムがリセットされるまで、ハードコアモードは有効になりません。今すぐシステムをリセットしますか? - + Username: %1 Login token generated on %2. ユーザー名: %1 ログイントークンは %2 に生成されました。 - + Logout ログアウト - + Not Logged In. ログインしていません。 @@ -296,17 +296,17 @@ Login token generated on %2. Achievements - + Loading state ステートロード - + Resuming state ステートセーブからの再開 - + Hardcore mode disabled by state switch. ステートロードによりハードコアモードが無効化されました。 @@ -351,34 +351,34 @@ Login token generated on %2. このゲームには実績がありません。 - + Your Score: {} (Best: {}) Leaderboard Position: {} of {} あなたのスコア: {} (ベスト: {}) リーダーボードでの順位: {} 位 ({} 人中) - + This game has {} leaderboards. このゲームには {} 個のリーダーボードがあります。 - + Submitting scores is disabled because hardcore mode is off. Leaderboards are read-only. ハードコアモードがオフになっているため、スコアの送信は無効になっています。リーダーボードは読み取り専用です。 - + Time タイム - + Score スコア - + Downloading leaderboard data, please wait... リーダーボードのデータをダウンロードしています。お待ちください... @@ -407,25 +407,25 @@ Leaderboard Position: {} of {} - + Log To System Console システムコンソールにログ出力 - + Log To Window ウィンドウにログ表示 - + Log To Debug Console デバッグコンソールにログ出力 - + Log To File ファイルにログ保存 @@ -445,185 +445,220 @@ Leaderboard Position: {} of {} - + PGXP Vertex Cache PGXP 頂点キャッシュ - + Show Status Indicators ステータスインジケータを表示する - + + Select folder for %1 + %1 フォルダを選択してください + + + + Show Frame Times + フレーム時間を表示 + + + Multisample Antialiasing マルチサンプルアンチエイリアス - + Display Active Start Offset 表示開始オフセット (左端/オーバースキャン用) - + Display Active End Offset 表示終了オフセット (右端/オーバースキャン用) - + Display Line Start Offset 表示開始オフセット (上端/オーバースキャン用) - + Display Line End Offset 表示終了オフセット (下端/オーバースキャン用) - + PGXP Geometry Tolerance PGXP ジオメトリトレランス(形状公差) - + PGXP Depth Clear Threshold PGXP 深度 消去しきい値 - + Enable Recompiler Block Linking リコンパイラのブロックリンクを有効にする - + Enable Recompiler Fast Memory Access リコンパイラの高速メモリアクセスを有効にする - + + Use Old MDEC Routines + 昔の MDEC ルーチンを使用する + + + Enable VRAM Write Texture Replacement VRAM 書き込みテクスチャ置換を有効にする - + Preload Texture Replacements テクスチャ置換をプリロードする - + Dump Replaceable VRAM Writes 置換可能な VRAM 書き込みをダンプする - + Set Dumped VRAM Write Alpha Channel ダンプ済み VRAM 書き込みアルファチャネルを設定する - + Minimum Dumped VRAM Write Width 最小ダンプ VRAM 書き込み幅 - + Minimum Dumped VRAM Write Height 最小ダンプ VRAM 書き込み高 - + DMA Max Slice Ticks DMA スライスの最長 Tick 数 - + DMA Halt Ticks DMA 休止 Tick 数 - + GPU FIFO Size GPU FIFO サイズ - + GPU Max Run-Ahead GPU 最大先行実行(Run-Ahead) - + + Stretch Display Vertically + 画面を垂直方向に引き延ばす + + + Allow Booting Without SBI File SBI ファイルなしでの起動を許可する - + Create Save State Backups ステートセーブのバックアップを作成する - + + Enable PCDrv + PCDrv を有効にする + + + + Enable PCDrv Writes + PCDrv の書き込みを有効にする + + + + PCDrv Root Directory + PCDrv のルートディレクトリ + + + Log Level ログレベル - + Information 情報 - + Sets the verbosity of messages logged. Higher levels will log more messages. ログに記録される情報の詳細度を設定します。レベルが高いほど、より多くの情報がログに記録されます。 - - - - + + + + User Preference ユーザー設定 - + Logs messages to the console window. ログをコンソールウィンドウに出力します。 - + Logs messages to the debug console where supported. サポートされている場合は、ログをデバッグコンソールに出力します。 - + Logs messages to the window. ログをウィンドウに表示します。 - + Logs messages to duckstation.log in the user directory. ログをユーザーディレクトリの duckstation.log に記録します。 - + Shows a debug menu bar with additional statistics and quick settings. 追加の統計とクイック設定を含むデバッグメニューバーを表示します。 - + Display FPS Limit FPS 制限を表示 - + Disable All Enhancements すべての拡張機能を無効化 - + Apply Compatibility Settings 互換性設定を適用する - + Increase Timer Resolution タイマー精度を上げる(高精度タイマ) @@ -633,7 +668,7 @@ Leaderboard Position: {} of {} デフォルトにリセット - + Enable Recompiler Memory Exceptions リコンパイラのメモリ例外を有効にする @@ -644,33 +679,23 @@ Leaderboard Position: {} of {} - + Show Debug Menu デバッグメニューを表示 - + Use Debug Host GPU Device デバッグホスト GPU デバイスを使用する - + Unchecked チェックなし AnalogController - - - Controller %u is locked to analog mode by the game. - コントローラー %u は、ゲームによってアナログモードにロックされています。 - - - - Controller %u is locked to digital mode by the game. - コントローラー %u は、ゲームによってデジタルモードにロックされています。 - @@ -683,6 +708,16 @@ Leaderboard Position: {} of {} Controller {} switched to digital mode. コントローラー {} がデジタルモードに切り替わりました。 + + + Controller {} is locked to analog mode by the game. + コントローラー {} は、ゲームによってアナログモードにロックされています。 + + + + Controller {} is locked to digital mode by the game. + コントローラー {} は、ゲームによってデジタルモードにロックされています。 + Not Inverted @@ -862,17 +897,17 @@ Leaderboard Position: {} of {} AudioBackend - + Null (No Output) Null (出力なし) - + Cubeb Cubeb - + XAudio2 XAudio2 @@ -1282,17 +1317,17 @@ Leaderboard Position: {} of {} CPUExecutionMode - + Interpreter (Slowest) インタープリタ (最も遅い) - + Cached Interpreter (Faster) キャッシュされたインタープリタ (高速) - + Recompiler (Fastest) リコンパイラ (最速) @@ -1300,17 +1335,17 @@ Leaderboard Position: {} of {} CPUFastmemMode - + Disabled (Slowest) 無効 (最も遅い) - + MMap (Hardware, Fastest, 64-Bit Only) MMap (ハードウェア, 最速, 64ビットのみ) - + LUT (Faster) LUT (高速) @@ -1851,6 +1886,14 @@ Leaderboard Position: {} of {} 自動 (Frame End) + + ColorPickerButton + + + Select LED Color + LED の色を選択 + + CommonHost @@ -1862,7 +1905,7 @@ Leaderboard Position: {} of {} CommonHostInterface - + Invalid version %u (%s version %u) 無効なバージョン %u (%s バージョン %u) @@ -1870,22 +1913,22 @@ Leaderboard Position: {} of {} ConsoleRegion - + Auto-Detect 自動検出 - + NTSC-J (Japan) NTSC-J (日本) - + NTSC-U/C (US, Canada) NTSC-U/C (US, カナダ) - + PAL (Europe, Australia) PAL (ヨーロッパ, オーストラリア) @@ -2905,7 +2948,7 @@ This warning will only be shown once. ステアリング/ねじり - + %1% %1% @@ -2913,22 +2956,22 @@ This warning will only be shown once. ControllerCustomSettingsWidget - + %1 Settings %1 設定 - + Restore Default Settings デフォルト設定に戻す - + Browse... 参照... - + Select File ファイルを選択 @@ -3006,7 +3049,7 @@ This warning will only be shown once. SDL を有効化 - + DualShock 4 / DualSense Enhanced Mode DualShock 4 / DualSense 拡張モード @@ -3016,72 +3059,105 @@ This warning will only be shown once. 検出されたデバイス - + Mouse/Pointer Source マウス / ポインター - - + + 10 10 - + Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used. Raw Input を使用すると、コントローラーのスティックをマウスポインターに割り当てるときに精度が向上します。複数のマウスを使用することも可能にします。 - + Vertical Sensitivity: 垂直方向の感度: - + Horizontal Sensitivity: 水平方向の感度: - + Enable Mouse Mapping マウスへの割り当てを有効化 - + Use Raw Input Raw Input を使用 - + XInput Source XInput - + + Controller LED Settings + コントローラーの LED 設定 + + + The XInput source provides support for XBox 360 / XBox One / XBox Series controllers, and third party controllers which implement the XInput protocol. XInput は、XBox 360 / XBox One / XBox Series のコントローラ、および XInput プロトコルを実装するサードパーティ製コントローラのサポートを提供します。 - + Enable XInput Input Source XInput を有効化 - + Profile Settings プロファイル設定 - + When this option is enabled, hotkeys can be set in this input profile, and will be used instead of the global hotkeys. By default, hotkeys are always shared between all profiles. このオプションを有効にすると、この入力プロファイル用のホットキーを設定し、グローバルホットキーの代わりに使用することができます。デフォルトでは、ホットキーは常にすべてのプロファイル間で共有されます。 - + Use Per-Profile Hotkeys プロファイルごとのホットキーを使用する + + ControllerLEDSettingsDialog + + + Controller LED Settings + コントローラー LED 設定 + + + + SDL-0 LED + SDL-0 LED + + + + SDL-1 LED + SDL-1 LED + + + + SDL-2 LED + SDL-2 LED + + + + SDL-3 LED + SDL-3 LED + + ControllerMacroEditWidget @@ -3130,27 +3206,27 @@ This warning will only be shown once. 設定... - + Not Configured 設定されていません - + Set Frequency 頻度を設定 - + Frequency: 頻度: - + Macro will not repeat. マクロは繰り返されません。 - + Macro will toggle buttons every %1 frames. マクロは %1 フレームごとにボタンを切り替えます。 @@ -3218,7 +3294,7 @@ This warning will only be shown once. - + Error エラー @@ -3293,33 +3369,33 @@ You cannot undo this action. グローバル設定 - - + + Controller Port %1%2 %3 コントローラーポート %1%2 %3 - - + + Controller Port %1 %2 コントローラーポート %1 %2 - + Hotkeys ホットキー - + Shared 共有 - + The input profile named '%1' cannot be found. '%1' という名前の入力プロファイルが見つかりません。 @@ -3327,36 +3403,36 @@ You cannot undo this action. ControllerType - + None なし - + Digital Controller デジタルコントローラー - + Analog Controller (DualShock) アナログコントローラー (DualShock) - + Analog Joystick アナログジョイスティック - + PlayStation Mouse プレイステーションマウス - + NeGcon ネジコン @@ -3367,10 +3443,15 @@ You cannot undo this action. - + GunCon ガンコン + + + Not Connected + 未接続 + CoverDownloadDialog @@ -3459,42 +3540,42 @@ You cannot undo this action. DebuggerMessage - + Added breakpoint at 0x%08X. 0x%08X にブレークポイントを追加しました。 - + Removed breakpoint at 0x%08X. 0x%08X のブレークポイントを削除しました。 - + 0x%08X is not a call instruction. 0x%08X はコール命令ではありません。 - + Can't step over double branch at 0x%08X 0x%08X で二重分岐をステップオーバーできません - + Stepping over to 0x%08X. 0x%08X にステップオーバーします。 - + Instruction read failed at %08X while searching for function end. 関数の終わりを検索中に、%08X で命令の読み取りに失敗しました。 - + Stepping out to 0x%08X. 0x%08X にステップアウトします。 - + No return instruction found after %u instructions for step-out at %08X. ステップアウトするために必要なリターン命令が以降 %u 個の命令中にありません(%08X)。 @@ -3665,6 +3746,7 @@ You cannot undo this action. + Toggle &Breakpoint ブレークポイント有効/無効の切り替え(&B) @@ -3700,6 +3782,7 @@ You cannot undo this action. + &Run To Cursor カーソルまで実行(&R) @@ -3838,23 +3921,33 @@ This file can be several gigabytes, so be aware of SSD wear. ステップアウトブレークポイントの追加に失敗しました。有効な関数内にいますか? - - + + View in &Dump + ダンプに表示(&D) + + + + Follow Load/Store + ロード/ストア先のメモリーを表示 + + + + Invalid search pattern. It should contain hex digits or question marks. 無効な検索パターン。16進数または疑問符を含める必要があります。 - + Pattern not found. パターンが見つかりません。 - + Pattern found at 0x%1 (passed the end of memory). 0x%1 でパターンが見つかりました (メモリ終端に到達したため先頭から再検索しました)。 - + Pattern found at 0x%1. 0x%1 でパターンが見つかりました。 @@ -3880,22 +3973,22 @@ This file can be several gigabytes, so be aware of SSD wear. DiscRegion - + NTSC-J (Japan) NTSC-J (日本) - + NTSC-U/C (US, Canada) NTSC-U/C (US, カナダ) - + PAL (Europe, Australia) PAL (ヨーロッパ, オーストラリア) - + Other その他 @@ -3903,17 +3996,17 @@ This file can be several gigabytes, so be aware of SSD wear. DisplayAlignment - + Left / Top 左 / 上 - + Center 中央 - + Right / Bottom 右 / 下 @@ -3921,17 +4014,17 @@ This file can be several gigabytes, so be aware of SSD wear. DisplayAspectRatio - + Auto (Game Native) 自動 (ゲーム本来の比率) - + Auto (Match Window) 自動 (ウィンドウに合わせる) - + Custom カスタム @@ -3939,17 +4032,17 @@ This file can be several gigabytes, so be aware of SSD wear. DisplayCropMode - + None なし - + Only Overscan Area オーバースキャンエリアのみ - + All Borders すべてのボーダー @@ -4301,17 +4394,17 @@ This file can be several gigabytes, so be aware of SSD wear. EmuThread - + Error エラー - + No resume save state found. 再開用ステートセーブが見つかりません。 - + Game ID: %1 Game Title: %2 Achievements: %5 (%6) @@ -4324,34 +4417,34 @@ Achievements: %5 (%6) - + %n points %n ポイント - + Rich presence inactive or unsupported. リッチプレゼンスは非アクティブまたはサポートされていません。 - + Game not loaded or no RetroAchievements available. ゲームが読み込まれていないか、RetroAchievements が利用できません。 - + %1x%2 %1x%2 - + Game: %1 FPS ゲーム: %1 FPS - + Video: %1 FPS (%2%) 表示: %1 FPS (%2%) @@ -4956,17 +5049,17 @@ Achievements: %5 (%6) GPUDownsampleMode - + Disabled 無効 - + Box (Downsample 3D/Smooth All) ボックス (ダウンサンプル 3D/すべてスムーズ) - + Adaptive (Preserve 3D/Smooth 2D) アダプティブ (3D を保持/スムーズ 2D) @@ -4974,27 +5067,27 @@ Achievements: %5 (%6) GPURenderer - + Hardware (D3D11) ハードウェア (D3D11) - + Hardware (D3D12) ハードウェア (D3D12) - + Hardware (Vulkan) ハードウェア (Vulkan) - + Hardware (OpenGL) ハードウェア (OpenGL) - + Software ソフトウェア @@ -5105,37 +5198,37 @@ Achievements: %5 (%6) GPUTextureFilter - + Nearest-Neighbor 最近傍 - + Bilinear バイリニア - + JINC2 (Slow) JINC2 (遅い) - + JINC2 (Slow, No Edge Blending) JINC2 (遅い, エッジブレンディングなし) - + xBR (Very Slow) xBR (非常に遅い) - + xBR (Very Slow, No Edge Blending) xBR (非常に遅い, エッジブレンディングなし) - + Bilinear (No Edge Blending) バイリニア (エッジブレンディングなし) @@ -5163,52 +5256,52 @@ Achievements: %5 (%6) PSF ファイル - + Never 未プレイ - + Today 今日 - + Yesterday 昨日 - + {}h {}m {}時間 {}分 - + {}h {}m {}s {}時間 {}分 {}秒 - + {}m {}s {}分 {}秒 - + {}s {}秒 - + None なし - + {} hours {} 時間 - + {} minutes {} 分 @@ -6007,12 +6100,12 @@ Scanning recursively takes more time, but will identify files in subdirectories. HostInterface - + Failed to load configured BIOS file '%s' 構成済みの BIOS ファイル '%s' のロードに失敗しました - + No BIOS image found for %s region リージョン %s の BIOS イメージが見つかりません @@ -6020,470 +6113,470 @@ Scanning recursively takes more time, but will identify files in subdirectories. Hotkeys - - - - - - - - - - - + + + + + + + + + + + General 一般 - + Fast Forward 早送り - + Toggle Fast Forward 早送りオン/オフ切り替え - + Turbo ターボ - + Toggle Turbo ターボオン/オフ切り替え - + Toggle Fullscreen フルスクリーン/ウィンドウ表示切り替え - + Toggle Pause 一時停止/再開 - + Toggle Cheats チート有効/無効の切り替え - + Power Off System システム電源オフ - + Toggle Patch Codes パッチコード有効/無効の切り替え - + Reset System システムリセット - + Save Screenshot スクリーンショットを保存 - + Change Disc ディスク交換 - + Frame Step コマ送り - + Rewind 巻き戻し - + Toggle Clock Speed Control (Overclocking) クロック速度制御 有効/無効の切り替え (オーバークロック) - - - - - - - - - - + + + + + + + + + + Graphics グラフィック - + Toggle Software Rendering ソフトウェアレンダリング有効/無効の切り替え - + Toggle PGXP PGXP 有効/無効の切り替え - + Toggle PGXP Depth Buffer PGXP 深度バッファ有効/無効の切り替え - + Increase Resolution Scale 解像度スケールを上げる - + Open Pause Menu 一時停止メニューを開く - + Open Achievement List 実績リストを開く - + Open Leaderboard List リーダーボードリストを開く - - - - - - - - - - - + + + + + + + + + + + System システム - + Swap Memory Card Slots メモリーカードスロットを交換 - + Increase Emulation Speed エミュレーション速度を上げる - + Decrease Emulation Speed エミュレーション速度を下げる - + Reset Emulation Speed エミュレーション速度をリセット - + Decrease Resolution Scale 解像度スケールを下げる - + Toggle Post-Processing ポストプロセス有効/無効の切り替え - + Reload Post Processing Shaders ポストプロセスシェーダーをリロード - + Reload Texture Replacements テクスチャ置換をリロード - + Toggle Widescreen ワイドスクリーン有効/無効の切り替え - + Toggle PGXP CPU Mode PGXP CPU モード有効/無効の切り替え - - - - - - - + + + + + + + Save States ステートセーブ - + Load From Selected Slot 選択したスロットからロード - + Save To Selected Slot 選択したスロットにセーブ - + Select Previous Save Slot 前のセーブスロットを選択 - + Select Next Save Slot 次のセーブスロットを選択 - + Undo Load State ステートロード前に戻す(Undo) - + Load Game State 1 ゲームステート 1 をロード - + Load Game State 2 ゲームステート 2 をロード - + Load Game State 3 ゲームステート 3 をロード - + Load Game State 4 ゲームステート 4 をロード - + Load Game State 5 ゲームステート 5 をロード - + Load Game State 6 ゲームステート 6 をロード - + Load Game State 7 ゲームステート 7 をロード - + Load Game State 8 ゲームステート 8 をロード - + Load Game State 9 ゲームステート 9 をロード - + Load Game State 10 ゲームステート 10 をロード - + Save Game State 1 ゲームステート 1 にセーブ - + Save Game State 2 ゲームステート 2 にセーブ - + Save Game State 3 ゲームステート 3 にセーブ - + Save Game State 4 ゲームステート 4 にセーブ - + Save Game State 5 ゲームステート 5 にセーブ - + Save Game State 6 ゲームステート 6 にセーブ - + Save Game State 7 ゲームステート 7 にセーブ - + Save Game State 8 ゲームステート 8 にセーブ - + Save Game State 9 ゲームステート 9 にセーブ - + Save Game State 10 ゲームステート 10 にセーブ - + Load Global State 1 グローバルステート 1 をロード - + Load Global State 2 グローバルステート 2 をロード - + Load Global State 3 グローバルステート 3 をロード - + Load Global State 4 グローバルステート 4 をロード - + Load Global State 5 グローバルステート 5 をロード - + Load Global State 6 グローバルステート 6 をロード - + Load Global State 7 グローバルステート 7 をロード - + Load Global State 8 グローバルステート 8 をロード - + Load Global State 9 グローバルステート 9 をロード - + Load Global State 10 グローバルステート 10 をロード - + Save Global State 1 グローバルステート 1 にセーブ - + Save Global State 2 グローバルステート 2 にセーブ - + Save Global State 3 グローバルステート 3 にセーブ - + Save Global State 4 グローバルステート 4 にセーブ - + Save Global State 5 グローバルステート 5 にセーブ - + Save Global State 6 グローバルステート 6 にセーブ - + Save Global State 7 グローバルステート 7 にセーブ - + Save Global State 8 グローバルステート 8 にセーブ - + Save Global State 9 グローバルステート 9 にセーブ - + Save Global State 10 グローバルステート 10 にセーブ - - - - + + + + Audio 音声 - + Toggle Mute 音声有り無しの切り替え - + Toggle CD Audio Mute CD 音声有り無しの切り替え - + Volume Up 音量を上げる - + Volume Down 音量を下げる @@ -6516,18 +6609,18 @@ Scanning recursively takes more time, but will identify files in subdirectories. 割り当てをクリア - + Bindings for %1 %2 %1 %2 の割り当て - + Close 閉じる - - + + Push Button/Axis... [%1] ボタン/軸 を押す... [%1] @@ -6535,15 +6628,15 @@ Scanning recursively takes more time, but will identify files in subdirectories. InputBindingWidget - + %n bindings %n の割り当て - - + + Push Button/Axis... [%1] ボタン/軸 を押す... [%1] @@ -6551,17 +6644,17 @@ Scanning recursively takes more time, but will identify files in subdirectories. InputVibrationBindingWidget - + Error エラー - + No devices with vibration motors were detected. 振動モーターを備えたデバイスは検出されませんでした。 - + Select vibration motor for %1. %1 の振動モーターを選択します。 @@ -6569,52 +6662,52 @@ Scanning recursively takes more time, but will identify files in subdirectories. LogLevel - + None なし - + Error エラー - + Warning 警告 - + Performance パフォーマンス - + Information 情報 - + Developer 開発 - + Profile プロファイル - + Verbose 詳細 - + Debug デバッグ - + Trace トレース @@ -6628,8 +6721,8 @@ Scanning recursively takes more time, but will identify files in subdirectories. - - + + Change Disc ディスク交換 @@ -6640,8 +6733,8 @@ Scanning recursively takes more time, but will identify files in subdirectories. - - + + Load State ステートロード @@ -6666,237 +6759,248 @@ Scanning recursively takes more time, but will identify files in subdirectories. 言語 - + &Help ヘルプ(&H) - + &Debug デバッグ(&D) - + Switch GPU Renderer GPU レンダラーの切り替え - + Switch CPU Emulation Mode CPU エミュレーションモードの切り替え - + &View 表示(&V) - + &Tools ツール(&T) - + toolBar ツールバー - + B&IOS BIOS(&I) - + C&onsole コンソール(&O) - + E&mulation エミュレーション(&M) - + &Controllers コントローラー(&C) - + &Hotkeys ホットキー(&H) - + &Display 表示(&D) - + &Enhancements 拡張(&E) - + &Post-Processing ポストプロセス(&P) - + Audio 音声 - + Achievements 実績 - + Folders フォルダ - + Game List ゲームリスト - + General 一般 - + Advanced 高度な設定 - + + + &Settings + 設定(&S) + + + Show CD-ROM State CDROM の状態を表示 - + &Memory Cards メモリーカード(&M) - + Memory &Card Editor メモリーカードエディタ(&C) - + + Enable GDB server + GDB サーバーを有効化 + + + Ctrl+- Ctrl+- - + Open Memory Card Directory... メモリーカードディレクトリを開く... - + Open Data Directory... データディレクトリを開く... - + Start Big Picture Mode 大画面モードを開始 - + Big Picture 大画面 - + Start &Disc... ディスク起動(&D)... - + Start &BIOS BIOS 起動(&B) - + &Scan For New Games 新規ゲームをスキャン(&S) - + &Rescan All Games すべてのゲームを再スキャン(&R) - + Power &Off 電源オフ(&O) - + &Reset リセット(&R) - + &Pause 一時停止(&P) - + &Load State ステートロード(&L) - + &Save State ステートセーブ(&S) - + E&xit 終了(&X) - + Fullscreen フルスクリーン - + Resolution Scale 解像度スケール - + &GitHub Repository... GitHub リポジトリ(&G)... - + &Issue Tracker... Issue トラッカー(&I)... - + &Discord Server... Discord サーバー(&D)... - + Check for &Updates... 更新の確認(&U)... - + Change Disc... ディスク交換... - + Cheats... チート... @@ -6906,259 +7010,254 @@ Scanning recursively takes more time, but will identify files in subdirectories. システム(&S) - + Switch Crop Mode トリミングモードの切り替え - + &Window Size ウィンドウサイズ(&W) - + Start &File... イメージ起動(&F)... - + About &Qt... Qt について(&Q)... - + &About DuckStation... DuckStation について(&A)... - + Add Game Directory... ゲームディレクトリを追加... - - &Settings... - 設定(&S)... - - - + From File... ファイルから... - + From Device... 光学ドライブから... - + From Game List... ゲームリストから... - + Remove Disc ディスク取り出し - + Resume State 状態を再開 - + Global State グローバルステート - + Show VRAM VRAM を表示 - + Dump CPU to VRAM Copies CPU から VRAM へのコピーをダンプ - + Dump VRAM to CPU Copies VRAM から CPU へのコピーをダンプ - + Disable All Enhancements すべての拡張機能を無効化 - + Disable Interlacing インターレースを無効化 - + Force NTSC Timings NTSC タイミングを強制 - + Dump Audio 音声ダンプ - + Dump RAM... RAM ダンプ... - + Dump VRAM... VRAM ダンプ... - + Dump SPU RAM... SPU RAM ダンプ... - + Show GPU State GPU の状態を表示 - + Show SPU State SPU の状態を表示 - + Show Timers State タイマーの状態を表示 - + Show MDEC State MDEC の状態を表示 - + Show DMA State DMA の状態を表示 - + &Screenshot スクリーンショット(&S) - - + + Resume 再開 - + Resumes the last save state created. 最後に保存されたステートセーブで再開します。 - + &Toolbar ツールバー(&T) - + Lock Toolbar ツールバーを固定 - + &Status Bar ステータスバー(&S) - + Game &List ゲームリスト(&L) - + Game &Properties ゲームプロパティ(&P) - + C&heat Manager チートマネージャ(&H) - + CPU D&ebugger CPU デバッガ(&E) - + Game &Grid ゲームグリッド(&G) - + Show Titles (Grid View) ゲーム名表示 (グリッドビュー) - + Ctrl++ Ctrl++ - + Zoom &Out (Grid View) ズームアウト (グリッドビュー)(&O) - + Power Off &Without Saving 保存せずに電源オフ(&W) - + Cover Downloader カバーダウンローダー - + Zoom &In (Grid View) ズームイン (グリッドビュー)(&I) - + Refresh &Covers (Grid View) カバーの更新 (グリッドビュー)(&C) - + System &Display システム表示(&D) - + Failed to create host display device context. ホストディスプレイデバイスコンテキストの作成に失敗しました。 - - + + Select Disc Image ディスクイメージを選択 - + Start Disc ディスク起動 - + Could not find any CD-ROM devices. Please ensure you have a CD-ROM drive connected and sufficient permissions to access it. CD-ROM デバイスが見つかりませんでした。CD-ROM ドライブが接続されており、<br>それにアクセスするための十分な権限があることを確認してください。 @@ -7168,63 +7267,63 @@ Scanning recursively takes more time, but will identify files in subdirectories. すべてのファイル (*.bin *.img *.iso *.cue *.chd *.ecm *.mds *.pbp *.exe *.psexe *.ps-exe *.psf *.minipsf *.m3u);;シングルトラックイメージ (*.bin *.img *.iso);;Cue シート (*.cue);;MAME CHD イメージ (*.chd);;Error Code Modeler イメージ (*.ecm);;Media Descriptor Sidecar イメージ (*.mds);;PlayStation EBOOT 形式 (*.pbp *.PBP);;PlayStation 実行ファイル (*.exe *.psexe *.ps-exe);;ポータブルサウンド形式 (*.psf *.minipsf);;プレイリスト (*.m3u) - - - - - + + + + + Error エラー - + Failed to get window info from widget ウィジェットからウィンドウ情報を取得できませんでした - + Paused 一時停止中 - + %1 (%2) %1 (%2) - + Select disc drive: ディスクドライブを選択: - + Resume (%1) 再開 (%1) - - - + + + Game Save %1 (%2) ゲームセーブ %1 (%2) - + Edit Memory Cards... メモリーカードを編集... - + Delete Save States... ステートセーブを削除... - + Confirm Save State Deletion ステートセーブ削除の確認 - + Are you sure you want to delete all save states for %1? The saves will not be recoverable. @@ -7233,67 +7332,67 @@ The saves will not be recoverable. 元に戻すことはできません。 - + Load From File... ファイルからロード... - - + + Select Save State File ステートセーブファイルを選択 - - + + Save States (*.sav) ステートセーブ (*.sav) - + Undo Load State ステートロード前に戻す(Undo) - - + + Game Save %1 (Empty) ゲームセーブ %1 (空) - - + + Global Save %1 (%2) グローバルセーブ %1 (%2) - - + + Global Save %1 (Empty) グローバルセーブ %1 (空) - + Save To File... ファイルにセーブ... - + &Enabled Cheats チート有効化(&E) - + &Apply Cheats チート適用(&A) - + Load Resume State ステートセーブからの再開 - + A resume save state was found for this game, saved at: %1. @@ -7306,232 +7405,251 @@ Do you want to load this state, or start from a fresh boot? このステートセーブをロードしますか、それとも新規に起動しますか? - + Fresh Boot 新規に起動 - + Delete And Boot 削除して起動 - + Failed to delete save state file '%1'. ステートセーブファイル '%1' を削除できませんでした。 - + Confirm Disc Change ディスク交換の確認 - + Do you want to swap discs or boot the new image (via system reset)? ディスクを交換しますか、それとも新しいイメージを(システムリセットして)起動しますか? - + Swap Disc ディスク交換 - + Reset リセット - + Cancel キャンセル - - + + Cheat Manager チートマネージャ - + You must select a disc to change discs. ディスクを変更するには、ディスクを選択する必要があります。 - + Properties... プロパティ... - + Open Containing Directory... ファイルがある場所を開く... - + Set Cover Image... カバーイメージ画像を設定... - + Default Boot デフォルト起動 - + Fast Boot 高速ブート (BIOS スキップ) - + Full Boot フルブート - + Boot and Debug 起動とデバッグ - + Exclude From List リストから除外 (除外パスに追加) - + + Reset Play Time + プレイ時間をリセット + + + Add Search Directory... 検索ディレクトリを追加... - + Select Cover Image カバーイメージ画像を選択 - + All Cover Image Types (*.jpg *.jpeg *.png) すべてのカバー画像タイプ (*.jpg *.jpeg *.png) - + Cover Already Exists カバーはすでに存在します - + A cover image for this game already exists, do you wish to replace it? このゲームのカバー画像はすでに存在しますが、置き換えますか? - - + + Copy Error コピーエラー - + Failed to remove existing cover '%1' 既存のカバー '%1'の削除に失敗しました - + Failed to copy '%1' to '%2' '%1' を '%2'にコピーできませんでした - + + Confirm Reset + リセットの確認 + + + + Are you sure you want to reset the play time for '%1'? + +This action cannot be undone. + '%1' のプレイ時間をリセットしてもよろしいですか? + +この操作は元に戻せません。 + + + %1x Scale %1x 倍 - - - + + + Destination File 宛先ファイル - - + + Binary Files (*.bin) バイナリファイル (*.bin) - + Binary Files (*.bin);;PNG Images (*.png) バイナリファイル (*.bin);;PNG 画像 (*.png) - + Default デフォルト - + Fusion フュージョン - + Dark Fusion (Gray) ダークフュージョン (グレイ) - + Dark Fusion (Blue) ダークフュージョン (ブルー) - + QDarkStyle Q ダークスタイル - + Confirm Shutdown シャットダウンの確認 - + Are you sure you want to shut down the virtual machine? コンソールをシャットダウンしてもよろしいですか? - + Save State For Resume 再開用にステートセーブする - - - - + + + + Memory Card Not Found メモリーカードが見つかりません - + Memory card '%1' does not exist. Do you want to create an empty memory card? メモリーカード<br>'%1'<br>は存在しません。 空のメモリーカードを作成しますか? - + Failed to create memory card '%1' メモリーカードの作成に失敗しました '%1' - - + + Memory card '%1' could not be found. Try starting the game and saving to create it. メモリーカード '%1' が見つかりませんでした。ゲームを開始し、保存(作成)してください。 - + Do not show again 再度表示しない - + Using cheats can have unpredictable effects on games, causing crashes, graphical glitches, and corrupted saves. By using the cheat manager, you agree that it is an unsupported configuration, and we will not provide you with any assistance when games break. Cheats persist through save states even after being disabled, please remember to reset/reboot the game after turning off any codes. @@ -7544,22 +7662,22 @@ Are you sure you want to continue? 続行してもよろしいですか? - + Updater Error 更新エラー - + <p>Sorry, you are trying to update a DuckStation version which is not an official GitHub release. To prevent incompatibilities, the auto-updater is only enabled on official builds.</p><p>To obtain an official build, please follow the instructions under "Downloading and Running" at the link below:</p><p><a href="https://github.com/stenzek/duckstation/">https://github.com/stenzek/duckstation/</a></p> <p>申し訳ありませんが、GitHub の公式リリースではない DuckStation バージョンを更新しようとしています。非互換性を防ぐために、自動更新は公式ビルドでのみ有効になっています。</p><p>公式ビルドを取得するには、以下のリンクの「ダウンロードと実行」の手順に従ってください。</p><p> <a href="https://github.com/stenzek/duckstation/"> https://github.com/stenzek/duckstation/ </a></p> - + Automatic updating is not supported on the current platform. 現在のプラットフォームでは、自動更新はサポートされていません。 - + Failed to get new window info from widget ウィジェットから新しいウィンドウ情報を取得できませんでした @@ -7893,32 +8011,32 @@ Are you sure you want to continue? MemoryCardType - + No Memory Card メモリーカードなし - + Shared Between All Games すべてのゲームでカードを共有する - + Separate Card Per Game (Serial) ゲームごとに別々のカード (シリアル番号) - + Separate Card Per Game (Title) ゲームごとに別々のカード (ゲーム名) - + Separate Card Per Game (File Title) ゲームごとに別々のカード (ファイル名) - + Non-Persistent Card (Do Not Save) 非永続カード (セーブしないでください) @@ -7926,22 +8044,22 @@ Are you sure you want to continue? MultitapMode - + Disabled 使用しない - + Enable on Port 1 Only ポート1のみ有効にする - + Enable on Port 2 Only ポート2のみ有効にする - + Enable on Ports 1 and 2 ポート1および2で有効にする @@ -7972,223 +8090,223 @@ Are you sure you want to continue? OSDMessage - + System reset. システムがリセットされました。 - + Loading state from '%s' failed. Resetting. '%s' からのステートロードに失敗しました。リセットします。 - + Saving state to '%s' failed. '%s' にステートセーブできませんでした。 - + PGXP is incompatible with the software renderer, disabling PGXP. PGXP はソフトウェアレンダラーと互換性がないため、PGXP を無効にします。 - + Rewind is not supported on 32-bit ARM for Android. 巻き戻しは Android 用の32ビット ARM ではサポートされていません。 - + Runahead is not supported on 32-bit ARM for Android. 先行実行は Android 用の32ビット ARM ではサポートされていません。 - + Rewind is disabled because runahead is enabled. 先行実行が有効になっているため、巻き戻しは無効になっています。 - + Recompiler options changed, flushing all blocks. リコンパイラオプションが変更されました。すべてのブロックをフラッシュします。 - + Switching to %s%s GPU renderer. GPU レンダラー %s%s に切り替えます。 - + Switching to %s audio backend. オーディオバックエンド %s に切り替えます。 - + Switching to %s CPU execution mode. CPU 実行モード %s に切り替えます。 - + PGXP enabled, recompiling all blocks. PGXP が有効になりました。すべてのブロックを再コンパイルします。 - + PGXP disabled, recompiling all blocks. PGXP が無効になりました。すべてのブロックを再コンパイルします。 - + Switching to %s renderer... レンダラー %s に切り替えます... - - + + Failed to load post processing shader chain. ポストプロセスシェーダーチェーンの読み込みに失敗しました。 - + Cannot load state for game without serial. シリアルのないゲームはステートセーブを読み込めません。 - + No save state found in slot {}. スロット {} にステートセーブが見つかりません。 - + Cannot save state for game without serial. シリアルのないゲームはステートセーブを保存できません。 - + Achievements are disabled or unavailable for game. このゲームでは、実績が無効になっているか、利用できません。 - + Leaderboards are disabled or unavailable for game. このゲームでは、リーダーボードが無効になっているか、利用できません。 - + CPU clock speed control enabled (%u%% / %.3f MHz). CPU クロック速度制御が有効になりました (%u%% / %.3f MHz)。 - + CPU clock speed control disabled (%.3f MHz). CPU クロック速度制御が無効になりました (%.3f MHz)。 - + PGXP is now enabled. PGXP が有効になりました。 - + PGXP is now disabled. PGXP が無効になりました。 - + PGXP Depth Buffer is now enabled. PGXP 深度バッファが有効になりました。 - + PGXP Depth Buffer is now disabled. PGXP 深度バッファが無効になりました。 - - - + + + Volume: {}% 音量: {}% - + Texture replacements reloaded. テクスチャ置換がリロードされました。 - + Failed to save undo load state. ステートロード取り消し(Undo)用のステートセーブに失敗しました。 - + Rewinding is not enabled. 巻き戻しが有効化されていません。 - - - + + + Emulation speed set to %u%%. エミュレーション速度を %u%% に設定しました。 - + PGXP CPU mode is now enabled. PGXP CPU モードが有効になりました。 - + PGXP CPU mode is now disabled. PGXP CPU モードが無効になりました。 - + Volume: Muted 音量: ミュート - + CD Audio Muted. CD 音声をミュートしました。 - + CD Audio Unmuted. CD 音声のミュートを解除しました。 - + Started dumping audio to '%s'. '%s' への音声ダンプを開始しました。 - + Failed to start dumping audio to '%s'. '%s' への音声ダンプを開始できませんでした。 - + Stopped dumping audio. 音声ダンプを停止しました。 - + Screenshot file '%s' already exists. スクリーンショットファイル '%s' は既に存在します。 - + Failed to save screenshot to '%s' スクリーンショットを '%s' に保存できませんでした - + Screenshot saved to '%s'. スクリーンショットを '%s' に保存しました。 - + Controller in port %u (%s) is not supported for %s. Supported controllers: %s Please configure a supported controller from the list above. @@ -8197,106 +8315,106 @@ Please configure a supported controller from the list above. 上記のリストからサポートされているコントローラーを構成してください。 - + Failed to load cheats from '%s'. '%s' からのチートのロードに失敗しました。 - + %n cheats are enabled. This may result in instability. チート %n が有効になっています。これにより、不安定になる可能性があります。 - + Widescreen hack is now enabled, and aspect ratio is set to %s. ワイドスクリーンハックが有効になりました。アスペクト比は %s に設定されました。 - + Widescreen hack is now disabled, and aspect ratio is set to %s. ワイドスクリーンハックが無効になりました。アスペクト比は %s に設定されました。 - + Swapped memory card ports. Both ports have a memory card. メモリーカードポートを交換しました。両方のポートにメモリーカードがあります。 - + Swapped memory card ports. Port 2 has a memory card, Port 1 is empty. メモリーカードポートを交換しました。ポート2にはメモリーカードがあり、ポート1は空です。 - + Swapped memory card ports. Port 1 has a memory card, Port 2 is empty. メモリーカードポートを交換しました。ポート1にはメモリーカードがあり、ポート2は空です。 - + Swapped memory card ports. Neither port has a memory card. メモリーカードポートを交換しました。どちらのポートにもメモリーカードはありません。 - + Deleted cheat list '%s'. チートリスト '%s' を削除しました。 - + Cheat '%s' enabled. チート '%s' を有効にしました。 - + Cheat '%s' disabled. チート '%s' を無効にしました。 - + Failed to save cheat list to '%s' チートリストを '%s' に保存できませんでした - + No cheats are loaded. チートはロードされていません。 - + Saved %n cheats to '%s'. %n 個のチートを '%s' に保存しました。 - + Applied cheat '%s'. チート '%s' を適用しました。 - + Cheat '%s' is already enabled. チート '%s' は既に有効になっています。 - + Post-processing is now enabled. ポストプロセスが有効になりました。 - + Post-processing is now disabled. ポストプロセスが無効になりました。 - + Failed to load post-processing shader chain. ポストプロセスシェーダーチェーンの読み込みに失敗しました。 - + Post-processing shaders reloaded. ポストプロセスシェーダーがリロードされました。 @@ -8312,182 +8430,192 @@ Please configure a supported controller from the list above. + Using software renderer for readbacks based on game settings. + ゲームごとの設定に基づき、リードバック用にソフトウェアレンダラーを使用します。 + + + Interlacing forced by game settings. ゲームごとの設定に基づき、インターレースを有効化します。 - + True color disabled by game settings. ゲームごとの設定に基づき、トゥルーカラーを無効化します。 - + Upscaling disabled by game settings. ゲームごとの設定に基づき、アップスケーリングを無効化します。 - + Scaled dithering disabled by game settings. ゲームごとの設定に基づき、スケーリングされたディザリングを無効化します。 - + Widescreen disabled by game settings. ゲームごとの設定に基づき、ワイドスクリーンを無効化します。 - + Forcing NTSC Timings disallowed by game settings. ゲームごとの設定に基づき、NTSC タイミングの強制を無効化します。 - + PGXP geometry correction disabled by game settings. ゲームごとの設定に基づき、PGXP ジオメトリ補正を無効化します。 - + PGXP culling disabled by game settings. ゲームごとの設定に基づき、PGXP カリングを無効化します。 - + PGXP perspective corrected textures disabled by game settings. ゲームごとの設定に基づき、PGXP テクスチャ遠近補正を無効化します。 - + PGXP perspective corrected colors disabled by game settings. ゲームごとの設定に基づき、PGXP カラー遠近補正を無効化します。 - + PGXP vertex cache forced by game settings. ゲームごとの設定に基づき、PGXP 頂点キャッシュを有効化します。 - + PGXP CPU mode forced by game settings. ゲームごとの設定に基づき、PGXP CPU モードを有効化します。 - + PGXP Depth Buffer disabled by game settings. ゲームごとの設定に基づき、PGXP 深度バッファを無効化します。 - + Memory card %u from save state does match current card data. Simulating replugging. 元の英語文章は "does not match" の間違いと思われる (コード上でも二つのメモリーカードの内容 (GetData() したもの) を == で比較した else 側なので) ステートセーブ内のメモリーカード %u は、現在のカードデータと一致しません。カードを差し直します。 - + Memory card %u present in save state but not in system. Ignoring card. ステートセーブ内にメモリーカード %u が存在していますが、システムには存在しません。カードを無視します。 - + Memory card %u present in system but not in save state. Replugging card. メモリーカード %u がシステムに存在していますが、ステートセーブ内には存在していません。カードを差し直します。 - + Memory card %u present in save state but not in system. Creating temporary card. ステートセーブ内にメモリーカード %u が存在していますが、システムには存在しません。一時的なカードを作成します。 - + Save state contains controller type %s in port %u, but %s is used. Switching. ステートセーブ内でコントローラータイプ %s (ポート %u)を使用していましたが、現在は %s を使用しています。切り替えます。 - + Ignoring mismatched controller type %s in port %u. ステートセーブ内でコントローラータイプ %s (ポート %u)を使用していましたが、無視します。 - + Memory card %u present in system but not in save state. Removing card. メモリーカード %u がシステムに存在していますが、ステートセーブ内には存在していません。カードを取り外します。 - + CD image preloading not available for multi-disc image '%s' マルチディスクイメージ '%s' では CD イメージのプリロードは使用できません - + Precaching CD image failed, it may be unreliable. CD イメージのプリキャッシングに失敗しました。予期せぬ動作をする恐れがあります。 - + Loading state from '{}'... '{}' からステートロードします... - + Save State ステートセーブ - + State saved to '{}'. '{}' にステートセーブしました。 - + CPU clock speed is set to %u%% (%u / %u). This may result in instability. CPU クロック速度が %u%% (%u / %u) に設定されています。これにより、不安定になる可能性があります。 - + CD-ROM read speedup set to %ux (effective speed %ux). This may result in instability. CD-ROM 読み込み高速化が %ux (実効速度 %ux)に設定されています。これにより、不安定になる可能性があります。 - + CD-ROM seek speedup set to instant. This may result in instability. CD-ROM シーク高速化が "無限/瞬間" に設定されています。これにより、不安定になる可能性があります。 - + CD-ROM seek speedup set to %ux. This may result in instability. CD-ROM シーク高速化が %ux に設定されています。これにより、不安定になる可能性があります。 - + Failed to initialize %s renderer, falling back to software renderer. %s レンダラーの初期化に失敗しました。代わりにソフトウェアレンダラーを使用します。 - + + This save state was created with a different BIOS version or patch options. This may cause stability issues. + このステートセーブは異なるバージョンの BIOS またはパッチオプションで保存されています。このため動作が不安定になる可能性があります。 + + + WARNING: CPU overclock (%u%%) was different in save state (%u%%). 警告: CPU オーバークロック (現在 %u%%) はステートセーブ内では %u%% でした。 - + Failed to open CD image from save state '%s': %s. Using existing image '%s', this may result in instability. ステートセーブ中で使用していた CD イメージ '%s' を開くことができませんでした: %s. 既存の CD イメージ '%s' を使用します。これにより、不安定になる可能性があります。 - + Failed to open disc image '%s': %s. ディスクイメージ '%s' を開くことができませんでした: %s. - + Failed to switch to subimage %u in '%s': %s. サブイメージ %u ('%s' 内)への切り替えに失敗しました: %s. - + Switched to sub-image %s (%u) in '%s'. サブイメージ %s (%u 枚目、'%s' 内)に切り替えました。 - + Inserted disc '%s' (%s). ディスク '%s' (%s) を挿入しました。 @@ -8548,44 +8676,44 @@ Please configure a supported controller from the list above. メモリーカードを '{}' に保存しました。 - + Acquired exclusive fullscreen. 排他的フルスクリーンを取得しました。 - + Failed to acquire exclusive fullscreen. 排他的フルスクリーンの取得に失敗しました。 - + Lost exclusive fullscreen. 排他的フルスクリーンを失いました。 - - - OpenGL renderer unavailable, your driver or hardware is not recent enough. OpenGL 3.1 or OpenGL ES 3.0 is required. - OpenGL レンダラーが利用できません。ドライバーまたはハードウェアが対応していません。OpenGL 3.1 または OpenGL ES 3.0 が必要です。 - Analog mode forcing is disabled by game settings. Controller will start in digital mode. ゲームごとの設定に基づき、アナログモードの強制を無効化します。コントローラーはデジタルモードで動作します。 - + %n cheats are now active. %n 個のチートが有効になりました。 - + %n cheats are now inactive. %n 個のチートが無効になりました。 + + + OpenGL renderer unavailable, your driver or hardware is not recent enough. OpenGL 3.1 or OpenGL ES 3.1 is required. + OpenGL レンダラーが利用できません。ドライバーまたはハードウェアが対応していません。OpenGL 3.1 または OpenGL ES 3.1 が必要です。 + PlayStationMouse @@ -8770,29 +8898,29 @@ URL は次のとおりです: %1 QtHost - - - + + + Error エラー - + File '%1' does not exist. ファイル '%1' は存在していません。 - + The specified save state does not exist. 指定されたステートセーブは存在していません。 - + Cannot use no-gui mode, because no boot filename was specified. 起動するファイル名が指定されていないため、GUI なしモードを使用できません。 - + Cannot use batch mode, because no boot filename was specified. 起動するファイル名が指定されていないため、バッチモードを使用できません。 @@ -8828,42 +8956,42 @@ URL は次のとおりです: %1 SaveStateSelectorUI - + Load 読み込み - + Save 保存 - + Select Previous 前を選択 - + Select Next 次を選択 - + No Save State ステートセーブがありません - + Global Slot %d グローバルスロット %d - + Game Slot %d ゲームスロット %d - + %s Slot %d %s スロット %d @@ -9080,58 +9208,63 @@ URL は次のとおりです: %1 System - + Save state is incompatible: minimum version is %u but state is version %u. ステートセーブに互換性がありません。最小バージョンは %u ですが、ステートセーブはバージョン %u です。 - + Failed to load %s BIOS. BIOS %s の読み込みに失敗しました。 - - + + Error エラー - + Failed to load save state file '{}' for booting. 起動用のステートセーブファイル '{}' の読み込みに失敗しました。 - + + Incorrect BIOS image size + BIOS イメージのサイズが正しくありません + + + Save state is incompatible: maximum version is %u but state is version %u. ステートセーブに互換性がありません。最大バージョンは %u ですが、ステートセーブはバージョン %u です。 - + Failed to open CD image '%s' used by save state: %s. ステートセーブで使用していた CD イメージ '%s'を開くことができませんでした: %s. - + Failed to switch to subimage %u in CD image '%s' used by save state: %s. ステートセーブで使用していたサブイメージ %u (CD イメージ '%s' 内)への切り替えに失敗しました: %s. - + Per-game memory card cannot be used for slot %u as the running game has no code. Using shared card instead. 実行中のゲームにはコードがないため、ゲームごとのメモリーカードをスロット %u に使用することはできません。代わりに共有カードを使用します。 - + Per-game memory card cannot be used for slot %u as the running game has no title. Using shared card instead. 実行中のゲームには名称がないため、ゲームごとのメモリーカードをスロット %u に使用することはできません。代わりに共有カードを使用します。 - + Per-game memory card cannot be used for slot %u as the running game has no path. Using shared card instead. 実行中のゲームのパスがないため、ゲームごとのメモリーカードをスロット %u に使用することはできません。代わりに共有カードを使用します。 - + You are attempting to run a libcrypt protected game without an SBI file: %s: %s @@ -9148,12 +9281,12 @@ The name of the SBI file must match the name of the disc image. SBI ファイルの名前は、ディスクイメージの名前と一致する必要があります。 - + Game changed, reloading memory cards. ゲームが変更されました。メモリーカードを再読み込みします。 - + You are attempting to run a libcrypt protected game without an SBI file: %s: %s diff --git a/src/duckstation-qt/translations/duckstation-qt_pl.ts b/src/duckstation-qt/translations/duckstation-qt_pl.ts index 3de36794f..de7ca6cdd 100644 --- a/src/duckstation-qt/translations/duckstation-qt_pl.ts +++ b/src/duckstation-qt/translations/duckstation-qt_pl.ts @@ -178,7 +178,7 @@ - + Login... Zaloguj się... @@ -266,29 +266,29 @@ Pokazuje ikony w dolnym prawym rogu ekranu gdy "challenge/primed achievement" jest aktywny. - + Reset System Resetuj system - + Hardcore mode will not be enabled until the system is reset. Do you want to reset the system now? Tryb hardkorowy nie zostanie włączony, dopóki nie zresetujesz systemu. Czy chcesz to zrobić teraz? - + Username: %1 Login token generated on %2. Nazwa użytkownika: %1 Token logowania wygenerowany %2. - + Logout Wyloguj się - + Not Logged In. Nie zalogowano. @@ -296,17 +296,17 @@ Token logowania wygenerowany %2. Achievements - + Loading state Zapis do załadowania - + Resuming state Zapis automatyczny do wznowienia - + Hardcore mode disabled by state switch. Tryb hardkorowy został wyłączony przez przełącznik zapisu. @@ -351,34 +351,34 @@ Token logowania wygenerowany %2. Ta gra nie ma osiągnięć. - + Your Score: {} (Best: {}) Leaderboard Position: {} of {} Twój wynik: {} (Najlepszy: {}) Pozycja: {} z {} - + This game has {} leaderboards. Ta gra posiada {} tabelę wyników. - + Submitting scores is disabled because hardcore mode is off. Leaderboards are read-only. Wysyłanie wyników jest wyłączone, ponieważ tryb hardkorowy jest nieaktywny. Tabele wyników są tylko do odczytu. - + Time Czas - + Score Wynik - + Downloading leaderboard data, please wait... Pobieram tabelę wyników, proszę czekać... @@ -541,12 +541,17 @@ Pozycja: {} z {} Użyj debugowego urządzenia GPU hosta - + + Stretch Display Vertically + Rozciągnij ekran w pionie + + + Allow Booting Without SBI File Zezwól na start bez pliku SBI - + Create Save State Backups Twórz kopie zapisów stanu @@ -664,7 +669,7 @@ Pozycja: {} z {} Używaj starych funkcji MDEC - + Increase Timer Resolution Zwiększ rozdzielczość timera @@ -672,14 +677,12 @@ Pozycja: {} z {} AnalogController - Controller %u is locked to analog mode by the game. - Kontroler %u jest zablokowany przez grę w trybie analogowym. + Kontroler %u jest zablokowany przez grę w trybie analogowym. - Controller %u is locked to digital mode by the game. - Kontroler %u jest zablokowany przez grę w trybie cyfrowym. + Kontroler %u jest zablokowany przez grę w trybie cyfrowym. @@ -691,7 +694,17 @@ Pozycja: {} z {} Controller {} switched to digital mode. - Kotroler {} przełączony w tryb cyfrowy. + Kontroler {} przełączony w tryb cyfrowy. + + + + Controller {} is locked to analog mode by the game. + Kontroler {} zablokowany przez grę w trybie analogowym. + + + + Controller {} is locked to digital mode by the game. + Kontroler {} zablokowany przez grę w trybie cyfrowym. @@ -872,17 +885,17 @@ Pozycja: {} z {} AudioBackend - + Null (No Output) Null (brak wyjścia) - + Cubeb Cubeb - + XAudio2 XAudio2 @@ -1292,17 +1305,17 @@ Pozycja: {} z {} CPUExecutionMode - + Interpreter (Slowest) Interpreter (Najwolniejszy) - + Cached Interpreter (Faster) Buforowany interpreter (Szybszy) - + Recompiler (Fastest) Rekompilator (Najszybszy) @@ -1310,17 +1323,17 @@ Pozycja: {} z {} CPUFastmemMode - + Disabled (Slowest) Wyłączone (Najwolniejsze) - + MMap (Hardware, Fastest, 64-Bit Only) MMap (Sprzętowy, najszybszy, tylko 64-bitowy) - + LUT (Faster) LUT (Szybciej) @@ -1880,7 +1893,7 @@ Pozycja: {} z {} CommonHostInterface - + Invalid version %u (%s version %u) Nieprawidłowa wersja %u (%s wersja %u) @@ -1888,22 +1901,22 @@ Pozycja: {} z {} ConsoleRegion - + Auto-Detect Automatyczne wykrywanie - + NTSC-J (Japan) NTSC-J (Japonia) - + NTSC-U/C (US, Canada) NTSC-U/C (USA, Kanada) - + PAL (Europe, Australia) PAL (Europa, Australia) @@ -3378,36 +3391,36 @@ Tej operacji nie można cofnąć. ControllerType - + None Brak - + Digital Controller Kontroler cyfrowy - + Analog Controller (DualShock) Kontroler analogowy (DualShock) - + Analog Joystick Joystick Analogowy - + PlayStation Mouse Mysz PlayStation - + NeGcon Kontroler Namco (NeGcon) @@ -3418,7 +3431,7 @@ Tej operacji nie można cofnąć. - + GunCon GunCon @@ -3943,22 +3956,22 @@ Ten plik może mieć kilka gigabajtów, więc pamiętaj o zużyciu dysku SSD. DiscRegion - + NTSC-J (Japan) NTSC-J (Japonia) - + NTSC-U/C (US, Canada) NTSC-U/C (US, Kanada) - + PAL (Europe, Australia) PAL (Europa, Australia) - + Other Inne @@ -3966,17 +3979,17 @@ Ten plik może mieć kilka gigabajtów, więc pamiętaj o zużyciu dysku SSD. DisplayAlignment - + Left / Top Lewo / Góra - + Center Środek - + Right / Bottom Prawo / Dół @@ -3984,17 +3997,17 @@ Ten plik może mieć kilka gigabajtów, więc pamiętaj o zużyciu dysku SSD. DisplayAspectRatio - + Auto (Game Native) Auto (natywne gry) - + Auto (Match Window) Auto (dostosuj do okna) - + Custom Niestandardowy @@ -4002,17 +4015,17 @@ Ten plik może mieć kilka gigabajtów, więc pamiętaj o zużyciu dysku SSD. DisplayCropMode - + None Brak - + Only Overscan Area Tylko obszar Overscan - + All Borders Wszystkie ramki @@ -4364,17 +4377,17 @@ Ten plik może mieć kilka gigabajtów, więc pamiętaj o zużyciu dysku SSD. EmuThread - + Error Błąd - + No resume save state found. Nie znaleziono zapisu do automatycznego wczytania. - + Game ID: %1 Game Title: %2 Achievements: %5 (%6) @@ -4387,7 +4400,7 @@ Osiągnięcia: %5 (%6) - + %n points %n punkt @@ -4396,27 +4409,27 @@ Osiągnięcia: %5 (%6) - + Rich presence inactive or unsupported. Rich presence wyłączony lub niewspierany. - + Game not loaded or no RetroAchievements available. Nie wczytano gry lub brak dostępnych RetroAchievementów. - + %1x%2 %1x%2 - + Game: %1 FPS Gra: %1 FPS - + Video: %1 FPS (%2%) Video: %1 FPS (%2%) @@ -5021,17 +5034,17 @@ Osiągnięcia: %5 (%6) GPUDownsampleMode - + Disabled Wyłączone - + Box (Downsample 3D/Smooth All) Box Pudełkowe (Downsample 3D/Wygładź wszystko) - + Adaptive (Preserve 3D/Smooth 2D) Adaptacyjne (Zachowaj 3D / Wygładź 2D) @@ -5039,27 +5052,27 @@ Osiągnięcia: %5 (%6) GPURenderer - + Hardware (D3D11) Sprzętowy (D3D11) - + Hardware (D3D12) Sprzętowy (D3D12) - + Hardware (Vulkan) Sprzętowy (Vulkan) - + Hardware (OpenGL) Sprzętowy (OpenGL) - + Software Programowy @@ -5170,37 +5183,37 @@ Osiągnięcia: %5 (%6) GPUTextureFilter - + Nearest-Neighbor Najbliższy-Sąsiadujący - + Bilinear Dwuliniowe - + Bilinear (No Edge Blending) Dwuliniowe (bez łączenia krawędzi) - + JINC2 (Slow) JINC2 (Wolny) - + JINC2 (Slow, No Edge Blending) JINC2 (Wolny, bez łączenia krawędzi) - + xBR (Very Slow) xBR (Bardzo wolny) - + xBR (Very Slow, No Edge Blending) xBR (Bardzo wolny, bez łączenia krawędzi) @@ -6071,12 +6084,12 @@ Skanowanie rekursywne zajmuje więcej czasu, ale identyfikuje pliki w podkatalog HostInterface - + Failed to load configured BIOS file '%s' Nie udało się załadować skonfigurowanego pliku BIOS '%s' - + No BIOS image found for %s region Nie znaleziono obrazu BIOS dla %s regionu @@ -6084,470 +6097,470 @@ Skanowanie rekursywne zajmuje więcej czasu, ale identyfikuje pliki w podkatalog Hotkeys - - - - - - - - - - - + + + + + + + + + + + General Ogólne - + Fast Forward Szybkie przewijanie - + Toggle Fast Forward Przełącz szybkie przewijanie - + Turbo Turbo - + Toggle Turbo Przełącz Turbo - + Toggle Fullscreen Przełącz tryb pełnoekranowy - + Toggle Pause Przełącz pauzę - + Change Disc Zmień płytę - + Toggle Cheats Przełącz cheaty - + Power Off System Wyłącz system - + Toggle Patch Codes Przełącz kody łatek - + Reset System Resetuj system - + Save Screenshot Zapisz zrzut ekranu - + Frame Step Następna klatka - + Rewind Przewiń - + Toggle Clock Speed Control (Overclocking) Przełącz kontrolę szybkości zegara (Overclocking) - - - - - - - - - - + + + + + + + + + + Graphics Grafika - + Toggle Software Rendering Przełącz renderowanie programowe - + Toggle PGXP Przełącz PGXP - + Toggle PGXP Depth Buffer Przełącz bufor głębi PGXP - + Increase Resolution Scale Zwiększ skalę rozdzielczości - + Open Pause Menu Otwórz menu pauzy - + Open Achievement List Otwórz listę osiągnięć - + Open Leaderboard List Otwórz tabele wyników - - - - - - - - - - - + + + + + + + + + + + System System - + Swap Memory Card Slots Zamień sloty kart pamięci - + Increase Emulation Speed Zwiększ prędkość emulacji - + Decrease Emulation Speed Zmniejsz prędkość emulacji - + Reset Emulation Speed Zresetuj prędkość emulacji - + Decrease Resolution Scale Zmniejsz skalę rozdzielczości - + Toggle Post-Processing Przełącz Post-Processing - + Reload Post Processing Shaders Załaduj ponownie shadery Post-Processingu - + Reload Texture Replacements Załaduj ponownie zamienniki tekstur - + Toggle Widescreen Przełącz tryb pełnoekranowy - + Toggle PGXP CPU Mode Przełącz tryb PGXP CPU - - - - - - - + + + + + + + Save States Zapisy stanu - + Load From Selected Slot Wczytaj z wybranego slotu - + Save To Selected Slot Zapisz w wybranym slocie - + Select Previous Save Slot Wybierz poprzedni slot zapisu - + Select Next Save Slot Wybierz następny slot zapisu - + Undo Load State Cofnij wczytanie stanu - + Load Game State 1 Wczytaj stan gry 1 - + Load Game State 2 Wczytaj stan gry 2 - + Load Game State 3 Wczytaj stan gry 3 - + Load Game State 4 Wczytaj stan gry 4 - + Load Game State 5 Wczytaj stan gry 5 - + Load Game State 6 Wczytaj stan gry 6 - + Load Game State 7 Wczytaj stan gry 7 - + Load Game State 8 Wczytaj stan gry 8 - + Load Game State 9 Wczytaj stan gry 9 - + Load Game State 10 Wczytaj stan gry 10 - + Save Game State 1 Zapisz stan gry 1 - + Save Game State 2 Zapisz stan gry 2 - + Save Game State 3 Zapisz stan gry 3 - + Save Game State 4 Zapisz stan gry 4 - + Save Game State 5 Zapisz stan gry 5 - + Save Game State 6 Zapisz stan gry 6 - + Save Game State 7 Zapisz stan gry 7 - + Save Game State 8 Zapisz stan gry 8 - + Save Game State 9 Zapisz stan gry 9 - + Save Game State 10 Zapisz stan gry 10 - + Load Global State 1 Wczytaj stan globalny 1 - + Load Global State 2 Wczytaj stan globalny 2 - + Load Global State 3 Wczytaj stan globalny 3 - + Load Global State 4 Wczytaj stan globalny 4 - + Load Global State 5 Wczytaj stan globalny 5 - + Load Global State 6 Wczytaj stan globalny 6 - + Load Global State 7 Wczytaj stan globalny 7 - + Load Global State 8 Wczytaj stan globalny 8 - + Load Global State 9 Wczytaj stan globalny 9 - + Load Global State 10 Wczytaj stan globalny 10 - + Save Global State 1 Zapisz stan globalny 1 - + Save Global State 2 Zapisz stan globalny 2 - + Save Global State 3 Zapisz stan globalny 3 - + Save Global State 4 Zapisz stan globalny 4 - + Save Global State 5 Zapisz stan globalny 5 - + Save Global State 6 Zapisz stan globalny 6 - + Save Global State 7 Zapisz stan globalny 7 - + Save Global State 8 Zapisz stan globalny 8 - + Save Global State 9 Zapisz stan globalny 9 - + Save Global State 10 Zapisz stan globalny 10 - - - - + + + + Audio Dźwięk - + Toggle Mute Przełącz Wyciszenie - + Toggle CD Audio Mute Przełącz wyciszanie dźwięku CD - + Volume Up Głośniej - + Volume Down Ciszej @@ -6635,52 +6648,52 @@ Skanowanie rekursywne zajmuje więcej czasu, ale identyfikuje pliki w podkatalog LogLevel - + None Żadne - + Error Błędy - + Warning Ostrzeżenia - + Performance Wydajność - + Information Informacje - + Verbose Dokładny - + Developer Deweloperski - + Profile Profilowanie - + Debug Debugowanie - + Trace Trace @@ -6699,8 +6712,8 @@ Skanowanie rekursywne zajmuje więcej czasu, ale identyfikuje pliki w podkatalog - - + + Change Disc Zmień płytę @@ -6711,8 +6724,8 @@ Skanowanie rekursywne zajmuje więcej czasu, ale identyfikuje pliki w podkatalog - - + + Load State Wczytaj Stan @@ -6737,473 +6750,483 @@ Skanowanie rekursywne zajmuje więcej czasu, ale identyfikuje pliki w podkatalog Język - + &Help &Pomoc - + &Debug &Debugowanie - + Switch GPU Renderer Przełącz renderer GPU - + Switch CPU Emulation Mode Przełącz tryb emulacji CPU - + Switch Crop Mode Przełącz tryb kadrowania - + &View &Widok - + &Window Size &Rozmiar okna - + &Tools &Narzędzia - + toolBar Pasek narzędzi - + Start &File... Uruchom &Plik... - + Start &Disc... Uruchom &Płytę... - + Start &BIOS Uruchom &BIOS - + &Scan For New Games Skanuj w poszukiwaniu nowych &gier - + &Rescan All Games Przeskanuj ponownie &wszystkie gry - + Power &Off &Wyłącz zasilanie - + &Reset &Resetuj - + &Pause &Pauza - + &Load State &Wczytaj Stan - + &Save State &Zapisz Stan - + E&xit W&yjdź - + B&IOS B&IOS - + C&onsole K&onsola - + E&mulation E&mulacja - + &Controllers Kon&trolery - + &Hotkeys &Skróty klawiszowe - + &Display &Ekran - + &Enhancements U&lepszenia - + &Post-Processing &Przetwarzanie końcowe - + Audio Dźwięk - + Achievements Osiągnięcia - + Folders Katalogi - + Game List Lista gier - + General Ogólne - + Advanced Zaawansowane - + + + &Settings + &Ustawienia + + + Show CD-ROM State Pokaż stan CD-ROMu - + &Memory Cards &Karty pamięci - + + Enable GDB server + Włącz serwer GDB + + + Start Big Picture Mode Tryb "Big Picture" - + Big Picture Tryb "Big Picture" - + Cover Downloader Pobieranie okładek - + Fullscreen Pełny ekran - + Resolution Scale Skalowanie rozdzielczości - + &GitHub Repository... Repozytorium &GitHub... - + &Issue Tracker... &Lista Problemów... - + &Discord Server... Serwer &Discord... - + Check for &Updates... Sprawdź &Aktualizacje... - + About &Qt... O &Qt... - + &About DuckStation... &O DuckStation... - + Change Disc... Zmień Płytę... - + Cheats... Cheaty... - + Add Game Directory... Dodaj katalog gier... - &Settings... - &Ustawienia... + &Ustawienia... - + From File... Z pliku... - + From Device... Z urządzenia... - + From Game List... Z listy gier... - + Remove Disc Wyjmij płytę - + Resume State Wznów stan - + Global State Globalny Stan - + Show VRAM Pokaż VRAM - + Dump CPU to VRAM Copies Zrzuć CPU do kopii VRAM - + Dump VRAM to CPU Copies Zrzuć VRAM do kopii CPU - + Disable All Enhancements Wyłącz wszystkie ulepszenia - + Disable Interlacing Wyłącz przeplot - + Force NTSC Timings Wymuś taktowanie NTSC - + Dump Audio Zrzuć Dźwięk - + Dump RAM... Zrzuć RAM... - + Dump VRAM... Zrzuć VRAM... - + Dump SPU RAM... Zrzuć SPU RAM... - + Show GPU State Pokaż stan GPU - + Show SPU State Pokaż stan SPU - + Show Timers State Pokaż stan timerów - + Show MDEC State Pokaż stan MDEC - + Show DMA State Pokaż stan DMA - + &Screenshot &Zrzut ekranu - - + + Resume Wznów - + Resumes the last save state created. Wznawia ostatni utworzony zapis stanu. - + &Toolbar Pasek &narzędzi - + Lock Toolbar Zablokuj pasek narzędzi - + &Status Bar Pasek &stanu - + Game &List &Lista gier - + System &Display &Wyświetlacz systemu - + Game &Properties Właściwości &gry - + Memory &Card Editor Edytor &kart pamięci - + C&heat Manager Menedżer &cheatów - + CPU D&ebugger Debugger &CPU - + Game &Grid &Siatka gier - + Show Titles (Grid View) Pokaż Tytuły (Widok Siatki) - + Zoom &In (Grid View) Po&większ (Widok Siatki) - + Ctrl++ Ctrl++ - + Zoom &Out (Grid View) Po&mniejsz (Widok Siatki) - + Ctrl+- Ctrl+- - + Refresh &Covers (Grid View) Odśwież &Okładki (Widok Siatki) - + Open Memory Card Directory... Otwórz katalog kart pamięci... - + Open Data Directory... Otwórz katalog danych... - + Power Off &Without Saving Wyłącz zasilanie bez &zapisywania @@ -7213,84 +7236,84 @@ Skanowanie rekursywne zajmuje więcej czasu, ale identyfikuje pliki w podkatalog Wszystkie typy plików (*.bin *.img *.iso *.cue *.chd *.ecm *.mds *.pbp *.exe *.psexe *.ps-exe *.psf *.minipsf *.m3u);;Jednościeżkowe obrazy RAW (*.bin *.img *.iso);;Pliki CUE (*.cue);;obrazy MAME CHD (*.chd);;Obrazy Error Code Modeler (*.ecm);;Obrazy Media Descriptor Sidecar (*.mds);;Pliki PlayStation EBOOT (*.pbp *.PBP);;Pliki wykonywalne PlayStation (*.exe *.psexe *.ps-exe);;Pliki Portable Sound Format (*.psf *.minipsf);;Listy odtwarzania (*.m3u) - - - - - + + + + + Error Błąd - + Failed to get window info from widget Nie udało się pobrać z widżetu informacji o oknie - + Failed to create host display device context. Nie udało się utworzyć kontekstu urządzenia wyświetlania hosta. - + Failed to get new window info from widget Nie udało się pobrać z widżetu informacji o nowym oknie - + Paused Pauza - - + + Select Disc Image Wybierz obraz płyty - + Could not find any CD-ROM devices. Please ensure you have a CD-ROM drive connected and sufficient permissions to access it. Nie odnaleziono urządzeń CD-ROM. Upewnij się, że napęd CD-ROM jest podłączony i posiadasz odpowiednie uprawnienia dostępu. - + %1 (%2) %1 (%2) - + Select disc drive: Wybierz napęd: - + Resume (%1) Wznawianie (%1) - - - + + + Game Save %1 (%2) Zapis gry %1 (%2) - + Edit Memory Cards... Edytuj karty pamięci... - + Delete Save States... Usuń zapisane stany... - + Confirm Save State Deletion Potwierdź usunięcie zapisanego stanu - + Are you sure you want to delete all save states for %1? The saves will not be recoverable. @@ -7299,67 +7322,67 @@ The saves will not be recoverable. Zapisów nie będzie można odzyskać. - + Load From File... Wczytaj z pliku... - - + + Select Save State File Wybierz plik zapisu stanu - - + + Save States (*.sav) Zapisy stanu (*.sav) - + Undo Load State Cofnij wczytanie stanu - - + + Game Save %1 (Empty) Zapis gry %1 (Pusty) - - + + Global Save %1 (%2) Globalny zapis %1 (%2) - - + + Global Save %1 (Empty) Globalny zapis %1 (Pusty) - + Save To File... Zapisz do pliku... - + &Enabled Cheats &Włączone cheaty - + &Apply Cheats &Zastosuj cheaty - + Load Resume State Wczytaj automatyczny zapis - + A resume save state was found for this game, saved at: %1. @@ -7372,154 +7395,154 @@ Do you want to load this state, or start from a fresh boot? Wczytać go czy uruchomić grę od nowa? - + Fresh Boot Uruchom od nowa - + Delete And Boot Usuń stan i uruchom od nowa - + Failed to delete save state file '%1'. Nie udało się usunąć pliku zapisu '%1'. - + Confirm Disc Change Potwierdź zmianę płyty - + Do you want to swap discs or boot the new image (via system reset)? Podmienić płyty czy zresetować system z nową płytą? - + Swap Disc Podmień płyty - + Reset Zresetuj - + Cancel Anuluj - + Start Disc Uruchom płytę - - + + Cheat Manager Menedżer cheatów - + You must select a disc to change discs. Musisz wybrać płytę by móc ją podmienić. - + Properties... Właściwości... - + Open Containing Directory... Otwórz katalog zawierający... - + Set Cover Image... Ustaw obraz okładki... - + Default Boot Domyślny rozruch - + Fast Boot Szybki rozruch - + Full Boot Pełny rozruch - + Boot and Debug Rozruch i debugowanie - + Exclude From List Wyklucz z listy - + Reset Play Time Zresetuj czas gry - + Add Search Directory... Dodaj katalog wyszukiwania... - + Select Cover Image Wybierz obraz okładki - + All Cover Image Types (*.jpg *.jpeg *.png) Wszystkie typy obrazów okładki (*.jpg *.jpeg *.png) - + Cover Already Exists Okładka już istnieje - + A cover image for this game already exists, do you wish to replace it? Grafika okładki tej gry już istnieje, czy chcesz ją zastąpić? - - + + Copy Error Błąd kopiowania - + Failed to remove existing cover '%1' Nie udało się usunąć istniejącej okładki '%1' - + Failed to copy '%1' to '%2' Nie udało się skopiować '%1' do '%2' - + Confirm Reset Potwierdź reset - + Are you sure you want to reset the play time for '%1'? This action cannot be undone. @@ -7528,99 +7551,99 @@ This action cannot be undone. Tej czynności nie można cofnąć. - + %1x Scale %1x Skala - - - + + + Destination File Plik docelowy - - + + Binary Files (*.bin) Pliki binarne (*.bin) - + Binary Files (*.bin);;PNG Images (*.png) Pliki binarne (*.bin);;Obrazy PNG (*.png) - + Default Domyślna - + Fusion Fuzja - + Dark Fusion (Gray) Ciemna Fuzja (Szary) - + Dark Fusion (Blue) Ciemna Fuzja (Niebieski) - + QDarkStyle Q Ciemny Styl - + Confirm Shutdown Potwierdź zamknięcie systemu - + Are you sure you want to shut down the virtual machine? Czy na pewno chcesz zamknąć maszynę wirtualną? - + Save State For Resume Zapisz stan gry - - - - + + + + Memory Card Not Found Nie znaleziono karty pamięci - + Memory card '%1' does not exist. Do you want to create an empty memory card? Karta pamięci '%1' nieznaleziona. Czy chcesz utworzyć pustą kartę pamięci? - + Failed to create memory card '%1' Nie udało się utworzyć karty pamięci '%1' - - + + Memory card '%1' could not be found. Try starting the game and saving to create it. Nie znaleziono karty pamięci '%1'. Spróbuj uruchomić grę i zapisać, aby ją utworzyć. - + Do not show again Nie pokazuj ponownie - + Using cheats can have unpredictable effects on games, causing crashes, graphical glitches, and corrupted saves. By using the cheat manager, you agree that it is an unsupported configuration, and we will not provide you with any assistance when games break. Cheats persist through save states even after being disabled, please remember to reset/reboot the game after turning off any codes. @@ -7633,17 +7656,17 @@ Cheaty "przechowywane" są również w zapisach gry, także pamiętaj, Czy na pewno chcesz kontynuować? - + Updater Error Błąd aktualizacji - + <p>Sorry, you are trying to update a DuckStation version which is not an official GitHub release. To prevent incompatibilities, the auto-updater is only enabled on official builds.</p><p>To obtain an official build, please follow the instructions under "Downloading and Running" at the link below:</p><p><a href="https://github.com/stenzek/duckstation/">https://github.com/stenzek/duckstation/</a></p> <p>Przepraszamy, próbujesz zaktualizować wersję DuckStation, która nie jest oficjalną wersją z GitHub. Aby zapobiec niekompatybilnościom, automatyczne aktualizacje są włączone tylko w oficjalnych kompilacjach.</p><p>Aby uzyskać oficjalną kompilację, postępuj zgodnie z instrukcjami w sekcji "Pobieranie i uruchamianie" pod linkiem poniżej:</p><p><a href="https://github.com/stenzek/duckstation/">https://github.com/stenzek/duckstation/</a></p> - + Automatic updating is not supported on the current platform. Aktualizacje automatyczne nie są obsługiwane na obecnej platformie. @@ -7978,32 +8001,32 @@ Czy na pewno chcesz kontynuować? MemoryCardType - + No Memory Card Brak karty pamięci - + Shared Between All Games Współdzielone pomiędzy wszystkie gry - + Separate Card Per Game (Serial) Oddzielna karta na grę (numer seryjny) - + Separate Card Per Game (Title) Oddzielna karta na grę (tytuł) - + Separate Card Per Game (File Title) Oddzielna karta na grę (nazwa pliku) - + Non-Persistent Card (Do Not Save) Karta nietrwała (nie zapisuj) @@ -8011,22 +8034,22 @@ Czy na pewno chcesz kontynuować? MultitapMode - + Disabled Wyłączony - + Enable on Port 1 Only Włączony tylko na porcie 1 - + Enable on Port 2 Only Włączony tylko na porcie 2 - + Enable on Ports 1 and 2 Włączony na portach 1 i 2 @@ -8057,17 +8080,17 @@ Czy na pewno chcesz kontynuować? OSDMessage - + Acquired exclusive fullscreen. Uzyskano ekskluzywny pełny ekran. - + Failed to acquire exclusive fullscreen. Nie udało się uzyskać ekskluzywnego pełnego ekranu. - + Lost exclusive fullscreen. Utracono ekskluzywny pełny ekran. @@ -8117,82 +8140,81 @@ Czy na pewno chcesz kontynuować? Dana skala rozdzielczości %ux nie wspiera adaptacyjnego wygładzania. Użyto %ux. - OpenGL renderer unavailable, your driver or hardware is not recent enough. OpenGL 3.1 or OpenGL ES 3.0 is required. - Moduł renderujący OpenGL jest niedostępny, twój sterownik lub sprzęt nie jest wystarczająco nowy. Wymagany jest OpenGL 3.1 lub OpenGL ES 3.0. + Moduł renderujący OpenGL jest niedostępny, twój sterownik lub sprzęt nie jest wystarczająco nowy. Wymagany jest OpenGL 3.1 lub OpenGL ES 3.0. - + System reset. Reset systemu. - + Loading state from '%s' failed. Resetting. Ładowanie stanu z '%s' nie powiodło się. Resetowanie. - + Saving state to '%s' failed. Zapisywanie stanu do '%s' nie powiodło się. - + PGXP is incompatible with the software renderer, disabling PGXP. PGXP jest niekompatybilny z rendererem programowym, wyłączam PGXP. - + Rewind is not supported on 32-bit ARM for Android. Cofanie nie jest wspierane na Androidzie na platformie 32-bit ARM. - + Runahead is not supported on 32-bit ARM for Android. Przewijanie nie jest wspierane na Androidzie na platformie 32-bit ARM. - + Rewind is disabled because runahead is enabled. Cofanie jest wyłączone - przewijanie jest aktywne. - + Switching to %s%s GPU renderer. Przełączam na %s%s renderer GPU. - + Switching to %s audio backend. Przełączam na sterownik audio %s. - + Switching to %s CPU execution mode. Przełączanie do %s trybu wykonywania CPU. - + PGXP enabled, recompiling all blocks. PGXP włączone, ponowna kompilacja wszystkich bloków. - + PGXP disabled, recompiling all blocks. PGXP wyłączone, ponowna kompilacja wszystkich bloków. - + Widescreen hack is now enabled, and aspect ratio is set to %s. Łatka panoramiczna jest aktywna, współczynnik proporcji ustawiono na %s. - + Widescreen hack is now disabled, and aspect ratio is set to %s. Łatka panoramiczna jest nieaktywna, współczynnik proporcji ustawiono na %s. - + Switching to %s renderer... Przełączenie na %s renderer... @@ -8212,99 +8234,99 @@ Czy na pewno chcesz kontynuować? Zapisano kartę pamięci do '{}'. - + Save state contains controller type %s in port %u, but %s is used. Switching. Stan zapisu zawiera typ kontrolera %s w porcie %u, ale używany jest %s. Przełączanie. - + Ignoring mismatched controller type %s in port %u. Ignorowanie niezgodnego typu kontrolera %s w porcie %u. - + Memory card %u from save state does match current card data. Simulating replugging. Karta pamięci %u ze stanu zapisu jest zgodna z aktualnymi danymi karty. Symulowanie ponownego podłączenia. - + Memory card %u present in save state but not in system. Ignoring card. Karta pamięci %u jest w stanie zapisu, ale nie jest w systemie. Ignorowanie karty. - + Memory card %u present in system but not in save state. Replugging card. Karta pamięci %u jest obecna w systemie, ale w chwili zapisu była nieaktywna. Podłączam kartę ponownie. - + Memory card %u present in save state but not in system. Creating temporary card. Karta pamięci %u jest w stanie zapisu, ale nie jest w systemie. Tworzenie tymczasowej karty. - + Memory card %u present in system but not in save state. Removing card. Karta pamięci %u jest obecna w systemie, ale nie jest w stanie zapisywania. Wyjmowanie karty. - + CPU clock speed is set to %u%% (%u / %u). This may result in instability. Szybkość zegara CPU jest ustawiona na %u%% (%u / %u). Może to spowodować niestabilność. - + CD-ROM read speedup set to %ux (effective speed %ux). This may result in instability. Przyspieszenie odczytu CD-ROM jest ustawione na %ux (efektywna prędkość %ux). Może to spowodować niestabilność. - + Failed to initialize %s renderer, falling back to software renderer. Nie udało się zainicjować renderera %s, przechodzę w tryb renderowania programowego. - + WARNING: CPU overclock (%u%%) was different in save state (%u%%). OSTRZEŻENIE: przetaktowywanie procesora (%u%%) było inne w stanie zapisu (%u%%). - + Failed to open CD image from save state '%s': %s. Using existing image '%s', this may result in instability. Nie udało się otworzyć obrazu płyty CD ze stanu zapisu '%s': %s. Korzystanie z istniejącego obrazu '%s' może spowodować niestabilność. - + Failed to open disc image '%s': %s. Nie udało się otworzyć obrazu płyty '%s': %s. - + Failed to switch to subimage %u in '%s': %s. Nie udało się przełączyć na podobraz %u w '%s': %s. - + Switched to sub-image %s (%u) in '%s'. Przełączono na podobraz %s (%u) w '%s'. - + Inserted disc '%s' (%s). Włożono płytę '%s' (%s). - - + + Failed to load post processing shader chain. Nie udało się załadować łańcucha modułów cieniujących po przetwarzaniu. - + No cheats are loaded. Żadne cheaty nie są załadowane. - + %n cheats are now active. %n cheat jest teraz aktywny. @@ -8313,7 +8335,7 @@ Czy na pewno chcesz kontynuować? - + %n cheats are now inactive. %n cheat jest teraz nieaktywny. @@ -8322,136 +8344,136 @@ Czy na pewno chcesz kontynuować? - + CPU clock speed control enabled (%u%% / %.3f MHz). Włączono kontrolę szybkości zegara CPU (%u%% / %.3f MHz). - + CPU clock speed control disabled (%.3f MHz). Wyłączono kontrolę szybkości zegara CPU (%.3f MHz). - + PGXP is now enabled. PGXP jest teraz włączone. - + PGXP is now disabled. PGXP jest teraz wyłączone. - + PGXP Depth Buffer is now enabled. Bufor głębi PGXP jest teraz włączony. - + PGXP Depth Buffer is now disabled. Bufor głębi PGXP jest teraz wyłączony. - + Texture replacements reloaded. Ponownie załadowano zamienniki tekstur. - + Cannot load state for game without serial. Nie można wczytać stanu gry bez numeru seryjnego. - + No save state found in slot {}. Nie znaleziono zapisu stanu w slocie {}. - + Cannot save state for game without serial. Nie można zapisać stanu gry bez numeru seryjnego. - + Achievements are disabled or unavailable for game. Osiągnięcia są wyłączone lub niedostępne dla danej gry. - + Leaderboards are disabled or unavailable for game. Tabele wyników są wyłączone lub niedostępne dla danej gry. - - - + + + Emulation speed set to %u%%. Prędkość emulacji ustawiona na %u%%. - + PGXP CPU mode is now enabled. Tryb PGXP CPU jest aktywny. - + PGXP CPU mode is now disabled. Tryb PGXP CPU jest nieaktywny. - + Volume: Muted Dzwięk: Wyciszony - - - + + + Volume: {}% Głośność: {}% - + CD Audio Muted. CD Audio wyciszone. - + CD Audio Unmuted. CD Audio odciszone. - + Started dumping audio to '%s'. Rozpoczęto zrzucanie dźwięku do '%s'. - + Failed to start dumping audio to '%s'. Nie udało się rozpocząć zrzutu dźwięku do '%s'. - + Stopped dumping audio. Zatrzymano przesyłanie dźwięku. - + Screenshot file '%s' already exists. Plik zrzutu ekranu '%s' już istnieje. - + Failed to save screenshot to '%s' Nie udało się zapisać zrzutu ekranu w '%s' - + Screenshot saved to '%s'. Zrzut ekranu został zapisany w '%s'. - + Controller in port %u (%s) is not supported for %s. Supported controllers: %s Please configure a supported controller from the list above. @@ -8460,12 +8482,12 @@ Wspierane kontrolery: %s Proszę skonfigurować wspierany kontroler z listy powyżej. - + Failed to load cheats from '%s'. Nie udało się załadować cheatów z '%s'. - + Saved %n cheats to '%s'. Zapisano %n cheat do '%s'. @@ -8474,72 +8496,77 @@ Proszę skonfigurować wspierany kontroler z listy powyżej. - + Failed to save cheat list to '%s' Nie udało się zapisać listy cheatów do '%s' - + Loading state from '{}'... Wczytuję zapis stanu z '{}'... - + Save State Zapisz stan - + State saved to '{}'. Stan zapisany do '{}'. - + CD-ROM seek speedup set to instant. This may result in instability. Czytanie płyty CD-ROM ustawione na natychmiastowe. Może działać niestabilnie. - + CD-ROM seek speedup set to %ux. This may result in instability. Czytanie płyty CD-ROM ustawione na %ux. Może działać niestabilnie. - + + This save state was created with a different BIOS version or patch options. This may cause stability issues. + Ten stan gry zapisano, gdy używany był inny BIOS lub włączone zostały opcje "łatające". Może to spowodować problemy ze stabilnością. + + + Rewinding is not enabled. Cofanie jest nieaktywne. - + Swapped memory card ports. Both ports have a memory card. Zamieniono porty kart pamięci. W każdym jest karta pamięci. - + Swapped memory card ports. Port 2 has a memory card, Port 1 is empty. Zamieniono porty kart pamięci. W 2. jest karta, 1. jest pusty. - + Swapped memory card ports. Port 1 has a memory card, Port 2 is empty. Zamieniono porty kart pamięci. W 1. jest karta, 2. jest pusty. - + Swapped memory card ports. Neither port has a memory card. Zamieniono porty kart pamięci. W żadnym nie ma karty pamięci. - + Recompiler options changed, flushing all blocks. Zmieniono opcje rekompilatora, czyszczenie wszystkich bloków. - + Failed to save undo load state. Nie udało się zapisać stanu do automatycznego wczytania. - + %n cheats are enabled. This may result in instability. %n cheat jest aktywny. Może powodować niestabilność systemu. @@ -8548,47 +8575,47 @@ Proszę skonfigurować wspierany kontroler z listy powyżej. - + Deleted cheat list '%s'. Usunięto listę cheatów '%s'. - + Cheat '%s' enabled. Cheat '%s' włączony. - + Cheat '%s' disabled. Cheat '%s' wyłączony. - + Applied cheat '%s'. Zastosowano cheat '%s'. - + Cheat '%s' is already enabled. Cheat '%s' jest już włączony. - + Post-processing is now enabled. Post-processing jest teraz włączony. - + Post-processing is now disabled. Post-processing jest teraz wyłączony. - + Failed to load post-processing shader chain. Nie udało się załadować łańcucha shaderów post-processingu. - + Post-processing shaders reloaded. Załadowano ponownie shadery post-processingu. @@ -8604,66 +8631,71 @@ Proszę skonfigurować wspierany kontroler z listy powyżej. + Using software renderer for readbacks based on game settings. + Używa programowego renderera jako "wsparcie", bazując na ustawieniach gry. + + + Interlacing forced by game settings. Przeplot wymuszony przez ustawienia gry. - + True color disabled by game settings. True Color wyłączone przez ustawienia gry. - + Upscaling disabled by game settings. Skalowanie wyłączone przez ustawienia gry. - + Scaled dithering disabled by game settings. Skalowany dithering wyłączony przez ustawienia gry. - + Widescreen disabled by game settings. Tryb panoramiczny wyłączony przez ustawienia gry. - + Forcing NTSC Timings disallowed by game settings. Wymuszanie taktowania NTSC zabronione przez ustawienia gry. - + PGXP geometry correction disabled by game settings. Korekta geometrii PGXP wyłączona przez ustawienia gry. - + PGXP culling disabled by game settings. Eliminowanie PGXP wyłączone przez ustawienia gry. - + PGXP perspective corrected textures disabled by game settings. PGXP - perspektywiczna korekcja tekstur wyłączona przez ustawienia gry. - + PGXP perspective corrected colors disabled by game settings. PGXP - perspektywiczna korekcja kolorów wyłączona przez ustawienia gry. - + PGXP vertex cache forced by game settings. Pamięć podręczna wierzchołków PGXP wymuszona przez ustawienia gry. - + PGXP CPU mode forced by game settings. Tryb PGXP CPU wymuszony przez ustawienia gry. - + PGXP Depth Buffer disabled by game settings. Bufor głębi PGXP wyłączony przez ustawienia gry. @@ -8677,6 +8709,11 @@ Proszę skonfigurować wspierany kontroler z listy powyżej. Precaching CD image failed, it may be unreliable. Wstępne wczytywanie obrazu CD nie powiodło się. + + + OpenGL renderer unavailable, your driver or hardware is not recent enough. OpenGL 3.1 or OpenGL ES 3.1 is required. + Moduł renderujący OpenGL jest niedostępny, twój sterownik lub sprzęt nie jest wystarczająco nowy. Wymagany jest OpenGL 3.1 lub OpenGL ES 3.1. + PlayStationMouse @@ -8861,29 +8898,29 @@ Adres URL to: %1 QtHost - - - + + + Error Błąd - + File '%1' does not exist. Plik '%1' nie istnieje. - + The specified save state does not exist. Określony zapis stanu gry nie istnieje. - + Cannot use no-gui mode, because no boot filename was specified. Nie można użyć trybu bez graficznego interfejsu użytkownika, ponieważ nie określono pliku, który ma zostać wczytany. - + Cannot use batch mode, because no boot filename was specified. Nie można użyć trybu przetwarzania wsadowego, ponieważ nie określono pliku/plików do wczytania. @@ -9171,63 +9208,68 @@ Adres URL to: %1 System - + Failed to load %s BIOS. Nie udało się wczytać BIOSu %s. - - + + Error Błąd - + Failed to load save state file '{}' for booting. Nie udało się wczytać zapisu stanu gry z pliku. - + + Incorrect BIOS image size + Nieprawidłowy rozmiar obrazu BIOSu + + + Save state is incompatible: minimum version is %u but state is version %u. Zapis stanu jest niekompatybilny: minimalna wersja to %u, ale stan jest wersji %u. - + Save state is incompatible: maximum version is %u but state is version %u. Zapis stanu jest niekompatybilny: maksymalna wersja to %u, ale stan jest wersji %u. - + Failed to open CD image '%s' used by save state: %s. Nie udało się otworzyć obrazu płyty '%s' używanego przez zapis stanu: %s. - + Failed to switch to subimage %u in CD image '%s' used by save state: %s. Nie udało się przełączyć na podobraz %u z obrazu płyty '%s' używanego przez zapis stanu: %s. - + Per-game memory card cannot be used for slot %u as the running game has no code. Using shared card instead. Karta pamięci dla gry nie może być użyta w slocie %u, ponieważ uruchomiona gra nie ma kodu. Użyto wspólnej karty. - + Per-game memory card cannot be used for slot %u as the running game has no title. Using shared card instead. Karta pamięci dla gry nie może być użyta w slocie %u, ponieważ uruchomiona gra nie ma tytułu. Użyto wspólnej karty. - + Per-game memory card cannot be used for slot %u as the running game has no path. Using shared card instead. Karta pamięci dla gry nie może być użyta w slocie %u, ponieważ uruchomiona gra nie ma ścieżki. Użyto wspólnej karty. - + Game changed, reloading memory cards. Gra się zmieniła, wczytywanie właściwej karty pamięci. - + You are attempting to run a libcrypt protected game without an SBI file: %s: %s @@ -9246,7 +9288,7 @@ Sprawdź plik README, aby uzyskać instrukcje dotyczące dodawania plików SBI. Czy chcesz kontynuować? - + You are attempting to run a libcrypt protected game without an SBI file: %s: %s diff --git a/src/duckstation-qt/translations/duckstation-qt_pt-br.ts b/src/duckstation-qt/translations/duckstation-qt_pt-br.ts index 916c49d75..24a1614e6 100644 --- a/src/duckstation-qt/translations/duckstation-qt_pt-br.ts +++ b/src/duckstation-qt/translations/duckstation-qt_pt-br.ts @@ -359,17 +359,17 @@ Token gerado %2. Achievements - + Loading state Carregando estado - + Resuming state Retomando estado - + Hardcore mode disabled by state switch. Modo dificílimo desligado pelo estado salvo. @@ -478,25 +478,25 @@ Posição nos placares de lideres: {} de {} - + Log To System Console Carregar para console - + Log To Window Carregar para janela - + Log To Debug Console Carregar para console de depuração - + Log To File Carregar para arquivo @@ -536,7 +536,7 @@ Posição nos placares de lideres: {} de {} GPU Max Run-Ahead: - + PGXP Vertex Cache PGXP vértice armazenado @@ -549,22 +549,22 @@ Posição nos placares de lideres: {} de {} Preservar Precisão e Projeção do PGXP - + PGXP Geometry Tolerance Tolerância geometrica do PGXP - + PGXP Depth Clear Threshold Limite do PGXP limpo - + Enable Recompiler Block Linking Ativar conexão de bloco recompilador - + Enable Recompiler Fast Memory Access Ativar recompilador de acesso a RAM @@ -573,12 +573,12 @@ Posição nos placares de lideres: {} de {} Ativar recompilador ICache - + Enable VRAM Write Texture Replacement Ativar texturas personalizadas - + Preload Texture Replacements Pré-carregar texturas personalizadas @@ -587,47 +587,47 @@ Posição nos placares de lideres: {} de {} Despejar Texturas Substituíveis - + Set Dumped VRAM Write Alpha Channel Definie o mínimo de despejo (Canal alpha) - + Minimum Dumped VRAM Write Width Mínima do despejo (largura) - + Minimum Dumped VRAM Write Height Mínima do despejo (altura) - + DMA Max Slice Ticks DMA Max Slice Ticks - + DMA Halt Ticks DMA Halt Ticks - + GPU FIFO Size Tamanho de FIFO da GPU - + GPU Max Run-Ahead Execução máxima antecipada da GPU - + Display FPS Limit Mostrar limite de FPS - + Disable All Enhancements Desativar todas as melhorias @@ -636,12 +636,12 @@ Posição nos placares de lideres: {} de {} Mostrar indicadores de tela cheia - + Dump Replaceable VRAM Writes Despejar texturas - + Increase Timer Resolution Aumentar resolução em tempo real @@ -655,7 +655,7 @@ Posição nos placares de lideres: {} de {} Redefinir para o padrão - + Enable Recompiler Memory Exceptions Habilitar exceções de memória @@ -666,12 +666,12 @@ Posição nos placares de lideres: {} de {} - + Show Debug Menu Mostrar menu de depuração - + Show Status Indicators Mostrar indicadores de situação @@ -684,118 +684,138 @@ Posição nos placares de lideres: {} de {} Modo de controle aprimorado (PS4/PS5) - + Apply Compatibility Settings Aplicar configurações de compatibilidade - + Multisample Antialiasing Filtro anti-serrilhado - + Display Active Start Offset Exibir desvio inicial ativo - + Display Active End Offset Exibir desvio final ativo - + Display Line Start Offset Exibir desvio inicial da linha - + Display Line End Offset Exibir desvio final da linha - + Use Old MDEC Routines Usar rotinas MDEC antigas - + Use Debug Host GPU Device Usar GPU para depuração - + Stretch Display Vertically Esticar imagem verticalmente - + Allow Booting Without SBI File Inicializar jogos sem arquivo SBI - + Create Save State Backups Criar cópia de segurança de salvamentos rápidos - + Log Level Nivel do registro - + + Select folder for %1 + Escolha a pasta para %1 + + + Information Informação - + Sets the verbosity of messages logged. Higher levels will log more messages. Configura o nível detalhado de mensagens que serão armazenadas. Níveis mais altos terão mensagens maiores. - - - - + + + + User Preference Preferência do usuário - + Logs messages to the console window. Mostra mensagens na janela de console. - + Logs messages to the debug console where supported. Mostra mensagens no console de depuração quando suportado. - + Logs messages to the window. Mostra o registro em tela. - + Logs messages to duckstation.log in the user directory. Cria um arquivo de registro (duckstation.log) no diretório do usuário. - + Unchecked Desmarcado - + Shows a debug menu bar with additional statistics and quick settings. Mosta a opção depuração com estatísticas adicionais e configurações rápidas. - + Show Frame Times Mostrar tempos por quadro + + + Enable PCDrv + Ativar PCDrv + + + + Enable PCDrv Writes + Ativar escrita PCDrv + + + + PCDrv Root Directory + Diretório raiz PCDrv + Enables the usage of debug devices and shaders for rendering APIs which support them. Should only be used when debugging the emulator. Permite o uso de dispositivos de depuração e shaders para renderizar APIs que os suportam. Só deve ser usado ao depurar o emulador. @@ -1222,17 +1242,17 @@ Posição nos placares de lideres: {} de {} AudioBackend - + Null (No Output) Mudo - + Cubeb Cubed - + XAudio2 XAudio2 @@ -1721,17 +1741,17 @@ Posição nos placares de lideres: {} de {} Interpretador (Mais Lento) - + Interpreter (Slowest) Interpretador (mais lento) - + Cached Interpreter (Faster) Interpretador armazenado (rápido) - + Recompiler (Fastest) Recompilador (mais rápido) @@ -1739,17 +1759,17 @@ Posição nos placares de lideres: {} de {} CPUFastmemMode - + Disabled (Slowest) Desativado (Lento) - + MMap (Hardware, Fastest, 64-Bit Only) MMap (hardware, mais rápido) - + LUT (Faster) LUT (rápido) @@ -2396,7 +2416,7 @@ Posição nos placares de lideres: {} de {} O estado atual será salvo. - + Invalid version %u (%s version %u) Versão inválida %u (%s versão %u) @@ -2408,17 +2428,17 @@ Posição nos placares de lideres: {} de {} ConsoleRegion - + Auto-Detect Detectar automaticamente - + NTSC-J (Japan) NTSC-J (Japão) - + NTSC-U/C (US, Canada) NTSC-U/C (US, Canadá) @@ -2427,7 +2447,7 @@ Posição nos placares de lideres: {} de {} NTSC-U (US) - + PAL (Europe, Australia) PAL (Europeu, Austrália) @@ -4218,24 +4238,24 @@ Esta ação não poderá ser desfeita. ControllerType - + None Nenhum - + Digital Controller Controle digital - + Analog Controller (DualShock) Controle analógico (dualshock) - + Analog Joystick Controle analógico @@ -4245,13 +4265,13 @@ Esta ação não poderá ser desfeita. - + PlayStation Mouse Mouse Playstation - + NeGcon NeGcon @@ -4262,7 +4282,7 @@ Esta ação não poderá ser desfeita. - + GunCon GunCon @@ -4358,42 +4378,42 @@ Esta ação não poderá ser desfeita. DebuggerMessage - + Added breakpoint at 0x%08X. Interruptor adicionado em 0x%08X. - + Removed breakpoint at 0x%08X. Interruptor removido em 0x%08X. - + 0x%08X is not a call instruction. 0x%08X não é uma chamada de instrução. - + Can't step over double branch at 0x%08X Não é possível duplicar ramificações em 0x%08X - + Stepping over to 0x%08X. Pulando para 0x%8X. - + Instruction read failed at %08X while searching for function end. Leitura de instrução falhou em %08X ao final da busca. - + Stepping out to 0x%08X. Saindo em 0x%08X. - + No return instruction found after %u instructions for step-out at %08X. Sem instrução de retorno encontrada após%u nas instruções de saída em %08X. @@ -4846,7 +4866,7 @@ This file can be several gigabytes, so be aware of SSD wear. DiscRegion - + NTSC-J (Japan) NTSC-J (Japão) @@ -4855,17 +4875,17 @@ This file can be several gigabytes, so be aware of SSD wear. NTSC-U (US) - + NTSC-U/C (US, Canada) NTSC-U/C (US, Canadá) - + PAL (Europe, Australia) PAL (Europeu, Austrália) - + Other Outros @@ -4873,17 +4893,17 @@ This file can be several gigabytes, so be aware of SSD wear. DisplayAlignment - + Left / Top Topo superior - + Center Centro - + Right / Bottom Esquerda inferior @@ -4891,17 +4911,17 @@ This file can be several gigabytes, so be aware of SSD wear. DisplayAspectRatio - + Auto (Game Native) Auto (resolução nativa) - + Auto (Match Window) Auto (corresponder a janela) - + Custom Personalizado @@ -4909,17 +4929,17 @@ This file can be several gigabytes, so be aware of SSD wear. DisplayCropMode - + None Nenhuma - + Only Overscan Area Somente área renderizada - + All Borders Todas as bordas @@ -6067,17 +6087,17 @@ Conquistas: %5 (%6) GPUDownsampleMode - + Disabled Desativado - + Box (Downsample 3D/Smooth All) Misto (Reduz 3D / Suaviza tudo) - + Adaptive (Preserve 3D/Smooth 2D) Adaptativo (Preserva o 3D / Suaviza 2D) @@ -6085,27 +6105,27 @@ Conquistas: %5 (%6) GPURenderer - + Hardware (D3D11) Placa de vídeo (D3D11) - + Hardware (D3D12) Placa de vídeo (D3D12) - + Hardware (Vulkan) Placa de vídeo (Vulkan) - + Hardware (OpenGL) Placa de vídeo (OpenGL) - + Software Software @@ -6528,32 +6548,32 @@ Conquistas: %5 (%6) GPUTextureFilter - + Nearest-Neighbor Nearest-Neighbor - + Bilinear Bi-linear - + JINC2 (Slow) JINC2 (Lento) - + JINC2 (Slow, No Edge Blending) JINC2 (Lento, sem AA) - + xBR (Very Slow) xBR (Muito lento) - + xBR (Very Slow, No Edge Blending) xBR (Muito lento sem AA) @@ -6562,7 +6582,7 @@ Conquistas: %5 (%6) JINC2 - + Bilinear (No Edge Blending) Bi-linear (sem AA) @@ -8163,12 +8183,12 @@ This will download approximately 4 megabytes over your current internet connecti HostInterface - + Failed to load configured BIOS file '%s' Falha ao carregar o arquivo de BIOS '%s' - + No BIOS image found for %s region BIOS não encontrado para a seguinte região %s @@ -8750,22 +8770,22 @@ This will download approximately 4 megabytes over your current internet connecti LogLevel - + None Nenhum - + Error Erro - + Warning Alerta - + Performance Desempenho @@ -8774,32 +8794,32 @@ This will download approximately 4 megabytes over your current internet connecti Sucesso - + Information Informação - + Developer Desenvolvedor - + Profile Perfil - + Verbose Detalhado - + Debug Depurar - + Trace Rastreio @@ -8817,8 +8837,8 @@ This will download approximately 4 megabytes over your current internet connecti - - + + Change Disc Mudar disco @@ -8833,8 +8853,8 @@ This will download approximately 4 megabytes over your current internet connecti - - + + Load State Carregar estado @@ -9308,7 +9328,7 @@ This will download approximately 4 megabytes over your current internet connecti - + Resume Continuar @@ -9460,18 +9480,18 @@ This will download approximately 4 megabytes over your current internet connecti Falha ao iniciar exibição em tela. - - + + Select Disc Image Escolha uma imagem de disco - + Start Disc Iniciar disco - + Could not find any CD-ROM devices. Please ensure you have a CD-ROM drive connected and sufficient permissions to access it. Não foi possível encontrar nenhum dispositivo de CD-ROM. Certifique-se de ter uma unidade de CD-ROM conectada e permissões suficientes para acessá-la. @@ -9488,8 +9508,8 @@ This will download approximately 4 megabytes over your current internet connecti - - + + Error Erro @@ -9499,111 +9519,111 @@ This will download approximately 4 megabytes over your current internet connecti Pausado - + %1 (%2) %1 (%2) - + Select disc drive: Escolha a unidade de disco: - + Resume (%1) Continuar (%1) - - - + + + Game Save %1 (%2) Jogo salvo %1 (%2) - + Edit Memory Cards... Editar cartões de memória... - + Delete Save States... Apagar estados salvos... - + Confirm Save State Deletion Confirmar deleção de estado salvo - + Are you sure you want to delete all save states for %1? The saves will not be recoverable. Tem certeza de que deseja apagar os estados salvos %1? Não será possivel reverter esta ação. - + Load From File... Carregar do arquivo... - - + + Select Save State File Escolher arquivo de salvamento rápido - - + + Save States (*.sav) Salvamento rápido (*.sav) - + Undo Load State Desfazer estado carregado - - + + Game Save %1 (Empty) Jogo salvo %1 (Vazio) - - + + Global Save %1 (%2) Compartimento global %1 (%2) - - + + Global Save %1 (Empty) Compartimento global %1 (Vazio) - + Save To File... Salvar para arquivo... - + &Enabled Cheats &Trapaças ativadas - + &Apply Cheats &Aplicar trapaças - + Load Resume State Carregar estado salvo - + A resume save state was found for this game, saved at: %1. @@ -9616,63 +9636,63 @@ Do you want to load this state, or start from a fresh boot? Você deseja que este arquivo seja carregado ou que seja reiniciado novamente? - + Fresh Boot Inicialização limpa - + Delete And Boot Excluir e iniciar - + Failed to delete save state file '%1'. Falha ao apagar o arquivo de estado salvo '%1'. - + Confirm Disc Change Confirmar troca de disco - + Do you want to swap discs or boot the new image (via system reset)? Deseja trocar discos ou inicializar outro (via reinicialização do sistema)? - + Swap Disc Trocar disco - + Reset Redefinir - + Cancel Cancelar - - + + Cheat Manager Gerenciador de trapaças - + You must select a disc to change discs. Você deve escolher um disco para confirmar a troca - + Confirm Reset Confirmar redefinição - + Are you sure you want to reset the play time for '%1'? This action cannot be undone. @@ -9685,88 +9705,88 @@ Esta ação não poderá ser desfeita. Não foi possível encontrar uma entrada da lista de jogos para o arquivo em execução no momento. Certifique-se de que este arquivo esteja em um local verificado pela lista de jogos. - + Properties... Propriedades... - + Open Containing Directory... Abrir diretório... - + Set Cover Image... Definir imagem de capa... - + Default Boot Inicialização padrão - + Fast Boot Inicialização rápida - + Full Boot Inicialização completa - + Boot and Debug Iniciar jogo com depurador - + Exclude From List Excluir da lista - + Reset Play Time Redefinir tempo de jogo - + Add Search Directory... Adicionar um novo diretório... - + Select Cover Image Escolher imagem de capa - + All Cover Image Types (*.jpg *.jpeg *.png) Todos os tipos de imagem de capa (*.jpg *.jpeg *.png) - + Cover Already Exists Capa já existe - + A cover image for this game already exists, do you wish to replace it? A capa para este jogo já existe, deseja substituí-lá? - - + + Copy Error Erro ao copiar - + Failed to remove existing cover '%1' Falha ao remover capa existente '%1' - + Failed to copy '%1' to '%2' Falha ao copiar '%1' para '%2' @@ -9775,45 +9795,45 @@ Esta ação não poderá ser desfeita. Idioma alterado. Reinicie o emulador para o aplicar. - + %1x Scale Expandir para %1x - - - + + + Destination File Destino do arquivo - - + + Binary Files (*.bin) Arquivos binários (*.bin) - + Binary Files (*.bin);;PNG Images (*.png) Arquivos (*.bin);;Imagens (*.png) - + Default Padrão - + Fusion Fusion - + Dark Fusion (Gray) Dark Fusion (cinza) - + Dark Fusion (Blue) Dark Fusion (azul) @@ -9822,56 +9842,56 @@ Esta ação não poderá ser desfeita. DarkFusion - + QDarkStyle Escuro - + Confirm Shutdown Confirmar desligamento - + Are you sure you want to shut down the virtual machine? Tem certeza de que deseja desligar a máquina virtual? - + Save State For Resume Salvar estado e continuar - - - - + + + + Memory Card Not Found Cartão de memória não encontrado - + Memory card '%1' does not exist. Do you want to create an empty memory card? Cartão de memória '%1' não existe, você deseja criar um cartão de memória vazio? - + Failed to create memory card '%1' Falha ao criar cartão de memória '%1' - - + + Memory card '%1' could not be found. Try starting the game and saving to create it. Cartão de memória '%1' não encotrado. Experimente iniciar o jogo e salvá-lo para que ele seja criado. - + Do not show again Não mostrar de novo - + Using cheats can have unpredictable effects on games, causing crashes, graphical glitches, and corrupted saves. By using the cheat manager, you agree that it is an unsupported configuration, and we will not provide you with any assistance when games break. Cheats persist through save states even after being disabled, please remember to reset/reboot the game after turning off any codes. @@ -9884,17 +9904,17 @@ As trapaças ficam guardadas no estado de salvamento rápido mesmo após serem d Tem certeza de que deseja continuar? - + Updater Error Erro na atualização - + <p>Sorry, you are trying to update a DuckStation version which is not an official GitHub release. To prevent incompatibilities, the auto-updater is only enabled on official builds.</p><p>To obtain an official build, please follow the instructions under "Downloading and Running" at the link below:</p><p><a href="https://github.com/stenzek/duckstation/">https://github.com/stenzek/duckstation/</a></p> <p>Desculpe, mas você está tentando atualizar uma versão não oficial do Duckstation. Para evitarmos imcompatibilidade, o atualizador automático só poderá ser usado nas versões oficiais! </p><p>Para obtê-las, siga as instruções de como e onde no link "Baixando e rodando" conforme abaixo:</p><p><a href="https://github.com/stenzek/duckstation/">https://github.com/stenzek/duckstation/</a></p> - + Automatic updating is not supported on the current platform. Atualizações automáticas não são compatíveis com a plataforma atual. @@ -10272,22 +10292,22 @@ Tem certeza de que deseja continuar? MemoryCardType - + No Memory Card Sem cartão de memória - + Shared Between All Games Compartilhada entre jogos - + Separate Card Per Game (Serial) Cartão separado por jogo (Serial) - + Separate Card Per Game (Title) Cartão separado por jogo (título) @@ -10300,12 +10320,12 @@ Tem certeza de que deseja continuar? Separar cartão por jogo (título do jogo) - + Separate Card Per Game (File Title) Separar cartão por jogo (título do arquivo) - + Non-Persistent Card (Do Not Save) Cartão não persistente (não salvar) @@ -10313,17 +10333,17 @@ Tem certeza de que deseja continuar? MultitapMode - + Disabled Desativado - + Enable on Port 1 Only Ativar somente na porta 1 - + Enable on Port 2 Only Ativar somente na porta 2 @@ -10332,7 +10352,7 @@ Tem certeza de que deseja continuar? Ativar somente na Porta 1 - + Enable on Ports 1 and 2 Ativar nas portas 1 e 2 @@ -10458,7 +10478,7 @@ Tem certeza de que deseja continuar? OSDMessage - + System reset. Sistema reiniciado. @@ -10467,12 +10487,12 @@ Tem certeza de que deseja continuar? Estado carregado de '%s'... - + Loading state from '%s' failed. Resetting. Carregamento de estado '%s'.falhou. reiniciando. - + Saving state to '%s' failed. Falha ao salvar estado em '%s'. @@ -10481,27 +10501,27 @@ Tem certeza de que deseja continuar? Estado salvo em '%s'. - + PGXP is incompatible with the software renderer, disabling PGXP. PGXP é incompatível com o rederizador por software, desligando PGXP. - + Rewind is not supported on 32-bit ARM for Android. O retrocesso não é compatível com o a plataforma ARM de 32 bits para Android. - + Runahead is not supported on 32-bit ARM for Android. Pulo de quadros não é compatível com a versão de 32Bits. - + Rewind is disabled because runahead is enabled. Função de retrocesso desligada porque o avanço rápido está ligado. - + Recompiler options changed, flushing all blocks. As opções do recompilador foram alteradas, limpando todos os blocos. @@ -10514,17 +10534,17 @@ Tem certeza de que deseja continuar? Fastmem não disponível nesta plataforma, LUT será usado no lugar. - + Switching to %s%s GPU renderer. Mudando renderizador de GPU para %s%s. - + Switching to %s audio backend. Mudando tipo de saída de som para %s. - + Switching to %s CPU execution mode. Mudando para modo de execução %s. @@ -10545,24 +10565,24 @@ Tem certeza de que deseja continuar? Icache desativado, limpando blocos. - + PGXP enabled, recompiling all blocks. PGXP ativado, reconstruindo blocos. - + PGXP disabled, recompiling all blocks. PGXP desativado, reconstruindo blocos. - + Switching to %s renderer... Mudando para %s... - - + + Failed to load post processing shader chain. Falha ao carregar shader escolhido. @@ -10575,7 +10595,7 @@ Tem certeza de que deseja continuar? Limitador de Velocidade Desativado. - + %n cheats are now active. @@ -10583,7 +10603,7 @@ Tem certeza de que deseja continuar? - + %n cheats are now inactive. @@ -10626,12 +10646,12 @@ Tem certeza de que deseja continuar? Texturas personalizadas recarregadas. - + Failed to save undo load state. Falha ao desfazer carregar estado. - + Rewinding is not enabled. O retrocesso não está habilitado. @@ -10716,32 +10736,32 @@ Tem certeza de que deseja continuar? Perfil de controle carregado de '%s' - + Started dumping audio to '%s'. Iniciado despejo de áudio em '%s'. - + Failed to start dumping audio to '%s'. Falha ao iniciar despejo de áudio em '%s'. - + Stopped dumping audio. Despejo de áudio terminado. - + Screenshot file '%s' already exists. Captura de tela '%s' já existe. - + Failed to save screenshot to '%s' Falha ao salvar captura em '%s' - + Screenshot saved to '%s'. Captura de tela salva em '%s'. @@ -10761,12 +10781,12 @@ Please configure a supported controller from the list above. Usando perfil de controle '%s'. - + Failed to load cheats from '%s'. Falha ao carregar '%s' trapaças. - + %n cheats are enabled. This may result in instability. %n trapaças ativadas. Isso pode resultar em instabilidade. @@ -10774,32 +10794,32 @@ Please configure a supported controller from the list above. - + Widescreen hack is now enabled, and aspect ratio is set to %s. Ajuste de tela panorâmica ligado, e a proporção da imagem está definida como %s. - + Widescreen hack is now disabled, and aspect ratio is set to %s. Ajuste de tela panorâmica desligado, e a proporção da imagem está definida como %s. - + Swapped memory card ports. Both ports have a memory card. Portas de cartão de memória trocadas. ambas já contém cartão. - + Swapped memory card ports. Port 2 has a memory card, Port 1 is empty. Portas de cartão de memória trocadas. porta 2 tem um cartão de memória, porta 1 vazia. - + Swapped memory card ports. Port 1 has a memory card, Port 2 is empty. Portas de cartão de memória trocadas. porta 1 tem um cartão de memória, porta 2 vazia. - + Swapped memory card ports. Neither port has a memory card. Portas de cartão de memória trocadas. nenhuma das portas possui cartão de memória. @@ -10816,27 +10836,27 @@ Please configure a supported controller from the list above. Trapaça %u.salva para '%s'. - + Deleted cheat list '%s'. Trapaça '%s' apagada da lista. - + Cheat '%s' enabled. Trapaça '%s' ativada. - + Cheat '%s' disabled. Trapaça '%s' desativada. - + Failed to save cheat list to '%s' Falha ao salvar lista de trapaças para '%s' - + No cheats are loaded. Nenhuma trapaça foi carregada. @@ -10898,7 +10918,7 @@ Please configure a supported controller from the list above. - + Saved %n cheats to '%s'. Salvo %n trapaça em '%s'. @@ -10906,32 +10926,32 @@ Please configure a supported controller from the list above. - + Applied cheat '%s'. Trapaça aplicada '%s'. - + Cheat '%s' is already enabled. Trapaça '%s' já está ativada - + Post-processing is now enabled. Pós-processamento ligado. - + Post-processing is now disabled. Pós-processamento desligado. - + Failed to load post-processing shader chain. Falha ao carregar texturas de pós-processamento. - + Post-processing shaders reloaded. Texturas de pós-processamento recarregadas. @@ -11032,37 +11052,37 @@ Please configure a supported controller from the list above. Recompilador ICache forçado pelas configurações. - + Save state contains controller type %s in port %u, but %s is used. Switching. Estado rápido contém controle %s na porta %u, mas %s está em uso, mudando. - + Ignoring mismatched controller type %s in port %u. Tipo de controle incompatível ignorado %s na porta %u. - + Memory card %u from save state does match current card data. Simulating replugging. O estado salvo do cartão %u corresponde ao estado no cartão de memória. - + Memory card %u present in save state but not in system. Ignoring card. Cartão de memória %u presente em um estado salvo mas não no sistema, ignorando cartão. - + Memory card %u present in system but not in save state. Replugging card. Cartão de memória %u presente mas não condiz com o estado salvo atual, reconectando cartão. - + Memory card %u present in save state but not in system. Creating temporary card. Cartão de memória %u presente no estado salvo mas não no sistema, criando cartão temporário. - + Memory card %u present in system but not in save state. Removing card. Cartão de memória %u presente no sistema mas não no estado salvo, removendo cartão. @@ -11081,67 +11101,72 @@ Please configure a supported controller from the list above. Falha ao aplicar modificação ppf '%1s', usando imagem limpa. - + Loading state from '{}'... Estado carregado de '{}'... - + Save State Salvar estado - + State saved to '{}'. Estado salvo em '{}'. - + CPU clock speed is set to %u%% (%u / %u). This may result in instability. Velocidade do CPU foi mudada para %u%% isto resultará em instabilidades. - + CD-ROM read speedup set to %ux (effective speed %ux). This may result in instability. Leitura do CD-rom acelerada para %ux (velocidade apropriada %u). pode resultar em instabilidades. - + CD-ROM seek speedup set to instant. This may result in instability. Aumento de velocidade de busca do CD-ROM definida para instantânea. isso pode resultar em instabilidade. - + CD-ROM seek speedup set to %ux. This may result in instability. Aumento de velocidade de busca do CD-ROM definida para % ux. isso pode resultar em instabilidade. - + Failed to initialize %s renderer, falling back to software renderer. Falha ao inicializar o renderizador %s , retornando para renderizador por software. - + + This save state was created with a different BIOS version or patch options. This may cause stability issues. + O salvamento automático foi criado com uma versão do BIOS diferente ou modificada. Isto acarretará em problemas. + + + WARNING: CPU overclock (%u%%) was different in save state (%u%%). ATENÇÃO: Aumento da velocidade (%u%%) era diferente do que no seu save anterior (%u%%). - + Failed to open CD image from save state '%s': %s. Using existing image '%s', this may result in instability. Falha ao abrir imagem do estado salvo '%s': %s. usando imagem existente '%s', isto, resultará em instabilidades. - + Failed to open disc image '%s': %s. Falha ao abrir o disco '%s': %s. - + Failed to switch to subimage %u in '%s': %s. Falha ao trocar para disco %u em '%s': %s. - + Switched to sub-image %s (%u) in '%s'. Mudado para segunda imagem %s (%u) em '%s'. @@ -11154,7 +11179,7 @@ Please configure a supported controller from the list above. Falha ao abrir o disco '%s'. - + Inserted disc '%s' (%s). Disco inserido '%s' (%s). @@ -11256,7 +11281,7 @@ Controles iniciados em modo digital. Falha ao ler o jogo. conquistas desativadas. - + OpenGL renderer unavailable, your driver or hardware is not recent enough. OpenGL 3.1 or OpenGL ES 3.1 is required. Renderizador openGL não disponível, driver ou hardware não compatíveis. OpenGL 3.1 ou OpenGLES 3.0 são obrigatórios. @@ -12083,48 +12108,53 @@ The saves will not be recoverable. Estado salvo incompatível: versão do mesmo esperada %u não a versão %u. - + Failed to load %s BIOS. Falha ao carregar %s BIOS. - - + + Error Erro - + Failed to load save state file '{}' for booting. Falha ao carregar o dado salvo no compartimento '{}'. - + + Incorrect BIOS image size + Tamanho da imagem do BIOS incorreta + + + Save state is incompatible: minimum version is %u but state is version %u. Estado salvo incompatível: versão esperada %u não versão %u. - + Save state is incompatible: maximum version is %u but state is version %u. Estado salvo incompatível: versão esperada %u não versão %u. - + Failed to open CD image '%s' used by save state: %s. Falha ao abrir imagem do CD '%s' usado pelo estado salvo: %s. - + Failed to switch to subimage %u in CD image '%s' used by save state: %s. Falha ao trocar disco %u do CD '%s' usado pelo estado salvo: %s. - + Per-game memory card cannot be used for slot %u as the running game has no path. Using shared card instead. O cartão de memória individual não pôde ser usado no compartimento %u caminho não configurado. usando cartão compartilhado. - + You are attempting to run a libcrypt protected game without an SBI file: %s: %s @@ -12157,13 +12187,13 @@ Seu despejo está incompleto, você deve adicionar o arquivo SBI para rodá-lo c Falha ao abrir estado salvo: '%s'. - + Per-game memory card cannot be used for slot %u as the running game has no code. Using shared card instead. Caminho para o cartão de memória no compartimento %u não pôde ser usado o jogo iniciado não possui um códido válido. Será usado um cartão compartilhado. - + Per-game memory card cannot be used for slot %u as the running game has no title. Using shared card instead. Caminho para o cartão de memória no compartimento %u não pôde ser usado o jogo iniciado não possui um nome válido. Será usado um cartão compartilhado. @@ -12173,12 +12203,12 @@ o jogo iniciado não possui um nome válido. Será usado um cartão compartilhad Caminho para o Cartão de Memória %u incorreto, usando o padrão. - + Game changed, reloading memory cards. Jogo trocado, recarregando cartões de memória. - + You are attempting to run a libcrypt protected game without an SBI file: %s: %s diff --git a/src/frontend-common/CMakeLists.txt b/src/frontend-common/CMakeLists.txt index 6787bf87c..1496aad3f 100644 --- a/src/frontend-common/CMakeLists.txt +++ b/src/frontend-common/CMakeLists.txt @@ -126,6 +126,14 @@ if(USE_X11) target_include_directories(frontend-common PRIVATE "${X11_INCLUDE_DIR}") endif() +if(USE_DBUS) + target_compile_definitions(frontend-common PRIVATE USE_DBUS) + find_package(PkgConfig REQUIRED) + pkg_check_modules(DBUS REQUIRED dbus-1) + target_include_directories(frontend-common PRIVATE ${DBUS_INCLUDE_DIRS}) + target_link_libraries(frontend-common PRIVATE ${DBUS_LINK_LIBRARIES}) +endif() + if(ENABLE_DISCORD_PRESENCE) target_compile_definitions(frontend-common PUBLIC -DWITH_DISCORD_PRESENCE=1) target_link_libraries(frontend-common PRIVATE discord-rpc) diff --git a/src/frontend-common/d3d11_host_display.cpp b/src/frontend-common/d3d11_host_display.cpp index 8d40248b5..e28e17212 100644 --- a/src/frontend-common/d3d11_host_display.cpp +++ b/src/frontend-common/d3d11_host_display.cpp @@ -705,8 +705,8 @@ bool D3D11HostDisplay::Render(bool skip_present) return true; } -bool D3D11HostDisplay::RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) +bool D3D11HostDisplay::RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, + std::vector* out_pixels, u32* out_stride, GPUTexture::Format* out_format) { static constexpr GPUTexture::Format hdformat = GPUTexture::Format::RGBA8; @@ -720,20 +720,18 @@ bool D3D11HostDisplay::RenderScreenshot(u32 width, u32 height, std::vector* if (HasDisplayTexture()) { - const auto [left, top, draw_width, draw_height] = CalculateDrawRect(width, height); - if (!m_post_processing_chain.IsEmpty()) { - ApplyPostProcessingChain(render_texture.GetD3DRTV(), left, top, draw_width, draw_height, - static_cast(m_display_texture), m_display_texture_view_x, - m_display_texture_view_y, m_display_texture_view_width, m_display_texture_view_height, - width, height); + ApplyPostProcessingChain(render_texture.GetD3DRTV(), draw_rect.left, draw_rect.top, draw_rect.GetWidth(), + draw_rect.GetHeight(), static_cast(m_display_texture), + m_display_texture_view_x, m_display_texture_view_y, m_display_texture_view_width, + m_display_texture_view_height, width, height); } else { - RenderDisplay(left, top, draw_width, draw_height, static_cast(m_display_texture), - m_display_texture_view_x, m_display_texture_view_y, m_display_texture_view_width, - m_display_texture_view_height, IsUsingLinearFiltering()); + RenderDisplay(draw_rect.left, draw_rect.top, draw_rect.GetWidth(), draw_rect.GetHeight(), + static_cast(m_display_texture), m_display_texture_view_x, m_display_texture_view_y, + m_display_texture_view_width, m_display_texture_view_height, IsUsingLinearFiltering()); } } diff --git a/src/frontend-common/d3d11_host_display.h b/src/frontend-common/d3d11_host_display.h index 32154e4ee..f6c4f725c 100644 --- a/src/frontend-common/d3d11_host_display.h +++ b/src/frontend-common/d3d11_host_display.h @@ -67,8 +67,8 @@ public: void SetVSync(bool enabled) override; bool Render(bool skip_present) override; - bool RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) override; + bool RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, std::vector* out_pixels, + u32* out_stride, GPUTexture::Format* out_format) override; static AdapterAndModeList StaticGetAdapterAndModeList(); diff --git a/src/frontend-common/d3d12_host_display.cpp b/src/frontend-common/d3d12_host_display.cpp index faafe2641..1e3df79ea 100644 --- a/src/frontend-common/d3d12_host_display.cpp +++ b/src/frontend-common/d3d12_host_display.cpp @@ -615,8 +615,8 @@ bool D3D12HostDisplay::Render(bool skip_present) return true; } -bool D3D12HostDisplay::RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) +bool D3D12HostDisplay::RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, + std::vector* out_pixels, u32* out_stride, GPUTexture::Format* out_format) { static constexpr DXGI_FORMAT format = DXGI_FORMAT_R8G8B8A8_UNORM; static constexpr GPUTexture::Format hdformat = GPUTexture::Format::RGBA8; @@ -630,14 +630,13 @@ bool D3D12HostDisplay::RenderScreenshot(u32 width, u32 height, std::vector* } ID3D12GraphicsCommandList* cmdlist = g_d3d12_context->GetCommandList(); - const auto [left, top, draw_width, draw_height] = CalculateDrawRect(width, height); if (HasDisplayTexture() && !m_post_processing_chain.IsEmpty()) { - ApplyPostProcessingChain(cmdlist, &render_texture, left, top, width, height, - static_cast(m_display_texture), m_display_texture_view_x, - m_display_texture_view_y, m_display_texture_view_width, m_display_texture_view_height, - width, height); + ApplyPostProcessingChain(cmdlist, &render_texture, draw_rect.left, draw_rect.top, draw_rect.GetWidth(), + draw_rect.GetHeight(), static_cast(m_display_texture), + m_display_texture_view_x, m_display_texture_view_y, m_display_texture_view_width, + m_display_texture_view_height, width, height); } else { @@ -647,9 +646,9 @@ bool D3D12HostDisplay::RenderScreenshot(u32 width, u32 height, std::vector* if (HasDisplayTexture()) { - RenderDisplay(cmdlist, left, top, draw_width, draw_height, static_cast(m_display_texture), - m_display_texture_view_x, m_display_texture_view_y, m_display_texture_view_width, - m_display_texture_view_height, IsUsingLinearFiltering()); + RenderDisplay(cmdlist, draw_rect.left, draw_rect.top, draw_rect.GetWidth(), draw_rect.GetHeight(), + static_cast(m_display_texture), m_display_texture_view_x, m_display_texture_view_y, + m_display_texture_view_width, m_display_texture_view_height, IsUsingLinearFiltering()); } } diff --git a/src/frontend-common/d3d12_host_display.h b/src/frontend-common/d3d12_host_display.h index 0aeb2f2c8..dfd49848d 100644 --- a/src/frontend-common/d3d12_host_display.h +++ b/src/frontend-common/d3d12_host_display.h @@ -66,8 +66,8 @@ public: void SetVSync(bool enabled) override; bool Render(bool skip_present) override; - bool RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) override; + bool RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, std::vector* out_pixels, + u32* out_stride, GPUTexture::Format* out_format) override; bool SetGPUTimingEnabled(bool enabled) override; float GetAndResetAccumulatedGPUTime() override; diff --git a/src/frontend-common/opengl_host_display.cpp b/src/frontend-common/opengl_host_display.cpp index d9e120fe4..c058b56de 100644 --- a/src/frontend-common/opengl_host_display.cpp +++ b/src/frontend-common/opengl_host_display.cpp @@ -680,8 +680,8 @@ bool OpenGLHostDisplay::Render(bool skip_present) return true; } -bool OpenGLHostDisplay::RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) +bool OpenGLHostDisplay::RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, + std::vector* out_pixels, u32* out_stride, GPUTexture::Format* out_format) { GL::Texture texture; if (!texture.Create(width, height, 1, 1, 1, GPUTexture::Format::RGBA8, nullptr, 0) || !texture.CreateFramebuffer()) @@ -692,14 +692,13 @@ bool OpenGLHostDisplay::RenderScreenshot(u32 width, u32 height, std::vector glDisable(GL_SCISSOR_TEST); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - const auto [left, top, draw_width, draw_height] = CalculateDrawRect(width, height); - if (HasDisplayTexture() && !m_post_processing_chain.IsEmpty()) { - ApplyPostProcessingChain(texture.GetGLFramebufferID(), left, height - top - draw_height, draw_width, draw_height, - static_cast(m_display_texture), m_display_texture_view_x, - m_display_texture_view_y, m_display_texture_view_width, m_display_texture_view_height, - width, height); + ApplyPostProcessingChain(texture.GetGLFramebufferID(), draw_rect.left, + height - draw_rect.top - draw_rect.GetHeight(), draw_rect.GetWidth(), + draw_rect.GetHeight(), static_cast(m_display_texture), + m_display_texture_view_x, m_display_texture_view_y, m_display_texture_view_width, + m_display_texture_view_height, width, height); } else { @@ -708,9 +707,10 @@ bool OpenGLHostDisplay::RenderScreenshot(u32 width, u32 height, std::vector if (HasDisplayTexture()) { - RenderDisplay(left, height - top - draw_height, draw_width, draw_height, - static_cast(m_display_texture), m_display_texture_view_x, m_display_texture_view_y, - m_display_texture_view_width, m_display_texture_view_height, IsUsingLinearFiltering()); + RenderDisplay(draw_rect.left, height - draw_rect.top - draw_rect.GetHeight(), draw_rect.GetWidth(), + draw_rect.GetHeight(), static_cast(m_display_texture), m_display_texture_view_x, + m_display_texture_view_y, m_display_texture_view_width, m_display_texture_view_height, + IsUsingLinearFiltering()); } } diff --git a/src/frontend-common/opengl_host_display.h b/src/frontend-common/opengl_host_display.h index 3ae85976e..2cc21c120 100644 --- a/src/frontend-common/opengl_host_display.h +++ b/src/frontend-common/opengl_host_display.h @@ -55,8 +55,8 @@ public: void SetVSync(bool enabled) override; bool Render(bool skip_present) override; - bool RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) override; + bool RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, std::vector* out_pixels, + u32* out_stride, GPUTexture::Format* out_format) override; bool SetGPUTimingEnabled(bool enabled) override; float GetAndResetAccumulatedGPUTime() override; diff --git a/src/frontend-common/platform_misc_unix.cpp b/src/frontend-common/platform_misc_unix.cpp index b333be44e..0033b1ebc 100644 --- a/src/frontend-common/platform_misc_unix.cpp +++ b/src/frontend-common/platform_misc_unix.cpp @@ -3,17 +3,18 @@ #include "common/log.h" #include "common/string.h" -#include "platform_misc.h" #include "input_manager.h" +#include "platform_misc.h" #include Log_SetChannel(FrontendCommon); -#ifdef USE_X11 -#include #include -#include #include +#if !defined(USE_DBUS) && defined(USE_X11) +#include +#include + static bool SetScreensaverInhibitX11(bool inhibit, const WindowInfo& wi) { TinyString command; @@ -38,10 +39,80 @@ static bool SetScreensaverInhibitX11(bool inhibit, const WindowInfo& wi) return true; } -#endif // USE_X11 +#elif defined(USE_DBUS) +#include +bool ChangeScreenSaverStateDBus(const bool inhibit_requested, const char* program_name, const char* reason) +{ + static dbus_uint32_t s_cookie; + // "error_dbus" doesn't need to be cleared in the end with "dbus_message_unref" at least if there is + // no error set, since calling "dbus_error_free" reinitializes it like "dbus_error_init" after freeing. + DBusError error_dbus; + dbus_error_init(&error_dbus); + DBusConnection* connection = nullptr; + DBusMessage* message = nullptr; + DBusMessage* response = nullptr; + // Initialized here because initializations should be before "goto" statements. + const char* bus_method = (inhibit_requested) ? "Inhibit" : "UnInhibit"; + // "dbus_bus_get" gets a pointer to the same connection in libdbus, if exists, without creating a new connection. + // this doesn't need to be deleted, except if there's an error then calling "dbus_connection_unref", to free it, + // might be better so a new connection is established on the next try. + if (!(connection = dbus_bus_get(DBUS_BUS_SESSION, &error_dbus)) || (dbus_error_is_set(&error_dbus))) + goto cleanup; + if (!(message = dbus_message_new_method_call("org.freedesktop.ScreenSaver", "/org/freedesktop/ScreenSaver", + "org.freedesktop.ScreenSaver", bus_method))) + goto cleanup; + // Initialize an append iterator for the message, gets freed with the message. + DBusMessageIter message_itr; + dbus_message_iter_init_append(message, &message_itr); + if (inhibit_requested) + { + // Append process/window name. + if (!dbus_message_iter_append_basic(&message_itr, DBUS_TYPE_STRING, &program_name)) + goto cleanup; + // Append reason for inhibiting the screensaver. + if (!dbus_message_iter_append_basic(&message_itr, DBUS_TYPE_STRING, &reason)) + goto cleanup; + } + else + { + // Only Append the cookie. + if (!dbus_message_iter_append_basic(&message_itr, DBUS_TYPE_UINT32, &s_cookie)) + goto cleanup; + } + // Send message and get response. + if (!(response = + dbus_connection_send_with_reply_and_block(connection, message, DBUS_TIMEOUT_USE_DEFAULT, &error_dbus)) || + dbus_error_is_set(&error_dbus)) + goto cleanup; + if (inhibit_requested) + { + // Get the cookie from the response message. + if (!dbus_message_get_args(response, &error_dbus, DBUS_TYPE_UINT32, &s_cookie, DBUS_TYPE_INVALID)) + goto cleanup; + } + dbus_message_unref(message); + dbus_message_unref(response); + return true; +cleanup: + if (dbus_error_is_set(&error_dbus)) + dbus_error_free(&error_dbus); + if (connection) + dbus_connection_unref(connection); + if (message) + dbus_message_unref(message); + if (response) + dbus_message_unref(response); + return false; +} + +#endif static bool SetScreensaverInhibit(bool inhibit) { +#ifdef USE_DBUS + return ChangeScreenSaverStateDBus(inhibit, "DuckStation", "DuckStation VM is running."); +#else + std::optional wi(Host::GetTopLevelWindowInfo()); if (!wi.has_value()) { @@ -60,6 +131,7 @@ static bool SetScreensaverInhibit(bool inhibit) Log_ErrorPrintf("Unknown type: %u", static_cast(wi->type)); return false; } +#endif } static bool s_screensaver_suspended; diff --git a/src/frontend-common/vulkan_host_display.cpp b/src/frontend-common/vulkan_host_display.cpp index 990f8704d..aa0eade9f 100644 --- a/src/frontend-common/vulkan_host_display.cpp +++ b/src/frontend-common/vulkan_host_display.cpp @@ -677,8 +677,8 @@ bool VulkanHostDisplay::Render(bool skip_present) return true; } -bool VulkanHostDisplay::RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) +bool VulkanHostDisplay::RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, + std::vector* out_pixels, u32* out_stride, GPUTexture::Format* out_format) { // in theory we could do this without a swap chain, but postprocessing assumes it for now... if (!m_swap_chain) @@ -746,20 +746,19 @@ bool VulkanHostDisplay::RenderScreenshot(u32 width, u32 height, std::vector "VulkanHostDisplay::RenderScreenshot: %ux%u", width, height); tex.TransitionToLayout(g_vulkan_context->GetCurrentCommandBuffer(), VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); - const auto [left, top, draw_width, draw_height] = CalculateDrawRect(width, height); - if (!m_post_processing_chain.IsEmpty()) { - ApplyPostProcessingChain(fb, left, top, draw_width, draw_height, static_cast(m_display_texture), - m_display_texture_view_x, m_display_texture_view_y, m_display_texture_view_width, - m_display_texture_view_height, width, height); + ApplyPostProcessingChain(fb, draw_rect.left, draw_rect.top, draw_rect.GetWidth(), draw_rect.GetHeight(), + static_cast(m_display_texture), m_display_texture_view_x, + m_display_texture_view_y, m_display_texture_view_width, m_display_texture_view_height, + width, height); } else { BeginSwapChainRenderPass(fb, width, height); - RenderDisplay(left, top, draw_width, draw_height, static_cast(m_display_texture), - m_display_texture_view_x, m_display_texture_view_y, m_display_texture_view_width, - m_display_texture_view_height, IsUsingLinearFiltering()); + RenderDisplay(draw_rect.left, draw_rect.top, draw_rect.GetWidth(), draw_rect.GetHeight(), + static_cast(m_display_texture), m_display_texture_view_x, m_display_texture_view_y, + m_display_texture_view_width, m_display_texture_view_height, IsUsingLinearFiltering()); } vkCmdEndRenderPass(g_vulkan_context->GetCurrentCommandBuffer()); diff --git a/src/frontend-common/vulkan_host_display.h b/src/frontend-common/vulkan_host_display.h index 7106aa88c..1da6c500a 100644 --- a/src/frontend-common/vulkan_host_display.h +++ b/src/frontend-common/vulkan_host_display.h @@ -59,8 +59,8 @@ public: void SetVSync(bool enabled) override; bool Render(bool skip_present) override; - bool RenderScreenshot(u32 width, u32 height, std::vector* out_pixels, u32* out_stride, - GPUTexture::Format* out_format) override; + bool RenderScreenshot(u32 width, u32 height, const Common::Rectangle& draw_rect, std::vector* out_pixels, + u32* out_stride, GPUTexture::Format* out_format) override; bool SetGPUTimingEnabled(bool enabled) override; float GetAndResetAccumulatedGPUTime() override;