From 1728b0f20c114edcaede61cc93674516fe8c3af6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 17 Jan 2025 11:37:08 -0600 Subject: [PATCH 01/17] WWE 2K18 is not playable. --- docs/compatibility.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 0158a45cb..44a8188a1 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -3348,7 +3348,7 @@ 01001C400482C000,"Wunderling DX",audio;crash,ingame,2022-09-10 13:20:12 01003B401148E000,"Wurroom",,playable,2020-10-07 22:46:21 010081700EDF4000,"WWE 2K Battlegrounds",nvdec;online-broken;UE4,playable,2022-10-07 12:44:40 -010009800203E000,"WWE 2K18",nvdec,playable,2023-10-21 17:22:01 +010009800203E000,"WWE 2K18",nvdec;online-broken,ingame,2025-01-17 11:36:56 0100DF100B97C000,"X-Morph: Defense",,playable,2020-06-22 11:05:31 0100D0B00FB74000,"XCOM® 2 Collection",gpu;crash,ingame,2022-10-04 09:38:30 0100CC9015360000,"XEL",gpu,ingame,2022-10-03 10:19:39 @@ -3421,4 +3421,4 @@ 0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",crash,ingame,2023-04-25 19:43:52 0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",crash,ingame,2024-02-12 20:58:31 010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",crash,nothing,2023-10-30 22:37:40 -0100F3400332C000,"ゼノブレイド2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41 \ No newline at end of file +0100F3400332C000,"ゼノブレイド2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41 From a375faecc1c7a69baf78b134a82a174f46affe89 Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Fri, 17 Jan 2025 21:14:19 +0100 Subject: [PATCH 02/17] UI: Fix UpdateWaitWindow.axaml windows being too big on windows (#314) --- src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml b/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml index ba41ab6f0..a812cf70c 100644 --- a/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml +++ b/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml @@ -7,6 +7,7 @@ Title="Ryujinx - Waiting" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterOwner" + CanResize="False" mc:Ignorable="d" Focusable="True"> Date: Sat, 18 Jan 2025 07:35:34 +0800 Subject: [PATCH 03/17] Update Chinese translations (#375) --- src/Ryujinx/Assets/locales.json | 236 ++++++++++++++++---------------- 1 file changed, 118 insertions(+), 118 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 194c79b21..e3bb7cfb7 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -94,7 +94,7 @@ "tr_TR": "", "uk_UA": "Аплет для редагування Mii", "zh_CN": "Mii 小程序", - "zh_TW": "" + "zh_TW": "Mii 編輯器小程式" } }, { @@ -744,7 +744,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "从bin文件扫描 Amiibo", - "zh_TW": "" + "zh_TW": "掃瞄 Amiibo (從 Bin 檔案)" } }, { @@ -869,7 +869,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "安装密匙", - "zh_TW": "" + "zh_TW": "安裝金鑰" } }, { @@ -894,7 +894,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "从.KEYS文件或ZIP压缩包安装密匙", - "zh_TW": "" + "zh_TW": "從 .KEYS 或 .ZIP 安裝金鑰" } }, { @@ -919,7 +919,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "从一个文件夹安装密匙", - "zh_TW": "" + "zh_TW": "從資料夾安裝金鑰" } }, { @@ -1019,7 +1019,7 @@ "tr_TR": "", "uk_UA": "Обрізати XCI файли", "zh_CN": "XCI文件瘦身", - "zh_TW": "" + "zh_TW": "修剪 XCI 檔案" } }, { @@ -1244,7 +1244,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "问答与指南", - "zh_TW": "" + "zh_TW": "常見問題 (FAQ) 和指南" } }, { @@ -1269,7 +1269,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "常见问题和问题排除页面", - "zh_TW": "" + "zh_TW": "常見問題 (FAQ) 和疑難排解頁面" } }, { @@ -1294,7 +1294,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "打开Ryujinx官方wiki的常见问题和问题排除页面", - "zh_TW": "" + "zh_TW": "開啟官方 Ryujinx Wiki 常見問題 (FAQ) 和疑難排解頁面" } }, { @@ -1319,7 +1319,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "安装与配置指南", - "zh_TW": "" + "zh_TW": "設定和配置指南" } }, { @@ -1344,7 +1344,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "打开Ryujinx官方wiki的安装与配置指南", - "zh_TW": "" + "zh_TW": "開啟官方 Ryujinx Wiki 設定和配置指南" } }, { @@ -1369,7 +1369,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "多人游戏(LDN/LAN)指南", - "zh_TW": "" + "zh_TW": "多人遊戲 (LDN/LAN) 指南" } }, { @@ -1394,7 +1394,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "打开Ryujinx官方wiki的多人游戏指南", - "zh_TW": "" + "zh_TW": "開啟官方 Ryujinx Wiki 多人遊戲 (LDN/LAN) 指南" } }, { @@ -2319,7 +2319,7 @@ "tr_TR": "Simge", "uk_UA": "Логотип", "zh_CN": "图标", - "zh_TW": "" + "zh_TW": "圖示" } }, { @@ -2544,7 +2544,7 @@ "tr_TR": "", "uk_UA": "Перевірка та Нарізка XCI Файлів", "zh_CN": "检查并瘦身XCI文件", - "zh_TW": "" + "zh_TW": "檢查及修剪 XCI 檔案" } }, { @@ -2569,7 +2569,7 @@ "tr_TR": "", "uk_UA": "Перевірка та Нарізка XCI Файлів для збереження місця на диску", "zh_CN": "检查并瘦身XCI文件以节约磁盘空间", - "zh_TW": "" + "zh_TW": "檢查及修剪 XCI 檔案以節省儲存空間" } }, { @@ -2619,7 +2619,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "系统固件版本:{0}", - "zh_TW": "" + "zh_TW": "系統韌體版本: {0}" } }, { @@ -2644,7 +2644,7 @@ "tr_TR": "", "uk_UA": "Обрізано XCI Файлів '{0}'", "zh_CN": "XCI文件瘦身中'{0}'", - "zh_TW": "" + "zh_TW": "正在修剪 XCI 檔案 '{0}'" } }, { @@ -4019,7 +4019,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "与 PC 日期和时间重新同步", - "zh_TW": "" + "zh_TW": "重新同步至 PC 的日期和時間" } }, { @@ -4094,7 +4094,7 @@ "tr_TR": "FS Bütünlük Kontrolleri", "uk_UA": "Перевірка цілісності FS", "zh_CN": "启用文件系统完整性检查", - "zh_TW": "檔案系統完整性檢查" + "zh_TW": "啟用檔案系統完整性檢查" } }, { @@ -5119,7 +5119,7 @@ "tr_TR": "Logları Dosyaya Kaydetmeyi Etkinleştir", "uk_UA": "Увімкнути налагодження у файл", "zh_CN": "将日志写入文件", - "zh_TW": "啟用日誌到檔案" + "zh_TW": "啟用日誌寫入到檔案" } }, { @@ -6644,7 +6644,7 @@ "tr_TR": "Tuş", "uk_UA": "Кнопка", "zh_CN": "按下摇杆", - "zh_TW": "按鍵" + "zh_TW": "搖桿按鍵" } }, { @@ -7969,7 +7969,7 @@ "tr_TR": "Menü", "uk_UA": "", "zh_CN": "菜单键", - "zh_TW": "功能表" + "zh_TW": "功能表鍵" } }, { @@ -10519,7 +10519,7 @@ "tr_TR": "", "uk_UA": "Скасування", "zh_CN": "正在取消", - "zh_TW": "" + "zh_TW": "正在取消" } }, { @@ -10544,7 +10544,7 @@ "tr_TR": "", "uk_UA": "Закрити", "zh_CN": "关闭", - "zh_TW": "" + "zh_TW": "關閉" } }, { @@ -10744,7 +10744,7 @@ "tr_TR": "", "uk_UA": "Показати профіль", "zh_CN": "预览配置文件", - "zh_TW": "" + "zh_TW": "檢視設定檔" } }, { @@ -11844,7 +11844,7 @@ "tr_TR": "", "uk_UA": "Показати список змін", "zh_CN": "显示更新日志", - "zh_TW": "" + "zh_TW": "顯示更新日誌" } }, { @@ -12319,7 +12319,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "XCI文件瘦身窗口", - "zh_TW": "" + "zh_TW": "XCI 修剪器視窗" } }, { @@ -12919,7 +12919,7 @@ "tr_TR": "Sistem sürümü {0} yüklenecek.", "uk_UA": "Буде встановлено версію системи {0}.", "zh_CN": "即将安装系统固件版本 {0} 。", - "zh_TW": "將安裝系統版本 {0}。" + "zh_TW": "即將安裝系統韌體版本 {0}。" } }, { @@ -12944,7 +12944,7 @@ "tr_TR": "\n\nBu şimdiki sistem sürümünün yerini alacak {0}.", "uk_UA": "\n\nЦе замінить поточну версію системи {0}.", "zh_CN": "\n\n替换当前系统固件版本 {0} 。", - "zh_TW": "\n\n這將取代目前的系統版本 {0}。" + "zh_TW": "\n\n這將取代目前的系統韌體版本 {0}。" } }, { @@ -13019,7 +13019,7 @@ "tr_TR": "Sistem sürümü {0} başarıyla yüklendi.", "uk_UA": "Версію системи {0} успішно встановлено.", "zh_CN": "成功安装系统固件版本 {0} 。", - "zh_TW": "成功安裝系統版本 {0}。" + "zh_TW": "成功安裝系統韌體版本 {0}。" } }, { @@ -13044,7 +13044,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "在{0}发现了一个无效的密匙文件", - "zh_TW": "" + "zh_TW": "找到無效的金鑰檔案 {0}" } }, { @@ -13069,7 +13069,7 @@ "tr_TR": "", "uk_UA": "Встановлення Ключів", "zh_CN": "安装密匙", - "zh_TW": "" + "zh_TW": "安裝金鑰" } }, { @@ -13094,7 +13094,7 @@ "tr_TR": "", "uk_UA": "Новий файл Ключів буде встановлено", "zh_CN": "将会安装新密匙文件", - "zh_TW": "" + "zh_TW": "將會安裝新增的金鑰檔案。" } }, { @@ -13119,7 +13119,7 @@ "tr_TR": "", "uk_UA": "\n\nЦе замінить собою поточні файли Ключів.", "zh_CN": "\n\n这也许会替换掉一些当前已安装的密匙", - "zh_TW": "" + "zh_TW": "\n\n這將取代部分已安裝的金鑰。" } }, { @@ -13144,7 +13144,7 @@ "tr_TR": "", "uk_UA": "\n\nВи хочете продовжити?", "zh_CN": "\n\n你想要继续吗?", - "zh_TW": "" + "zh_TW": "\n\n是否繼續?" } }, { @@ -13169,7 +13169,7 @@ "tr_TR": "", "uk_UA": "Встановлення Ключів...", "zh_CN": "安装密匙中。。。", - "zh_TW": "" + "zh_TW": "正在安裝金鑰..." } }, { @@ -13194,7 +13194,7 @@ "tr_TR": "", "uk_UA": "Нові ключі встановлено.", "zh_CN": "已成功安装新密匙文件", - "zh_TW": "" + "zh_TW": "成功安裝新增的金鑰檔案。" } }, { @@ -14194,7 +14194,7 @@ "tr_TR": "", "uk_UA": "Ryujinx — це емулятор для Nintendo Switch™.\nОтримуйте всі останні новини в нашому Discord.\nРозробники, які хочуть зробити внесок, можуть дізнатися більше на нашому GitHub або в Discord.", "zh_CN": "Ryujinx 是一个 Nintendo Switch™ 模拟器。\n有兴趣做出贡献的开发者可以在我们的 GitHub 或 Discord 上了解更多信息。\n", - "zh_TW": "" + "zh_TW": "Ryujinx 是一款 Nintendo Switch™ 模擬器。\n關注我們的 Discord 取得所有最新消息。\n對於有興趣貢獻的開發者,可以在我們的 GitHub 或 Discord 上了解更多資訊。" } }, { @@ -14244,7 +14244,7 @@ "tr_TR": "", "uk_UA": "Минулі розробники:", "zh_CN": "曾经的维护者:", - "zh_TW": "" + "zh_TW": "過往的維護者:" } }, { @@ -15269,7 +15269,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "重新同步系统时间以匹配您电脑的当前日期和时间。\n\n这个操作不会实时同步系统时间与电脑时间,时间仍然可能不同步;在这种情况下,只需再次单击此按钮即可。", - "zh_TW": "" + "zh_TW": "重新同步系統韌體時間至 PC 目前的日期和時間。\n\n這不是一個主動設定,它仍然可能會失去同步;在這種情況下,只需再次點擊此按鈕。" } }, { @@ -17519,7 +17519,7 @@ "tr_TR": "", "uk_UA": "Часткові", "zh_CN": "分区", - "zh_TW": "" + "zh_TW": "部分" } }, { @@ -17544,7 +17544,7 @@ "tr_TR": "", "uk_UA": "Необрізані", "zh_CN": "没有瘦身的", - "zh_TW": "" + "zh_TW": "未修剪" } }, { @@ -17569,7 +17569,7 @@ "tr_TR": "", "uk_UA": "Обрізані", "zh_CN": "经过瘦身的", - "zh_TW": "" + "zh_TW": "已修剪" } }, { @@ -17594,7 +17594,7 @@ "tr_TR": "", "uk_UA": "(Невдача)", "zh_CN": "(失败)", - "zh_TW": "" + "zh_TW": "(失敗)" } }, { @@ -17619,7 +17619,7 @@ "tr_TR": "", "uk_UA": "Зберегти {0:n0} Мб", "zh_CN": "能节约 {0:n0} Mb", - "zh_TW": "" + "zh_TW": "可節省 {0:n0} Mb" } }, { @@ -17644,7 +17644,7 @@ "tr_TR": "", "uk_UA": "Збережено {0:n0} Мб", "zh_CN": "节约了 {0:n0} Mb", - "zh_TW": "" + "zh_TW": "已節省 {0:n0} Mb" } }, { @@ -17819,7 +17819,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "档案对话框", - "zh_TW": "" + "zh_TW": "Cabinet 對話方塊" } }, { @@ -17844,7 +17844,7 @@ "tr_TR": "", "uk_UA": "Вкажіть Ваше нове ім'я Amiibo", "zh_CN": "输入你的 Amiibo 的新名字", - "zh_TW": "" + "zh_TW": "輸入 Amiibo 的新名稱" } }, { @@ -17869,7 +17869,7 @@ "tr_TR": "", "uk_UA": "Будь ласка, проскануйте Ваш Amiibo.", "zh_CN": "请现在扫描你的 Amiibo", - "zh_TW": "" + "zh_TW": "請掃描你的 Amiibo。" } }, { @@ -18994,7 +18994,7 @@ "tr_TR": "", "uk_UA": "Перевірити та Обрізати XCI файл", "zh_CN": "检查并瘦身XCI文件", - "zh_TW": "" + "zh_TW": "檢查及修剪 XCI 檔案" } }, { @@ -19019,7 +19019,7 @@ "tr_TR": "", "uk_UA": "Ця функція спочатку перевірить вільний простір, а потім обрізатиме файл XCI для економії місця на диску.", "zh_CN": "这个功能将会先检查XCI文件,再对其执行瘦身操作以节约磁盘空间。", - "zh_TW": "" + "zh_TW": "此功能首先檢查 XCI 檔案是否有可修剪的字元,然後修剪檔案以節省儲存空間。" } }, { @@ -19044,7 +19044,7 @@ "tr_TR": "", "uk_UA": "Поточний розмір файла: {0:n} MB\nРозмір файлів гри: {1:n} MB\nЕкономія місця: {2:n} MB", "zh_CN": "当前文件大小: {0:n} MB\n游戏数据大小: {1:n} MB\n节约的磁盘空间: {2:n} MB", - "zh_TW": "" + "zh_TW": "現在的檔案大小: {0:n} MB\n遊戲資料大小: {1:n} MB\n節省的儲存空間: {2:n} MB" } }, { @@ -19069,7 +19069,7 @@ "tr_TR": "", "uk_UA": "XCI файл не потребує обрізання. Перевірте журнали для додаткової інформації", "zh_CN": "XCI文件不需要被瘦身。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案不需要修剪。檢查日誌以取得更多資訊" } }, { @@ -19094,7 +19094,7 @@ "tr_TR": "", "uk_UA": "XCI файл не може бути обрізаний. Перевірте журнали для додаткової інформації", "zh_CN": "XCI文件不能被瘦身。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案不能被修剪。檢查日誌以取得更多資訊" } }, { @@ -19119,7 +19119,7 @@ "tr_TR": "", "uk_UA": "XCI файл Тільки для Читання і не може бути прочитаним. Перевірте журнали додаткової інформації", "zh_CN": "XCI文件是只读的,且不可以被标记为可读取的。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案是唯讀,並且無法改成可寫入。檢查日誌以取得更多資訊" } }, { @@ -19144,7 +19144,7 @@ "tr_TR": "", "uk_UA": "Розмір файлу XCI змінився з моменту сканування. Перевірте, чи не записується файл, та спробуйте знову", "zh_CN": "XCI文件在扫描后大小发生了变化。请检查文件是否未被写入,然后重试。", - "zh_TW": "" + "zh_TW": "XCI 檔案大小比較上次的掃瞄已經改變。請檢查檔案是否未被寫入,然後再嘗試。" } }, { @@ -19169,7 +19169,7 @@ "tr_TR": "", "uk_UA": "Файл XCI містить дані в зоні вільного простору, тому обрізка небезпечна", "zh_CN": "XCI文件的空闲区域内有数据,不能安全瘦身。", - "zh_TW": "" + "zh_TW": "XCI 檔案有數據儲存於可節省儲存空間的區域,所以試圖修剪並不安全" } }, { @@ -19194,7 +19194,7 @@ "tr_TR": "", "uk_UA": "XCI Файл містить недійсні дані. Перевірте журнали для додаткової інформації", "zh_CN": "XCI文件含有无效数据。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案帶有無效的數據。檢查日誌以取得更多資訊" } }, { @@ -19219,7 +19219,7 @@ "tr_TR": "", "uk_UA": "XCI Файл файл не вдалося відкрити для запису. Перевірте журнали для додаткової інформації", "zh_CN": "XCI文件不能被读写。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案不能被寫入。檢查日誌以取得更多資訊" } }, { @@ -19244,7 +19244,7 @@ "tr_TR": "", "uk_UA": "Не вдалося обрізати файл XCI", "zh_CN": "XCI文件瘦身失败", - "zh_TW": "" + "zh_TW": "修剪 XCI 檔案失敗" } }, { @@ -19269,7 +19269,7 @@ "tr_TR": "", "uk_UA": "Операція перервана", "zh_CN": "操作已取消", - "zh_TW": "" + "zh_TW": "修剪已取消" } }, { @@ -19294,7 +19294,7 @@ "tr_TR": "", "uk_UA": "Операція не проводилася", "zh_CN": "未执行操作", - "zh_TW": "" + "zh_TW": "沒有修剪" } }, { @@ -19444,7 +19444,7 @@ "tr_TR": "", "uk_UA": "Обрізка XCI Файлів", "zh_CN": "XCI文件瘦身器", - "zh_TW": "" + "zh_TW": "XCI 檔案修剪器" } }, { @@ -19469,7 +19469,7 @@ "tr_TR": "", "uk_UA": "{0} з {1} тайтл(ів) обрано", "zh_CN": "在 {1} 中选中了 {0} 个游戏 ", - "zh_TW": "" + "zh_TW": "已選擇 {1} 之 {0} 的遊戲" } }, { @@ -19494,7 +19494,7 @@ "tr_TR": "", "uk_UA": "{0} з {1} тайтл(ів) обрано ({2} відображається)", "zh_CN": "在 {1} 中选中了 {0} 个游戏 (显示了 {2} 个)", - "zh_TW": "" + "zh_TW": "已選擇 {1} 之 {0} 的遊戲 (已顯示 {2} 個)" } }, { @@ -19519,7 +19519,7 @@ "tr_TR": "", "uk_UA": "Обрізка {0} тайтл(ів)...", "zh_CN": "{0} 个游戏瘦身中。。。", - "zh_TW": "" + "zh_TW": "正在修剪 {0} 個遊戲..." } }, { @@ -19544,7 +19544,7 @@ "tr_TR": "", "uk_UA": "Необрізаних {0} тайтл(ів)...", "zh_CN": "正在精简 {0} 个游戏", - "zh_TW": "" + "zh_TW": "正在反修剪 {0} 個遊戲..." } }, { @@ -19569,7 +19569,7 @@ "tr_TR": "", "uk_UA": "Невдача", "zh_CN": "失败", - "zh_TW": "" + "zh_TW": "失敗" } }, { @@ -19594,7 +19594,7 @@ "tr_TR": "", "uk_UA": "Потенційна економія", "zh_CN": "潜在的储存空间节省", - "zh_TW": "" + "zh_TW": "潛在節省的儲存空間" } }, { @@ -19619,7 +19619,7 @@ "tr_TR": "", "uk_UA": "Зекономлено", "zh_CN": "实际的储存空间节省", - "zh_TW": "" + "zh_TW": "實際節省的儲存空間" } }, { @@ -19669,7 +19669,7 @@ "tr_TR": "", "uk_UA": "Вибрати показане", "zh_CN": "选定显示的", - "zh_TW": "" + "zh_TW": "選擇已顯示" } }, { @@ -19694,7 +19694,7 @@ "tr_TR": "", "uk_UA": "Скасувати вибір показаного", "zh_CN": "反选显示的", - "zh_TW": "" + "zh_TW": "取消選擇已顯示" } }, { @@ -19719,7 +19719,7 @@ "tr_TR": "", "uk_UA": "Заголовок", "zh_CN": "标题", - "zh_TW": "" + "zh_TW": "名稱" } }, { @@ -19744,7 +19744,7 @@ "tr_TR": "", "uk_UA": "Економія місця", "zh_CN": "节省空间", - "zh_TW": "" + "zh_TW": "節省的儲存空間" } }, { @@ -19769,7 +19769,7 @@ "tr_TR": "", "uk_UA": "Обрізка", "zh_CN": "瘦身", - "zh_TW": "" + "zh_TW": "修剪" } }, { @@ -19794,7 +19794,7 @@ "tr_TR": "", "uk_UA": "Зшивання", "zh_CN": "取消精简", - "zh_TW": "" + "zh_TW": "反修剪" } }, { @@ -19944,7 +19944,7 @@ "tr_TR": "", "uk_UA": "{0} DLC доступно", "zh_CN": "{0} 个 DLC", - "zh_TW": "" + "zh_TW": "{0} 個可下載內容" } }, { @@ -20144,7 +20144,7 @@ "tr_TR": "", "uk_UA": "Продовжити", "zh_CN": "继续", - "zh_TW": "" + "zh_TW": "繼續" } }, { @@ -20519,7 +20519,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "自动", - "zh_TW": "" + "zh_TW": "自動" } }, { @@ -20544,7 +20544,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "使用Vulkan。\n在ARM Mac上,当玩在其下运行良好的游戏时,使用Metal后端。", - "zh_TW": "" + "zh_TW": "使用Vulkan。\n在 ARM Mac 上,如果遊戲執行性能良好時,則將使用 Metal 後端。" } }, { @@ -21419,7 +21419,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "Area(区域过滤)", - "zh_TW": "" + "zh_TW": "區域" } }, { @@ -21944,7 +21944,7 @@ "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі (може збільшити затримку)", "zh_CN": "禁用P2P网络连接 (也许会增加延迟)", - "zh_TW": "" + "zh_TW": "停用對等網路代管 (P2P Network Hosting) (可能增加網路延遲)" } }, { @@ -21969,7 +21969,7 @@ "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі, піри будуть підключатися через майстер-сервер замість прямого з'єднання з вами.", "zh_CN": "禁用P2P网络连接,对方将通过主服务器进行连接,而不是直接连接到您。", - "zh_TW": "" + "zh_TW": "停用對等網路代管 (P2P Network Hosting), 用戶群會經過代理何服器而非直接連線至你的主機。" } }, { @@ -21994,7 +21994,7 @@ "tr_TR": "", "uk_UA": "Мережевий пароль:", "zh_CN": "网络密码:", - "zh_TW": "" + "zh_TW": "網路密碼片語 (passphrase):" } }, { @@ -22019,7 +22019,7 @@ "tr_TR": "", "uk_UA": "Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", "zh_CN": "您只能看到与您使用相同密码的游戏房间。", - "zh_TW": "" + "zh_TW": "你只會看到與你的密碼片語 (passphrase) 相同的遊戲房間。" } }, { @@ -22044,7 +22044,7 @@ "tr_TR": "", "uk_UA": "Введіть пароль у форматі Ryujinx-<8 символів>. Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", "zh_CN": "以Ryujinx-<8个十六进制字符>的格式输入密码。您只能看到与您使用相同密码的游戏房间。", - "zh_TW": "" + "zh_TW": "以「Ryujinx-<8 個十六進制數字>」的格式輸入密碼片語 (passphrase)。你只會看到與你的密碼片語 (passphrase) 相同的遊戲房間。" } }, { @@ -22069,7 +22069,7 @@ "tr_TR": "", "uk_UA": "(публічний)", "zh_CN": "(公开的)", - "zh_TW": "" + "zh_TW": "(公開模式)" } }, { @@ -22094,7 +22094,7 @@ "tr_TR": "", "uk_UA": "Згенерувати випадкову", "zh_CN": "随机生成", - "zh_TW": "" + "zh_TW": "隨機產生" } }, { @@ -22119,7 +22119,7 @@ "tr_TR": "", "uk_UA": "Генерує новий пароль, яким можна поділитися з іншими гравцями.", "zh_CN": "生成一个新的密码,可以与其他玩家共享。", - "zh_TW": "" + "zh_TW": "產生一組新的密碼片語 (passphrase), 以供分享給其他玩家。" } }, { @@ -22144,7 +22144,7 @@ "tr_TR": "", "uk_UA": "Очистити", "zh_CN": "清除", - "zh_TW": "" + "zh_TW": "清除" } }, { @@ -22169,7 +22169,7 @@ "tr_TR": "", "uk_UA": "Очищає поточну пароль, повертаючись до публічної мережі.", "zh_CN": "清除当前密码,返回公共网络。", - "zh_TW": "" + "zh_TW": "清除現有的密碼片語 (passphrase), 藉此公開網路連線。" } }, { @@ -22194,7 +22194,7 @@ "tr_TR": "", "uk_UA": "Невірний пароль! Має бути в форматі \"Ryujinx-<8 символів>\"", "zh_CN": "无效密码!密码的格式必须是\"Ryujinx-<8个十六进制字符>\"", - "zh_TW": "" + "zh_TW": "無效的密碼片語 (passphrase)! 密碼片語必須是以「Ryujinx-<8 個十六進制數字>」的格式輸入" } }, { @@ -22219,7 +22219,7 @@ "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", "zh_CN": "垂直同步(VSync)", - "zh_TW": "" + "zh_TW": "垂直同步:" } }, { @@ -22244,7 +22244,7 @@ "tr_TR": "", "uk_UA": "Увімкнути користувацьку частоту оновлення (Експериментально)", "zh_CN": "启动自定义刷新率(实验性功能)", - "zh_TW": "" + "zh_TW": "啟用自訂的重新整理頻率 (實驗性功能)" } }, { @@ -22294,7 +22294,7 @@ "tr_TR": "", "uk_UA": "Безмежна", "zh_CN": "无限制", - "zh_TW": "" + "zh_TW": "沒有限制" } }, { @@ -22319,7 +22319,7 @@ "tr_TR": "", "uk_UA": "Користувацька", "zh_CN": "自定义刷新率", - "zh_TW": "" + "zh_TW": "自訂的重新整理頻率" } }, { @@ -22344,7 +22344,7 @@ "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень.", "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。", - "zh_TW": "" + "zh_TW": "模擬垂直同步。「Switch」 模擬 Nintendo Switch 的 60Hz 重新整理頻率。「沒有限制」是沒有限制的重新整理頻率。" } }, { @@ -22369,7 +22369,7 @@ "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень. 'Користувацька' емулює вказану користувацьку частоту оновлення.", "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。“自定义刷新率”模拟指定的自定义刷新率。", - "zh_TW": "" + "zh_TW": "模擬垂直同步。「Switch」 模擬 Nintendo Switch 的 60Hz 重新整理頻率。「沒有限制」是沒有限制的重新整理頻率。「自訂的重新整理頻率」模擬所自訂的重新整理頻率。" } }, { @@ -22394,7 +22394,7 @@ "tr_TR": "", "uk_UA": "Дозволяє користувачу вказати емульовану частоту оновлення. У деяких іграх це може прискорити або сповільнити логіку гри. У інших іграх це може дозволити обмежити FPS на певні кратні частоти оновлення або призвести до непередбачуваної поведінки. Це експериментальна функція, без гарантій того, як це вплине на ігровий процес. \n\nЗалиште ВИМКНЕНИМ, якщо не впевнені.", "zh_CN": "允许用户指定模拟刷新率。在某些游戏中,这可能会加快或减慢游戏逻辑的速度。在其他游戏中,它可能允许将FPS限制在刷新率的某个倍数,或者导致不可预测的行为。这是一个实验性功能,无法保证游戏会受到怎样的影响。\n\n如果不确定,请关闭。", - "zh_TW": "" + "zh_TW": "容許使用者自訂模擬的重新整理頻率。你可能會在某些遊戲裡感受到加快或減慢的遊戲速度;其他遊戲裡則可能會容許限制最高的 FPS 至重新整理頻率的倍數,或引起未知遊戲行為。這是實驗性功能,且沒有保證遊戲會穩定執行。\n\n如果不確定,請保持關閉狀態。" } }, { @@ -22419,7 +22419,7 @@ "tr_TR": "", "uk_UA": "Цільове значення користувацької частоти оновлення.", "zh_CN": "目标自定义刷新率值。", - "zh_TW": "" + "zh_TW": "自訂的重新整理頻率數值。" } }, { @@ -22444,7 +22444,7 @@ "tr_TR": "", "uk_UA": "Користувацька частота оновлення, як відсоток від стандартної частоти оновлення Switch.", "zh_CN": "自定义刷新率,占正常SWitch刷新率的百分比值。", - "zh_TW": "" + "zh_TW": "以 Nintendo Switch 重新整理頻率的百分比自訂重新整理頻率。" } }, { @@ -22469,7 +22469,7 @@ "tr_TR": "", "uk_UA": "Користувацька частота оновлення %:", "zh_CN": "自定义刷新率值 %:", - "zh_TW": "" + "zh_TW": "自訂重新整理頻率 %:" } }, { @@ -22494,7 +22494,7 @@ "tr_TR": "", "uk_UA": "Значення користувацька частота оновлення:", "zh_CN": "自定义刷新率值:", - "zh_TW": "" + "zh_TW": "自訂重新整理頻率數值:" } }, { @@ -22519,7 +22519,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "间隔", - "zh_TW": "" + "zh_TW": "間隔" } }, { @@ -22544,7 +22544,7 @@ "tr_TR": "", "uk_UA": "Перемкнути VSync режим:", "zh_CN": "设置 VSync 模式:", - "zh_TW": "" + "zh_TW": "切換 VSync 模式:" } }, { @@ -22569,7 +22569,7 @@ "tr_TR": "", "uk_UA": "Підвищити користувацьку частоту оновлення", "zh_CN": "提高自定义刷新率:", - "zh_TW": "" + "zh_TW": "提高自訂的重新整理頻率" } }, { @@ -22594,7 +22594,7 @@ "tr_TR": "", "uk_UA": "Понизити користувацьку частоту оновлення", "zh_CN": "降低自定义刷新率:", - "zh_TW": "" + "zh_TW": "降低自訂的重新整理頻率" } }, { @@ -22619,7 +22619,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "最后更新于: {0}", - "zh_TW": "" + "zh_TW": "上次更新時間: {0}" } }, { @@ -22644,7 +22644,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "此兼容性列表可能包含过时的条目。\n不要只测试 \"进入游戏\" 状态的游戏。", - "zh_TW": "" + "zh_TW": "這個相容性列表可能含有已過時的紀錄。\n敬請繼續測試「大致可遊玩 (Ingame)」狀態的遊戲並回報以更新紀錄。" } }, { @@ -22669,7 +22669,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "正在搜索兼容性条目...", - "zh_TW": "" + "zh_TW": "搜尋相容性列表紀錄..." } }, { @@ -22694,7 +22694,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "打开兼容性列表", - "zh_TW": "" + "zh_TW": "開啟相容性列表" } }, { @@ -22719,7 +22719,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "仅显示拥有的游戏", - "zh_TW": "" + "zh_TW": "只顯示已擁有的遊戲" } }, { @@ -22744,7 +22744,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "可游玩", - "zh_TW": "" + "zh_TW": "可暢順遊玩 (Playable)" } }, { @@ -22769,7 +22769,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "进入游戏", - "zh_TW": "" + "zh_TW": "大致可遊玩 (Ingame)" } }, { @@ -22794,7 +22794,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "菜单", - "zh_TW": "" + "zh_TW": "只開啟至遊戲開始功能表 (Menus)" } }, { @@ -22819,7 +22819,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "启动", - "zh_TW": "" + "zh_TW": "只能啟動 (Boots)" } }, { @@ -22844,7 +22844,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "什么都没有", - "zh_TW": "" + "zh_TW": "無法啟動 (Nothing)" } } ] From 6cd4866d76ba5c9b13cfea9fb2435bf0b302a36e Mon Sep 17 00:00:00 2001 From: Daniel Nylander Date: Sat, 18 Jan 2025 01:04:18 +0100 Subject: [PATCH 04/17] Updated sv_SE in locales.json (#513) --- src/Ryujinx/Assets/locales.json | 68 ++++++++++++++++--- .../Views/Settings/SettingsSystemView.axaml | 6 ++ 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index e3bb7cfb7..1a42051b8 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -3946,6 +3946,54 @@ "zh_CN": "繁体中文(推荐)", "zh_TW": "正體中文 (建議)" } + }, { + "ID": "SettingsTabSystemSystemLanguageSwedish", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Swedish", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "Svenska", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { + "ID": "SettingsTabSystemSystemLanguageNorwegian", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Norwegian", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "Norsk", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "Norska", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } }, { "ID": "SettingsTabSystemSystemTimeZone", @@ -22614,7 +22662,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Senast uppdaterad: {0}", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22639,7 +22687,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Denna kompatibilitetslista kan innehålla utdaterade poster.\nTesta gärna spelen som listas med \"Spelproblem\"-status.", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22664,7 +22712,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Sök i kompatibilitetsposter...", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22689,7 +22737,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Öppna kompatibilitetslistan", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22714,7 +22762,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Visa endast ägda spel", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22739,7 +22787,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Spelbart", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22764,7 +22812,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Spelproblem", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22789,7 +22837,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Menyer", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22814,7 +22862,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Startar", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22839,7 +22887,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Ingenting", "th_TH": "", "tr_TR": "", "uk_UA": "", diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index 9295413ba..d7cf60787 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -136,6 +136,12 @@ + + + + + + Date: Sat, 18 Jan 2025 10:15:24 -0600 Subject: [PATCH 05/17] headless: collapse headless window definition into a "Windows" folder, change GetWindowFlags to an abstract property. --- src/Ryujinx/Headless/{Metal => Windows}/MetalWindow.cs | 2 +- src/Ryujinx/Headless/{OpenGL => Windows}/OpenGLWindow.cs | 2 +- src/Ryujinx/Headless/{Vulkan => Windows}/VulkanWindow.cs | 2 +- src/Ryujinx/Headless/{ => Windows}/WindowBase.cs | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/Ryujinx/Headless/{Metal => Windows}/MetalWindow.cs (93%) rename src/Ryujinx/Headless/{OpenGL => Windows}/OpenGLWindow.cs (98%) rename src/Ryujinx/Headless/{Vulkan => Windows}/VulkanWindow.cs (97%) rename src/Ryujinx/Headless/{ => Windows}/WindowBase.cs (99%) diff --git a/src/Ryujinx/Headless/Metal/MetalWindow.cs b/src/Ryujinx/Headless/Windows/MetalWindow.cs similarity index 93% rename from src/Ryujinx/Headless/Metal/MetalWindow.cs rename to src/Ryujinx/Headless/Windows/MetalWindow.cs index a2693c69d..d79bd7938 100644 --- a/src/Ryujinx/Headless/Metal/MetalWindow.cs +++ b/src/Ryujinx/Headless/Windows/MetalWindow.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Headless bool ignoreControllerApplet) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { } - public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_METAL; + public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_METAL; protected override void InitializeWindowRenderer() { diff --git a/src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs b/src/Ryujinx/Headless/Windows/OpenGLWindow.cs similarity index 98% rename from src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs rename to src/Ryujinx/Headless/Windows/OpenGLWindow.cs index c00a0648f..23c64ad4f 100644 --- a/src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs +++ b/src/Ryujinx/Headless/Windows/OpenGLWindow.cs @@ -124,7 +124,7 @@ namespace Ryujinx.Headless _glLogLevel = glLogLevel; } - public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_OPENGL; + public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_OPENGL; protected override void InitializeWindowRenderer() { diff --git a/src/Ryujinx/Headless/Vulkan/VulkanWindow.cs b/src/Ryujinx/Headless/Windows/VulkanWindow.cs similarity index 97% rename from src/Ryujinx/Headless/Vulkan/VulkanWindow.cs rename to src/Ryujinx/Headless/Windows/VulkanWindow.cs index 92caad34e..5f6de94a5 100644 --- a/src/Ryujinx/Headless/Vulkan/VulkanWindow.cs +++ b/src/Ryujinx/Headless/Windows/VulkanWindow.cs @@ -24,7 +24,7 @@ namespace Ryujinx.Headless _glLogLevel = glLogLevel; } - public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_VULKAN; + public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_VULKAN; protected override void InitializeWindowRenderer() { } diff --git a/src/Ryujinx/Headless/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs similarity index 99% rename from src/Ryujinx/Headless/WindowBase.cs rename to src/Ryujinx/Headless/Windows/WindowBase.cs index d89638cc1..b2d18fac1 100644 --- a/src/Ryujinx/Headless/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -191,7 +191,7 @@ namespace Ryujinx.Headless FullscreenFlag = SDL_WindowFlags.SDL_WINDOW_FULLSCREEN_DESKTOP; } - WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | GetWindowFlags()); + WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | WindowFlags); if (WindowHandle == nint.Zero) { @@ -246,7 +246,7 @@ namespace Ryujinx.Headless protected abstract void SwapBuffers(); - public abstract SDL_WindowFlags GetWindowFlags(); + public abstract SDL_WindowFlags WindowFlags { get; } private string GetGpuDriverName() { From 6a291d41167d89d79c9df5ffda6fd7aa951c90a1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:26:12 -0600 Subject: [PATCH 06/17] Headless: Use main UI logo for window icon instead of separate bmp --- src/Ryujinx/Assets/locales.json | 8 +++++--- src/Ryujinx/Headless/Ryujinx.bmp | Bin 3978 -> 0 bytes src/Ryujinx/Headless/Windows/WindowBase.cs | 3 ++- src/Ryujinx/Ryujinx.csproj | 1 - 4 files changed, 7 insertions(+), 5 deletions(-) delete mode 100644 src/Ryujinx/Headless/Ryujinx.bmp diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 1a42051b8..d320c935e 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -3946,7 +3946,8 @@ "zh_CN": "繁体中文(推荐)", "zh_TW": "正體中文 (建議)" } - }, { + }, + { "ID": "SettingsTabSystemSystemLanguageSwedish", "Translations": { "ar_SA": "", @@ -3970,7 +3971,8 @@ "zh_CN": "", "zh_TW": "" } - }, { + }, + { "ID": "SettingsTabSystemSystemLanguageNorwegian", "Translations": { "ar_SA": "", @@ -22896,4 +22898,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/Headless/Ryujinx.bmp b/src/Ryujinx/Headless/Ryujinx.bmp deleted file mode 100644 index 36bf2f8ac129d43565ea345df7bb33b3b86e251b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3978 zcmb`}dr(x@836E)i8v*#uV|(=srEUUO#X6Nz+k7flXlualy=f2{i8{cec#6}%kHv@ zCb*+1J`pCdF)>d5$%B}X1vMce0Txtr#z!QXaS{^{d?1<&q8Jr*&-wbDyL(|5xauFd zeE3^!&)jHelc0Wcjb^G@1S$}-+>jxfxp*nl){{u`({pClTM-V|BLGa#0 zi#*IVX^3GmxO|mqN*{Y)X=iz%BX_{l%ziXE;c`%K@@#pSjk#AC$`|4&9g3se%(|3T z_RsJ!Djq$3M}GkYu|068>PcvNJqNmK7Q?v@7sFYK^ROv>I9L1E%rkZQ`90CR(CNCI%AWe1s@^(l)rn93ytbyb z@X?Q2UxfEM{&Ro%USpb>soPOD(6=Wa&erA6?XAoE-|0H*V0SbdyP_8CrZ}-HAGgMq z4F!*cvsWAq!J1h4JzeiDo~`uL`li&@$Wx4-8iqxs9DAaR9_p>ntx0&o%+}4$`h2Wv zDMH`jkXCXuY$-V&hDa=8?)FeGf6Kx59l3|dO|Ivt*-YjKWCjom?TEegc`L}gZMY)O z&iX~V>Fo$&@!_BrxF5Hb_E9_8ZM2VC$W5-LK8`aB9f-7+Cxw{^s;zF?P?)}sK$^Sy z;07q9rd~qvkMF;S=X!ggdSnDdPeo$n9^l~J&(mFDirOag6sCyosP(p}?P;-|6DHSdYnWm*)^jp5;RdMAK}$(zIVjgyCdFK7 zFrGp0q^ZhHHrI~v3sCe?)cOpR98$)9z;4eV6h0u0K!@O>X**tw(SFDb05aEy@k5?;ZN? z8+;W-PUs@d5Aiihj6WgAILK{eQuq#Vi&Vq3qQJ!3iavG*E@7am3D?D3$=r+_#pp-h zv302Qb)h_r8ohHZ$}pRyUgN)2eqdqs67wscv0srHp>WGB{C70Yv&}(}Hgc=Yj|0L; zT~9H0mXKM!55sRnNBcIlwjxiJOlb(oWx`#c{=oCSH+iW#z$(=vY@gc3!xUS|YgF5L z8TD~t@r^r~b{FO@bK>9xQ{2A`zFlMH@#bhc?JWFb1Gsvo-Jag%tG?V6A zq*}h9@Hw1Dwas*R(p^#8;5c*4o!lICN0`O)I-f#@jl9*AXOv+I#ROfDH@m`FB(uO~yzMW3?U&vhRJ;kTn{rGR23;#>r zY`2VA_GG?yGlQFUpzrwRwDmMRNu1f|1KKV5jwUhx!Lodr0JGL}2|kRD6C^E?%G>;>KMlF(ysvpnf;eyzL2B zyn`JT9Gn|iro+$6D7W7fIWUXzT|@DxTHXVJ4V~7~*Y*vBw?#*-G4lYH~A%NPw) zoMm*jT&6veM|j44o;_&_P1RRm&*l|CzO?y(Y{BRH*cQansOrpddDv%`;_OM zL~T>gY{MR8S{p!L*J&+Md|Bi482O7rzK`+l>}{||ti B6odc( diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index b2d18fac1..51bfcb214 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -1,6 +1,7 @@ using Humanizer; using LibHac.Tools.Fs; using Ryujinx.Ava; +using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Logging; @@ -137,7 +138,7 @@ namespace Ryujinx.Headless private void SetWindowIcon() { - Stream iconStream = typeof(Program).Assembly.GetManifestResourceStream("HeadlessLogo"); + Stream iconStream = EmbeddedResources.GetStream("Ryujinx/Assets/UIImages/Logo_Ryujinx.png"); byte[] iconBytes = new byte[iconStream!.Length]; if (iconStream.Read(iconBytes, 0, iconBytes.Length) != iconBytes.Length) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index ab9a3696d..8929ba3eb 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -166,7 +166,6 @@ - From b08e5db6d871da8bb8ee593ba9058443c91fe0c7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:30:19 -0600 Subject: [PATCH 07/17] Headless: Dispose of inputmanager in a catch-all try --- src/Ryujinx/Headless/HeadlessRyujinx.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 5730254f7..d5d6eb44d 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -301,7 +301,10 @@ namespace Ryujinx.Headless _userChannelPersistence.ShouldRestart = false; } - _inputManager.Dispose(); + try + { + _inputManager.Dispose(); + } catch {} return; From 80f44d95473271269d01422517c0e8d530c8709c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:33:57 -0600 Subject: [PATCH 08/17] misc: chore: small cleanup --- src/Ryujinx/Headless/HeadlessRyujinx.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index d5d6eb44d..787aaca62 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -228,8 +228,6 @@ namespace Ryujinx.Headless _inputConfiguration ??= []; _enableKeyboard = option.EnableKeyboard; _enableMouse = option.EnableMouse; - - LoadPlayerConfiguration(option.InputProfile1Name, option.InputId1, PlayerIndex.Player1); LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2); @@ -341,12 +339,12 @@ namespace Ryujinx.Headless { string label = state switch { - LoadState => $"PTC : {current}/{total}", - ShaderCacheState => $"Shaders : {current}/{total}", - _ => throw new ArgumentException($"Unknown Progress Handler type {typeof(T)}"), + LoadState => "PTC", + ShaderCacheState => "Shaders", + _ => throw new ArgumentException($"Unknown Progress Handler type {typeof(T)}") }; - Logger.Info?.Print(LogClass.Application, label); + Logger.Info?.Print(LogClass.Application, $"{label} : {current}/{total}"); } private static WindowBase CreateWindow(Options options) From 2f93a0f706701e6b4c392ff1c1e64f20957402bb Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:38:29 -0600 Subject: [PATCH 09/17] infra: Conditionally compile Metal & OpenGL depending on if the target RuntimeIdentifier is mac --- src/Ryujinx/Ryujinx.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 8929ba3eb..682a08475 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -72,8 +72,8 @@ - - + + From beda3206e0a17ff8807fff1bbe014b24c2683e3d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:52:32 -0600 Subject: [PATCH 10/17] Only selectively compile Metal & fix some compilation issues --- src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 6 ++---- src/Ryujinx/Ryujinx.csproj | 2 +- src/Ryujinx/UI/Renderer/EmbeddedWindow.cs | 3 +-- src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs | 2 ++ 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index a35a79e86..e3a35376c 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -897,7 +897,7 @@ namespace Ryujinx.Ava { #pragma warning disable CA1416 // This call site is reachable on all platforms // SelectGraphicsBackend does a check for Mac, on top of checking if it's an ARM Mac. This isn't a problem. - GraphicsBackend.Metal => new MetalRenderer((RendererHost.EmbeddedWindow as EmbeddedWindowMetal)!.CreateSurface), + GraphicsBackend.Metal => new MetalRenderer(() => new SharpMetal.QuartzCore.CAMetalLayer(((EmbeddedWindowMetal)RendererHost.EmbeddedWindow).MetalLayer)), #pragma warning restore CA1416 GraphicsBackend.Vulkan => VulkanRenderer.Create( ConfigurationState.Instance.Graphics.PreferredGpu, diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index 7d75ac7c1..e92a56833 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -12,8 +12,6 @@ using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; -using Ryujinx.Graphics.Metal; -using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.Input; @@ -312,10 +310,10 @@ namespace Ryujinx.Headless if (options.GraphicsBackend == GraphicsBackend.Metal && window is MetalWindow metalWindow && OperatingSystem.IsMacOS()) { - return new MetalRenderer(metalWindow.GetLayer); + return new Graphics.Metal.MetalRenderer(metalWindow.GetLayer); } - return new OpenGLRenderer(); + return new Graphics.OpenGL.OpenGLRenderer(); } private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 682a08475..c7cdef14c 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -72,7 +72,7 @@ - + diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs index eea9be283..87b66e4f3 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs @@ -1,6 +1,5 @@ using Avalonia; using Avalonia.Controls; -using Avalonia.Input; using Avalonia.Platform; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; @@ -28,7 +27,7 @@ namespace Ryujinx.Ava.UI.Renderer protected nint WindowHandle { get; set; } protected nint X11Display { get; set; } protected nint NsView { get; set; } - protected nint MetalLayer { get; set; } + public nint MetalLayer { get; protected set; } public delegate void UpdateBoundsCallbackDelegate(Rect rect); private UpdateBoundsCallbackDelegate _updateBoundsCallback; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs index eaf6f7bdf..7a2932075 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs @@ -1,8 +1,10 @@ using SharpMetal.QuartzCore; using System; +using System.Runtime.Versioning; namespace Ryujinx.Ava.UI.Renderer { + [SupportedOSPlatform("macos")] public class EmbeddedWindowMetal : EmbeddedWindow { public CAMetalLayer CreateSurface() From e6bad52945e7e35e9aee7bd5b49a0918dd28a0e0 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:56:58 -0600 Subject: [PATCH 11/17] Revert "Only selectively compile Metal & fix some compilation issues" This reverts commit beda3206e0a17ff8807fff1bbe014b24c2683e3d. --- src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 6 ++++-- src/Ryujinx/Ryujinx.csproj | 2 +- src/Ryujinx/UI/Renderer/EmbeddedWindow.cs | 3 ++- src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs | 2 -- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index e3a35376c..a35a79e86 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -897,7 +897,7 @@ namespace Ryujinx.Ava { #pragma warning disable CA1416 // This call site is reachable on all platforms // SelectGraphicsBackend does a check for Mac, on top of checking if it's an ARM Mac. This isn't a problem. - GraphicsBackend.Metal => new MetalRenderer(() => new SharpMetal.QuartzCore.CAMetalLayer(((EmbeddedWindowMetal)RendererHost.EmbeddedWindow).MetalLayer)), + GraphicsBackend.Metal => new MetalRenderer((RendererHost.EmbeddedWindow as EmbeddedWindowMetal)!.CreateSurface), #pragma warning restore CA1416 GraphicsBackend.Vulkan => VulkanRenderer.Create( ConfigurationState.Instance.Graphics.PreferredGpu, diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index e92a56833..7d75ac7c1 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -12,6 +12,8 @@ using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; +using Ryujinx.Graphics.Metal; +using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.Input; @@ -310,10 +312,10 @@ namespace Ryujinx.Headless if (options.GraphicsBackend == GraphicsBackend.Metal && window is MetalWindow metalWindow && OperatingSystem.IsMacOS()) { - return new Graphics.Metal.MetalRenderer(metalWindow.GetLayer); + return new MetalRenderer(metalWindow.GetLayer); } - return new Graphics.OpenGL.OpenGLRenderer(); + return new OpenGLRenderer(); } private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index c7cdef14c..682a08475 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -72,7 +72,7 @@ - + diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs index 87b66e4f3..eea9be283 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs @@ -1,5 +1,6 @@ using Avalonia; using Avalonia.Controls; +using Avalonia.Input; using Avalonia.Platform; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; @@ -27,7 +28,7 @@ namespace Ryujinx.Ava.UI.Renderer protected nint WindowHandle { get; set; } protected nint X11Display { get; set; } protected nint NsView { get; set; } - public nint MetalLayer { get; protected set; } + protected nint MetalLayer { get; set; } public delegate void UpdateBoundsCallbackDelegate(Rect rect); private UpdateBoundsCallbackDelegate _updateBoundsCallback; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs index 7a2932075..eaf6f7bdf 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs @@ -1,10 +1,8 @@ using SharpMetal.QuartzCore; using System; -using System.Runtime.Versioning; namespace Ryujinx.Ava.UI.Renderer { - [SupportedOSPlatform("macos")] public class EmbeddedWindowMetal : EmbeddedWindow { public CAMetalLayer CreateSurface() From 580b150c9a1da8403f7e903caf47d7b775f9ff8e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:57:02 -0600 Subject: [PATCH 12/17] Revert "infra: Conditionally compile Metal & OpenGL depending on if the target RuntimeIdentifier is mac" This reverts commit 2f93a0f706701e6b4c392ff1c1e64f20957402bb. --- src/Ryujinx/Ryujinx.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 682a08475..8929ba3eb 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -72,8 +72,8 @@ - - + + From ade2f256e0abd0064410e01c35b29b6f662c70b5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 11:19:38 -0600 Subject: [PATCH 13/17] misc: chore: remove duplicate graphics debug levels in headless windows --- src/Ryujinx/Headless/Windows/OpenGLWindow.cs | 6 ++---- src/Ryujinx/Headless/Windows/VulkanWindow.cs | 3 --- src/Ryujinx/Headless/Windows/WindowBase.cs | 6 +++--- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/Headless/Windows/OpenGLWindow.cs b/src/Ryujinx/Headless/Windows/OpenGLWindow.cs index 23c64ad4f..117fe5780 100644 --- a/src/Ryujinx/Headless/Windows/OpenGLWindow.cs +++ b/src/Ryujinx/Headless/Windows/OpenGLWindow.cs @@ -108,8 +108,7 @@ namespace Ryujinx.Headless } } } - - private readonly GraphicsDebugLevel _glLogLevel; + private SDL2OpenGLContext _openGLContext; public OpenGLWindow( @@ -121,7 +120,6 @@ namespace Ryujinx.Headless bool ignoreControllerApplet) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { - _glLogLevel = glLogLevel; } public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_OPENGL; @@ -129,7 +127,7 @@ namespace Ryujinx.Headless protected override void InitializeWindowRenderer() { // Ensure to not share this context with other contexts before this point. - SetupOpenGLAttributes(false, _glLogLevel); + SetupOpenGLAttributes(false, GlLogLevel); nint context = SDL_GL_CreateContext(WindowHandle); CheckResult(SDL_GL_SetSwapInterval(1)); diff --git a/src/Ryujinx/Headless/Windows/VulkanWindow.cs b/src/Ryujinx/Headless/Windows/VulkanWindow.cs index 5f6de94a5..2abbbd1e9 100644 --- a/src/Ryujinx/Headless/Windows/VulkanWindow.cs +++ b/src/Ryujinx/Headless/Windows/VulkanWindow.cs @@ -10,8 +10,6 @@ namespace Ryujinx.Headless { class VulkanWindow : WindowBase { - private readonly GraphicsDebugLevel _glLogLevel; - public VulkanWindow( InputManager inputManager, GraphicsDebugLevel glLogLevel, @@ -21,7 +19,6 @@ namespace Ryujinx.Headless bool ignoreControllerApplet) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { - _glLogLevel = glLogLevel; } public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_VULKAN; diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index 51bfcb214..eea01763a 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -73,7 +73,7 @@ namespace Ryujinx.Headless protected SDL2MouseDriver MouseDriver; private readonly InputManager _inputManager; private readonly IKeyboard _keyboardInterface; - private readonly GraphicsDebugLevel _glLogLevel; + protected readonly GraphicsDebugLevel GlLogLevel; private readonly Stopwatch _chrono; private readonly long _ticksPerFrame; private readonly CancellationTokenSource _gpuCancellationTokenSource; @@ -105,7 +105,7 @@ namespace Ryujinx.Headless NpadManager = _inputManager.CreateNpadManager(); TouchScreenManager = _inputManager.CreateTouchScreenManager(); _keyboardInterface = (IKeyboard)_inputManager.KeyboardDriver.GetGamepad("0"); - _glLogLevel = glLogLevel; + GlLogLevel = glLogLevel; _chrono = new Stopwatch(); _ticksPerFrame = Stopwatch.Frequency / TargetFps; _gpuCancellationTokenSource = new CancellationTokenSource(); @@ -269,7 +269,7 @@ namespace Ryujinx.Headless { InitializeWindowRenderer(); - Device.Gpu.Renderer.Initialize(_glLogLevel); + Device.Gpu.Renderer.Initialize(GlLogLevel); InitializeRenderer(); From 6fca4492d04827df53a70984c43a1f29f8774423 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 15:15:08 -0600 Subject: [PATCH 14/17] misc: chore: Remove status update event stuff in Headless --- .../Headless/StatusUpdatedEventArgs.cs | 21 ------------------ src/Ryujinx/Headless/Windows/WindowBase.cs | 22 +++---------------- .../UI/Models/StatusUpdatedEventArgs.cs | 17 ++++++++++++++ 3 files changed, 20 insertions(+), 40 deletions(-) delete mode 100644 src/Ryujinx/Headless/StatusUpdatedEventArgs.cs diff --git a/src/Ryujinx/Headless/StatusUpdatedEventArgs.cs b/src/Ryujinx/Headless/StatusUpdatedEventArgs.cs deleted file mode 100644 index 6c76a43a1..000000000 --- a/src/Ryujinx/Headless/StatusUpdatedEventArgs.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; - -namespace Ryujinx.Headless -{ - class StatusUpdatedEventArgs( - string vSyncMode, - string dockedMode, - string aspectRatio, - string gameStatus, - string fifoStatus, - string gpuName) - : EventArgs - { - public string VSyncMode = vSyncMode; - public string DockedMode = dockedMode; - public string AspectRatio = aspectRatio; - public string GameStatus = gameStatus; - public string FifoStatus = fifoStatus; - public string GpuName = gpuName; - } -} diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index eea01763a..2ce8ad82b 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -1,13 +1,12 @@ using Humanizer; -using LibHac.Tools.Fs; using Ryujinx.Ava; +using Ryujinx.Ava.UI.Models; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; -using Ryujinx.Graphics.Gpu; using Ryujinx.Graphics.OpenGL; using Ryujinx.HLE.HOS.Applets; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; @@ -54,8 +53,6 @@ namespace Ryujinx.Headless public Switch Device { get; private set; } public IRenderer Renderer { get; private set; } - public event EventHandler StatusUpdatedEvent; - protected nint WindowHandle { get; set; } public IHostUITheme HostUITheme { get; } @@ -164,6 +161,8 @@ namespace Ryujinx.Headless } } + private StatusUpdatedEventArgs _lastStatus; + private void InitializeWindow() { var activeProcess = Device.Processes.ActiveApplication; @@ -309,21 +308,6 @@ namespace Ryujinx.Headless if (_ticks >= _ticksPerFrame) { - string dockedMode = Device.System.State.DockedMode ? "Docked" : "Handheld"; - float scale = GraphicsConfig.ResScale; - if (scale != 1) - { - dockedMode += $" ({scale}x)"; - } - - StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs( - Device.VSyncMode.ToString(), - dockedMode, - Device.Configuration.AspectRatio.ToText(), - $"{Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", - $"FIFO: {Device.Statistics.GetFifoPercent():0.00} %", - $"GPU: {_gpuDriverName}")); - _ticks = Math.Min(_ticks - _ticksPerFrame, _ticksPerFrame); } } diff --git a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs b/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs index 6f0f5ab5d..9755aad46 100644 --- a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs +++ b/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs @@ -22,5 +22,22 @@ namespace Ryujinx.Ava.UI.Models FifoStatus = fifoStatus; ShaderCount = shaderCount; } + + + public override bool Equals(object obj) + { + if (obj is not StatusUpdatedEventArgs suea) return false; + return + VSyncMode == suea.VSyncMode && + VolumeStatus == suea.VolumeStatus && + DockedMode == suea.DockedMode && + AspectRatio == suea.AspectRatio && + GameStatus == suea.GameStatus && + FifoStatus == suea.FifoStatus && + ShaderCount == suea.ShaderCount; + } + + public override int GetHashCode() + => HashCode.Combine(VSyncMode, VolumeStatus, AspectRatio, DockedMode, FifoStatus, GameStatus, ShaderCount); } } From 4868fface808dfc3a71d032712d782cc3c7c6507 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 15:33:05 -0600 Subject: [PATCH 15/17] UI: Intel Mac warning Upon launch, shows a warning about using an Intel Mac. This will only show once every boot. You can only turn it off by getting a better system. --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 2aaac4098..5a5fb502e 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Linq; +using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; @@ -136,6 +137,8 @@ namespace Ryujinx.Ava.UI.Windows base.OnApplyTemplate(e); NotificationHelper.SetNotificationManager(this); + + ShowIntelMacWarningAsync(); } private void OnScalingChanged(object sender, EventArgs e) @@ -731,5 +734,22 @@ namespace Ryujinx.Ava.UI.Windows (int)Symbol.Checkmark); }); } + + private static bool _intelMacWarningShown; + + public static async Task ShowIntelMacWarningAsync() + { + if (!_intelMacWarningShown && + (OperatingSystem.IsMacOS() && + (RuntimeInformation.OSArchitecture == Architecture.X64 || + RuntimeInformation.OSArchitecture == Architecture.X86))) + { + _intelMacWarningShown = true; + + await Dispatcher.UIThread.InvokeAsync(async () => await ContentDialogHelper.CreateWarningDialog( + "Intel Mac Warning", + "Intel Macs are not supported and will not work properly.\nIf you continue, do not come to our Discord asking for support.")); + } + } } } From 1bc30bf3badd705bb38800a0af65a9f5481ff16e Mon Sep 17 00:00:00 2001 From: Daenorth Date: Sun, 19 Jan 2025 01:40:51 +0100 Subject: [PATCH 16/17] Update locales.json (#538) Added a missing translation line --- src/Ryujinx/Assets/locales.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index d320c935e..5569506a4 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22660,7 +22660,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "Sist oppdatert: {0}", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22898,4 +22898,4 @@ } } ] -} \ No newline at end of file +} From ccdddac8fc7838ee09fdff8950371ef85421a4f2 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 19:34:22 -0600 Subject: [PATCH 17/17] Fix compile warnings --- src/Ryujinx/Headless/Windows/WindowBase.cs | 2 -- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index 2ce8ad82b..7017d1f59 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -161,8 +161,6 @@ namespace Ryujinx.Headless } } - private StatusUpdatedEventArgs _lastStatus; - private void InitializeWindow() { var activeProcess = Device.Processes.ActiveApplication; diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 5a5fb502e..6ac89b06c 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -138,7 +138,7 @@ namespace Ryujinx.Ava.UI.Windows NotificationHelper.SetNotificationManager(this); - ShowIntelMacWarningAsync(); + Executor.ExecuteBackgroundAsync(ShowIntelMacWarningAsync); } private void OnScalingChanged(object sender, EventArgs e)