From 48b9f2ab93bc9a52bdb401581815d46543bc1849 Mon Sep 17 00:00:00 2001 From: GreemDev Date: Tue, 26 Aug 2025 20:12:36 -0500 Subject: [PATCH 1/5] docs: compat: High on Life: Menus --- docs/compatibility.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 344756eb2..59b8f361f 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1440,6 +1440,7 @@ 0100C2700E338000,"Heroland",,playable,2020-08-05 15:35:39 01007AC00E012000,"HexaGravity",,playable,2021-05-28 13:47:48 01004E800F03C000,"Hidden",slow,ingame,2022-10-05 10:56:53 +0100C1101EE5A000,"High on Life",,menus,2025-08-26 19:11:00 0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio,ingame,2021-09-18 14:40:28 0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",crash,nothing,2021-11-03 08:34:19 0100F3D008436000,"Hiragana Pixel Party",,playable,2021-01-14 08:36:50 From f9927356568c36e93fe84d24d6d8a04680d1518e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hack=E8=8C=B6=E3=82=93?= Date: Wed, 27 Aug 2025 00:40:11 -0500 Subject: [PATCH 2/5] Nullify & Update Korean translation (ryubing/ryujinx!122) See merge request ryubing/ryujinx!122 --- assets/locales.json | 80 ++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/assets/locales.json b/assets/locales.json index 303c9ed02..e78605aaa 100644 --- a/assets/locales.json +++ b/assets/locales.json @@ -8579,7 +8579,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -9379,7 +9379,7 @@ "he_IL": "", "it_IT": "Ins", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Sett inn", "pl_PL": "", "pt_BR": "", @@ -9404,7 +9404,7 @@ "he_IL": "", "it_IT": "Canc", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Slett", "pl_PL": "", "pt_BR": "", @@ -9429,7 +9429,7 @@ "he_IL": "", "it_IT": "Pag. Su", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Side opp", "pl_PL": "", "pt_BR": "", @@ -9454,7 +9454,7 @@ "he_IL": "", "it_IT": "Pag. Giù", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Side ned", "pl_PL": "", "pt_BR": "", @@ -9479,7 +9479,7 @@ "he_IL": "", "it_IT": "Inizio", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Hjem", "pl_PL": "", "pt_BR": "", @@ -9504,7 +9504,7 @@ "he_IL": "", "it_IT": "Fine", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Avslutt", "pl_PL": "", "pt_BR": "", @@ -9529,7 +9529,7 @@ "he_IL": "", "it_IT": "Bloc Maiusc", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Skiftelås", "pl_PL": "", "pt_BR": "", @@ -9554,7 +9554,7 @@ "he_IL": "", "it_IT": "Bloc Scorr", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Rullelås", "pl_PL": "", "pt_BR": "", @@ -9579,7 +9579,7 @@ "he_IL": "", "it_IT": "Stamp", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Skjermbilde", "pl_PL": "", "pt_BR": "", @@ -9604,7 +9604,7 @@ "he_IL": "", "it_IT": "Pausa", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Stans midlertidig", "pl_PL": "", "pt_BR": "", @@ -9629,7 +9629,7 @@ "he_IL": "", "it_IT": "Bloc Num", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Numerisk Lås", "pl_PL": "", "pt_BR": "", @@ -9654,7 +9654,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "Tøm", "pl_PL": "", "pt_BR": "", @@ -10079,7 +10079,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10104,7 +10104,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10129,7 +10129,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10154,7 +10154,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10179,7 +10179,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10204,7 +10204,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10229,7 +10229,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10254,7 +10254,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10279,7 +10279,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10304,7 +10304,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10329,7 +10329,7 @@ "he_IL": "", "it_IT": "ò", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10354,7 +10354,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10379,7 +10379,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10404,7 +10404,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10429,7 +10429,7 @@ "he_IL": "", "it_IT": "'", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10454,7 +10454,7 @@ "he_IL": "", "it_IT": "ì", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10479,7 +10479,7 @@ "he_IL": "", "it_IT": "è", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10504,7 +10504,7 @@ "he_IL": "", "it_IT": "à", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10529,7 +10529,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10554,7 +10554,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10579,7 +10579,7 @@ "he_IL": "", "it_IT": "ù", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10604,7 +10604,7 @@ "he_IL": "", "it_IT": "<", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10904,7 +10904,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -10929,7 +10929,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -13679,7 +13679,7 @@ "he_IL": "ממשק תכנות אמיבו", "it_IT": "API Amiibo", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "API Amiibo", "pt_BR": "API Amiibo", @@ -15554,7 +15554,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "이 게임에 호환되지 않는 Amiibo 표시", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -19654,7 +19654,7 @@ "he_IL": "אמיבו", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": null, "no_NO": "", "pl_PL": "", "pt_BR": "", From 7319a2dafc9b0dc6ad961c9b419017c279a4ca2d Mon Sep 17 00:00:00 2001 From: shinyoyo Date: Wed, 27 Aug 2025 13:41:47 +0800 Subject: [PATCH 3/5] Nullify & update Simplified Chinese translation. (ryubing/ryujinx!124) See merge request ryubing/ryujinx!124 --- assets/locales.json | 114 ++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/assets/locales.json b/assets/locales.json index e78605aaa..64e086f4f 100644 --- a/assets/locales.json +++ b/assets/locales.json @@ -2563,7 +2563,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -4438,7 +4438,7 @@ "th_TH": "จีน", "tr_TR": "Çince", "uk_UA": "Китайська", - "zh_CN": "中文(简体)——无效", + "zh_CN": "中文(简体)", "zh_TW": "中文 (中國)" } }, @@ -4563,7 +4563,7 @@ "th_TH": "จีนตัวเต็ม (ไต้หวัน)", "tr_TR": "Tayvanca", "uk_UA": "Тайванська", - "zh_CN": "中文(繁体)——无效", + "zh_CN": "中文(繁体)", "zh_TW": "中文 (台灣)" } }, @@ -4663,7 +4663,7 @@ "th_TH": "จีน (ตัวย่อ)", "tr_TR": "Basitleştirilmiş Çince", "uk_UA": "Спрощена китайська", - "zh_CN": "简体中文(推荐)", + "zh_CN": "简体中文", "zh_TW": "簡體中文" } }, @@ -4688,7 +4688,7 @@ "th_TH": "จีน (ดั้งเดิม)", "tr_TR": "Geleneksel Çince", "uk_UA": "Традиційна китайська", - "zh_CN": "繁体中文(推荐)", + "zh_CN": "繁体中文", "zh_TW": "正體中文 (建議)" } }, @@ -5138,7 +5138,7 @@ "th_TH": "4 กิบบิไบต์", "tr_TR": "", "uk_UA": "4Гб", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -5163,7 +5163,7 @@ "th_TH": "6 กิบบิไบต์", "tr_TR": "", "uk_UA": "6Гб", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -5188,7 +5188,7 @@ "th_TH": "8 กิบบิไบต์", "tr_TR": "", "uk_UA": "8Гб", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -5213,7 +5213,7 @@ "th_TH": "12 กิบบิไบต์", "tr_TR": "", "uk_UA": "12Гб", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -5438,7 +5438,7 @@ "th_TH": "คูณ 2", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "2 倍" } }, @@ -5463,7 +5463,7 @@ "th_TH": "คูณ 4", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "4 倍" } }, @@ -5488,7 +5488,7 @@ "th_TH": "คูณ 8", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "8 倍" } }, @@ -5513,7 +5513,7 @@ "th_TH": "คูณ 16", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "16 倍" } }, @@ -8588,7 +8588,7 @@ "th_TH": "ตั้งค่าไฟ LED", "tr_TR": "", "uk_UA": "LED-підсвітка", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -9338,7 +9338,7 @@ "th_TH": "ปุ่ม Tab", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Tab 鍵" } }, @@ -9388,7 +9388,7 @@ "th_TH": "ปุ่ม Insert", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Insert 鍵" } }, @@ -9413,7 +9413,7 @@ "th_TH": "ปุ่ม Delete", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Delete 鍵" } }, @@ -9438,7 +9438,7 @@ "th_TH": "ปุ่ม Page Up", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "向上捲頁鍵" } }, @@ -9463,7 +9463,7 @@ "th_TH": "ปุ่ม Page Down", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "向下捲頁鍵" } }, @@ -9488,7 +9488,7 @@ "th_TH": "ปุ่ม Home", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Home 鍵" } }, @@ -9513,7 +9513,7 @@ "th_TH": "ปุ่ม End", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "End 鍵" } }, @@ -9538,7 +9538,7 @@ "th_TH": "ปุ่ม Caps Lock", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Caps Lock 鍵" } }, @@ -9563,7 +9563,7 @@ "th_TH": "ปุ่ม Scroll Lock", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Scroll Lock 鍵" } }, @@ -9588,7 +9588,7 @@ "th_TH": "ปุ่ม Print Screen", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Print Screen 鍵" } }, @@ -9613,7 +9613,7 @@ "th_TH": "ปุ่ม Pause", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Pause 鍵" } }, @@ -9638,7 +9638,7 @@ "th_TH": "ปุ่ม Num Lock", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": "Num Lock 鍵" } }, @@ -10088,7 +10088,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10113,7 +10113,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10138,7 +10138,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10163,7 +10163,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10188,7 +10188,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10213,7 +10213,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10238,7 +10238,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10263,7 +10263,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10288,7 +10288,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10313,7 +10313,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10338,7 +10338,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10363,7 +10363,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10388,7 +10388,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10413,7 +10413,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10438,7 +10438,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10463,7 +10463,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10488,7 +10488,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10513,7 +10513,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10538,7 +10538,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10563,7 +10563,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10588,7 +10588,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -10613,7 +10613,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -13613,7 +13613,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -13688,7 +13688,7 @@ "th_TH": "อามิโบ้ API", "tr_TR": "", "uk_UA": "API Amiibo", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -15563,7 +15563,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "显示与此游戏不兼容的 Amiibo", "zh_TW": "" } }, @@ -17538,7 +17538,7 @@ "th_TH": "ซีพียู", "tr_TR": "İşlemci", "uk_UA": "Процесор", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -19663,7 +19663,7 @@ "th_TH": "อมิโบ้", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -20488,7 +20488,7 @@ "th_TH": "{0:n0} เมกะไบต์", "tr_TR": "", "uk_UA": "{0:n0} Мб", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -22863,7 +22863,7 @@ "th_TH": "(สาธารณะ)", "tr_TR": "", "uk_UA": "(публічний)", - "zh_CN": "(公开的)", + "zh_CN": "(公开)", "zh_TW": "(公開模式)" } }, @@ -23063,7 +23063,7 @@ "th_TH": "เปลี่ยนโหมด", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": null, "zh_TW": null } }, @@ -23713,7 +23713,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "状态", "zh_TW": "" } }, From 86179dbeafa8eccb159cd5a7a9d54cf100e32462 Mon Sep 17 00:00:00 2001 From: Vova Date: Wed, 20 Aug 2025 20:25:30 +1000 Subject: [PATCH 4/5] Fix Crash TMNT Shredder's Revenges --- src/Ryujinx.Common/Configuration/DirtyHack.cs | 3 ++- .../HOS/Services/Nv/INvDrvServices.cs | 19 +++++++++++++++++++ .../ConfigurationState.Migration.cs | 1 + .../Configuration/ConfigurationState.Model.cs | 7 +++++++ .../UI/ViewModels/SettingsHacksViewModel.cs | 12 +++++++++++- .../UI/ViewModels/SettingsViewModel.cs | 1 + .../UI/Views/Settings/SettingsHacksView.axaml | 14 ++++++++++++++ 7 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/DirtyHack.cs b/src/Ryujinx.Common/Configuration/DirtyHack.cs index ae3416a27..dae46ddba 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHack.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHack.cs @@ -10,7 +10,8 @@ namespace Ryujinx.Common.Configuration { Xc2MenuSoftlockFix = 1, // ShaderTranslationDelay = 2 - NifmServiceDisableIsAnyInternetRequestAccepted = 3 + NifmServiceDisableIsAnyInternetRequestAccepted = 3, + TMNT_SRFix = 4 } public readonly struct EnabledDirtyHack(DirtyHack hack, int value) diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs b/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs index fea09ef47..60c428c1a 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs @@ -1,4 +1,5 @@ using Ryujinx.Common; +using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Cpu; using Ryujinx.HLE.Exceptions; @@ -12,6 +13,7 @@ using Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostDbgGpu; using Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostProfGpu; using Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvMap; using Ryujinx.HLE.HOS.Services.Nv.Types; +using Ryujinx.HLE.HOS.Tamper.Operations; using Ryujinx.Memory; using System; using System.Collections.Generic; @@ -46,6 +48,10 @@ namespace Ryujinx.HLE.HOS.Services.Nv { "/dev/nvhost-dbg-gpu", typeof(NvHostDbgGpuDeviceFile) }, { "/dev/nvhost-prof-gpu", typeof(NvHostProfGpuDeviceFile) }, }; + + + private const string TMNT_SRTitleId = "0100fe701475a000"; + private static bool IsTMNT_SR => TitleIDs.CurrentApplication.Value.OrDefault() is TMNT_SRTitleId; public static IdDictionary DeviceFileIdRegistry = new(); @@ -248,6 +254,19 @@ namespace Ryujinx.HLE.HOS.Services.Nv int fd = context.RequestData.ReadInt32(); NvIoctl ioctlCommand = context.RequestData.ReadStruct(); + if (context.Device.DirtyHacks.IsEnabled(DirtyHack.TMNT_SRFix) && IsTMNT_SR) + { + // Fix emulator crash before splash screen for + // TMNT Shredder's Revenges + + if ((ioctlCommand.Type == NvIoctl.NvMapCustomMagic && (ioctlCommand.Number == 0x05 || ioctlCommand.Number == 0x09)) || + (ioctlCommand.Type == NvIoctl.NvGpuAsMagic && (ioctlCommand.Number == 0x05 || ioctlCommand.Number == 0x06))) + { + System.Threading.Thread.Sleep(50); + Logger.Notice.Print(LogClass.ServiceNv, $"Type_{ioctlCommand.Type}, Command_{ioctlCommand.Number} Delay!"); + } + } + errorCode = GetIoctlArgument(context, ioctlCommand, out Span arguments); if (errorCode == NvResult.Success) diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index 57619aa70..373164b7d 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -166,6 +166,7 @@ namespace Ryujinx.Ava.Systems.Configuration DirtyHacks hacks = new(cff.DirtyHacks ?? []); Hacks.Xc2MenuSoftlockFix.Value = hacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix); + Hacks.TMNT_SRFix.Value = hacks.IsEnabled(DirtyHack.TMNT_SRFix); } diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs index bc8fdb40a..39872ebea 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs @@ -743,6 +743,8 @@ namespace Ryujinx.Ava.Systems.Configuration public ReactiveObject Xc2MenuSoftlockFix { get; private set; } + public ReactiveObject TMNT_SRFix { get; private set; } + public ReactiveObject DisableNifmIsAnyInternetRequestAccepted { get; private set; } public HacksSection() @@ -752,6 +754,8 @@ namespace Ryujinx.Ava.Systems.Configuration Xc2MenuSoftlockFix.Event += HackChanged; DisableNifmIsAnyInternetRequestAccepted = new ReactiveObject(); DisableNifmIsAnyInternetRequestAccepted.Event += HackChanged; + TMNT_SRFix = new ReactiveObject(); + TMNT_SRFix.Event += HackChanged; } private void HackChanged(object sender, ReactiveEventArgs rxe) @@ -785,6 +789,9 @@ namespace Ryujinx.Ava.Systems.Configuration if (DisableNifmIsAnyInternetRequestAccepted) Apply(DirtyHack.NifmServiceDisableIsAnyInternetRequestAccepted); + if (TMNT_SRFix) + Apply(DirtyHack.TMNT_SRFix); + return enabledHacks.ToArray(); void Apply(DirtyHack hack, int value = 0) diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs index 230887e34..b9637cd7f 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Ava.UI.ViewModels [ObservableProperty] private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; [ObservableProperty] private bool _nifmDisableIsAnyInternetRequestAccepted = ConfigurationState.Instance.Hacks.DisableNifmIsAnyInternetRequestAccepted; - + [ObservableProperty] private bool _TMNT_SRFix = ConfigurationState.Instance.Hacks.TMNT_SRFix; public static string Xc2MenuFixTooltip { get; } = Lambda.String(sb => { sb.AppendLine( @@ -39,5 +39,15 @@ namespace Ryujinx.Ava.UI.ViewModels sb.Append("Lets DOOM 2016 go in game."); }); + + public static string TMNT_SRFixTooltip { get; } = Lambda.String(sb => + { + sb.AppendLine( + "This fix adds an extra 50 ms to some Ioctl service calls. This prevents the game from crashing when the cutscene starts.") + .AppendLine(); + + sb.Append( + "Just give the game some time to properly interact with guest memory"); + }); } } diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 54fd951fb..4c920baa1 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -856,6 +856,7 @@ namespace Ryujinx.Ava.UI.ViewModels config.Hacks.Xc2MenuSoftlockFix.Value = DirtyHacks.Xc2MenuSoftlockFix; config.Hacks.DisableNifmIsAnyInternetRequestAccepted.Value = DirtyHacks.NifmDisableIsAnyInternetRequestAccepted; + config.Hacks.TMNT_SRFix.Value = DirtyHacks.TMNT_SRFix; config.ToFileFormat().SaveConfig(Program.ConfigurationPath); diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index 229f9e866..256ce7af9 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -55,6 +55,20 @@ VerticalAlignment="Center" Text="Disable IsAnyInternetRequestAccepted" /> + + + + + + From 0e57943d37191f3084fcc0f429bf2cc75b39bc57 Mon Sep 17 00:00:00 2001 From: Vova Date: Tue, 26 Aug 2025 09:45:00 +1000 Subject: [PATCH 5/5] Optimization: Removed additional delays for services that did not affect the solution of the problem --- src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs b/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs index 60c428c1a..05954b927 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs @@ -259,8 +259,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv // Fix emulator crash before splash screen for // TMNT Shredder's Revenges - if ((ioctlCommand.Type == NvIoctl.NvMapCustomMagic && (ioctlCommand.Number == 0x05 || ioctlCommand.Number == 0x09)) || - (ioctlCommand.Type == NvIoctl.NvGpuAsMagic && (ioctlCommand.Number == 0x05 || ioctlCommand.Number == 0x06))) + if ((ioctlCommand.Type == NvIoctl.NvGpuAsMagic && (ioctlCommand.Number == 0x05 || ioctlCommand.Number == 0x06))) { System.Threading.Thread.Sleep(50); Logger.Notice.Print(LogClass.ServiceNv, $"Type_{ioctlCommand.Type}, Command_{ioctlCommand.Number} Delay!");