mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 01:25:07 +02:00
Merge pull request #21371 from hrydgard/ui-fixes
Various cleanups, iCloud fix
This commit is contained in:
@@ -1096,7 +1096,6 @@ static const ConfigSetting debuggerSettings[] = {
|
||||
ConfigSetting("ConsoleWindowY", SETTING(g_Config, iConsoleWindowY), -1, CfgFlag::DEFAULT),
|
||||
ConfigSetting("FontWidth", SETTING(g_Config, iFontWidth), 8, CfgFlag::DEFAULT),
|
||||
ConfigSetting("FontHeight", SETTING(g_Config, iFontHeight), 12, CfgFlag::DEFAULT),
|
||||
ConfigSetting("DisplayStatusBar", SETTING(g_Config, bDisplayStatusBar), true, CfgFlag::DEFAULT),
|
||||
ConfigSetting("ShowBottomTabTitles",SETTING(g_Config, bShowBottomTabTitles), true, CfgFlag::DEFAULT),
|
||||
ConfigSetting("ShowDeveloperMenu", SETTING(g_Config, bShowDeveloperMenu), false, CfgFlag::DEFAULT),
|
||||
ConfigSetting("SkipDeadbeefFilling", SETTING(g_Config, bSkipDeadbeefFilling), false, CfgFlag::DEFAULT),
|
||||
|
||||
@@ -622,7 +622,6 @@ public:
|
||||
int iConsoleWindowY;
|
||||
int iFontWidth;
|
||||
int iFontHeight;
|
||||
bool bDisplayStatusBar;
|
||||
bool bShowBottomTabTitles;
|
||||
bool bShowDeveloperMenu;
|
||||
|
||||
|
||||
@@ -199,7 +199,9 @@ void AdhocLoadServerList() {
|
||||
|
||||
std::string json;
|
||||
request.buffer().TakeAll(&json);
|
||||
ParseServerListEntriesJSON(std::string_view(json.data(), json.size()));
|
||||
if (!ParseServerListEntriesJSON(std::string_view(json.data(), json.size()))) {
|
||||
LoadFallbackServerList();
|
||||
}
|
||||
});
|
||||
} else if (!g_Config.sAdhocServerListUrl.empty()) {
|
||||
// Try to read local file.
|
||||
@@ -210,7 +212,9 @@ void AdhocLoadServerList() {
|
||||
LoadFallbackServerList();
|
||||
return;
|
||||
}
|
||||
ParseServerListEntriesJSON(std::string_view(json.data(), json.size()));
|
||||
if (!ParseServerListEntriesJSON(std::string_view(json.data(), json.size()))) {
|
||||
LoadFallbackServerList();
|
||||
}
|
||||
} else {
|
||||
LoadFallbackServerList();
|
||||
}
|
||||
|
||||
@@ -155,6 +155,10 @@ bool TryUpdateSavedPath(Path *path) {
|
||||
#if PPSSPP_PLATFORM(IOS)
|
||||
// DEBUG_LOG(Log::Loader, "Original path: %s", path->c_str());
|
||||
std::string pathStr = path->ToString();
|
||||
if (startsWith(pathStr, "/private/var/mobile/Containers/Data/Application/")) {
|
||||
// For in-application files only, strip off the /private prefix if present - it's sometimes there, sometimes not.
|
||||
pathStr = pathStr.substr(8);
|
||||
}
|
||||
|
||||
const std::string_view applicationRoot = "/var/mobile/Containers/Data/Application/";
|
||||
if (startsWith(pathStr, applicationRoot)) {
|
||||
|
||||
Generated
+3
-3
@@ -1469,12 +1469,12 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.6.2"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0"
|
||||
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.60.2",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -996,11 +996,8 @@ fn execute_command(cmd: Command, ai: Option<&ChatGPT>, dry_run: bool, verbose: b
|
||||
}
|
||||
}
|
||||
|
||||
println!("Langtool processing reference {reference_ini_filename}");
|
||||
|
||||
if !dry_run {
|
||||
reference_ini.write().unwrap();
|
||||
}
|
||||
// Don't need to additionally process reference here like we did before, this is done
|
||||
// in the main loop.
|
||||
}
|
||||
|
||||
fn generate_ai_response(
|
||||
|
||||
@@ -54,16 +54,23 @@ void DarwinFileSystemServices::ClearDelegate() {
|
||||
}
|
||||
|
||||
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls {
|
||||
std::string pathStr = urls[0].path.UTF8String;
|
||||
// Strip /private prefix if present.
|
||||
if (startsWith(pathStr, "/private/var/mobile/Containers/Data/Application/")) {
|
||||
pathStr = pathStr.substr(8);
|
||||
NSURL *url = urls.firstObject;
|
||||
if (!url) {
|
||||
self.panelCallback(false, Path());
|
||||
return;
|
||||
}
|
||||
|
||||
if (urls.count >= 1)
|
||||
self.panelCallback(true, Path(pathStr));
|
||||
else
|
||||
// 1. Start accessing the resource
|
||||
BOOL success = [url startAccessingSecurityScopedResource];
|
||||
if (success) {
|
||||
// 2. Pass the path to PPSSPP
|
||||
// Note: In a real app, you'd want to call stopAccessingSecurityScopedResource
|
||||
// when the game is closed, otherwise you "leak" kernel permissions.
|
||||
self.panelCallback(true, Path(url.path.UTF8String));
|
||||
} else {
|
||||
ERROR_LOG(Log::System, "Failed to start accessing security scoped resource for: %s", url.path.UTF8String);
|
||||
self.panelCallback(false, Path());
|
||||
}
|
||||
|
||||
INFO_LOG(Log::System, "Callback processed, pre-emptively hide keyboard");
|
||||
[sharedViewController hideKeyboard];
|
||||
|
||||
@@ -1315,7 +1315,7 @@ void CtrlDisAsmView::disassembleToFile() {
|
||||
}
|
||||
|
||||
std::string filename;
|
||||
if (W32Util::BrowseForFileName(false, nullptr, L"Save Disassembly As...", nullptr, L"All Files\0*.*\0\0", nullptr, filename)) {
|
||||
if (W32Util::BrowseForFileName(false, nullptr, L"Save Disassembly As...", nullptr, nullptr, L"All Files\0*.*\0\0", nullptr, filename)) {
|
||||
std::wstring fileName = ConvertUTF8ToWString(filename);
|
||||
FILE *output = _wfopen(fileName.c_str(), L"wb");
|
||||
if (output == nullptr) {
|
||||
|
||||
@@ -112,9 +112,6 @@ CDisasm::CDisasm(HINSTANCE _hInstance, HWND _hParent, MIPSDebugInterface *_cpu)
|
||||
|
||||
// init status bar
|
||||
statusBarWnd = CreateWindowEx(0, STATUSCLASSNAME, L"", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, m_hDlg, (HMENU)IDC_DISASMSTATUSBAR, _hInstance, NULL);
|
||||
if (g_Config.bDisplayStatusBar == false) {
|
||||
ShowWindow(statusBarWnd,SW_HIDE);
|
||||
}
|
||||
|
||||
// set it to use two parts
|
||||
RECT statusBarRect;
|
||||
@@ -614,12 +611,8 @@ void CDisasm::UpdateSize(WORD width, WORD height)
|
||||
HWND bottomTabs = GetDlgItem(m_hDlg, IDC_DEBUG_BOTTOMTABS);
|
||||
|
||||
// ignore the status bar
|
||||
int topHeightOffset = 0;
|
||||
if (g_Config.bDisplayStatusBar)
|
||||
{
|
||||
GetWindowRect(statusBarWnd,&windowRect);
|
||||
topHeightOffset = (windowRect.bottom-windowRect.top);
|
||||
}
|
||||
GetWindowRect(statusBarWnd, &windowRect);
|
||||
int topHeightOffset = (windowRect.bottom - windowRect.top);
|
||||
|
||||
CtrlDisAsmView *ptr = DisAsmView();
|
||||
int disassemblyRowHeight = ptr->getRowHeight();
|
||||
|
||||
@@ -20,7 +20,7 @@ void DumpMemoryWindow::HandleBrowseClick(HWND hwnd) {
|
||||
GetWindowTextW(filenameWnd, &buffer[0], (int)buffer.size());
|
||||
std::string fn = ConvertWStringToUTF8(buffer);
|
||||
|
||||
bool result = W32Util::BrowseForFileName(false, hwnd, L"Select filename", NULL, NULL, NULL, fn);
|
||||
bool result = W32Util::BrowseForFileName(false, hwnd, L"Select filename", nullptr, L"dump.bin", nullptr, nullptr, fn);
|
||||
if (result) {
|
||||
filenameChosen_ = true;
|
||||
buffer = ConvertUTF8ToWString(fn);
|
||||
|
||||
@@ -439,7 +439,7 @@ void CGEDebugger::DescribeSecondPreview(const GPUgstate &state, char desc[256])
|
||||
void CGEDebugger::PreviewExport(const GPUDebugBuffer *dbgBuffer) {
|
||||
constexpr const wchar_t *filter = L"PNG Image (*.png)\0*.png\0JPEG Image (*.jpg)\0*.jpg\0All files\0*.*\0\0";
|
||||
std::string fn;
|
||||
if (W32Util::BrowseForFileName(false, GetDlgHandle(), L"Save Preview Image...", nullptr, filter, L"png", fn)) {
|
||||
if (W32Util::BrowseForFileName(false, GetDlgHandle(), L"Save Preview Image...", nullptr, L"preview.png", filter, L"png", fn)) {
|
||||
ScreenshotFormat fmt = fn.find(".jpg") != fn.npos ? ScreenshotFormat::JPG : ScreenshotFormat::PNG;
|
||||
|
||||
Path filename(fn);
|
||||
|
||||
@@ -558,7 +558,7 @@ namespace MainWindow {
|
||||
|
||||
case ID_FILE_LOADSTATEFILE:
|
||||
if (!Achievements::WarnUserIfHardcoreModeActive(false) && !NetworkWarnUserIfOnlineAndCantSavestate()) {
|
||||
if (W32Util::BrowseForFileName(true, hWnd, L"Load state", 0, L"Save States (*.ppst)\0*.ppst\0All files\0*.*\0\0", L"ppst", fn)) {
|
||||
if (W32Util::BrowseForFileName(true, hWnd, L"Load state", nullptr, nullptr, L"Save States (*.ppst)\0*.ppst\0All files\0*.*\0\0", L"ppst", fn)) {
|
||||
SetCursor(LoadCursor(0, IDC_WAIT));
|
||||
SaveState::Load(Path(fn), -1, SaveStateActionFinished);
|
||||
}
|
||||
@@ -566,7 +566,7 @@ namespace MainWindow {
|
||||
break;
|
||||
case ID_FILE_SAVESTATEFILE:
|
||||
if (!Achievements::WarnUserIfHardcoreModeActive(true) && !NetworkWarnUserIfOnlineAndCantSavestate()) {
|
||||
if (W32Util::BrowseForFileName(false, hWnd, L"Save state", 0, L"Save States (*.ppst)\0*.ppst\0All files\0*.*\0\0", L"ppst", fn)) {
|
||||
if (W32Util::BrowseForFileName(false, hWnd, L"Save state", nullptr, L"state.ppst", L"Save States (*.ppst)\0*.ppst\0All files\0*.*\0\0", L"ppst", fn)) {
|
||||
SetCursor(LoadCursor(0, IDC_WAIT));
|
||||
SaveState::Save(Path(fn), -1, SaveStateActionFinished);
|
||||
}
|
||||
@@ -773,27 +773,29 @@ namespace MainWindow {
|
||||
}
|
||||
|
||||
case ID_DEBUG_LOADMAPFILE:
|
||||
if (W32Util::BrowseForFileName(true, hWnd, L"Load .ppmap", 0, L"Maps\0*.ppmap\0All files\0*.*\0\0", L"ppmap", fn)) {
|
||||
if (W32Util::BrowseForFileName(true, hWnd, L"Load .ppmap", nullptr, nullptr, L"Maps\0*.ppmap\0All files\0*.*\0\0", L"ppmap", fn)) {
|
||||
g_symbolMap->LoadSymbolMap(Path(fn));
|
||||
NotifyDebuggerMapLoaded();
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_DEBUG_SAVEMAPFILE:
|
||||
if (W32Util::BrowseForFileName(false, hWnd, L"Save .ppmap", 0, L"Maps\0*.ppmap\0All files\0*.*\0\0", L"ppmap", fn))
|
||||
if (W32Util::BrowseForFileName(false, hWnd, L"Save .ppmap", nullptr, L"map.ppmap", L"Maps\0*.ppmap\0All files\0*.*\0\0", L"ppmap", fn)) {
|
||||
g_symbolMap->SaveSymbolMap(Path(fn));
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_DEBUG_LOADSYMFILE:
|
||||
if (W32Util::BrowseForFileName(true, hWnd, L"Load .sym", 0, L"Symbols\0*.sym\0All files\0*.*\0\0", L"sym", fn)) {
|
||||
if (W32Util::BrowseForFileName(true, hWnd, L"Load .sym", nullptr, nullptr, L"Symbols\0*.sym\0All files\0*.*\0\0", L"sym", fn)) {
|
||||
g_symbolMap->LoadNocashSym(Path(fn));
|
||||
NotifyDebuggerMapLoaded();
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_DEBUG_SAVESYMFILE:
|
||||
if (W32Util::BrowseForFileName(false, hWnd, L"Save .sym", 0, L"Symbols\0*.sym\0All files\0*.*\0\0", L"sym", fn))
|
||||
if (W32Util::BrowseForFileName(false, hWnd, L"Save .sym", nullptr, L"symbols.sym", L"Symbols\0*.sym\0All files\0*.*\0\0", L"sym", fn)) {
|
||||
g_symbolMap->SaveNocashSym(Path(fn));
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_DEBUG_RESETSYMBOLTABLE:
|
||||
@@ -845,7 +847,7 @@ namespace MainWindow {
|
||||
MessageBox(hWnd, L"File does not exist.", L"Sorry", 0);
|
||||
} else if (info.type == FILETYPE_DIRECTORY) {
|
||||
MessageBox(hWnd, L"Cannot extract directories.", L"Sorry", 0);
|
||||
} else if (W32Util::BrowseForFileName(false, hWnd, L"Save file as...", 0, L"All files\0*.*\0\0", L"", fn)) {
|
||||
} else if (W32Util::BrowseForFileName(false, hWnd, L"Save file as...", nullptr, nullptr, L"All files\0*.*\0\0", L"", fn)) {
|
||||
const u32 handle = pspFileSystem.OpenFile(filename, FILEACCESS_READ, "");
|
||||
// Note: len may be in blocks.
|
||||
size_t len = pspFileSystem.SeekFile(handle, 0, FILEMOVE_END);
|
||||
|
||||
@@ -114,40 +114,30 @@ std::string BrowseForFolder2(HWND parent, std::string_view title, std::string_vi
|
||||
}
|
||||
|
||||
bool BrowseForFileName(bool _bLoad, HWND _hParent, const wchar_t *_pTitle,
|
||||
const wchar_t *_pInitialFolder, const wchar_t *_pFilter, const wchar_t *_pExtension,
|
||||
const wchar_t *_pInitialFolder, const wchar_t *initialFilename, const wchar_t *_pFilter, const wchar_t *_pExtension,
|
||||
std::string &_strFileName) {
|
||||
// Let's hope this is large enough, don't want to trigger the dialog twice...
|
||||
std::wstring filenameBuffer(32768 * 10, '\0');
|
||||
wchar_t fileBuffer[2048]{};
|
||||
wchar_t fileNameBuffer[2048]{};
|
||||
|
||||
if (initialFilename) {
|
||||
wcscpy_s(fileBuffer, initialFilename);
|
||||
}
|
||||
|
||||
OPENFILENAME ofn{ sizeof(OPENFILENAME) };
|
||||
|
||||
auto resetFileBuffer = [&] {
|
||||
ofn.nMaxFile = (DWORD)filenameBuffer.size();
|
||||
ofn.lpstrFile = &filenameBuffer[0];
|
||||
if (!_strFileName.empty())
|
||||
wcsncpy(ofn.lpstrFile, ConvertUTF8ToWString(_strFileName).c_str(), filenameBuffer.size() - 1);
|
||||
};
|
||||
|
||||
resetFileBuffer();
|
||||
ofn.lpstrInitialDir = _pInitialFolder;
|
||||
ofn.lpstrFilter = _pFilter;
|
||||
ofn.lpstrFileTitle = nullptr;
|
||||
ofn.nMaxFileTitle = 0;
|
||||
ofn.lpstrFileTitle = fileNameBuffer;
|
||||
ofn.nMaxFileTitle = ARRAY_SIZE(fileNameBuffer);
|
||||
ofn.lpstrDefExt = _pExtension;
|
||||
ofn.hwndOwner = _hParent;
|
||||
ofn.lpstrFile = fileBuffer;
|
||||
ofn.nMaxFile = ARRAY_SIZE(fileBuffer);
|
||||
ofn.Flags = OFN_NOCHANGEDIR | OFN_EXPLORER;
|
||||
if (!_bLoad)
|
||||
ofn.Flags |= OFN_HIDEREADONLY;
|
||||
|
||||
int success = _bLoad ? GetOpenFileName(&ofn) : GetSaveFileName(&ofn);
|
||||
if (success == 0 && CommDlgExtendedError() == FNERR_BUFFERTOOSMALL) {
|
||||
size_t sz = *(unsigned short *)&filenameBuffer[0];
|
||||
// Documentation is unclear if this is WCHARs to CHARs.
|
||||
filenameBuffer.resize(filenameBuffer.size() + sz * 2);
|
||||
resetFileBuffer();
|
||||
success = _bLoad ? GetOpenFileName(&ofn) : GetSaveFileName(&ofn);
|
||||
}
|
||||
|
||||
if (success) {
|
||||
_strFileName = ConvertWStringToUTF8(ofn.lpstrFile);
|
||||
return true;
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace W32Util {
|
||||
|
||||
std::string BrowseForFolder2(HWND parent, std::string_view title, std::string_view initialPath);
|
||||
bool BrowseForFileName(bool _bLoad, HWND _hParent, const wchar_t*_pTitle,
|
||||
const wchar_t *_pInitialFolder, const wchar_t *_pFilter, const wchar_t*_pExtension,
|
||||
const wchar_t *_pInitialFolder, const wchar_t *initialFilename, const wchar_t *_pFilter, const wchar_t*_pExtension,
|
||||
std::string& _strFileName);
|
||||
std::vector<std::string> BrowseForFileNameMultiSelect(bool _bLoad, HWND _hParent, const wchar_t*_pTitle,
|
||||
const wchar_t*_pInitialFolder, const wchar_t*_pFilter, const wchar_t*_pExtension);
|
||||
|
||||
+6
-5
@@ -686,7 +686,7 @@ bool System_MakeRequest(SystemRequestType type, int requestId, const std::string
|
||||
std::thread([=] {
|
||||
SetCurrentThreadName("BrowseForImage");
|
||||
std::string out;
|
||||
if (W32Util::BrowseForFileName(true, MainWindow::GetHWND(), ConvertUTF8ToWString(param1).c_str(), nullptr,
|
||||
if (W32Util::BrowseForFileName(true, MainWindow::GetHWND(), ConvertUTF8ToWString(param1).c_str(), nullptr, nullptr,
|
||||
FinalizeFilter(L"All supported images (*.jpg *.jpeg *.png)|*.jpg;*.jpeg;*.png|All files (*.*)|*.*||").c_str(), L"jpg", out)) {
|
||||
g_requestManager.PostSystemSuccess(requestId, out.c_str());
|
||||
} else {
|
||||
@@ -699,16 +699,17 @@ bool System_MakeRequest(SystemRequestType type, int requestId, const std::string
|
||||
{
|
||||
const BrowseFileType browseType = (BrowseFileType)param3;
|
||||
std::wstring filter = MakeWindowsFilter(browseType);
|
||||
std::wstring initialFilename = ConvertUTF8ToWString(param2); // TODO: Plumb through
|
||||
std::string initialFilename = param2;
|
||||
if (filter.empty()) {
|
||||
// Unsupported.
|
||||
return false;
|
||||
}
|
||||
const bool load = type == SystemRequestType::BROWSE_FOR_FILE;
|
||||
std::thread([=] {
|
||||
std::thread([load, param1, initialFilename, filter, requestId] {
|
||||
SetCurrentThreadName("BrowseForFile");
|
||||
std::string out;
|
||||
if (W32Util::BrowseForFileName(load, MainWindow::GetHWND(), ConvertUTF8ToWString(param1).c_str(), nullptr, filter.c_str(), L"", out)) {
|
||||
std::string out = initialFilename;
|
||||
std::wstring wInitial = ConvertUTF8ToWString(initialFilename);
|
||||
if (W32Util::BrowseForFileName(load, MainWindow::GetHWND(), ConvertUTF8ToWString(param1).c_str(), nullptr, wInitial.c_str(), filter.c_str(), L"", out)) {
|
||||
g_requestManager.PostSystemSuccess(requestId, out.c_str());
|
||||
} else {
|
||||
g_requestManager.PostSystemFailure(requestId);
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
"name": "ArenaAnywhere SA",
|
||||
"host": "relay-sa.arenaanywhere.site",
|
||||
"discord": "https://discord.gg/GdsXWmNHq5",
|
||||
"ip": "34.35.138.175",
|
||||
"web": "",
|
||||
"location": "South Africa",
|
||||
"description": "For players looking to play any games",
|
||||
@@ -58,6 +59,7 @@
|
||||
"name": "ArenaAnywhere EU",
|
||||
"host": "relay.arenaanywhere.site",
|
||||
"discord": "https://discord.gg/GdsXWmNHq5",
|
||||
"ip": "34.91.25.46",
|
||||
"web": "",
|
||||
"location": "Europe",
|
||||
"description": "For players looking to play any games",
|
||||
@@ -67,11 +69,22 @@
|
||||
"name": "ArenaAnywhere Dubai",
|
||||
"host": "relay-dubai.arenaanywhere.site",
|
||||
"discord": "https://discord.gg/GdsXWmNHq5",
|
||||
"ip": "34.165.197.39",
|
||||
"web": "",
|
||||
"location": "Dubai",
|
||||
"description": "For players looking to play any games",
|
||||
"data_mode": "AemuPostoffice"
|
||||
},
|
||||
{
|
||||
"name": "ArenaAnywhere Asia",
|
||||
"host": "relay-asia.arenaanywhere.site",
|
||||
"ip": "35.198.217.43",
|
||||
"discord": "https://discord.gg/GdsXWmNHq5",
|
||||
"web": "",
|
||||
"location": "Singapore",
|
||||
"description": "For players looking to play any games",
|
||||
"data_mode": "AemuPostoffice"
|
||||
},
|
||||
{
|
||||
"name": "Retroverze Relay Beta",
|
||||
"host": "psp.retroverze.my.id",
|
||||
|
||||
@@ -69,6 +69,7 @@ This game has no achievements = لا تحتوي هذه اللعبة على اي
|
||||
Top players = افضل اللاعبين
|
||||
Unlocked = الإنجازات المفتوحة
|
||||
Unofficial = الإنجازات الغير رسمية
|
||||
Unofficial achievements = إنجازات غير رسمية # AI translated
|
||||
Unsupported = الإنجازات الغير مدعومة
|
||||
Win = فوز
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Bu oyunun uğurları yoxdur
|
||||
Top players = Ən üst oyunçular
|
||||
Unlocked = Açılmış uğurlar
|
||||
Unofficial = Rəsmi olmayan uğurlar
|
||||
Unofficial achievements = Rəsmi olmayan nailiyyətlər # AI translated
|
||||
Unsupported = Dəstəklənməyən uğurlar
|
||||
Win = Qalib gəlmək
|
||||
|
||||
@@ -683,7 +684,6 @@ FPS = FPS
|
||||
Frame presentation mode = Kadr göstərmə rejimi
|
||||
Frame Rate Control = Kadr yönəldilişi
|
||||
Frame Skipping = Kadr buraxılışı
|
||||
Frame Skipping Type = Kadr buraxılış biçimi
|
||||
Framerate mode = Kadr tezliyi modu
|
||||
Full screen = Bütün ekran
|
||||
Geometry shader culling = Həndəsə kölgəl-sinin ayıqlanışı
|
||||
@@ -734,7 +734,6 @@ Off = Sönülü
|
||||
OpenGL = OpenGL
|
||||
Overlay Information = Örtük bilgisi
|
||||
Partial Stretch = Qismən dart
|
||||
Percent of FPS = FPS faizi
|
||||
Performance = Göstəriş
|
||||
Postprocessing shaders = İşləm sonrası kölgələndirmələr
|
||||
Recreate Activity = Etkinliyi yenidən yarat
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Найлепшыя гульцы
|
||||
Unlocked = Разблакаваныя дасягненні
|
||||
Unofficial = Неафіцыйныя дасягненні
|
||||
Unofficial achievements = Нефармальныя дасягненні # AI translated
|
||||
Unsupported = Непадтрымоўваныя дасягненні
|
||||
Win = Пераможца
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Неправителствени постижения # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Победа
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Èxits no oficials # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Guanyar
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Neoficiální úspěchy # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Vyhrát
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Uofficielle præstationer # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Vinde
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Dieses Spiel hat keine Erfolge
|
||||
Top players = Top-Spieler
|
||||
Unlocked = Freigeschaltete Erfolge
|
||||
Unofficial = Inoffizielle Erfolge
|
||||
Unofficial achievements = Unoffizielle Erfolge # AI translated
|
||||
Unsupported = Nicht unterstützte Erfolge
|
||||
Win = Gewinnen
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Prestasi tidak resmi # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Menang
|
||||
|
||||
|
||||
+12
-2
@@ -85,6 +85,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Unofficial achievements
|
||||
Unsupported = Unsupported
|
||||
Win = Win
|
||||
|
||||
@@ -122,6 +123,8 @@ Analog Limiter = Analog limiter
|
||||
Analog Settings = Analog Settings
|
||||
Analog Stick = Analog stick
|
||||
Analog Style = Analog Style
|
||||
Analog stick threshold = Analog stick threshold
|
||||
Analog to digital mapping = Analog to digital mapping
|
||||
Analog trigger threshold = Analog trigger threshold
|
||||
AnalogLimiter Tip = When the analog limiter button is pressed
|
||||
Auto = Auto
|
||||
@@ -351,6 +354,7 @@ Enable shader cache = Enable shader cache
|
||||
Enter address = Enter address
|
||||
Fast = Fast
|
||||
Fragment = Fragment
|
||||
Framebuffer list = Framebuffer list
|
||||
FPU = FPU
|
||||
Framedump tests = Framedump tests
|
||||
Frame Profiler = Frame profiler
|
||||
@@ -801,10 +805,12 @@ Existing data = Existing data
|
||||
Import savedata from ZIP file = Import savedata from ZIP file
|
||||
Install = Install
|
||||
Install game from ZIP file? = Install game from ZIP file?
|
||||
Install plugin from ZIP file? = Install plugin from ZIP file?
|
||||
Install into folder = Install into folder
|
||||
Install textures from ZIP file? = Install textures from ZIP file?
|
||||
Installation failed = Installation failed
|
||||
Installed! = Installed!
|
||||
Supported games: = Supported games:
|
||||
Texture pack doesn't support install = Texture pack doesn't support install
|
||||
Zip archive corrupt = ZIP archive corrupt
|
||||
ZIP file = ZIP file
|
||||
@@ -875,7 +881,8 @@ Analog limiter = Analog limiter
|
||||
Analog speed = Analog speed
|
||||
Analog Stick = Analog stick
|
||||
Audio/Video Recording = Audio/Video recording
|
||||
AxisSwap = Axis swap
|
||||
Axis swap (hold) = Axis swap (hold)
|
||||
Axis swap (toggle) = Axis swap (toggle)
|
||||
Circle = Circle
|
||||
Cross = Cross
|
||||
Custom %d = Custom %d
|
||||
@@ -955,6 +962,7 @@ Display Portrait Reversed = Display Portrait Reversed
|
||||
[Networking]
|
||||
Ad Hoc multiplayer = Ad Hoc multiplayer
|
||||
AdHoc server = Ad hoc server
|
||||
Ad hoc server address = Ad hoc server address
|
||||
AdhocServer Failed to Bind Port = Ad hoc server failed to bind port
|
||||
Allow speed control while connected (not recommended) = Allow speed control while connected (not recommended)
|
||||
AM: Data from Unknown Port = AM: Data from Unknown Port
|
||||
@@ -970,6 +978,7 @@ Chat Button Position = Chat button position
|
||||
Chat Here = Chat here
|
||||
Chat message = Chat message
|
||||
Chat Screen Position = Chat screen position
|
||||
Custom server list = Custom server list
|
||||
Disconnected from AdhocServer = Disconnected from ad hoc server
|
||||
DNS Error Resolving = DNS error resolving
|
||||
DNS server = DNS server
|
||||
@@ -995,6 +1004,7 @@ Hostname = Hostname
|
||||
Infrastructure = Infrastructure
|
||||
Infrastructure server provided by: = Infrastructure server provided by:
|
||||
Invalid IP or hostname = Invalid IP or hostname
|
||||
Local network addresses = Local network addresses
|
||||
Minimum Timeout = Minimum timeout (override in ms, 0 = default)
|
||||
Misc = Miscellaneous (default = PSP compatibility)
|
||||
Network connected = Network connected
|
||||
@@ -1006,7 +1016,7 @@ P2P mode = P2P mode
|
||||
Please change your Port Offset = Please change your port offset
|
||||
Port offset = Port offset (0 = PSP compatibility)
|
||||
Open PPSSPP Multiplayer Wiki Page = Open PPSSPP Multiplayer Wiki Page
|
||||
proAdhocServer Address: = Ad hoc server address:
|
||||
Public server list = Public server list
|
||||
Quick Chat 1 = Quick chat 1
|
||||
Quick Chat 2 = Quick chat 2
|
||||
Quick Chat 3 = Quick chat 3
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Este juego no tiene logros
|
||||
Top players = Top jugadores
|
||||
Unlocked = Desbloqueados
|
||||
Unofficial = No oficiales
|
||||
Unofficial achievements = Logros no oficiales # AI translated
|
||||
Unsupported = No admitidos
|
||||
Win = Ganar
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Este juego no tiene logros
|
||||
Top players = Top players
|
||||
Unlocked = Desbloqueados
|
||||
Unofficial = No oficiales
|
||||
Unofficial achievements = Logros no oficiales # AI translated
|
||||
Unsupported = Sin soporte
|
||||
Win = Ganar
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = دستاوردهای غیررسمی # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = برنده شدن
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Tällä pelillä ei ole saavutuksia
|
||||
Top players = Top players
|
||||
Unlocked = Avatut saavutukset
|
||||
Unofficial = Epäviralliset saavutukset
|
||||
Unofficial achievements = Epäviralliset saavutukset # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Voittaa
|
||||
|
||||
@@ -599,8 +600,7 @@ Play = Pelaa
|
||||
Remove From Recent = Poista "äskettäin" listalta...
|
||||
SaveData = Tallennustieto
|
||||
Setting Background = Taustakuvan asetus
|
||||
ime Played: %1h %2m %3s = Pelattu aika: %1t %2m %3s
|
||||
Time Played: %1h %2m %3s = Time Played: %1h %2m %3s
|
||||
Time Played: %1h %2m %3s = Pelattu aika: %1t %2m %3s
|
||||
Uncompressed = Pakkauksen purku tehty
|
||||
USA = USA
|
||||
Use background as UI background = Käytä käyttöliittymän taustakuvaa
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Réalisations non officielles # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Gagner
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Logros non oficiais # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Ganar
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Άτυπες επιτυχίες # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Κερδίζω
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = הישגים בלתי רשמיים # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = ניצחון
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = םישגי ןמיש הרסימ # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = ןוקפש
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Neformalna postignuća # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Pobjedi
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Ehhez a játékhoz nincsenek teljesítmények
|
||||
Top players = Top játékosok
|
||||
Unlocked = Kioldott teljesítmények
|
||||
Unofficial = Nem hivatalos teljesítmények
|
||||
Unofficial achievements = Nem hivatalos teljesítmények # AI translated
|
||||
Unsupported = Nem támogatott teljesítmények
|
||||
Win = Nyerni
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Game ini tidak memiliki pencapaian
|
||||
Top players = Pemain papan atas
|
||||
Unlocked = Pencapaian yang telah dibuka
|
||||
Unofficial = Pencapaian tidak resmi
|
||||
Unofficial achievements = Prestasi tidak resmi # AI translated
|
||||
Unsupported = Pencapaian yang tidak didukung
|
||||
Win = Menang
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Questo gioco non ha obiettivi
|
||||
Top players = Migliori giocatori
|
||||
Unlocked = Obiettivi sbloccati
|
||||
Unofficial = Obiettivi non ufficiali
|
||||
Unofficial achievements = Risultati non ufficiali # AI translated
|
||||
Unsupported = Obiettivi non supportati
|
||||
Win = Vincere
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = このゲームは実績機能がありません
|
||||
Top players = トッププレイヤー
|
||||
Unlocked = 達成した実績
|
||||
Unofficial = 非公式な実績
|
||||
Unofficial achievements = 非公式な実績 # AI translated
|
||||
Unsupported = サポートしていない実績
|
||||
Win = 勝つ
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Game iki ora duwe prestasi
|
||||
Top players = Pemain tingkat dhuwur
|
||||
Unlocked = Prestasi sing durung kebuka
|
||||
Unofficial = Prestasi ora resmi
|
||||
Unofficial achievements = Prestasi ora resmi # AI translated
|
||||
Unsupported = Prestasi sing ora valid
|
||||
Win = Menang
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = 이 게임에는 도전과제가 없음
|
||||
Top players = 상위 플레이어
|
||||
Unlocked = 잠금 해제된 도전과제
|
||||
Unofficial = 비공식 도전과제
|
||||
Unofficial achievements = 비공식 성취 # AI translated
|
||||
Unsupported = 지원되지 않는 도전과제
|
||||
Win = 승리
|
||||
|
||||
|
||||
@@ -74,6 +74,7 @@ This game has no achievements = ئەم یاریە دەستکەوتی نییە
|
||||
Top players = Top players
|
||||
Unlocked = دەستکەوتە کراوەکان
|
||||
Unofficial = دەستکەوتە نافەرمیەکان
|
||||
Unofficial achievements = Serkeftinên ne resmi # AI translated
|
||||
Unsupported = دەستکەوتە پاڵپشت نەکراوەکان
|
||||
Win = Serkeftin
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = ຜົນລັບທີ່ບໍ່ແມ່ນທາງການສູດ # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = ໄດ້ຊະນະ
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Neoficialūs pasiekimai # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Laimėti
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Pencapaian tidak rasmi # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Menang
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Niet-officiële prestaties # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Winnen
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Uoffisielle prestasjoner # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Vin
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Ta gra nie posiada osiągnięć
|
||||
Top players = Najlepsi gracze
|
||||
Unlocked = Odblokowane osiągnięcia
|
||||
Unofficial = Nieoficjalnie osiągnięcia
|
||||
Unofficial achievements = Nieoficjalne osiągnięcia # AI translated
|
||||
Unsupported = Niewspierane osiągnięcia
|
||||
Win = Wygrać
|
||||
|
||||
|
||||
@@ -85,6 +85,7 @@ This game has no achievements = Este jogo não tem conquistas
|
||||
Top players = Os melhores jogadores
|
||||
Unlocked = Destrancadas
|
||||
Unofficial = Não oficiais
|
||||
Unofficial achievements = Conquistas não oficiais # AI translated
|
||||
Unsupported = Não suportadas
|
||||
Win = Vitórias
|
||||
|
||||
|
||||
@@ -85,6 +85,7 @@ This game has no achievements = Este jogo não tem conquistas disponíveis
|
||||
Top players = Jogadores no topo
|
||||
Unlocked = Conquistas desbloqueadas
|
||||
Unofficial = Conquistas não oficiais
|
||||
Unofficial achievements = Conquistas não oficiais # AI translated
|
||||
Unsupported = Conquistas incompatíveis
|
||||
Win = Vencer
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Realizări neoficiale # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Câștigă
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = У данной игры нет достижен
|
||||
Top players = Лучшие игроки
|
||||
Unlocked = Разблокированные
|
||||
Unofficial = Неофициальные
|
||||
Unofficial achievements = Неофициальные достижения # AI translated
|
||||
Unsupported = Неподдерживаемые
|
||||
Win = Победа
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Detta spel har inga prestationer
|
||||
Top players = Toppspelare
|
||||
Unlocked = Upplåsta prestationer
|
||||
Unofficial = Inofficiella prestationer
|
||||
Unofficial achievements = Inofficiella prestationer # AI translated
|
||||
Unsupported = Prestationer som inte stöds
|
||||
Win = Vinna
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Ang larong ito ay wala nakuhang mga tagumpay
|
||||
Top players = Mga nangungunang manlalaro
|
||||
Unlocked = Mga nagawang tagumpay
|
||||
Unofficial = Mga hindi opisyal na tagumpay
|
||||
Unofficial achievements = Нерасмий дастур # AI translated
|
||||
Unsupported = Mga hindi sinusuportahang tagumpay
|
||||
Win = Баракат
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Bu oyunun başarımları yok
|
||||
Top players = En iyi oyuncular
|
||||
Unlocked = Kilidi Açılmış Başarımlar
|
||||
Unofficial = Resmi Olmayan Başarımlar
|
||||
Unofficial achievements = Resmi olmayan başarılar # AI translated
|
||||
Unsupported = Desteklenmeyen Başarımlar
|
||||
Win = Kazanmak
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = Ця гра не має відзнак
|
||||
Top players = Найкращі гравці
|
||||
Unlocked = Розблоковані відзнаки
|
||||
Unofficial = Неофіційні відзнаки
|
||||
Unofficial achievements = Неофіційні досягнення # AI translated
|
||||
Unsupported = Непідтримувані відзнаки
|
||||
Win = Перемогти
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = This game has no achievements
|
||||
Top players = Top players
|
||||
Unlocked = Unlocked
|
||||
Unofficial = Unofficial
|
||||
Unofficial achievements = Thành tựu không chính thức # AI translated
|
||||
Unsupported = Unsupported
|
||||
Win = Thắng
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = 此游戏没有成就列表
|
||||
Top players = 速度排名
|
||||
Unlocked = 解锁的成就
|
||||
Unofficial = 自定义成就
|
||||
Unofficial achievements = 非官方成就 # AI translated
|
||||
Unsupported = 不支持的成绩
|
||||
Win = 赢
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ This game has no achievements = 這個遊戲沒有成就
|
||||
Top players = 頂級玩家
|
||||
Unlocked = 已解鎖的成就
|
||||
Unofficial = 非官方成就
|
||||
Unofficial achievements = 非官方成就 # AI translated
|
||||
Unsupported = 不支援的成就
|
||||
Win = 贏
|
||||
|
||||
|
||||
Reference in New Issue
Block a user