Merge remote-tracking branch 'upstream/main' into hybrid

This commit is contained in:
Lander Gallastegi 2025-05-22 19:52:20 +02:00
commit f3148f12a0
53 changed files with 423 additions and 343 deletions

View File

@ -134,6 +134,7 @@ if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "")
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message("got remote: ${GIT_REMOTE_NAME}")
endif()
# If running in GitHub Actions and the above fails
@ -177,7 +178,7 @@ if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "")
set(GIT_BRANCH "${GITHUB_BRANCH}")
elseif ("${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_REF}" STREQUAL "")
set(GIT_BRANCH "${GITHUB_REF}")
else()
elseif("${GIT_BRANCH}" STREQUAL "")
message("couldn't find branch")
set(GIT_BRANCH "detached-head")
endif()
@ -186,8 +187,8 @@ else()
string(FIND "${GIT_REMOTE_NAME}" "/" INDEX)
if (INDEX GREATER -1)
string(SUBSTRING "${GIT_REMOTE_NAME}" 0 "${INDEX}" GIT_REMOTE_NAME)
else()
# If no remote is present (only a branch name), default to origin
elseif("${GIT_REMOTE_NAME}" STREQUAL "")
message("reset to origin")
set(GIT_REMOTE_NAME "origin")
endif()
endif()
@ -202,7 +203,7 @@ execute_process(
# Set Version
set(EMULATOR_VERSION_MAJOR "0")
set(EMULATOR_VERSION_MINOR "8")
set(EMULATOR_VERSION_MINOR "9")
set(EMULATOR_VERSION_PATCH "1")
set_source_files_properties(src/shadps4.rc PROPERTIES COMPILE_DEFINITIONS "EMULATOR_VERSION_MAJOR=${EMULATOR_VERSION_MAJOR};EMULATOR_VERSION_MINOR=${EMULATOR_VERSION_MINOR};EMULATOR_VERSION_PATCH=${EMULATOR_VERSION_PATCH}")
@ -409,6 +410,7 @@ set(SYSTEM_LIBS src/core/libraries/system/commondialog.cpp
src/core/libraries/save_data/save_memory.h
src/core/libraries/save_data/savedata.cpp
src/core/libraries/save_data/savedata.h
src/core/libraries/save_data/savedata_error.h
src/core/libraries/save_data/dialog/savedatadialog.cpp
src/core/libraries/save_data/dialog/savedatadialog.h
src/core/libraries/save_data/dialog/savedatadialog_ui.cpp

View File

@ -37,7 +37,10 @@
<category translate="no">Game</category>
</categories>
<releases>
<release version="0.8.0" date="2025-05-23">
<release version="0.9.0" date="2025-05-22">
<url>https://github.com/shadps4-emu/shadPS4/releases/tag/v.0.9.0</url>
</release>
<release version="0.8.0" date="2025-04-23">
<url>https://github.com/shadps4-emu/shadPS4/releases/tag/v.0.8.0</url>
</release>
<release version="0.7.0" date="2025-03-23">

View File

@ -154,7 +154,7 @@ bool GetLoadGameSizeEnabled() {
std::filesystem::path GetSaveDataPath() {
if (save_data_path.empty()) {
return Common::FS::GetUserPath(Common::FS::PathType::SaveDataDir);
return Common::FS::GetUserPath(Common::FS::PathType::UserDir) / "savedata";
}
return save_data_path;
}

View File

@ -128,7 +128,6 @@ static auto UserPaths = [] {
create_path(PathType::LogDir, user_dir / LOG_DIR);
create_path(PathType::ScreenshotsDir, user_dir / SCREENSHOTS_DIR);
create_path(PathType::ShaderDir, user_dir / SHADER_DIR);
create_path(PathType::SaveDataDir, user_dir / SAVEDATA_DIR);
create_path(PathType::GameDataDir, user_dir / GAMEDATA_DIR);
create_path(PathType::TempDataDir, user_dir / TEMPDATA_DIR);
create_path(PathType::SysModuleDir, user_dir / SYSMODULES_DIR);

View File

@ -18,7 +18,6 @@ enum class PathType {
LogDir, // Where log files are stored.
ScreenshotsDir, // Where screenshots are stored.
ShaderDir, // Where shaders are stored.
SaveDataDir, // Where guest save data is stored.
TempDataDir, // Where game temp data is stored.
GameDataDir, // Where game data is stored.
SysModuleDir, // Where system modules are stored.
@ -36,7 +35,6 @@ constexpr auto PORTABLE_DIR = "user";
constexpr auto LOG_DIR = "log";
constexpr auto SCREENSHOTS_DIR = "screenshots";
constexpr auto SHADER_DIR = "shader";
constexpr auto SAVEDATA_DIR = "savedata";
constexpr auto GAMEDATA_DIR = "data";
constexpr auto TEMPDATA_DIR = "temp";
constexpr auto SYSMODULES_DIR = "sys_modules";

View File

@ -206,6 +206,10 @@ s32 PS4_SYSV_ABI sceNpTrophyDestroyHandle(OrbisNpTrophyHandle handle) {
if (handle == ORBIS_NP_TROPHY_INVALID_HANDLE)
return ORBIS_NP_TROPHY_ERROR_INVALID_HANDLE;
if (handle >= trophy_handles.size()) {
LOG_ERROR(Lib_NpTrophy, "Invalid handle {}", handle);
return ORBIS_NP_TROPHY_ERROR_INVALID_HANDLE;
}
if (!trophy_handles.is_allocated({static_cast<u32>(handle)})) {
return ORBIS_NP_TROPHY_ERROR_INVALID_HANDLE;
}

View File

@ -155,7 +155,7 @@ SaveDialogState::SaveDialogState(const OrbisSaveDataDialogParam& param) {
if (item->focusPos != FocusPos::DIRNAME) {
this->focus_pos = item->focusPos;
} else {
} else if (item->focusPosDirName != nullptr) {
this->focus_pos = item->focusPosDirName->data.to_string();
}
this->style = item->itemStyle;

View File

@ -10,15 +10,14 @@
#include <utility>
#include <fmt/format.h>
#include <core/libraries/system/msgdialog_ui.h>
#include "common/assert.h"
#include "boost/icl/concept/interval.hpp"
#include "common/elf_info.h"
#include "common/logging/log.h"
#include "common/path_util.h"
#include "common/singleton.h"
#include "common/thread.h"
#include "core/file_sys/fs.h"
#include "core/libraries/system/msgdialog_ui.h"
#include "save_instance.h"
using Common::FS::IOFile;
@ -35,11 +34,12 @@ namespace Libraries::SaveData::SaveMemory {
static Core::FileSys::MntPoints* g_mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance();
struct SlotData {
OrbisUserServiceUserId user_id;
OrbisUserServiceUserId user_id{};
std::string game_serial;
std::filesystem::path folder_path;
PSF sfo;
std::vector<u8> memory_cache;
size_t memory_cache_size{};
};
static std::mutex g_slot_mtx;
@ -97,7 +97,8 @@ std::filesystem::path GetSavePath(OrbisUserServiceUserId user_id, u32 slot_id,
return SaveInstance::MakeDirSavePath(user_id, Common::ElfInfo::Instance().GameSerial(), dir);
}
size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_view game_serial) {
size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_view game_serial,
size_t memory_size) {
std::lock_guard lck{g_slot_mtx};
const auto save_dir = GetSavePath(user_id, slot_id, game_serial);
@ -109,6 +110,7 @@ size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_
.folder_path = save_dir,
.sfo = {},
.memory_cache = {},
.memory_cache_size = memory_size,
};
SaveInstance::SetupDefaultParamSFO(data.sfo, GetSaveDir(slot_id), std::string{game_serial});
@ -196,9 +198,9 @@ void ReadMemory(u32 slot_id, void* buf, size_t buf_size, int64_t offset) {
auto& data = g_attached_slots[slot_id];
auto& memory = data.memory_cache;
if (memory.empty()) { // Load file
memory.resize(data.memory_cache_size);
IOFile f{data.folder_path / FilenameSaveDataMemory, Common::FS::FileAccessMode::Read};
if (f.IsOpen()) {
memory.resize(f.GetSize());
f.Seek(0);
f.ReadSpan(std::span{memory});
}
@ -222,5 +224,4 @@ void WriteMemory(u32 slot_id, void* buf, size_t buf_size, int64_t offset) {
Backup::NewRequest(data.user_id, data.game_serial, GetSaveDir(slot_id),
Backup::OrbisSaveDataEventType::__DO_NOT_SAVE);
}
} // namespace Libraries::SaveData::SaveMemory

View File

@ -4,13 +4,13 @@
#pragma once
#include <vector>
#include "save_backup.h"
#include "core/libraries/save_data/save_backup.h"
class PSF;
namespace Libraries::SaveData {
using OrbisUserServiceUserId = s32;
}
} // namespace Libraries::SaveData
namespace Libraries::SaveData::SaveMemory {
@ -22,7 +22,8 @@ void PersistMemory(u32 slot_id, bool lock = true);
std::string_view game_serial);
// returns the size of the save memory if exists
size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_view game_serial);
size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_view game_serial,
size_t memory_size);
// Write the icon. Set buf to null to read the standard icon.
void SetIcon(u32 slot_id, void* buf = nullptr, size_t buf_size = 0);

View File

@ -5,10 +5,10 @@
#include <thread>
#include <vector>
#include <core/libraries/system/msgdialog_ui.h>
#include <magic_enum/magic_enum.hpp>
#include "common/assert.h"
#include "common/config.h"
#include "common/cstring.h"
#include "common/elf_info.h"
#include "common/enum.h"
@ -20,7 +20,9 @@
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/save_data/savedata.h"
#include "core/libraries/save_data/savedata_error.h"
#include "core/libraries/system/msgdialog.h"
#include "core/libraries/system/msgdialog_ui.h"
#include "save_backup.h"
#include "save_instance.h"
#include "save_memory.h"
@ -33,27 +35,6 @@ using Common::ElfInfo;
namespace Libraries::SaveData {
enum class Error : u32 {
OK = 0,
USER_SERVICE_NOT_INITIALIZED = 0x80960002,
PARAMETER = 0x809F0000,
NOT_INITIALIZED = 0x809F0001,
OUT_OF_MEMORY = 0x809F0002,
BUSY = 0x809F0003,
NOT_MOUNTED = 0x809F0004,
EXISTS = 0x809F0007,
NOT_FOUND = 0x809F0008,
NO_SPACE_FS = 0x809F000A,
INTERNAL = 0x809F000B,
MOUNT_FULL = 0x809F000C,
BAD_MOUNTED = 0x809F000D,
BROKEN = 0x809F000F,
INVALID_LOGIN_USER = 0x809F0011,
MEMORY_NOT_READY = 0x809F0012,
BACKUP_BUSY = 0x809F0013,
BUSY_FOR_SAVING = 0x809F0016,
};
enum class OrbisSaveDataSaveDataMemoryOption : u32 {
NONE = 0,
SET_PARAM = 1 << 0,
@ -336,7 +317,9 @@ static std::array<std::optional<SaveInstance>, 16> g_mount_slots;
static void initialize() {
g_initialized = true;
g_game_serial = ElfInfo::Instance().GameSerial();
g_game_serial = Common::Singleton<PSF>::Instance()
->GetString("INSTALL_DIR_SAVEDATA")
.value_or(ElfInfo::Instance().GameSerial());
g_fw_ver = ElfInfo::Instance().FirmwareVer();
Backup::StartThread();
}
@ -456,7 +439,7 @@ static Error saveDataMount(const OrbisSaveDataMount2* mount_info,
LOG_INFO(Lib_SaveData, "called with invalid block size");
}
const auto root_save = Common::FS::GetUserPath(Common::FS::PathType::SaveDataDir);
const auto root_save = Config::GetSaveDataPath();
fs::create_directories(root_save);
const auto available = fs::space(root_save).available;
@ -1593,8 +1576,8 @@ Error PS4_SYSV_ABI sceSaveDataSetupSaveDataMemory2(const OrbisSaveDataMemorySetu
}
try {
size_t existed_size =
SaveMemory::SetupSaveMemory(setupParam->userId, slot_id, g_game_serial);
size_t existed_size = SaveMemory::SetupSaveMemory(setupParam->userId, slot_id,
g_game_serial, setupParam->memorySize);
if (existed_size == 0) { // Just created
if (g_fw_ver >= ElfInfo::FW_45 && setupParam->initParam != nullptr) {
auto& sfo = SaveMemory::GetParamSFO(slot_id);

View File

@ -0,0 +1,27 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
namespace Libraries::SaveData {
enum class Error : u32 {
OK = 0,
USER_SERVICE_NOT_INITIALIZED = 0x80960002,
PARAMETER = 0x809F0000,
NOT_INITIALIZED = 0x809F0001,
OUT_OF_MEMORY = 0x809F0002,
BUSY = 0x809F0003,
NOT_MOUNTED = 0x809F0004,
EXISTS = 0x809F0007,
NOT_FOUND = 0x809F0008,
NO_SPACE_FS = 0x809F000A,
INTERNAL = 0x809F000B,
MOUNT_FULL = 0x809F000C,
BAD_MOUNTED = 0x809F000D,
BROKEN = 0x809F000F,
INVALID_LOGIN_USER = 0x809F0011,
MEMORY_NOT_READY = 0x809F0012,
BACKUP_BUSY = 0x809F0013,
BUSY_FOR_SAVING = 0x809F0016,
};
} // namespace Libraries::SaveData

View File

@ -362,11 +362,8 @@ int MemoryManager::MapMemory(void** out_addr, VAddr virtual_addr, size_t size, M
return ORBIS_KERNEL_ERROR_ENOMEM;
}
// When virtual addr is zero, force it to virtual_base. The guest cannot pass Fixed
// flag so we will take the branch that searches for free (or reserved) mappings.
virtual_addr = (virtual_addr == 0) ? impl.SystemManagedVirtualBase() : virtual_addr;
alignment = alignment > 0 ? alignment : 16_KB;
VAddr mapped_addr = alignment > 0 ? Common::AlignUp(virtual_addr, alignment) : virtual_addr;
// Limit the minumum address to SystemManagedVirtualBase to prevent hardware-specific issues.
VAddr mapped_addr = (virtual_addr == 0) ? impl.SystemManagedVirtualBase() : virtual_addr;
// Fixed mapping means the virtual address must exactly match the provided one.
if (True(flags & MemoryMapFlags::Fixed)) {
@ -396,7 +393,9 @@ int MemoryManager::MapMemory(void** out_addr, VAddr virtual_addr, size_t size, M
// Find the first free area starting with provided virtual address.
if (False(flags & MemoryMapFlags::Fixed)) {
mapped_addr = SearchFree(mapped_addr, size, alignment);
// Provided address needs to be aligned before we can map.
alignment = alignment > 0 ? alignment : 16_KB;
mapped_addr = SearchFree(Common::AlignUp(mapped_addr, alignment), size, alignment);
if (mapped_addr == -1) {
// No suitable memory areas to map to
return ORBIS_KERNEL_ERROR_ENOMEM;

View File

@ -53,7 +53,7 @@ template <class ReturnType, class... FuncArgs, class... CallArgs>
ReturnType ExecuteGuest(PS4_SYSV_ABI ReturnType (*func)(FuncArgs...), CallArgs&&... args) {
EnsureThreadInitialized();
// clear stack to avoid trash from EnsureThreadInitialized
ClearStack<13_KB>();
ClearStack<12_KB>();
return func(std::forward<CallArgs>(args)...);
}

View File

@ -190,16 +190,24 @@ void Emulator::Run(const std::filesystem::path& file, const std::vector<std::str
std::string game_title = fmt::format("{} - {} <{}>", id, title, app_version);
std::string window_title = "";
if (Common::g_is_release) {
window_title = fmt::format("shadPS4 v{} | {}", Common::g_version, game_title);
} else {
std::string remote_url(Common::g_scm_remote_url);
std::string remote_host;
try {
if (*remote_url.rbegin() == '/') {
remote_url.pop_back();
}
remote_host = remote_url.substr(19, remote_url.rfind('/') - 19);
} catch (...) {
remote_host = "unknown";
}
if (Common::g_is_release) {
if (remote_host == "shadps4-emu" || remote_url.length() == 0) {
window_title = fmt::format("shadPS4 v{} | {}", Common::g_version, game_title);
} else {
window_title =
fmt::format("shadPS4 {}/v{} | {}", remote_host, Common::g_version, game_title);
}
} else {
if (remote_host == "shadps4-emu" || remote_url.length() == 0) {
window_title = fmt::format("shadPS4 v{} {} {} | {}", Common::g_version,
Common::g_scm_branch, Common::g_scm_desc, game_title);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View File

@ -79,6 +79,11 @@ public:
if (const auto play_time = psf.GetString("PLAY_TIME"); play_time.has_value()) {
game.play_time = *play_time;
}
if (const auto save_dir = psf.GetString("INSTALL_DIR_SAVEDATA"); save_dir.has_value()) {
game.save_dir = *save_dir;
} else {
game.save_dir = game.serial;
}
}
return game;
}

View File

@ -25,6 +25,7 @@ struct GameInfo {
std::string version = "Unknown";
std::string region = "Unknown";
std::string fw = "Unknown";
std::string save_dir = "Unknown";
std::string play_time = "Unknown";
CompatibilityEntry compatibility = CompatibilityEntry{CompatibilityStatus::Unknown};

View File

@ -156,11 +156,9 @@ public:
}
if (selected == openSaveDataFolder) {
QString userPath;
Common::FS::PathToQString(userPath,
Common::FS::GetUserPath(Common::FS::PathType::UserDir));
QString saveDataPath =
userPath + "/savedata/1/" + QString::fromStdString(m_games[itemID].serial);
QString saveDataPath;
Common::FS::PathToQString(saveDataPath,
Config::GetSaveDataPath() / "1" / m_games[itemID].save_dir);
QDir(saveDataPath).mkpath(saveDataPath);
QDesktopServices::openUrl(QUrl::fromLocalFile(saveDataPath));
}
@ -485,8 +483,7 @@ public:
dlc_path, Config::getAddonInstallDir() /
Common::FS::PathFromQString(folder_path).parent_path().filename());
Common::FS::PathToQString(save_data_path,
Common::FS::GetUserPath(Common::FS::PathType::UserDir) /
"savedata/1" / m_games[itemID].serial);
Config::GetSaveDataPath() / "1" / m_games[itemID].save_dir);
Common::FS::PathToQString(trophy_data_path,
Common::FS::GetUserPath(Common::FS::PathType::MetaDataDir) /

View File

@ -825,6 +825,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumHeight">
<number>48</number>
</property>
<property name="focusPolicy">
<enum>Qt::FocusPolicy::NoFocus</enum>
</property>
@ -841,6 +844,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumHeight">
<number>48</number>
</property>
<property name="focusPolicy">
<enum>Qt::FocusPolicy::NoFocus</enum>
</property>
@ -983,8 +989,8 @@
<widget class="QLabel" name="l_controller">
<property name="maximumSize">
<size>
<width>500</width>
<height>200</height>
<width>424</width>
<height>250</height>
</size>
</property>
<property name="pixmap">

View File

@ -55,16 +55,23 @@ bool MainWindow::Init() {
// show ui
setMinimumSize(720, 405);
std::string window_title = "";
if (Common::g_is_release) {
window_title = fmt::format("shadPS4 v{}", Common::g_version);
} else {
std::string remote_url(Common::g_scm_remote_url);
std::string remote_host;
try {
if (*remote_url.rbegin() == '/') {
remote_url.pop_back();
}
remote_host = remote_url.substr(19, remote_url.rfind('/') - 19);
} catch (...) {
remote_host = "unknown";
}
if (Common::g_is_release) {
if (remote_host == "shadps4-emu" || remote_url.length() == 0) {
window_title = fmt::format("shadPS4 v{}", Common::g_version);
} else {
window_title = fmt::format("shadPS4 {}/v{}", remote_host, Common::g_version);
}
} else {
if (remote_host == "shadps4-emu" || remote_url.length() == 0) {
window_title = fmt::format("shadPS4 v{} {} {}", Common::g_version, Common::g_scm_branch,
Common::g_scm_desc);

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>قائمة الألعاب</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * إصدار Vulkan غير مدعوم</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>تحميل الشفرات لجميع الألعاب المثبتة</translation>
@ -2051,6 +2047,10 @@ Nightly: نُسخ تحتوي على أحدث الميزات، لكنها أقل
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>افتح مجلد الصور/الأصوات الخاصة بالجوائز المخصصة:\nيمكنك إضافة صور مخصصة للجوائز وصوت مرفق.\nأضف الملفات إلى مجلد custom_trophy بالأسماء التالية:\ntrophy.wav أو trophy.mp3، bronze.png، gold.png، platinum.png، silver.png\nملاحظة: الصوت سيعمل فقط في الإصدارات التي تستخدم QT.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Spiloversigt</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Ikke understøttet Vulkan-version</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Hent snyd til alle installerede spil</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Spieleliste</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Nicht unterstützte Vulkan-Version</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Cheats für alle installierten Spiele herunterladen</translation>
@ -2054,6 +2050,10 @@ Fügen Sie die Dateien dem Ordner custom_trophy mit folgenden Namen hinzu:\n
trophy.wav ODER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\n
Hinweis: Der Sound funktioniert nur in Qt-Versionen.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Λίστα παιχνιδιών</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Μη υποστηριζόμενη έκδοση Vulkan</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Λήψη Cheats για όλα τα εγκατεστημένα παιχνίδια</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Game List</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Unsupported Vulkan Version</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Download Cheats For All Installed Games</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Lista de Juegos</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versión de Vulkan no soportada</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Descargar trucos para todos los juegos instalados</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Abre la carpeta de trofeos/sonidos personalizados:\nPuedes añadir imágenes y un audio personalizados a los trofeos.\nAñade los archivos a custom_trophy con los siguientes nombres:\ntrophy.wav o trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNota: El sonido sólo funcionará en versiones QT.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>لیست بازی</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation>شما پشتیبانی نمیشود Vulkan ورژن *</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>دانلود چیت برای همه بازی ها</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Pelilista</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Ei Tuettu Vulkan-versio</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Lataa Huijaukset Kaikille Asennetuille Peleille</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Liste de jeux</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Version de Vulkan non prise en charge</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Télécharger les Cheats pour tous les jeux installés</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Ouvrez le dossier des images/sons des trophées personnalisés:\nVous pouvez ajouter des images personnalisées aux trophées et aux sons.\nAjoutez les fichiers à custom_trophy avec les noms suivants:\ntrophy.wav OU trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote : Le son ne fonctionnera que dans les versions QT.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Version de Vulkan non prise en charge</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Játéklista</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Nem támogatott Vulkan verzió</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Csalások letöltése minden telepített játékhoz</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Daftar game</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versi Vulkan Tidak Didukung</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Unduh Cheat Untuk Semua Game Yang Terpasang</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Elenco giochi</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versione Vulkan non supportata</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Scarica Trucchi per tutti i giochi installati</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Apri la cartella personalizzata delle immagini/suoni trofei:\ possibile aggiungere immagini personalizzate ai trofei e un audio.\nAggiungi i file a custom_trophy con i seguenti nomi:\ntrophy.wav OPPURE trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNota: Il suono funzionerà solo nelle versioni QT.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versione Vulkan non supportata</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation></translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkanバージョン</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation></translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -7,15 +7,15 @@
<name>AboutDialog</name>
<message>
<source>About shadPS4</source>
<translation type="unfinished">About shadPS4</translation>
<translation>shadPS4</translation>
</message>
<message>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation type="unfinished">shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
<translation>shadPS4는 PlayStation 4 .</translation>
</message>
<message>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation type="unfinished">This software should not be used to play games you have not legally obtained.</translation>
<translation> .</translation>
</message>
</context>
<context>
@ -26,238 +26,238 @@
</message>
<message>
<source>Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\n</source>
<translation type="unfinished">Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\n</translation>
<translation>/ .\n사용 .\n\n치트를 , .\n패치 , .\n\n치트/ ,\n문제가 .\n\n새로운 ? :\n</translation>
</message>
<message>
<source>No Image Available</source>
<translation type="unfinished">No Image Available</translation>
<translation> </translation>
</message>
<message>
<source>Serial: </source>
<translation type="unfinished">Serial: </translation>
<translation>: </translation>
</message>
<message>
<source>Version: </source>
<translation type="unfinished">Version: </translation>
<translation>: </translation>
</message>
<message>
<source>Size: </source>
<translation type="unfinished">Size: </translation>
<translation>: </translation>
</message>
<message>
<source>Select Cheat File:</source>
<translation type="unfinished">Select Cheat File:</translation>
<translation> :</translation>
</message>
<message>
<source>Repository:</source>
<translation type="unfinished">Repository:</translation>
<translation>:</translation>
</message>
<message>
<source>Download Cheats</source>
<translation type="unfinished">Download Cheats</translation>
<translation> </translation>
</message>
<message>
<source>Delete File</source>
<translation type="unfinished">Delete File</translation>
<translation> </translation>
</message>
<message>
<source>No files selected.</source>
<translation type="unfinished">No files selected.</translation>
<translation> .</translation>
</message>
<message>
<source>You can delete the cheats you don&apos;t want after downloading them.</source>
<translation type="unfinished">You can delete the cheats you don&apos;t want after downloading them.</translation>
<translation> .</translation>
</message>
<message>
<source>Do you want to delete the selected file?\n%1</source>
<translation type="unfinished">Do you want to delete the selected file?\n%1</translation>
<translation> ?\n%1</translation>
</message>
<message>
<source>Select Patch File:</source>
<translation type="unfinished">Select Patch File:</translation>
<translation> :</translation>
</message>
<message>
<source>Download Patches</source>
<translation type="unfinished">Download Patches</translation>
<translation> </translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished">Save</translation>
<translation></translation>
</message>
<message>
<source>Cheats</source>
<translation type="unfinished">Cheats</translation>
<translation></translation>
</message>
<message>
<source>Patches</source>
<translation type="unfinished">Patches</translation>
<translation></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished">Error</translation>
<translation></translation>
</message>
<message>
<source>No patch selected.</source>
<translation type="unfinished">No patch selected.</translation>
<translation> .</translation>
</message>
<message>
<source>Unable to open files.json for reading.</source>
<translation type="unfinished">Unable to open files.json for reading.</translation>
<translation>Files.json을 .</translation>
</message>
<message>
<source>No patch file found for the current serial.</source>
<translation type="unfinished">No patch file found for the current serial.</translation>
<translation> .</translation>
</message>
<message>
<source>Unable to open the file for reading.</source>
<translation type="unfinished">Unable to open the file for reading.</translation>
<translation> .</translation>
</message>
<message>
<source>Unable to open the file for writing.</source>
<translation type="unfinished">Unable to open the file for writing.</translation>
<translation> .</translation>
</message>
<message>
<source>Failed to parse XML: </source>
<translation type="unfinished">Failed to parse XML: </translation>
<translation>XML : </translation>
</message>
<message>
<source>Success</source>
<translation type="unfinished">Success</translation>
<translation></translation>
</message>
<message>
<source>Options saved successfully.</source>
<translation type="unfinished">Options saved successfully.</translation>
<translation> .</translation>
</message>
<message>
<source>Invalid Source</source>
<translation type="unfinished">Invalid Source</translation>
<translation> </translation>
</message>
<message>
<source>The selected source is invalid.</source>
<translation type="unfinished">The selected source is invalid.</translation>
<translation> .</translation>
</message>
<message>
<source>File Exists</source>
<translation type="unfinished">File Exists</translation>
<translation> </translation>
</message>
<message>
<source>File already exists. Do you want to replace it?</source>
<translation type="unfinished">File already exists. Do you want to replace it?</translation>
<translation> . ?</translation>
</message>
<message>
<source>Failed to save file:</source>
<translation type="unfinished">Failed to save file:</translation>
<translation> :</translation>
</message>
<message>
<source>Failed to download file:</source>
<translation type="unfinished">Failed to download file:</translation>
<translation> :</translation>
</message>
<message>
<source>Cheats Not Found</source>
<translation type="unfinished">Cheats Not Found</translation>
<translation> </translation>
</message>
<message>
<source>No Cheats found for this game in this version of the selected repository,try another repository or a different version of the game.</source>
<translation type="unfinished">No Cheats found for this game in this version of the selected repository,try another repository or a different version of the game.</translation>
<translation> . .</translation>
</message>
<message>
<source>Cheats Downloaded Successfully</source>
<translation type="unfinished">Cheats Downloaded Successfully</translation>
<translation> </translation>
</message>
<message>
<source>You have successfully downloaded the cheats for this version of the game from the selected repository. You can try downloading from another repository, if it is available it will also be possible to use it by selecting the file from the list.</source>
<translation type="unfinished">You have successfully downloaded the cheats for this version of the game from the selected repository. You can try downloading from another repository, if it is available it will also be possible to use it by selecting the file from the list.</translation>
<translation> . , .</translation>
</message>
<message>
<source>Failed to save:</source>
<translation type="unfinished">Failed to save:</translation>
<translation> :</translation>
</message>
<message>
<source>Failed to download:</source>
<translation type="unfinished">Failed to download:</translation>
<translation> :</translation>
</message>
<message>
<source>Download Complete</source>
<translation type="unfinished">Download Complete</translation>
<translation> </translation>
</message>
<message>
<source>Patches Downloaded Successfully! All Patches available for all games have been downloaded, there is no need to download them individually for each game as happens in Cheats. If the patch does not appear, it may be that it does not exist for the specific serial and version of the game.</source>
<translation type="unfinished">Patches Downloaded Successfully! All Patches available for all games have been downloaded, there is no need to download them individually for each game as happens in Cheats. If the patch does not appear, it may be that it does not exist for the specific serial and version of the game.</translation>
<translation> ! , . , .</translation>
</message>
<message>
<source>Failed to parse JSON data from HTML.</source>
<translation type="unfinished">Failed to parse JSON data from HTML.</translation>
<translation>HTML에서 JSON .</translation>
</message>
<message>
<source>Failed to retrieve HTML page.</source>
<translation type="unfinished">Failed to retrieve HTML page.</translation>
<translation>HTML .</translation>
</message>
<message>
<source>The game is in version: %1</source>
<translation type="unfinished">The game is in version: %1</translation>
<translation> : %1</translation>
</message>
<message>
<source>The downloaded patch only works on version: %1</source>
<translation type="unfinished">The downloaded patch only works on version: %1</translation>
<translation> %1 .</translation>
</message>
<message>
<source>You may need to update your game.</source>
<translation type="unfinished">You may need to update your game.</translation>
<translation> .</translation>
</message>
<message>
<source>Incompatibility Notice</source>
<translation type="unfinished">Incompatibility Notice</translation>
<translation> </translation>
</message>
<message>
<source>Failed to open file:</source>
<translation type="unfinished">Failed to open file:</translation>
<translation> :</translation>
</message>
<message>
<source>XML ERROR:</source>
<translation type="unfinished">XML ERROR:</translation>
<translation>XML :</translation>
</message>
<message>
<source>Failed to open files.json for writing</source>
<translation type="unfinished">Failed to open files.json for writing</translation>
<translation>files.json </translation>
</message>
<message>
<source>Author: </source>
<translation type="unfinished">Author: </translation>
<translation>: </translation>
</message>
<message>
<source>Directory does not exist:</source>
<translation type="unfinished">Directory does not exist:</translation>
<translation> :</translation>
</message>
<message>
<source>Failed to open files.json for reading.</source>
<translation type="unfinished">Failed to open files.json for reading.</translation>
<translation>files.json .</translation>
</message>
<message>
<source>Name:</source>
<translation type="unfinished">Name:</translation>
<translation>:</translation>
</message>
<message>
<source>Can&apos;t apply cheats before the game is started</source>
<translation type="unfinished">Can&apos;t apply cheats before the game is started</translation>
<translation> </translation>
</message>
<message>
<source>Close</source>
<translation type="unfinished">Close</translation>
<translation></translation>
</message>
</context>
<context>
<name>CheckUpdate</name>
<message>
<source>Auto Updater</source>
<translation type="unfinished">Auto Updater</translation>
<translation> </translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished">Error</translation>
<translation></translation>
</message>
<message>
<source>Network error:</source>
<translation type="unfinished">Network error:</translation>
<translation> :</translation>
</message>
<message>
<source>The Auto Updater allows up to 60 update checks per hour.\nYou have reached this limit. Please try again later.</source>
@ -265,91 +265,91 @@
</message>
<message>
<source>Failed to parse update information.</source>
<translation type="unfinished">Failed to parse update information.</translation>
<translation> .</translation>
</message>
<message>
<source>No pre-releases found.</source>
<translation type="unfinished">No pre-releases found.</translation>
<translation> .</translation>
</message>
<message>
<source>Invalid release data.</source>
<translation type="unfinished">Invalid release data.</translation>
<translation> .</translation>
</message>
<message>
<source>No download URL found for the specified asset.</source>
<translation type="unfinished">No download URL found for the specified asset.</translation>
<translation> URL을 .</translation>
</message>
<message>
<source>Your version is already up to date!</source>
<translation type="unfinished">Your version is already up to date!</translation>
<translation> !</translation>
</message>
<message>
<source>Update Available</source>
<translation type="unfinished">Update Available</translation>
<translation> </translation>
</message>
<message>
<source>Update Channel</source>
<translation type="unfinished">Update Channel</translation>
<translation> </translation>
</message>
<message>
<source>Current Version</source>
<translation type="unfinished">Current Version</translation>
<translation> </translation>
</message>
<message>
<source>Latest Version</source>
<translation type="unfinished">Latest Version</translation>
<translation> </translation>
</message>
<message>
<source>Do you want to update?</source>
<translation type="unfinished">Do you want to update?</translation>
<translation>?</translation>
</message>
<message>
<source>Show Changelog</source>
<translation type="unfinished">Show Changelog</translation>
<translation> </translation>
</message>
<message>
<source>Check for Updates at Startup</source>
<translation type="unfinished">Check for Updates at Startup</translation>
<translation> </translation>
</message>
<message>
<source>Update</source>
<translation type="unfinished">Update</translation>
<translation></translation>
</message>
<message>
<source>No</source>
<translation type="unfinished">No</translation>
<translation></translation>
</message>
<message>
<source>Hide Changelog</source>
<translation type="unfinished">Hide Changelog</translation>
<translation> </translation>
</message>
<message>
<source>Changes</source>
<translation type="unfinished">Changes</translation>
<translation> </translation>
</message>
<message>
<source>Network error occurred while trying to access the URL</source>
<translation type="unfinished">Network error occurred while trying to access the URL</translation>
<translation>URL에 </translation>
</message>
<message>
<source>Download Complete</source>
<translation type="unfinished">Download Complete</translation>
<translation> </translation>
</message>
<message>
<source>The update has been downloaded, press OK to install.</source>
<translation type="unfinished">The update has been downloaded, press OK to install.</translation>
<translation> . .</translation>
</message>
<message>
<source>Failed to save the update file at</source>
<translation type="unfinished">Failed to save the update file at</translation>
<translation> </translation>
</message>
<message>
<source>Starting Update...</source>
<translation type="unfinished">Starting Update...</translation>
<translation> ...</translation>
</message>
<message>
<source>Failed to create the update script file</source>
<translation type="unfinished">Failed to create the update script file</translation>
<translation> </translation>
</message>
</context>
<context>
@ -407,83 +407,83 @@
<name>ControlSettings</name>
<message>
<source>Configure Controls</source>
<translation type="unfinished">Configure Controls</translation>
<translation> </translation>
</message>
<message>
<source>D-Pad</source>
<translation type="unfinished">D-Pad</translation>
<translation>D-</translation>
</message>
<message>
<source>Up</source>
<translation type="unfinished">Up</translation>
<translation></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished">Left</translation>
<translation></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished">Right</translation>
<translation></translation>
</message>
<message>
<source>Down</source>
<translation type="unfinished">Down</translation>
<translation></translation>
</message>
<message>
<source>Left Stick Deadzone (def:2 max:127)</source>
<translation type="unfinished">Left Stick Deadzone (def:2 max:127)</translation>
<translation> (기본값:2 최대값:127)</translation>
</message>
<message>
<source>Left Deadzone</source>
<translation type="unfinished">Left Deadzone</translation>
<translation> </translation>
</message>
<message>
<source>Left Stick</source>
<translation type="unfinished">Left Stick</translation>
<translation> </translation>
</message>
<message>
<source>Config Selection</source>
<translation type="unfinished">Config Selection</translation>
<translation> </translation>
</message>
<message>
<source>Common Config</source>
<translation type="unfinished">Common Config</translation>
<translation> </translation>
</message>
<message>
<source>Use per-game configs</source>
<translation type="unfinished">Use per-game configs</translation>
<translation> </translation>
</message>
<message>
<source>L1 / LB</source>
<translation type="unfinished">L1 / LB</translation>
<translation>L1 / LB</translation>
</message>
<message>
<source>L2 / LT</source>
<translation type="unfinished">L2 / LT</translation>
<translation>L2 / LT</translation>
</message>
<message>
<source>Back</source>
<translation type="unfinished">Back</translation>
<translation></translation>
</message>
<message>
<source>R1 / RB</source>
<translation type="unfinished">R1 / RB</translation>
<translation>R1 / RB</translation>
</message>
<message>
<source>R2 / RT</source>
<translation type="unfinished">R2 / RT</translation>
<translation>R2 / RT</translation>
</message>
<message>
<source>L3</source>
<translation type="unfinished">L3</translation>
<translation>L3</translation>
</message>
<message>
<source>Options / Start</source>
<translation type="unfinished">Options / Start</translation>
<translation> / </translation>
</message>
<message>
<source>R3</source>
<translation type="unfinished">R3</translation>
<translation>R3</translation>
</message>
<message>
<source>Face Buttons</source>
@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation type="unfinished">Game List</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation type="unfinished">Download Cheats For All Installed Games</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Žaidimų sąrašas</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Nepalaikoma Vulkan versija</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Atsisiųsti sukčiavimus visiems įdiegtiems žaidimams</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1253,11 +1253,11 @@
</message>
<message>
<source>List View</source>
<translation>Liste-visning</translation>
<translation>Listevisning</translation>
</message>
<message>
<source>Grid View</source>
<translation>Rute-visning</translation>
<translation>Rutenettvisning</translation>
</message>
<message>
<source>Elf Viewer</source>
@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Spilliste</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Ustøttet Vulkan-versjon</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Last ned juks for alle installerte spill</translation>
@ -1760,7 +1756,7 @@
</message>
<message>
<source>Log Filter:\nFilters the log to only print specific information.\nExamples: &quot;Core:Trace&quot; &quot;Lib.Pad:Debug Common.Filesystem:Error&quot; &quot;*:Critical&quot;\nLevels: Trace, Debug, Info, Warning, Error, Critical - in this order, a specific level silences all levels preceding it in the list and logs every level after it.</source>
<translation>Loggfilter:\nFiltrerer loggen for å kun skrive ut spesifikk informasjon.\nEksempler: &quot;Core:Trace&quot; &quot;Lib.Pad:Debug Common.Filesystem:Error&quot; &quot;*:Critical&quot; \nNivåer: Trace, Debug, Info, Warning, Error, Critical - i denne rekkefølgen, et spesifikt nivå demper alle tidligere nivåer i lista og loggfører alle nivåer etter det.</translation>
<translation>Loggfilter:\nFiltrerer loggen for å kun skrive ut spesifikk informasjon.\nEksempler: «Core:Trace» «Lib.Pad:Debug Common.Filesystem:Error» «*:Critical» \nNivåer: Trace, Debug, Info, Warning, Error, Critical - i denne rekkefølgen, et spesifikt nivå demper alle tidligere nivåer i lista og loggfører alle nivåer etter det.</translation>
</message>
<message>
<source>Update:\nRelease: Official versions released every month that may be very outdated, but are more reliable and tested.\nNightly: Development versions that have all the latest features and fixes, but may contain bugs and are less stable.</source>
@ -1792,7 +1788,7 @@
</message>
<message>
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable &quot;Update Compatibility On Startup&quot; to get up-to-date information.</source>
<translation>Vis kompatibilitets-data:\nViser informasjon om spillkompatibilitet i tabellvisning. Bruk &quot;Oppdater kompatibilitets-data ved oppstart&quot; for oppdatert informasjon.</translation>
<translation>Vis kompatibilitets-data:\nViser informasjon om spillkompatibilitet i tabellvisning. Bruk «Oppdater database ved oppstart» for oppdatert informasjon.</translation>
</message>
<message>
<source>Update Compatibility On Startup:\nAutomatically update the compatibility database when shadPS4 starts.</source>
@ -1832,7 +1828,7 @@
</message>
<message>
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select &quot;Auto Select&quot; to automatically determine it.</source>
<translation>Grafikkenhet:\nSystemer med flere GPU-er, kan emulatoren velge hvilken enhet som skal brukes fra rullegardinlista,\neller velg &quot;Velg automatisk&quot;.</translation>
<translation>Grafikkenhet:\nSystemer med flere GPU-er, kan emulatoren velge hvilken enhet som skal brukes fra rullegardinlista,\neller bruk «Velg automatisk».</translation>
</message>
<message>
<source>Width/Height:\nSets the size of the emulator window at launch, which can be resized during gameplay.\nThis is different from the in-game resolution.</source>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Åpne mappa med tilpassede bilder og lyder for trofé:\nDu kan legge til tilpassede bilder til trofeer og en lyd.\nLegg filene til custom_trophy med følgende navn:\ntrophy.wav ELLER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nMerk: Lyden avspilles kun i Qt-versjonen.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> *Ustøttet Vulkan-versjon</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Lijst met spellen</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Niet ondersteunde Vulkan-versie</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Download cheats voor alle geïnstalleerde spellen</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Lista gier</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Nieobsługiwana wersja Vulkan</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Pobierz kody do wszystkich zainstalowanych gier</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Otwórz niestandardowy folder obrazów/dźwięków:\nMożesz dodać własne obrazy dla trofeów i ich dźwięki.\nDodaj pliki do custom_trophy o następujących nazwach:\ntrophy.wav LUB trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nUwaga: Dźwięki działają tylko w wersji QT.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Lista de Jogos</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versão Vulkan não suportada</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Baixar Trapaças para Todos os Jogos Instalados</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Abrir a pasta de imagens e sons de troféus personalizados:\nVocê pode adicionar imagens personalizadas aos troféus e um áudio.\nAdicione os arquivos na pasta custom_trophy com os seguintes nomes:\ntrophy.wav OU trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nObservação: O som funcionará apenas em versões Qt.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -543,7 +543,7 @@
</message>
<message>
<source>Unable to Save</source>
<translation>Não é possível salvar</translation>
<translation>Não foi possível guardar</translation>
</message>
<message>
<source>Cannot bind axis values more than once</source>
@ -551,7 +551,7 @@
</message>
<message>
<source>Save</source>
<translation>Salvar</translation>
<translation>Guardar</translation>
</message>
<message>
<source>Apply</source>
@ -559,7 +559,7 @@
</message>
<message>
<source>Restore Defaults</source>
<translation>Restaurar o Padrão</translation>
<translation>Restaurar Predefinições</translation>
</message>
<message>
<source>Cancel</source>
@ -570,11 +570,11 @@
<name>EditorDialog</name>
<message>
<source>Edit Keyboard + Mouse and Controller input bindings</source>
<translation>Editar comandos do Teclado + Mouse e do Controle</translation>
<translation>Editar configurações de entrada do Teclado + Rato e do Comando</translation>
</message>
<message>
<source>Use Per-Game configs</source>
<translation>Use uma configuração para cada jogo</translation>
<translation>Utilizar configurações por jogo</translation>
</message>
<message>
<source>Error</source>
@ -582,19 +582,19 @@
</message>
<message>
<source>Could not open the file for reading</source>
<translation>Não foi possível abrir o arquivo para ler</translation>
<translation>Não foi possível abrir o ficheiro para leitura</translation>
</message>
<message>
<source>Could not open the file for writing</source>
<translation>Não foi possível abrir o arquivo para escrever</translation>
<translation>Não foi possível abrir o ficheiro para escrita</translation>
</message>
<message>
<source>Save Changes</source>
<translation>Salvar mudanças</translation>
<translation>Guardar as alterações</translation>
</message>
<message>
<source>Do you want to save changes?</source>
<translation>Salvar as mudanças?</translation>
<translation>Pretende guardar as alterações?</translation>
</message>
<message>
<source>Help</source>
@ -610,7 +610,7 @@
</message>
<message>
<source>Reset to Default</source>
<translation>Resetar ao Padrão</translation>
<translation>Repor para o Padrão</translation>
</message>
</context>
<context>
@ -1150,7 +1150,7 @@
</message>
<message>
<source>Unable to Save</source>
<translation>Não é possível salvar</translation>
<translation>Não foi possível guardar</translation>
</message>
<message>
<source>Cannot bind any unique input more than once</source>
@ -1166,11 +1166,11 @@
</message>
<message>
<source>Mousewheel cannot be mapped to stick outputs</source>
<translation>Roda do rato não pode ser mapeada para saídas empates</translation>
<translation>Roda do rato não pode ser mapeada para saídas dos manípulos</translation>
</message>
<message>
<source>Save</source>
<translation>Salvar</translation>
<translation>Guardar</translation>
</message>
<message>
<source>Apply</source>
@ -1178,7 +1178,7 @@
</message>
<message>
<source>Restore Defaults</source>
<translation>Restaurar Definições</translation>
<translation>Restaurar Predefinições</translation>
</message>
<message>
<source>Cancel</source>
@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Lista de Jogos</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versão do Vulkan não suportada</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Transferir Cheats para Todos os Jogos Instalados</translation>
@ -1409,43 +1405,43 @@
</message>
<message>
<source>Play</source>
<translation type="unfinished">Play</translation>
<translation>Reproduzir</translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished">Pause</translation>
<translation>Pausa</translation>
</message>
<message>
<source>Stop</source>
<translation type="unfinished">Stop</translation>
<translation>Parar</translation>
</message>
<message>
<source>Restart</source>
<translation type="unfinished">Restart</translation>
<translation>Reiniciar</translation>
</message>
<message>
<source>Full Screen</source>
<translation type="unfinished">Full Screen</translation>
<translation>Ecrã Inteiro</translation>
</message>
<message>
<source>Controllers</source>
<translation type="unfinished">Controllers</translation>
<translation>Comandos</translation>
</message>
<message>
<source>Keyboard</source>
<translation type="unfinished">Keyboard</translation>
<translation>Teclado</translation>
</message>
<message>
<source>Refresh List</source>
<translation type="unfinished">Refresh List</translation>
<translation>Atualizar Lista</translation>
</message>
<message>
<source>Resume</source>
<translation type="unfinished">Resume</translation>
<translation>Continuar</translation>
</message>
<message>
<source>Show Labels Under Icons</source>
<translation type="unfinished">Show Labels Under Icons</translation>
<translation>Mostrar Etiquetas Debaixo dos Ícones</translation>
</message>
</context>
<context>
@ -2032,7 +2028,7 @@
</message>
<message>
<source>Cannot create portable user folder</source>
<translation>Não é possível criar pasta de utilizador portátil</translation>
<translation>Não foi possível criar pasta de utilizador portátil</translation>
</message>
<message>
<source>%1 already exists</source>
@ -2048,7 +2044,11 @@
</message>
<message>
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Abra a pasta de imagens/sons de troféus personalizados:\nPoderá adicionar imagens personalizadas aos troféus e um áudio.\nAdicione os arquivos na pasta custom_trophy com os seguintes nomes:\ntrophy.mp3 ou trophy.wav, bronze.png, gold.png, platinum.png, silver.png\nObservação: O som funcionará apenas nas versões Qt.</translation>
<translation>Abra a pasta de imagens/sons de troféus personalizados:\nPoderá adicionar imagens personalizadas aos troféus e um áudio.\nAdicione os ficheiros na pasta custom_trophy com os seguintes nomes:\ntrophy.mp3 ou trophy.wav, bronze.png, gold.png, platinum.png, silver.png\nObservação: O som funcionará apenas nas versões Qt.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versão do Vulkan não suportada</translation>
</message>
</context>
<context>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Lista jocurilor</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versiune Vulkan nesuportată</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Descarcă Cheats pentru toate jocurile instalate</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Список игр</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Неподдерживаемая версия Vulkan</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Скачать читы для всех установленных игр</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Открыть папку с пользовательскими изображениями/звуками трофеев:\nВы можете добавить пользовательские изображения к трофеям и аудио.\обавьте файлы в custom_trophy со следующими именами:\ntrophy.wav ИЛИ trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\римечание: звук будет работать только в QT-версии.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Неподдерживаемая версия Vulkan</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation type="unfinished">Game List</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation type="unfinished">Download Cheats For All Installed Games</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Lista e lojërave</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Version i pambështetur i Vulkan</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Shkarko mashtrime për gjitha lojërat e instaluara</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Hap dosjen e imazheve/tingujve trofeve personalizuar:\nMund shtosh imazhe personalizuara për trofetë dhe një audio.\nShto skedarët dosjen custom_trophy me emrat vijojnë:\ntrophy.wav ose trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nShënim: Tingulli do punojë vetëm versionet QT.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Version i pambështetur i Vulkan</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Spellista</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan-versionen stöds inte</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Hämta fusk för alla installerade spel</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Öppna mappen för anpassade trofébilder/ljud:\nDu kan lägga till egna bilder till troféerna och ett ljud.\nLägg till filerna i custom_trophy med följande namn:\ntrophy.wav ELLER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nObservera: Ljudet fungerar endast i QT-versioner.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versionen av Vulkan stöds inte</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Oyun Listesi</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Desteklenmeyen Vulkan Sürümü</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Tüm Yüklenmiş Oyunlar İçin Hileleri İndir</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Özel kupa görüntüleri/sesleri klasörünü :\nKupalara özel görüntüler ve sesler ekleyebilirsiniz.\nDosyaları aşağıdaki adlarla custom_trophy'ye ekleyin:\ntrophy.wav ya da trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNot: Ses yalnızca QT sürümlerinde çalışacaktır.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Список ігор</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Непідтримувана версія Vulkan</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Завантажити чити для усіх встановлених ігор</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Відкрити папку користувацьких зображень трофеїв/звуків:\nВи можете додати користувацькі зображення до трофеїв та звук.\одайте файли до теки custom_trophy з такими назвами:\ntrophy.wav АБО trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\римітка: Звук буде працювати лише у версіях ShadPS4 з графічним інтерфейсом.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation>Danh sách trò chơi</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Phiên bản Vulkan không đưc hỗ trợ</translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation>Tải xuống cheat cho tất cả các trò chơi đã cài đt</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation></translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan </translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation></translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>/\n您可以自定义奖杯图像和声音\n将文件添加到 custom_trophy \ntrophy.wav trophy.mp3bronze.pnggold.pngplatinum.pngsilver.png\n注意 QT </translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan </translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source>
<translation></translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan </translation>
</message>
<message>
<source>Download Cheats For All Installed Games</source>
<translation></translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>/\n您可以將自訂影像新增至獎盃和音訊 \n將檔案加入 custom_tropy\ntropy.wav OR trophy.mp3bronze.pnggold.pngplatinum.pngsilver.png\n注意 QT </translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>

View File

@ -2,6 +2,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/assert.h"
#include "common/logging/log.h"
#include "shader_recompiler/backend/spirv/emit_spirv_instructions.h"
#include "shader_recompiler/backend/spirv/spirv_emit_context.h"
#include "shader_recompiler/ir/attribute.h"
@ -173,19 +174,24 @@ Id EmitReadConst(EmitContext& ctx, IR::Inst* inst, Id addr, Id offset) {
}
}
Id EmitReadConstBuffer(EmitContext& ctx, u32 handle, Id index) {
template <PointerType type>
Id ReadConstBuffer(EmitContext& ctx, u32 handle, Id index) {
const auto& buffer = ctx.buffers[handle];
index = ctx.OpIAdd(ctx.U32[1], index, buffer.offset_dwords);
const auto [id, pointer_type] = buffer[PointerType::U32];
const auto [id, pointer_type] = buffer[type];
const auto value_type = type == PointerType::U32 ? ctx.U32[1] : ctx.F32[1];
const Id ptr{ctx.OpAccessChain(pointer_type, id, ctx.u32_zero_value, index)};
const Id result{ctx.OpLoad(ctx.U32[1], ptr)};
const Id result{ctx.OpLoad(value_type, ptr)};
if (Sirit::ValidId(buffer.size_dwords)) {
const Id in_bounds = ctx.OpULessThan(ctx.U1[1], index, buffer.size_dwords);
return ctx.OpSelect(ctx.U32[1], in_bounds, result, ctx.u32_zero_value);
} else {
return ctx.OpSelect(value_type, in_bounds, result, ctx.u32_zero_value);
}
return result;
}
Id EmitReadConstBuffer(EmitContext& ctx, u32 handle, Id index) {
return ReadConstBuffer<PointerType::U32>(ctx, handle, index);
}
Id EmitReadStepRate(EmitContext& ctx, int rate_idx) {
@ -244,7 +250,7 @@ Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, u32 comp, Id index) {
ctx.OpUDiv(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.instance_id), step_rate),
ctx.ConstU32(param.num_components)),
ctx.ConstU32(comp));
return EmitReadConstBuffer(ctx, param.buffer_handle, offset);
return ReadConstBuffer<PointerType::F32>(ctx, param.buffer_handle, offset);
}
Id result;

View File

@ -46,6 +46,10 @@ inline F32 ApplyReadNumberConversion(IREmitter& ir, const F32& value,
const IR::F32 max = ir.Imm32(float(std::numeric_limits<u16>::max()));
return ir.FPDiv(left, max);
}
case AmdGpu::NumberConversion::Uint32ToUnorm: {
const auto float_val = ir.ConvertUToF(32, 32, ir.BitCast<U32>(value));
return ir.FPDiv(float_val, ir.Imm32(static_cast<float>(std::numeric_limits<u32>::max())));
}
default:
UNREACHABLE();
}
@ -92,6 +96,12 @@ inline F32 ApplyWriteNumberConversion(IREmitter& ir, const F32& value,
const IR::U32 raw = ir.ConvertFToS(32, ir.FPDiv(left, ir.Imm32(2.f)));
return ir.BitCast<F32>(raw);
}
case AmdGpu::NumberConversion::Uint32ToUnorm: {
const auto clamped = ir.FPClamp(value, ir.Imm32(0.f), ir.Imm32(1.f));
const auto unnormalized =
ir.FPMul(clamped, ir.Imm32(static_cast<float>(std::numeric_limits<u32>::max())));
return ir.BitCast<F32>(U32{ir.ConvertFToU(32, unnormalized)});
}
default:
UNREACHABLE();
}

View File

@ -197,8 +197,9 @@ enum class NumberConversion : u32 {
UintToUscaled = 1,
SintToSscaled = 2,
UnormToUbnorm = 3,
Sint8ToSnormNz = 5,
Sint16ToSnormNz = 6,
Sint8ToSnormNz = 4,
Sint16ToSnormNz = 5,
Uint32ToUnorm = 6,
};
struct CompMapping {
@ -286,6 +287,17 @@ inline DataFormat RemapDataFormat(const DataFormat format) {
inline NumberFormat RemapNumberFormat(const NumberFormat format, const DataFormat data_format) {
switch (format) {
case NumberFormat::Unorm: {
switch (data_format) {
case DataFormat::Format32:
case DataFormat::Format32_32:
case DataFormat::Format32_32_32:
case DataFormat::Format32_32_32_32:
return NumberFormat::Uint;
default:
return format;
}
}
case NumberFormat::Uscaled:
return NumberFormat::Uint;
case NumberFormat::Sscaled:
@ -341,6 +353,17 @@ inline CompMapping RemapSwizzle(const DataFormat format, const CompMapping swizz
inline NumberConversion MapNumberConversion(const NumberFormat num_fmt, const DataFormat data_fmt) {
switch (num_fmt) {
case NumberFormat::Unorm: {
switch (data_fmt) {
case DataFormat::Format32:
case DataFormat::Format32_32:
case DataFormat::Format32_32_32:
case DataFormat::Format32_32_32_32:
return NumberConversion::Uint32ToUnorm;
default:
return NumberConversion::None;
}
}
case NumberFormat::Uscaled:
return NumberConversion::UintToUscaled;
case NumberFormat::Sscaled: