From d87d3235e9a25d7bdcf9e2486d59f697ca8580aa Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 22:06:20 -0600 Subject: [PATCH 01/24] misc: chore: Move the windows that are shown via ContentDialogs out of Ryujinx.Ava.UI.Windows (they're not windows) --- src/Ryujinx/AppHost.cs | 2 -- .../UI/Controls/ApplicationContextMenu.axaml.cs | 7 ++++--- src/Ryujinx/UI/{Windows => Helpers}/IconColorPicker.cs | 4 ++-- src/Ryujinx/{ => UI}/RyujinxApp.axaml | 0 src/Ryujinx/{ => UI}/RyujinxApp.axaml.cs | 4 +++- .../AboutWindow.axaml => Views/Dialog/AboutView.axaml} | 2 +- .../Dialog/AboutView.axaml.cs} | 10 ++++------ .../Views/{Misc => Dialog}/ApplicationDataView.axaml | 2 +- .../{Misc => Dialog}/ApplicationDataView.axaml.cs | 2 +- .../UI/Views/{Misc => Dialog}/DlcSelectView.axaml | 2 +- .../UI/Views/{Misc => Dialog}/DlcSelectView.axaml.cs | 2 +- .../Dialog/DownloadableContentManagerView.axaml} | 2 +- .../Dialog/DownloadableContentManagerView.axaml.cs} | 10 +++++----- .../Dialog/ModManagerView.axaml} | 2 +- .../Dialog/ModManagerView.axaml.cs} | 10 +++++----- .../Dialog/TitleUpdateManagerView.axaml} | 2 +- .../Dialog/TitleUpdateManagerView.axaml.cs} | 10 +++++----- .../Dialog/XciTrimmerView.axaml} | 2 +- .../Dialog/XciTrimmerView.axaml.cs} | 10 +++++----- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs | 6 +++--- 20 files changed, 45 insertions(+), 46 deletions(-) rename src/Ryujinx/UI/{Windows => Helpers}/IconColorPicker.cs (98%) rename src/Ryujinx/{ => UI}/RyujinxApp.axaml (100%) rename src/Ryujinx/{ => UI}/RyujinxApp.axaml.cs (98%) rename src/Ryujinx/UI/{Windows/AboutWindow.axaml => Views/Dialog/AboutView.axaml} (99%) rename src/Ryujinx/UI/{Windows/AboutWindow.axaml.cs => Views/Dialog/AboutView.axaml.cs} (85%) rename src/Ryujinx/UI/Views/{Misc => Dialog}/ApplicationDataView.axaml (99%) rename src/Ryujinx/UI/Views/{Misc => Dialog}/ApplicationDataView.axaml.cs (98%) rename src/Ryujinx/UI/Views/{Misc => Dialog}/DlcSelectView.axaml (98%) rename src/Ryujinx/UI/Views/{Misc => Dialog}/DlcSelectView.axaml.cs (96%) rename src/Ryujinx/UI/{Windows/DownloadableContentManagerWindow.axaml => Views/Dialog/DownloadableContentManagerView.axaml} (99%) rename src/Ryujinx/UI/{Windows/DownloadableContentManagerWindow.axaml.cs => Views/Dialog/DownloadableContentManagerView.axaml.cs} (88%) rename src/Ryujinx/UI/{Windows/ModManagerWindow.axaml => Views/Dialog/ModManagerView.axaml} (99%) rename src/Ryujinx/UI/{Windows/ModManagerWindow.axaml.cs => Views/Dialog/ModManagerView.axaml.cs} (93%) rename src/Ryujinx/UI/{Windows/TitleUpdateWindow.axaml => Views/Dialog/TitleUpdateManagerView.axaml} (99%) rename src/Ryujinx/UI/{Windows/TitleUpdateWindow.axaml.cs => Views/Dialog/TitleUpdateManagerView.axaml.cs} (87%) rename src/Ryujinx/UI/{Windows/XCITrimmerWindow.axaml => Views/Dialog/XciTrimmerView.axaml} (99%) rename src/Ryujinx/UI/{Windows/XCITrimmerWindow.axaml.cs => Views/Dialog/XciTrimmerView.axaml.cs} (90%) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 13f36d695..04aae204b 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -6,7 +6,6 @@ using Avalonia.Threading; using DiscordRPC; using LibHac.Common; using LibHac.Ns; -using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.Dummy; using Ryujinx.Audio.Backends.OpenAL; using Ryujinx.Audio.Backends.SDL2; @@ -35,7 +34,6 @@ using Ryujinx.Graphics.GAL.Multithreading; using Ryujinx.Graphics.Gpu; using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; -using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index 9635582c8..cd1f47483 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -13,6 +13,7 @@ using Ryujinx.Ava.UI.Views.Misc; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.UI.Views.Dialog; using Ryujinx.Common.Configuration; using Ryujinx.Common.Helper; using Ryujinx.HLE.HOS; @@ -80,13 +81,13 @@ namespace Ryujinx.Ava.UI.Controls public async void OpenTitleUpdateManager_Click(object sender, RoutedEventArgs args) { if (sender is MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) - await TitleUpdateWindow.Show(viewModel.ApplicationLibrary, viewModel.SelectedApplication); + await TitleUpdateManagerView.Show(viewModel.ApplicationLibrary, viewModel.SelectedApplication); } public async void OpenDownloadableContentManager_Click(object sender, RoutedEventArgs args) { if (sender is MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) - await DownloadableContentManagerWindow.Show(viewModel.ApplicationLibrary, viewModel.SelectedApplication); + await DownloadableContentManagerView.Show(viewModel.ApplicationLibrary, viewModel.SelectedApplication); } public async void OpenCheatManager_Click(object sender, RoutedEventArgs args) @@ -127,7 +128,7 @@ namespace Ryujinx.Ava.UI.Controls public async void OpenModManager_Click(object sender, RoutedEventArgs args) { if (sender is MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) - await ModManagerWindow.Show( + await ModManagerView.Show( viewModel.SelectedApplication.Id, viewModel.SelectedApplication.IdBase, viewModel.ApplicationLibrary, diff --git a/src/Ryujinx/UI/Windows/IconColorPicker.cs b/src/Ryujinx/UI/Helpers/IconColorPicker.cs similarity index 98% rename from src/Ryujinx/UI/Windows/IconColorPicker.cs rename to src/Ryujinx/UI/Helpers/IconColorPicker.cs index ca9ac2c05..b6ee8bbbf 100644 --- a/src/Ryujinx/UI/Windows/IconColorPicker.cs +++ b/src/Ryujinx/UI/Helpers/IconColorPicker.cs @@ -2,9 +2,9 @@ using SkiaSharp; using System; using System.Collections.Generic; -namespace Ryujinx.Ava.UI.Windows +namespace Ryujinx.Ava.UI.Helpers { - static class IconColorPicker + public static class IconColorPicker { private const int ColorsPerLine = 64; private const int TotalColors = ColorsPerLine * ColorsPerLine; diff --git a/src/Ryujinx/RyujinxApp.axaml b/src/Ryujinx/UI/RyujinxApp.axaml similarity index 100% rename from src/Ryujinx/RyujinxApp.axaml rename to src/Ryujinx/UI/RyujinxApp.axaml diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/UI/RyujinxApp.axaml.cs similarity index 98% rename from src/Ryujinx/RyujinxApp.axaml.cs rename to src/Ryujinx/UI/RyujinxApp.axaml.cs index 0a0f0a13c..c84454d50 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/UI/RyujinxApp.axaml.cs @@ -13,6 +13,8 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.UI.Views.Dialog; +using Ryujinx.Ava.UI.Views.Misc; using Ryujinx.Common; using Ryujinx.Common.Logging; using System; @@ -150,7 +152,7 @@ namespace Ryujinx.Ava private async void AboutRyujinx_OnClick(object sender, EventArgs e) { - await AboutWindow.Show(); + await AboutView.Show(); } } } diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml b/src/Ryujinx/UI/Views/Dialog/AboutView.axaml similarity index 99% rename from src/Ryujinx/UI/Windows/AboutWindow.axaml rename to src/Ryujinx/UI/Views/Dialog/AboutView.axaml index e215cf27e..4c3da21e4 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml +++ b/src/Ryujinx/UI/Views/Dialog/AboutView.axaml @@ -1,5 +1,5 @@ + public partial class AboutView : RyujinxControl { - public AboutWindow() + public AboutView() { InitializeComponent(); @@ -34,7 +32,7 @@ namespace Ryujinx.Ava.UI.Windows PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = LocaleManager.Instance[LocaleKeys.UserProfilesClose], - Content = new AboutWindow { ViewModel = viewModel } + Content = new AboutView { ViewModel = viewModel } }; await ContentDialogHelper.ShowAsync(contentDialog.ApplyStyles()); diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml b/src/Ryujinx/UI/Views/Dialog/ApplicationDataView.axaml similarity index 99% rename from src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml rename to src/Ryujinx/UI/Views/Dialog/ApplicationDataView.axaml index a36b637ec..7ba4ad784 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml +++ b/src/Ryujinx/UI/Views/Dialog/ApplicationDataView.axaml @@ -7,7 +7,7 @@ xmlns:ui="using:FluentAvalonia.UI.Controls" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" - x:Class="Ryujinx.Ava.UI.Views.Misc.ApplicationDataView" + x:Class="Ryujinx.Ava.UI.Views.Dialog.ApplicationDataView" x:DataType="viewModels:ApplicationDataViewModel"> { diff --git a/src/Ryujinx/UI/Views/Misc/DlcSelectView.axaml b/src/Ryujinx/UI/Views/Dialog/DlcSelectView.axaml similarity index 98% rename from src/Ryujinx/UI/Views/Misc/DlcSelectView.axaml rename to src/Ryujinx/UI/Views/Dialog/DlcSelectView.axaml index f44bc3261..05d1f7ae5 100644 --- a/src/Ryujinx/UI/Views/Misc/DlcSelectView.axaml +++ b/src/Ryujinx/UI/Views/Dialog/DlcSelectView.axaml @@ -7,7 +7,7 @@ xmlns:models="using:Ryujinx.Ava.Common.Models" xmlns:viewModels="using:Ryujinx.Ava.UI.ViewModels" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" - x:Class="Ryujinx.Ava.UI.Views.Misc.DlcSelectView" + x:Class="Ryujinx.Ava.UI.Views.Dialog.DlcSelectView" x:DataType="viewModels:DlcSelectViewModel"> { diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml b/src/Ryujinx/UI/Views/Dialog/DownloadableContentManagerView.axaml similarity index 99% rename from src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml rename to src/Ryujinx/UI/Views/Dialog/DownloadableContentManagerView.axaml index e2c4fe16e..8b97a4822 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml +++ b/src/Ryujinx/UI/Views/Dialog/DownloadableContentManagerView.axaml @@ -1,5 +1,5 @@ diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs b/src/Ryujinx/UI/Views/Dialog/ModManagerView.axaml.cs similarity index 93% rename from src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs rename to src/Ryujinx/UI/Views/Dialog/ModManagerView.axaml.cs index e51d1ca4a..08a956aa7 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Views/Dialog/ModManagerView.axaml.cs @@ -11,20 +11,20 @@ using Ryujinx.Common.Helper; using System.Threading.Tasks; using Button = Avalonia.Controls.Button; -namespace Ryujinx.Ava.UI.Windows +namespace Ryujinx.Ava.UI.Views.Dialog { - public partial class ModManagerWindow : UserControl + public partial class ModManagerView : UserControl { public readonly ModManagerViewModel ViewModel; - public ModManagerWindow() + public ModManagerView() { DataContext = this; InitializeComponent(); } - public ModManagerWindow(ulong titleId, ulong titleIdBase, ApplicationLibrary applicationLibrary) + public ModManagerView(ulong titleId, ulong titleIdBase, ApplicationLibrary applicationLibrary) { DataContext = ViewModel = new ModManagerViewModel(titleId, titleIdBase, applicationLibrary); @@ -38,7 +38,7 @@ namespace Ryujinx.Ava.UI.Windows PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = string.Empty, - Content = new ModManagerWindow(titleId, titleIdBase, appLibrary), + Content = new ModManagerView(titleId, titleIdBase, appLibrary), Title = string.Format(LocaleManager.Instance[LocaleKeys.ModWindowTitle], titleName, titleId.ToString("X16")), }; diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml b/src/Ryujinx/UI/Views/Dialog/TitleUpdateManagerView.axaml similarity index 99% rename from src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml rename to src/Ryujinx/UI/Views/Dialog/TitleUpdateManagerView.axaml index 4da727db5..ba3e85e8b 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml +++ b/src/Ryujinx/UI/Views/Dialog/TitleUpdateManagerView.axaml @@ -1,5 +1,5 @@ CompatibilityListWindow.Show()); UpdateMenuItem.Command = MainWindowViewModel.UpdateCommand; From dfcb8a7fc0846c653e008828c03c10d10b4ab5b2 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 22:18:13 -0600 Subject: [PATCH 02/24] misc: chore: Use RyujinxControl in more places --- src/Ryujinx/Common/XCITrimmerLog.cs | 4 +- ...merViewModel.cs => XciTrimmerViewModel.cs} | 8 +- .../DownloadableContentManagerView.axaml.cs | 19 ++--- .../UI/Views/Dialog/ModManagerView.axaml.cs | 19 ++--- .../Dialog/TitleUpdateManagerView.axaml.cs | 19 ++--- .../UI/Views/Dialog/XciTrimmerView.axaml | 4 +- .../UI/Views/Dialog/XciTrimmerView.axaml.cs | 21 ++--- .../Settings/SettingsHotkeysView.axaml.cs | 80 ++++++++++--------- .../Settings/SettingsNetworkView.axaml.cs | 6 +- .../Settings/SettingsSystemView.axaml.cs | 5 +- .../UI/Views/Settings/SettingsUIView.axaml.cs | 11 ++- 11 files changed, 85 insertions(+), 111 deletions(-) rename src/Ryujinx/UI/ViewModels/{XCITrimmerViewModel.cs => XciTrimmerViewModel.cs} (98%) diff --git a/src/Ryujinx/Common/XCITrimmerLog.cs b/src/Ryujinx/Common/XCITrimmerLog.cs index b661d918d..751831a66 100644 --- a/src/Ryujinx/Common/XCITrimmerLog.cs +++ b/src/Ryujinx/Common/XCITrimmerLog.cs @@ -26,9 +26,9 @@ namespace Ryujinx.Ava.Common internal class TrimmerWindow : Ryujinx.Common.Logging.XCIFileTrimmerLog { - private readonly XCITrimmerViewModel _viewModel; + private readonly XciTrimmerViewModel _viewModel; - public TrimmerWindow(XCITrimmerViewModel viewModel) + public TrimmerWindow(XciTrimmerViewModel viewModel) { _viewModel = viewModel; } diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs similarity index 98% rename from src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs rename to src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs index a48efcbd5..2085ffe26 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs @@ -16,7 +16,7 @@ using static Ryujinx.Common.Utilities.XCIFileTrimmer; namespace Ryujinx.Ava.UI.ViewModels { - public class XCITrimmerViewModel : BaseModel + public class XciTrimmerViewModel : BaseModel { private const long _bytesPerMB = 1024 * 1024; private enum ProcessingMode @@ -46,7 +46,7 @@ namespace Ryujinx.Ava.UI.ViewModels private SortField _sortField = SortField.Name; private bool _sortAscending = true; - public XCITrimmerViewModel(MainWindowViewModel mainWindowViewModel) + public XciTrimmerViewModel(MainWindowViewModel mainWindowViewModel) { _logger = new XCITrimmerLog.TrimmerWindow(this); _mainWindowViewModel = mainWindowViewModel; @@ -254,9 +254,9 @@ namespace Ryujinx.Ava.UI.ViewModels private class CompareXCITrimmerFiles : IComparer { - private XCITrimmerViewModel _viewModel; + private XciTrimmerViewModel _viewModel; - public CompareXCITrimmerFiles(XCITrimmerViewModel ViewModel) + public CompareXCITrimmerFiles(XciTrimmerViewModel ViewModel) { _viewModel = ViewModel; } diff --git a/src/Ryujinx/UI/Views/Dialog/DownloadableContentManagerView.axaml.cs b/src/Ryujinx/UI/Views/Dialog/DownloadableContentManagerView.axaml.cs index 2863c7fba..71461b81e 100644 --- a/src/Ryujinx/UI/Views/Dialog/DownloadableContentManagerView.axaml.cs +++ b/src/Ryujinx/UI/Views/Dialog/DownloadableContentManagerView.axaml.cs @@ -6,26 +6,16 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Common.Helper; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Views.Dialog { - public partial class DownloadableContentManagerView : UserControl + public partial class DownloadableContentManagerView : RyujinxControl { - public DownloadableContentManagerViewModel ViewModel; - public DownloadableContentManagerView() { - DataContext = this; - - InitializeComponent(); - } - - public DownloadableContentManagerView(ApplicationLibrary applicationLibrary, ApplicationData applicationData) - { - DataContext = ViewModel = new DownloadableContentManagerViewModel(applicationLibrary, applicationData); - InitializeComponent(); } @@ -36,8 +26,11 @@ namespace Ryujinx.Ava.UI.Views.Dialog PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = string.Empty, - Content = new DownloadableContentManagerView(applicationLibrary, applicationData), Title = string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowTitle], applicationData.Name, applicationData.IdBaseString), + Content = new DownloadableContentManagerView + { + ViewModel = new DownloadableContentManagerViewModel(applicationLibrary, applicationData) + } }; Style bottomBorder = new(x => x.OfType().Name("DialogSpace").Child().OfType()); diff --git a/src/Ryujinx/UI/Views/Dialog/ModManagerView.axaml.cs b/src/Ryujinx/UI/Views/Dialog/ModManagerView.axaml.cs index 08a956aa7..8735e2911 100644 --- a/src/Ryujinx/UI/Views/Dialog/ModManagerView.axaml.cs +++ b/src/Ryujinx/UI/Views/Dialog/ModManagerView.axaml.cs @@ -7,27 +7,17 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Common.Helper; using System.Threading.Tasks; using Button = Avalonia.Controls.Button; namespace Ryujinx.Ava.UI.Views.Dialog { - public partial class ModManagerView : UserControl + public partial class ModManagerView : RyujinxControl { - public readonly ModManagerViewModel ViewModel; - public ModManagerView() { - DataContext = this; - - InitializeComponent(); - } - - public ModManagerView(ulong titleId, ulong titleIdBase, ApplicationLibrary applicationLibrary) - { - DataContext = ViewModel = new ModManagerViewModel(titleId, titleIdBase, applicationLibrary); - InitializeComponent(); } @@ -38,7 +28,10 @@ namespace Ryujinx.Ava.UI.Views.Dialog PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = string.Empty, - Content = new ModManagerView(titleId, titleIdBase, appLibrary), + Content = new ModManagerView + { + ViewModel = new ModManagerViewModel(titleId, titleIdBase, appLibrary) + }, Title = string.Format(LocaleManager.Instance[LocaleKeys.ModWindowTitle], titleName, titleId.ToString("X16")), }; diff --git a/src/Ryujinx/UI/Views/Dialog/TitleUpdateManagerView.axaml.cs b/src/Ryujinx/UI/Views/Dialog/TitleUpdateManagerView.axaml.cs index 96b47c2d3..bfff33592 100644 --- a/src/Ryujinx/UI/Views/Dialog/TitleUpdateManagerView.axaml.cs +++ b/src/Ryujinx/UI/Views/Dialog/TitleUpdateManagerView.axaml.cs @@ -6,26 +6,16 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Common.Helper; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Views.Dialog { - public partial class TitleUpdateManagerView : UserControl + public partial class TitleUpdateManagerView : RyujinxControl { - public readonly TitleUpdateViewModel ViewModel; - public TitleUpdateManagerView() { - DataContext = this; - - InitializeComponent(); - } - - public TitleUpdateManagerView(ApplicationLibrary applicationLibrary, ApplicationData applicationData) - { - DataContext = ViewModel = new TitleUpdateViewModel(applicationLibrary, applicationData); - InitializeComponent(); } @@ -36,8 +26,11 @@ namespace Ryujinx.Ava.UI.Views.Dialog PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = string.Empty, - Content = new TitleUpdateManagerView(applicationLibrary, applicationData), Title = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.GameUpdateWindowHeading, applicationData.Name, applicationData.IdBaseString), + Content = new TitleUpdateManagerView + { + ViewModel = new TitleUpdateViewModel(applicationLibrary, applicationData) + } }; Style bottomBorder = new(x => x.OfType().Name("DialogSpace").Child().OfType()); diff --git a/src/Ryujinx/UI/Views/Dialog/XciTrimmerView.axaml b/src/Ryujinx/UI/Views/Dialog/XciTrimmerView.axaml index 70b9ac79c..d149d246c 100644 --- a/src/Ryujinx/UI/Views/Dialog/XciTrimmerView.axaml +++ b/src/Ryujinx/UI/Views/Dialog/XciTrimmerView.axaml @@ -10,7 +10,7 @@ xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models" Width="700" Height="600" - x:DataType="viewModels:XCITrimmerViewModel" + x:DataType="viewModels:XciTrimmerViewModel" Focusable="True" mc:Ignorable="d"> @@ -151,7 +151,7 @@ HorizontalAlignment="Stretch" VerticalAlignment="Center" CornerRadius="5" - IsVisible="{Binding $parent[UserControl].((viewModels:XCITrimmerViewModel)DataContext).Processing}" + IsVisible="{Binding $parent[UserControl].((viewModels:XciTrimmerViewModel)DataContext).Processing}" Maximum="100" Minimum="0" Value="{Binding PercentageProgress}" /> diff --git a/src/Ryujinx/UI/Views/Dialog/XciTrimmerView.axaml.cs b/src/Ryujinx/UI/Views/Dialog/XciTrimmerView.axaml.cs index 166fd210b..8fb8c151c 100644 --- a/src/Ryujinx/UI/Views/Dialog/XciTrimmerView.axaml.cs +++ b/src/Ryujinx/UI/Views/Dialog/XciTrimmerView.axaml.cs @@ -4,27 +4,17 @@ using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.ViewModels; using System; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Views.Dialog { - public partial class XciTrimmerView : UserControl + public partial class XciTrimmerView : RyujinxControl { - public XCITrimmerViewModel ViewModel; - public XciTrimmerView() { - DataContext = this; - - InitializeComponent(); - } - - public XciTrimmerView(MainWindowViewModel mainWindowViewModel) - { - DataContext = ViewModel = new XCITrimmerViewModel(mainWindowViewModel); - InitializeComponent(); } @@ -35,7 +25,10 @@ namespace Ryujinx.Ava.UI.Views.Dialog PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = string.Empty, - Content = new XciTrimmerView(RyujinxApp.MainWindow.ViewModel), + Content = new XciTrimmerView + { + ViewModel = new XciTrimmerViewModel(RyujinxApp.MainWindow.ViewModel) + }, Title = LocaleManager.Instance[LocaleKeys.XCITrimmerWindowTitle] }; @@ -70,7 +63,7 @@ namespace Ryujinx.Ava.UI.Views.Dialog public void Sort_Checked(object sender, RoutedEventArgs args) { if (sender is RadioButton { Tag: string sortField }) - ViewModel.SortingField = Enum.Parse(sortField); + ViewModel.SortingField = Enum.Parse(sortField); } public void Order_Checked(object sender, RoutedEventArgs args) diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs index d3d1537e0..46693374a 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs @@ -3,7 +3,9 @@ using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.LogicalTree; +using Avalonia.Threading; using Ryujinx.Ava.Input; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Input; @@ -13,7 +15,7 @@ using Key = Ryujinx.Common.Configuration.Hid.Key; namespace Ryujinx.Ava.UI.Views.Settings { - public partial class SettingsHotkeysView : UserControl + public partial class SettingsHotkeysView : RyujinxControl { private ButtonKeyAssigner _currentAssigner; private readonly IGamepadDriver _avaloniaKeyboardDriver; @@ -78,45 +80,49 @@ namespace Ryujinx.Ava.UI.Views.Settings { if (e.ButtonValue.HasValue) { - SettingsViewModel viewModel = (DataContext) as SettingsViewModel; Button buttonValue = e.ButtonValue.Value; - switch (button.Name) + Dispatcher.UIThread.Post(() => { - case "ToggleVSyncMode": - viewModel.KeyboardHotkey.ToggleVSyncMode = buttonValue.AsHidType(); - break; - case "Screenshot": - viewModel.KeyboardHotkey.Screenshot = buttonValue.AsHidType(); - break; - case "ShowUI": - viewModel.KeyboardHotkey.ShowUI = buttonValue.AsHidType(); - break; - case "Pause": - viewModel.KeyboardHotkey.Pause = buttonValue.AsHidType(); - break; - case "ToggleMute": - viewModel.KeyboardHotkey.ToggleMute = buttonValue.AsHidType(); - break; - case "ResScaleUp": - viewModel.KeyboardHotkey.ResScaleUp = buttonValue.AsHidType(); - break; - case "ResScaleDown": - viewModel.KeyboardHotkey.ResScaleDown = buttonValue.AsHidType(); - break; - case "VolumeUp": - viewModel.KeyboardHotkey.VolumeUp = buttonValue.AsHidType(); - break; - case "VolumeDown": - viewModel.KeyboardHotkey.VolumeDown = buttonValue.AsHidType(); - break; - case "CustomVSyncIntervalIncrement": - viewModel.KeyboardHotkey.CustomVSyncIntervalIncrement = buttonValue.AsHidType(); - break; - case "CustomVSyncIntervalDecrement": - viewModel.KeyboardHotkey.CustomVSyncIntervalDecrement = buttonValue.AsHidType(); - break; - } + switch (button.Name) + { + case "ToggleVSyncMode": + ViewModel.KeyboardHotkey.ToggleVSyncMode = buttonValue.AsHidType(); + break; + case "Screenshot": + ViewModel.KeyboardHotkey.Screenshot = buttonValue.AsHidType(); + break; + case "ShowUI": + ViewModel.KeyboardHotkey.ShowUI = buttonValue.AsHidType(); + break; + case "Pause": + ViewModel.KeyboardHotkey.Pause = buttonValue.AsHidType(); + break; + case "ToggleMute": + ViewModel.KeyboardHotkey.ToggleMute = buttonValue.AsHidType(); + break; + case "ResScaleUp": + ViewModel.KeyboardHotkey.ResScaleUp = buttonValue.AsHidType(); + break; + case "ResScaleDown": + ViewModel.KeyboardHotkey.ResScaleDown = buttonValue.AsHidType(); + break; + case "VolumeUp": + ViewModel.KeyboardHotkey.VolumeUp = buttonValue.AsHidType(); + break; + case "VolumeDown": + ViewModel.KeyboardHotkey.VolumeDown = buttonValue.AsHidType(); + break; + case "CustomVSyncIntervalIncrement": + ViewModel.KeyboardHotkey.CustomVSyncIntervalIncrement = + buttonValue.AsHidType(); + break; + case "CustomVSyncIntervalDecrement": + ViewModel.KeyboardHotkey.CustomVSyncIntervalDecrement = + buttonValue.AsHidType(); + break; + } + }); } }; diff --git a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs index c4987702c..934fcf142 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs @@ -1,15 +1,13 @@ -using Avalonia.Controls; using Avalonia.Interactivity; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.ViewModels; using System; namespace Ryujinx.Ava.UI.Views.Settings { - public partial class SettingsNetworkView : UserControl + public partial class SettingsNetworkView : RyujinxControl { private readonly Random _random; - - public SettingsViewModel ViewModel; public SettingsNetworkView() { diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs index 2c9eac28c..a81e0fb75 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs @@ -1,13 +1,12 @@ using Avalonia.Controls; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.ViewModels; using TimeZone = Ryujinx.Ava.UI.Models.TimeZone; namespace Ryujinx.Ava.UI.Views.Settings { - public partial class SettingsSystemView : UserControl + public partial class SettingsSystemView : RyujinxControl { - public SettingsViewModel ViewModel; - public SettingsSystemView() { InitializeComponent(); diff --git a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs index 2b0e57cb5..7d970dda7 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs @@ -3,6 +3,7 @@ using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Platform.Storage; using Gommon; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities; @@ -14,20 +15,18 @@ using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Views.Settings { - public partial class SettingsUiView : UserControl + public partial class SettingsUiView : RyujinxControl { - public SettingsViewModel ViewModel; - public SettingsUiView() { InitializeComponent(); AddGameDirButton.Command = - Commands.Create(() => AddDirButton(GameDirPathBox, ViewModel.GameDirectories, true)); + Commands.Create(() => AddDirButton(GameDirPathBox, ViewModel.GameDirectories)); AddAutoloadDirButton.Command = - Commands.Create(() => AddDirButton(AutoloadDirPathBox, ViewModel.AutoloadDirectories, false)); + Commands.Create(() => AddDirButton(AutoloadDirPathBox, ViewModel.AutoloadDirectories)); } - private async Task AddDirButton(TextBox addDirBox, AvaloniaList directories, bool isGameList) + private async Task AddDirButton(TextBox addDirBox, AvaloniaList directories) { string path = addDirBox.Text; From 109f0fc6592c4eec618c5efaf386181157f3fc69 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 22:21:05 -0600 Subject: [PATCH 03/24] misc: chore: Cleanup unused using directives --- src/Ryujinx.Common/TitleIDs.cs | 3 --- .../Services/Sockets/Bsd/Proxy/SocketHelpers.cs | 1 - src/Ryujinx/AppHost.cs | 1 - src/Ryujinx/Common/Markup/MarkupExtensions.cs | 1 - src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 1 - src/Ryujinx/Rebooter.cs | 2 -- .../AppLibrary/LdnGameDataReceivedEventArgs.cs | 1 - .../Configuration/ConfigurationState.Model.cs | 1 - .../UI/Controls/ApplicationContextMenu.axaml.cs | 1 - src/Ryujinx/UI/Controls/RyujinxLogo.cs | 1 - src/Ryujinx/UI/RyujinxApp.axaml.cs | 2 -- .../UI/ViewModels/AboutWindowViewModel.cs | 1 - .../UI/ViewModels/CompatibilityViewModel.cs | 1 - .../ViewModels/Input/ControllerInputViewModel.cs | 4 ---- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 2 -- .../UI/Views/Dialog/DlcSelectView.axaml.cs | 4 +--- src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs | 1 - .../UI/Views/Input/MotionInputView.axaml.cs | 1 - .../UI/Views/Input/RumbleInputView.axaml.cs | 1 - .../UI/Views/Main/MainStatusBarView.axaml.cs | 1 - .../UI/Views/Settings/SettingsUIView.axaml.cs | 1 - .../UI/Views/User/UserEditorView.axaml.cs | 1 - .../UI/Views/User/UserRecovererView.axaml.cs | 1 - .../UI/Views/User/UserSaveManagerView.axaml.cs | 1 - src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 2 -- .../UI/Windows/CompatibilityListWindow.axaml.cs | 5 ----- .../Windows/GameSpecificSettingsWindow.axaml.cs | 16 ---------------- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 -- src/Ryujinx/UI/Windows/StyleableWindow.cs | 1 - 29 files changed, 1 insertion(+), 60 deletions(-) diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index 82be1572f..76a8a7126 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -1,7 +1,4 @@ using Gommon; -using Ryujinx.Common.Configuration; -using Ryujinx.Common.Helper; -using System; using System.Linq; namespace Ryujinx.Common diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs index b442cf802..660803714 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs @@ -1,6 +1,5 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy; -using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Types; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 04aae204b..06922bb49 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -37,7 +37,6 @@ using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; -using Ryujinx.HLE.HOS.SystemState; using Ryujinx.Input; using Ryujinx.Input.HLE; using SkiaSharp; diff --git a/src/Ryujinx/Common/Markup/MarkupExtensions.cs b/src/Ryujinx/Common/Markup/MarkupExtensions.cs index 26e9c3d3e..2c8290847 100644 --- a/src/Ryujinx/Common/Markup/MarkupExtensions.cs +++ b/src/Ryujinx/Common/Markup/MarkupExtensions.cs @@ -1,5 +1,4 @@ using Avalonia.Markup.Xaml.MarkupExtensions; -using Humanizer; using Projektanker.Icons.Avalonia; using Ryujinx.Ava.Common.Locale; diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index 7ff0a5259..e73c43768 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -11,7 +11,6 @@ using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.Graphics.GAL; -using Ryujinx.Graphics.GAL.Multithreading; using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; diff --git a/src/Ryujinx/Rebooter.cs b/src/Ryujinx/Rebooter.cs index 8c7755a4c..0aa30d997 100644 --- a/src/Ryujinx/Rebooter.cs +++ b/src/Ryujinx/Rebooter.cs @@ -1,8 +1,6 @@ using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities; -using SkiaSharp; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Ryujinx/Systems/AppLibrary/LdnGameDataReceivedEventArgs.cs b/src/Ryujinx/Systems/AppLibrary/LdnGameDataReceivedEventArgs.cs index 6c80c1924..21d24ff2d 100644 --- a/src/Ryujinx/Systems/AppLibrary/LdnGameDataReceivedEventArgs.cs +++ b/src/Ryujinx/Systems/AppLibrary/LdnGameDataReceivedEventArgs.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; namespace Ryujinx.Ava.Systems.AppLibrary { diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs index 24ee6ec66..3e607369c 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs @@ -11,7 +11,6 @@ using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE; -using Ryujinx.HLE.HOS.SystemState; using System.Collections.Generic; using System.Linq; using RyuLogger = Ryujinx.Common.Logging.Logger; diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index cd1f47483..64377ba51 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -9,7 +9,6 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Ava.UI.Views.Misc; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Systems.AppLibrary; diff --git a/src/Ryujinx/UI/Controls/RyujinxLogo.cs b/src/Ryujinx/UI/Controls/RyujinxLogo.cs index 3b52ecf03..89b89f311 100644 --- a/src/Ryujinx/UI/Controls/RyujinxLogo.cs +++ b/src/Ryujinx/UI/Controls/RyujinxLogo.cs @@ -1,6 +1,5 @@ using Avalonia; using Avalonia.Controls; -using Avalonia.Layout; using Avalonia.Media.Imaging; using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.UI.ViewModels; diff --git a/src/Ryujinx/UI/RyujinxApp.axaml.cs b/src/Ryujinx/UI/RyujinxApp.axaml.cs index c84454d50..2f460f2b3 100644 --- a/src/Ryujinx/UI/RyujinxApp.axaml.cs +++ b/src/Ryujinx/UI/RyujinxApp.axaml.cs @@ -7,14 +7,12 @@ using Avalonia.Styling; using Avalonia.Threading; using FluentAvalonia.UI.Windowing; using Gommon; -using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.UI.Views.Dialog; -using Ryujinx.Ava.UI.Views.Misc; using Ryujinx.Common; using Ryujinx.Common.Logging; using System; diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 07aa84c04..6e1bd7ce3 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -3,7 +3,6 @@ using Avalonia.Styling; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using Gommon; -using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Systems.Configuration; using System; diff --git a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs index d6c10044d..650223e1f 100644 --- a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs @@ -1,7 +1,6 @@ using Gommon; using Ryujinx.Ava.Systems; using Ryujinx.Ava.Systems.AppLibrary; -using Ryujinx.Ava.UI.Windows; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs index 96da58b5d..f8be4b2ce 100644 --- a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs @@ -1,9 +1,5 @@ using Avalonia.Svg.Skia; using CommunityToolkit.Mvvm.ComponentModel; -using CommunityToolkit.Mvvm.Input; -using FluentAvalonia.UI.Controls; -using Ryujinx.Ava.Input; -using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Views.Input; using Ryujinx.Common.Utilities; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 9442c6338..95e9c9e90 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -3,7 +3,6 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Media; -using Avalonia.Media.Imaging; using Avalonia.Platform.Storage; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; @@ -46,7 +45,6 @@ using System.Collections.ObjectModel; using System.Globalization; using System.IO; using System.Linq; -using System.Reflection; using System.Threading; using System.Threading.Tasks; using Key = Ryujinx.Input.Key; diff --git a/src/Ryujinx/UI/Views/Dialog/DlcSelectView.axaml.cs b/src/Ryujinx/UI/Views/Dialog/DlcSelectView.axaml.cs index 97f98c5cb..fcd7dd353 100644 --- a/src/Ryujinx/UI/Views/Dialog/DlcSelectView.axaml.cs +++ b/src/Ryujinx/UI/Views/Dialog/DlcSelectView.axaml.cs @@ -1,6 +1,4 @@ -using Avalonia.Controls; -using Avalonia.Styling; -using FluentAvalonia.UI.Controls; +using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Controls; diff --git a/src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs index 3252ee7e2..916ada37e 100644 --- a/src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Controls; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; diff --git a/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs index 329b9128e..2a83d1008 100644 --- a/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs @@ -1,4 +1,3 @@ -using Avalonia.Controls; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; diff --git a/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs index 2745ceac7..347d011d5 100644 --- a/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs @@ -1,4 +1,3 @@ -using Avalonia.Controls; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs index f8c4c48a2..8341dd92a 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Threading; diff --git a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs index 7d970dda7..fb839a473 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs @@ -7,7 +7,6 @@ using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities; -using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs index afd102d07..eb1cf58bb 100644 --- a/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs @@ -8,7 +8,6 @@ using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; using Ryujinx.HLE.HOS.Services.Account.Acc; -using System; using UserProfile = Ryujinx.Ava.UI.Models.UserProfile; namespace Ryujinx.Ava.UI.Views.User diff --git a/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs b/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs index 34dc3edab..d1fd70e9b 100644 --- a/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs @@ -1,4 +1,3 @@ -using Avalonia.Controls; using Avalonia.Interactivity; using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Navigation; diff --git a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs b/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs index 8aff9c5f9..edbbd595b 100644 --- a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs @@ -1,4 +1,3 @@ -using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Threading; using FluentAvalonia.UI.Controls; diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index b4cb6ec37..a9b42be1f 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -1,10 +1,8 @@ using Avalonia.Collections; -using LibHac.Tools.FsSystem; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.Systems.AppLibrary; using Ryujinx.Ava.Systems.Configuration; -using Ryujinx.Ava.UI.ViewModels; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs index 6728ff197..90183ea79 100644 --- a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs @@ -1,12 +1,7 @@ using Avalonia.Controls; -using Avalonia.Styling; -using FluentAvalonia.UI.Controls; -using FluentAvalonia.UI.Windowing; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Systems.Configuration; -using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Ava.UI.Windows; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml.cs b/src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml.cs index 8e2761bff..0d172ff59 100644 --- a/src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml.cs @@ -1,25 +1,9 @@ -using Avalonia; using Avalonia.Controls; -using Avalonia.Controls.Shapes; -using Avalonia.Input; -using Avalonia.Media.Imaging; -using FluentAvalonia.Core; using FluentAvalonia.UI.Controls; -using Projektanker.Icons.Avalonia; using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Ava.UI.ViewModels.Input; -using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Systems.Configuration; -using Ryujinx.Common.Configuration; -using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.HOS.SystemState; -using Ryujinx.Input; using System; -using System.IO; using System.Linq; -using Key = Avalonia.Input.Key; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index bee04c466..79425099c 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -7,10 +7,8 @@ using Avalonia.Platform; using Avalonia.Threading; using DynamicData; using FluentAvalonia.UI.Controls; -using FluentAvalonia.UI.Windowing; using Gommon; using LibHac.Ns; -using LibHac.Tools.FsSystem; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Input; diff --git a/src/Ryujinx/UI/Windows/StyleableWindow.cs b/src/Ryujinx/UI/Windows/StyleableWindow.cs index d1e97e283..c5f753402 100644 --- a/src/Ryujinx/UI/Windows/StyleableWindow.cs +++ b/src/Ryujinx/UI/Windows/StyleableWindow.cs @@ -8,7 +8,6 @@ using FluentAvalonia.UI.Windowing; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.UI.Controls; -using Ryujinx.Ava.UI.ViewModels; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows From 638c616ab7ebf4f329e63c8b017b5e9da0ae2099 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 22:27:37 -0600 Subject: [PATCH 04/24] misc: Move systems-like classes out of the base of the Ryujinx project and into Ryujinx.Ava.Systems --- src/Ryujinx/Common/LocaleManager.cs | 4 +-- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 1 + src/Ryujinx/Program.cs | 1 + src/Ryujinx/Ryujinx.csproj | 2 ++ src/Ryujinx/{ => Systems}/AppHost.cs | 2 +- .../Systems/AppLibrary/ApplicationData.cs | 2 +- ...ibilityCsv.cs => CompatibilityDatabase.cs} | 34 +++++++++---------- .../{ => Systems}/DiscordIntegrationModule.cs | 5 ++- src/Ryujinx/{ => Systems}/Rebooter.cs | 2 +- src/Ryujinx/{ => Systems}/Updater.cs | 2 +- .../UI/ViewModels/CompatibilityViewModel.cs | 6 ++-- .../UI/ViewModels/MainWindowViewModel.cs | 1 + src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 1 + 13 files changed, 34 insertions(+), 29 deletions(-) rename src/Ryujinx/{ => Systems}/AppHost.cs (99%) rename src/Ryujinx/Systems/{CompatibilityCsv.cs => CompatibilityDatabase.cs} (98%) rename src/Ryujinx/{ => Systems}/DiscordIntegrationModule.cs (98%) rename src/Ryujinx/{ => Systems}/Rebooter.cs (98%) rename src/Ryujinx/{ => Systems}/Updater.cs (99%) diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 9aa82a4a5..d116fe709 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -38,8 +38,8 @@ namespace Ryujinx.Ava.Common.Locale { LocaleKeys.RyujinxConfirm, [RyujinxApp.FullAppName] }, { LocaleKeys.RyujinxUpdater, [RyujinxApp.FullAppName] }, { LocaleKeys.RyujinxRebooter, [RyujinxApp.FullAppName] }, - { LocaleKeys.CompatibilityListSearchBoxWatermarkWithCount, [CompatibilityCsv.Entries.Length] }, - { LocaleKeys.CompatibilityListTitle, [CompatibilityCsv.Entries.Length] } + { LocaleKeys.CompatibilityListSearchBoxWatermarkWithCount, [CompatibilityDatabase.Entries.Length] }, + { LocaleKeys.CompatibilityListTitle, [CompatibilityDatabase.Entries.Length] } }); Load(); diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index e73c43768..751a86571 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -2,6 +2,7 @@ using DiscordRPC; using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.SDL2; using Ryujinx.Ava; +using Ryujinx.Ava.Systems; using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index c24725b5c..016cc348a 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -5,6 +5,7 @@ using Gommon; using Projektanker.Icons.Avalonia; using Projektanker.Icons.Avalonia.FontAwesome; using Projektanker.Icons.Avalonia.MaterialDesign; +using Ryujinx.Ava.Systems; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 698b392ee..1f9642466 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -91,10 +91,12 @@ Always THIRDPARTY.md + False Always LICENSE.txt + False diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/Systems/AppHost.cs similarity index 99% rename from src/Ryujinx/AppHost.cs rename to src/Ryujinx/Systems/AppHost.cs index 06922bb49..455afaf45 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/Systems/AppHost.cs @@ -59,7 +59,7 @@ using Size = Avalonia.Size; using Switch = Ryujinx.HLE.Switch; using VSyncMode = Ryujinx.Common.Configuration.VSyncMode; -namespace Ryujinx.Ava +namespace Ryujinx.Ava.Systems { internal class AppHost { diff --git a/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs index e04ea454a..0819b86b8 100644 --- a/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs @@ -36,7 +36,7 @@ namespace Ryujinx.Ava.Systems.AppLibrary { _id = value; - Compatibility = CompatibilityCsv.Find(value); + Compatibility = CompatibilityDatabase.Find(value); RichPresenceSpec = PlayReports.Analyzer.TryGetSpec(IdString, out GameSpec gameSpec) ? gameSpec : default(Optional); diff --git a/src/Ryujinx/Systems/CompatibilityCsv.cs b/src/Ryujinx/Systems/CompatibilityDatabase.cs similarity index 98% rename from src/Ryujinx/Systems/CompatibilityCsv.cs rename to src/Ryujinx/Systems/CompatibilityDatabase.cs index 9bab87d9f..64ae31c2d 100644 --- a/src/Ryujinx/Systems/CompatibilityCsv.cs +++ b/src/Ryujinx/Systems/CompatibilityDatabase.cs @@ -11,24 +11,9 @@ using System.Text; namespace Ryujinx.Ava.Systems { - public struct ColumnIndices(Func, int> getIndex) + public class CompatibilityDatabase { - public const string TitleIdCol = "\"title_id\""; - public const string GameNameCol = "\"game_name\""; - public const string LabelsCol = "\"labels\""; - public const string StatusCol = "\"status\""; - public const string LastUpdatedCol = "\"last_updated\""; - - public readonly int TitleId = getIndex(TitleIdCol); - public readonly int GameName = getIndex(GameNameCol); - public readonly int Labels = getIndex(LabelsCol); - public readonly int Status = getIndex(StatusCol); - public readonly int LastUpdated = getIndex(LastUpdatedCol); - } - - public class CompatibilityCsv - { - static CompatibilityCsv() => Load(); + static CompatibilityDatabase() => Load(); public static void Load() { @@ -205,4 +190,19 @@ namespace Ryujinx.Ava.Systems return $"{char.ToUpper(firstChar)}{rest}"; } } + + public struct ColumnIndices(Func, int> getIndex) + { + public const string TitleIdCol = "\"title_id\""; + public const string GameNameCol = "\"game_name\""; + public const string LabelsCol = "\"labels\""; + public const string StatusCol = "\"status\""; + public const string LastUpdatedCol = "\"last_updated\""; + + public readonly int TitleId = getIndex(TitleIdCol); + public readonly int GameName = getIndex(GameNameCol); + public readonly int Labels = getIndex(LabelsCol); + public readonly int Status = getIndex(StatusCol); + public readonly int LastUpdated = getIndex(LastUpdatedCol); + } } diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/Systems/DiscordIntegrationModule.cs similarity index 98% rename from src/Ryujinx/DiscordIntegrationModule.cs rename to src/Ryujinx/Systems/DiscordIntegrationModule.cs index 142261d72..8a3b42ac8 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/Systems/DiscordIntegrationModule.cs @@ -9,10 +9,9 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE; using Ryujinx.HLE.Loaders.Processes; using Ryujinx.Horizon; -using Ryujinx.Horizon.Prepo.Types; using System.Text; -namespace Ryujinx.Ava +namespace Ryujinx.Ava.Systems { public static class DiscordIntegrationModule { @@ -124,7 +123,7 @@ namespace Ryujinx.Ava _currentApp = null; } - private static void HandlePlayReport(PlayReport playReport) + private static void HandlePlayReport(Horizon.Prepo.Types.PlayReport playReport) { if (_discordClient is null) return; if (!TitleIDs.CurrentApplication.Value.HasValue) return; diff --git a/src/Ryujinx/Rebooter.cs b/src/Ryujinx/Systems/Rebooter.cs similarity index 98% rename from src/Ryujinx/Rebooter.cs rename to src/Ryujinx/Systems/Rebooter.cs index 0aa30d997..4b149e9e3 100644 --- a/src/Ryujinx/Rebooter.cs +++ b/src/Ryujinx/Systems/Rebooter.cs @@ -8,7 +8,7 @@ using System.IO; using System.Linq; using System.Threading.Tasks; -namespace Ryujinx.Ava +namespace Ryujinx.Ava.Systems { internal static class Rebooter { diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Systems/Updater.cs similarity index 99% rename from src/Ryujinx/Updater.cs rename to src/Ryujinx/Systems/Updater.cs index 7ca5e885a..850bacc60 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Systems/Updater.cs @@ -27,7 +27,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -namespace Ryujinx.Ava +namespace Ryujinx.Ava.Systems { internal static class Updater { diff --git a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs index 650223e1f..b5813e78d 100644 --- a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs @@ -10,7 +10,7 @@ namespace Ryujinx.Ava.UI.ViewModels { private bool _onlyShowOwnedGames = true; - private IEnumerable _currentEntries = CompatibilityCsv.Entries; + private IEnumerable _currentEntries = CompatibilityDatabase.Entries; private string[] _ownedGameTitleIds = []; public IEnumerable CurrentEntries => OnlyShowOwnedGames @@ -45,11 +45,11 @@ namespace Ryujinx.Ava.UI.ViewModels { if (string.IsNullOrEmpty(searchTerm)) { - SetEntries(CompatibilityCsv.Entries); + SetEntries(CompatibilityDatabase.Entries); return; } - SetEntries(CompatibilityCsv.Entries.Where(x => + SetEntries(CompatibilityDatabase.Entries.Where(x => x.GameName.ContainsIgnoreCase(searchTerm) || x.TitleId.Check(tid => tid.ContainsIgnoreCase(searchTerm)))); } diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 95e9c9e90..b0cd6a556 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -16,6 +16,7 @@ using LibHac.Ns; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Input; +using Ryujinx.Ava.Systems; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 79425099c..4f5cb13d3 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -12,6 +12,7 @@ using LibHac.Ns; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Input; +using Ryujinx.Ava.Systems; using Ryujinx.Ava.UI.Applet; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; From 25cc9b24b42559a40c4565715501b8ce78bbad67 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 22:40:55 -0600 Subject: [PATCH 05/24] misc: chore: compat database code cleanups --- src/Ryujinx/Systems/CompatibilityDatabase.cs | 43 +++++--------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/src/Ryujinx/Systems/CompatibilityDatabase.cs b/src/Ryujinx/Systems/CompatibilityDatabase.cs index 64ae31c2d..bfc7ba903 100644 --- a/src/Ryujinx/Systems/CompatibilityDatabase.cs +++ b/src/Ryujinx/Systems/CompatibilityDatabase.cs @@ -50,16 +50,6 @@ namespace Ryujinx.Ava.Systems public static CompatibilityEntry Find(ulong titleId) => Find(titleId.ToString("X16")); - - public static LocaleKeys? GetStatus(string titleId) - => Find(titleId)?.Status; - - public static LocaleKeys? GetStatus(ulong titleId) => GetStatus(titleId.ToString("X16")); - - public static string GetLabels(string titleId) - => Find(titleId)?.FormattedIssueLabels; - - public static string GetLabels(ulong titleId) => GetLabels(titleId.ToString("X16")); } public class CompatibilityEntry @@ -120,6 +110,7 @@ namespace Ryujinx.Ava.Systems public string FormattedIssueLabels => Labels .Select(FormatLabelName) + .Where(x => x != null) .JoinToString(", "); public override string ToString() => @@ -143,7 +134,6 @@ namespace Ryujinx.Ava.Systems "gui" => "GUI", "help wanted" => "Help Wanted", "horizon" => "Horizon", - "infra" => "Project Infra", "invalid" => "Invalid", "kernel" => "Kernel", "ldn" => "LDN", @@ -157,9 +147,9 @@ namespace Ryujinx.Ava.Systems "ldn-untested" => "LDN Untested", "ldn-broken" => "LDN Broken", "ldn-partial" => "Partial LDN", - "nvdec" => "NVDEC", - "services" => "NX Services", - "services-horizon" => "Horizon OS Services", + "nvdec" => "GPU Video Decoding", + "services" => "HLE Services", + "services-horizon" => "New HLE Services", "slow" => "Runs Slow", "crash" => "Crashes", "deadlock" => "Deadlock", @@ -167,7 +157,7 @@ namespace Ryujinx.Ava.Systems "opengl" => "OpenGL", "opengl-backend-bug" => "OpenGL Backend Bug", "vulkan-backend-bug" => "Vulkan Backend Bug", - "mac-bug" => "Mac-specific Bug(s)", + "mac-bug" => "Mac-specific Problems", "amd-vendor-bug" => "AMD GPU Bug", "intel-vendor-bug" => "Intel GPU Bug", "loader-allocator" => "Loader Allocator", @@ -176,28 +166,17 @@ namespace Ryujinx.Ava.Systems "UE4" => "Unreal Engine 4", "homebrew" => "Homebrew Content", "online-broken" => "Online Broken", - _ => Capitalize(labelName) + _ => null }; - - public static string Capitalize(string value) - { - if (value == string.Empty) - return string.Empty; - - char firstChar = value[0]; - string rest = value[1..]; - - return $"{char.ToUpper(firstChar)}{rest}"; - } } public struct ColumnIndices(Func, int> getIndex) { - public const string TitleIdCol = "\"title_id\""; - public const string GameNameCol = "\"game_name\""; - public const string LabelsCol = "\"labels\""; - public const string StatusCol = "\"status\""; - public const string LastUpdatedCol = "\"last_updated\""; + private const string TitleIdCol = "\"title_id\""; + private const string GameNameCol = "\"game_name\""; + private const string LabelsCol = "\"labels\""; + private const string StatusCol = "\"status\""; + private const string LastUpdatedCol = "\"last_updated\""; public readonly int TitleId = getIndex(TitleIdCol); public readonly int GameName = getIndex(GameNameCol); From 551d2c113476abc261e438a91b03eb128af5b194 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 23:01:37 -0600 Subject: [PATCH 06/24] misc: chore: add/remove event handler as window is opened/closed --- .../UI/ViewModels/CompatibilityViewModel.cs | 23 +++++++++++++++---- .../Windows/CompatibilityListWindow.axaml.cs | 10 +++++--- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs index b5813e78d..1965fee69 100644 --- a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs @@ -1,14 +1,15 @@ using Gommon; using Ryujinx.Ava.Systems; using Ryujinx.Ava.Systems.AppLibrary; +using System; using System.Collections.Generic; using System.Linq; namespace Ryujinx.Ava.UI.ViewModels { - public class CompatibilityViewModel : BaseModel + public class CompatibilityViewModel : BaseModel, IDisposable { - private bool _onlyShowOwnedGames = true; + private readonly ApplicationLibrary _appLibrary; private IEnumerable _currentEntries = CompatibilityDatabase.Entries; private string[] _ownedGameTitleIds = []; @@ -19,15 +20,27 @@ namespace Ryujinx.Ava.UI.ViewModels : _currentEntries; public CompatibilityViewModel() {} + + private void AppCountUpdated(object _, ApplicationCountUpdatedEventArgs __) + => _ownedGameTitleIds = _appLibrary.Applications.Keys.Select(x => x.ToString("X16")).ToArray(); public CompatibilityViewModel(ApplicationLibrary appLibrary) { - appLibrary.ApplicationCountUpdated += (_, _) - => _ownedGameTitleIds = appLibrary.Applications.Keys.Select(x => x.ToString("X16")).ToArray(); + _appLibrary = appLibrary; - _ownedGameTitleIds = appLibrary.Applications.Keys.Select(x => x.ToString("X16")).ToArray(); + AppCountUpdated(null, null); + + _appLibrary.ApplicationCountUpdated += AppCountUpdated; } + void IDisposable.Dispose() + { + GC.SuppressFinalize(this); + _appLibrary.ApplicationCountUpdated -= AppCountUpdated; + } + + private bool _onlyShowOwnedGames = true; + public bool OnlyShowOwnedGames { get => _onlyShowOwnedGames; diff --git a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs index 90183ea79..a2b98f8f8 100644 --- a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs @@ -8,13 +8,17 @@ namespace Ryujinx.Ava.UI.Windows { public partial class CompatibilityListWindow : StyleableAppWindow { - public static Task Show(string titleId = null) => - ShowAsync(new CompatibilityListWindow + public static async Task Show(string titleId = null) + { + using CompatibilityViewModel compatWindow = new(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary); + + await ShowAsync(new CompatibilityListWindow { - DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary), + DataContext = compatWindow, SearchBoxFlush = { Text = titleId ?? string.Empty }, SearchBoxNormal = { Text = titleId ?? string.Empty } }); + } public CompatibilityListWindow() : base(useCustomTitleBar: true, 37) { From 44632e5d8b8ebd2f9b109b88de7904c3c3e0d2ab Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 23:03:55 -0600 Subject: [PATCH 07/24] misc: ConfigurationFileFormat version 68 --- src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs | 2 +- .../Systems/Configuration/ConfigurationState.Migration.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs index 042f95c46..c5315ab12 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs @@ -15,7 +15,7 @@ namespace Ryujinx.Ava.Systems.Configuration /// /// The current version of the file format /// - public const int CurrentVersion = 67; + public const int CurrentVersion = 68; /// /// Version of the configuration file format diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index 16a4fab10..7d1313597 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -441,6 +441,8 @@ namespace Ryujinx.Ava.Systems.Configuration (65, static cff => cff.UpdateCheckerType = cff.CheckUpdatesOnStart ? UpdaterType.PromptAtStartup : UpdaterType.Off), (66, static cff => cff.DisableInputWhenOutOfFocus = false), (67, static cff => cff.FocusLostActionType = cff.DisableInputWhenOutOfFocus ? FocusLostType.BlockInput : FocusLostType.DoNothing) + // 68 was the version that added per-game configs; the file structure did not change + // the version was increased so external tools could know that your Ryujinx version has per-game config capabilities. ); } } From 0db85d0aa983b8e4093f02b157c3563582326160 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 23:57:48 -0600 Subject: [PATCH 08/24] HLE: optional hack: disable IsAnyInternetRequestAccepted --- src/Ryujinx.Common/Configuration/DirtyHack.cs | 3 ++- .../HOS/Services/Nifm/IStaticService.cs | 4 ++-- .../Services/Nifm/StaticService/IGeneralService.cs | 5 +++-- .../Configuration/ConfigurationState.Migration.cs | 4 +--- .../Configuration/ConfigurationState.Model.cs | 13 +++++-------- .../UI/ViewModels/SettingsHacksViewModel.cs | 12 +++++++++++- src/Ryujinx/UI/ViewModels/SettingsViewModel.cs | 2 ++ .../UI/Views/Settings/SettingsHacksView.axaml | 14 +++++++++++++- 8 files changed, 39 insertions(+), 18 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/DirtyHack.cs b/src/Ryujinx.Common/Configuration/DirtyHack.cs index 3959c0a99..71ac88f56 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHack.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHack.cs @@ -9,7 +9,8 @@ namespace Ryujinx.Common.Configuration public enum DirtyHack : byte { Xc2MenuSoftlockFix = 1, - ShaderTranslationDelay = 2 + // ShaderTranslationDelay = 2 + NifmServiceDisableIsAnyInternetRequestAccepted = 3 } public readonly struct EnabledDirtyHack(DirtyHack hack, int value) diff --git a/src/Ryujinx.HLE/HOS/Services/Nifm/IStaticService.cs b/src/Ryujinx.HLE/HOS/Services/Nifm/IStaticService.cs index 96e71cd07..d669caba1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nifm/IStaticService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nifm/IStaticService.cs @@ -13,7 +13,7 @@ namespace Ryujinx.HLE.HOS.Services.Nifm // CreateGeneralServiceOld() -> object public ResultCode CreateGeneralServiceOld(ServiceCtx context) { - MakeObject(context, new IGeneralService()); + MakeObject(context, new IGeneralService(context)); return ResultCode.Success; } @@ -22,7 +22,7 @@ namespace Ryujinx.HLE.HOS.Services.Nifm // CreateGeneralService(u64, pid) -> object public ResultCode CreateGeneralService(ServiceCtx context) { - MakeObject(context, new IGeneralService()); + MakeObject(context, new IGeneralService(context)); return ResultCode.Success; } diff --git a/src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs b/src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs index a5a822db3..dd4efce6e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs @@ -1,4 +1,5 @@ using Ryujinx.Common; +using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE.HOS.Services.Nifm.StaticService.GeneralService; @@ -17,12 +18,12 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService private UnicastIPAddressInformation _targetAddressInfoCache = null; private string _cacheChosenInterface = null; - public IGeneralService() + public IGeneralService(ServiceCtx context) { _generalServiceDetail = new GeneralServiceDetail { ClientId = GeneralServiceManager.Count, - IsAnyInternetRequestAccepted = true, // NOTE: Why not accept any internet request? + IsAnyInternetRequestAccepted = !context.Device.DirtyHacks.IsEnabled(DirtyHack.NifmServiceDisableIsAnyInternetRequestAccepted), // NOTE: Why not accept any internet request? }; NetworkChange.NetworkAddressChanged += LocalInterfaceCacheHandler; diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index 7d1313597..b10cc3926 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -160,9 +160,7 @@ namespace Ryujinx.Ava.Systems.Configuration DirtyHacks hacks = new (cff.DirtyHacks ?? []); Hacks.Xc2MenuSoftlockFix.Value = hacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix); - - Hacks.EnableShaderTranslationDelay.Value = hacks.IsEnabled(DirtyHack.ShaderTranslationDelay); - Hacks.ShaderTranslationDelay.Value = hacks[DirtyHack.ShaderTranslationDelay].CoerceAtLeast(0); + } if (configurationFileUpdated) diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs index 3e607369c..b52c624e3 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs @@ -683,18 +683,15 @@ namespace Ryujinx.Ava.Systems.Configuration public ReactiveObject Xc2MenuSoftlockFix { get; private set; } - public ReactiveObject EnableShaderTranslationDelay { get; private set; } - - public ReactiveObject ShaderTranslationDelay { get; private set; } + public ReactiveObject DisableNifmIsAnyInternetRequestAccepted { get; private set; } public HacksSection() { ShowDirtyHacks = new ReactiveObject(); Xc2MenuSoftlockFix = new ReactiveObject(); Xc2MenuSoftlockFix.Event += HackChanged; - EnableShaderTranslationDelay = new ReactiveObject(); - EnableShaderTranslationDelay.Event += HackChanged; - ShaderTranslationDelay = new ReactiveObject(); + DisableNifmIsAnyInternetRequestAccepted = new ReactiveObject(); + DisableNifmIsAnyInternetRequestAccepted.Event += HackChanged; } private void HackChanged(object sender, ReactiveEventArgs rxe) @@ -725,8 +722,8 @@ namespace Ryujinx.Ava.Systems.Configuration if (Xc2MenuSoftlockFix) Apply(DirtyHack.Xc2MenuSoftlockFix); - if (EnableShaderTranslationDelay) - Apply(DirtyHack.ShaderTranslationDelay, ShaderTranslationDelay); + if (DisableNifmIsAnyInternetRequestAccepted) + Apply(DirtyHack.NifmServiceDisableIsAnyInternetRequestAccepted); return enabledHacks.ToArray(); diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs index 816e85c98..022b7481e 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -16,11 +16,12 @@ namespace Ryujinx.Ava.UI.ViewModels } [ObservableProperty] private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; + [ObservableProperty] private bool _nifmDisableIsAnyInternetRequestAccepted = ConfigurationState.Instance.Hacks.DisableNifmIsAnyInternetRequestAccepted; public static string Xc2MenuFixTooltip { get; } = Lambda.String(sb => { sb.AppendLine( - "This fix applies a 2ms delay (via 'Thread.Sleep(2)') every time the game tries to read data from the emulated Switch filesystem.") + "This hack applies a 2ms delay (via 'Thread.Sleep(2)') every time the game tries to read data from the emulated Switch filesystem.") .AppendLine(); sb.AppendLine("From the issue on GitHub:").AppendLine(); @@ -29,5 +30,14 @@ namespace Ryujinx.Ava.UI.ViewModels "there is a low chance that the game will softlock, " + "the submenu won't show up, while background music is still there."); }); + + public static string NifmDisableIsAnyInternetRequestAcceptedTooltip { get; } = Lambda.String(sb => + { + sb.AppendLine( + "This hack simply sets 'IsAnyInternetRequestAccepted' to 'false' when initializing the Nifm IGeneralService.") + .AppendLine(); + + sb.Append("Lets DOOM 2016 go in game."); + }); } } diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 5dc5b789f..a092e97f2 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -757,6 +757,8 @@ namespace Ryujinx.Ava.UI.ViewModels // Dirty Hacks config.Hacks.Xc2MenuSoftlockFix.Value = DirtyHacks.Xc2MenuSoftlockFix; + config.Hacks.DisableNifmIsAnyInternetRequestAccepted.Value = + DirtyHacks.NifmDisableIsAnyInternetRequestAccepted; config.ToFileFormat().SaveConfig(Program.ConfigurationPath); diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index 4cf96366a..229f9e866 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -29,7 +29,7 @@ + Text="Highly specific hacks & tricks to alleviate performance issues, crashing, or freezing. Can cause issues." /> + + + + From bda699f68e6835c6356bab980853856b5b370b04 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 6 Mar 2025 04:12:34 -0600 Subject: [PATCH 09/24] UI: Inline game/autoload dir & motion/rumble/led --- ...rSeparator.cs => MiniVerticalSeparator.cs} | 0 .../UI/Views/Input/ControllerInputView.axaml | 104 ++-- .../UI/Views/Settings/SettingsUIView.axaml | 476 +++++++++--------- .../UI/Windows/SettingsWindow.axaml.cs | 4 +- 4 files changed, 293 insertions(+), 291 deletions(-) rename src/Ryujinx/UI/Controls/{StatusBarSeparator.cs => MiniVerticalSeparator.cs} (100%) diff --git a/src/Ryujinx/UI/Controls/StatusBarSeparator.cs b/src/Ryujinx/UI/Controls/MiniVerticalSeparator.cs similarity index 100% rename from src/Ryujinx/UI/Controls/StatusBarSeparator.cs rename to src/Ryujinx/UI/Controls/MiniVerticalSeparator.cs diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml index 555ded9fc..3fba2b804 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml @@ -4,10 +4,10 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels.Input" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" + xmlns:pt="using:Projektanker.Icons.Avalonia" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" d:DesignHeight="800" @@ -507,65 +507,49 @@ CornerRadius="5" VerticalAlignment="Bottom" HorizontalAlignment="Stretch"> - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml index 1c18a8e4c..ad05efd06 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml @@ -6,7 +6,6 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:helper="clr-namespace:Ryujinx.Common.Helper;assembly=Ryujinx.Common" mc:Ignorable="d" x:DataType="viewModels:SettingsViewModel"> @@ -19,246 +18,265 @@ HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"> - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Text="{ext:Locale SettingsTabGeneralFocusLossType}" + Width="150" /> + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + Margin="10" + Spacing="10" + Grid.Column="2" + Orientation="Vertical" HorizontalAlignment="Stretch"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs index c580aaccb..f68ec7279 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs @@ -31,8 +31,8 @@ namespace Ryujinx.Ava.UI.Windows : NavigationViewPaneDisplayMode.Top; Height = ConfigurationState.Instance.ShowOldUI - ? 927 - : 993; // nav panel is put on top with custom title bar so account for new height + ? 906 + : 954; // nav panel is put on top with custom title bar so account for new height Load(); } From 056f56bc70ad45754e97426a10ced43687c4b0d2 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 6 Mar 2025 04:15:02 -0600 Subject: [PATCH 10/24] UI: Fix off-screen compat entry game names --- src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml index 9bc919f5d..af9e4a08f 100644 --- a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml +++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml @@ -40,7 +40,7 @@ Date: Thu, 6 Mar 2025 04:31:28 -0600 Subject: [PATCH 11/24] UI: Fix overlapping text when window is made too small --- src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml | 2 +- src/Ryujinx/UI/Windows/SettingsWindow.axaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml b/src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml index 6dcd13755..f51f14c1e 100644 --- a/src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml +++ b/src/Ryujinx/UI/Windows/GameSpecificSettingsWindow.axaml @@ -13,7 +13,7 @@ xmlns:helper="clr-namespace:Ryujinx.Common.Helper;assembly=Ryujinx.Common" Width="1100" Height="910" - MinWidth="800" + MinWidth="1037" MinHeight="480" WindowStartupLocation="CenterOwner" x:DataType="viewModels:SettingsViewModel" diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml b/src/Ryujinx/UI/Windows/SettingsWindow.axaml index 73c1f087a..15d174123 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml @@ -13,7 +13,7 @@ xmlns:helper="clr-namespace:Ryujinx.Common.Helper;assembly=Ryujinx.Common" xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" Width="1100" - MinWidth="800" + MinWidth="844" MinHeight="480" Title="{ext:WindowTitle Settings}" WindowStartupLocation="CenterOwner" From 7271e7050d33eef9af95bfd0e6829e822d93a894 Mon Sep 17 00:00:00 2001 From: rrondo <46533574+rrondo@users.noreply.github.com> Date: Sat, 8 Mar 2025 07:28:25 +0200 Subject: [PATCH 12/24] Ukrainian localization update (#755) --- src/Ryujinx/Assets/locales.json | 50 ++++++++++++++++----------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 28e0af060..245951c89 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -2767,7 +2767,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Створити користувацьку конфігурацію", "zh_CN": "", "zh_TW": "" } @@ -2792,7 +2792,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Редагувати користувацьку конфігурацію", "zh_CN": "", "zh_TW": "" } @@ -2842,7 +2842,7 @@ "sv_SE": "Skapar en oberoende konfiguration för det aktuella spelet", "th_TH": "สร้างการกำหนดค่าที่เป็นอิสระสำหรับเกมปัจจุบัน", "tr_TR": "Mevcut oyun için bağımsız bir yapılandırma oluşturur", - "uk_UA": "Створює незалежну конфігурацію для поточної гри", + "uk_UA": "Створюйте незалежну конфігурацію для поточної гри", "zh_CN": "为当前游戏创建独立的配置", "zh_TW": "為當前遊戲創建獨立的配置" } @@ -2867,7 +2867,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Відредагувати наявну індивідуальну конфігурацію для цієї гри.", "zh_CN": "", "zh_TW": "" } @@ -3442,7 +3442,7 @@ "sv_SE": "Användargränssnitt", "th_TH": "หน้าจอผู้ใช้", "tr_TR": "Kullancı Arayüzü", - "uk_UA": "Інтерфейс користувача", + "uk_UA": "Інтерфейс", "zh_CN": "用户界面", "zh_TW": "使用者介面" } @@ -3817,7 +3817,7 @@ "sv_SE": "Inaktivera inmatning när fokus tappas", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Вимкнути введення, якщо вікно неактивне", "zh_CN": "在后台时禁用输入", "zh_TW": "" } @@ -3842,7 +3842,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Показати оригінальний UI (Потрібен перезапуск)", "zh_CN": "", "zh_TW": "" } @@ -3867,7 +3867,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Показати старий інтерфейс Avalonia Ryujinx, який був у Ryujinx 1.1.1403. Ця опція активна за замовчуванням на всіх інших, окрім Windows платформах.\nПовернеться класична панель заголовка, а всі суттєві зміни інтерфейсу будуть скасовані, зокрема горизонтальне розміщення навігації в налаштуваннях.", "zh_CN": "", "zh_TW": "" } @@ -4867,7 +4867,7 @@ "sv_SE": "Matcha systemtid", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Синхронізувати з системним годинником", "zh_CN": "与系统时间同步", "zh_TW": "" } @@ -8467,7 +8467,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "LED-підсвітка", "zh_CN": "", "zh_TW": "" } @@ -8492,7 +8492,7 @@ "sv_SE": "Inaktivera", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Вимкнути", "zh_CN": "关闭", "zh_TW": "" } @@ -8517,7 +8517,7 @@ "sv_SE": "Regnbåge", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Веселка", "zh_CN": "彩虹", "zh_TW": "" } @@ -8542,7 +8542,7 @@ "sv_SE": "Regnbågshastighet", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Швидкість зміни кольорів", "zh_CN": "彩虹滚动速度", "zh_TW": "" } @@ -9167,7 +9167,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "Esc", - "uk_UA": "", + "uk_UA": "Esc", "zh_CN": "Esc", "zh_TW": "Esc 鍵" } @@ -10867,7 +10867,7 @@ "sv_SE": "Diverse", "th_TH": "", "tr_TR": "Diğer", - "uk_UA": "", + "uk_UA": "Інше", "zh_CN": "截图键", "zh_TW": "其他按鍵" } @@ -17692,7 +17692,7 @@ "sv_SE": "Ändra ljudvolym", "th_TH": "ปรับระดับเสียง", "tr_TR": "Ses seviyesini değiştirir", - "uk_UA": "Змінити гучність звуку", + "uk_UA": "Регулювання гучності", "zh_CN": "调节音量", "zh_TW": "調節音量" } @@ -19592,7 +19592,7 @@ "sv_SE": "Alla tangentbord", "th_TH": "คีย์บอร์ดทั้งหมด", "tr_TR": "Tüm Klavyeler", - "uk_UA": "Всі клавіатури", + "uk_UA": "Усі клавіатури", "zh_CN": "所有键盘", "zh_TW": "所有鍵盤" } @@ -19742,7 +19742,7 @@ "sv_SE": "Snabbtangenter för tangentbord", "th_TH": "ปุ่มลัดของคีย์บอร์ด", "tr_TR": "Klavye Kısayolları", - "uk_UA": "Гарячі клавіші клавіатури", + "uk_UA": "Гарячі клавіші", "zh_CN": "快捷键", "zh_TW": "鍵盤快速鍵" } @@ -22467,7 +22467,7 @@ "sv_SE": "Tillämpar anti-aliasing på spelrenderaren.\n\nFXAA kommer att sudda det mesta av bilden, medan SMAA kommer att försöka hitta taggiga kanter och släta ut dem.\n\nRekommenderas inte att använda tillsammans med skalfiltret FSR.\n\nDet här alternativet kan ändras medan ett spel körs genom att klicka på \"Tillämpa\" nedan. Du kan helt enkelt flytta inställningsfönstret åt sidan och experimentera tills du hittar ditt föredragna utseende för ett spel.\n\nLämna som INGEN om du är osäker.", "th_TH": "ใช้การลดรอยหยักกับการเรนเดอร์เกม\n\nFXAA จะเบลอภาพส่วนใหญ่ ในขณะที่ SMAA จะพยายามค้นหารอยหยักและปรับให้เรียบ\n\nไม่แนะนำให้ใช้ร่วมกับตัวกรองสเกล FSR\n\nตัวเลือกนี้สามารถเปลี่ยนแปลงได้ในขณะที่เกมกำลังทำงานอยู่โดยคลิก \"นำไปใช้\" ด้านล่าง คุณสามารถย้ายหน้าต่างการตั้งค่าไปด้านข้างและทดลองจนกว่าคุณจะพบรูปลักษณ์ที่คุณต้องการสำหรับเกม\n\nปล่อยไว้ที่ NONE หากไม่แน่ใจ", "tr_TR": "", - "uk_UA": "Застосовує згладження до рендера гри.\n\nFXAA розмиє більшість зображення, а SMAA спробує знайти нерівні краї та згладити їх.\n\nНе рекомендується використовувати разом з фільтром масштабування FSR.\n\nЦю опцію можна міняти коли гра запущена кліком на \"Застосувати; ви можете відсунути вікно налаштувань і поекспериментувати з видом гри.\n\nЗалиште на \"Немає\", якщо не впевнені.", + "uk_UA": "Застосовує згладження до рендера гри.\n\nFXAA розмиє більшість зображення, а SMAA спробує знайти нерівні краї та згладити їх.\n\nНе рекомендується використовувати разом з фільтром масштабування FSR.\n\nЦю опцію можна міняти коли гра запущена кліком на \"Застосувати; ви можете відсунути вікно налаштувань і поекспериментувати з видом гри.\n\nЗалиште \"Немає\", якщо не впевнені.", "zh_CN": "抗锯齿是一种图形处理技术,用于减少图像边缘的锯齿状现象,使图像更加平滑。\n\nFXAA(快速近似抗锯齿)是一种性能开销相对较小的抗锯齿方法,但可能会使得整体图像看起来有些模糊。\n\nSMAA(增强型子像素抗锯齿)则更加精细,它会尝试找到锯齿边缘并平滑它们,相比 FXAA 有更好的图像质量,但性能开销可能会稍大一些。\n\n如果开启了 FSR(FidelityFX Super Resolution,超级分辨率锐画技术)来提高性能或图像质量,不建议再启用抗锯齿,因为它们会产生不必要的图形处理开销,或者相互之间效果不协调。\n\n在游戏运行时,通过点击下面的“应用”按钮可以使设置生效;你可以将设置窗口移开,并试验找到您喜欢的游戏画面效果。\n\n如果不确定,请保持为“无”。", "zh_TW": "對遊戲繪製進行反鋸齒處理。\n\nFXAA 會模糊大部分圖像,而 SMAA 則會嘗試找出鋸齒邊緣並將其平滑化。\n\n不建議與 FSR 縮放濾鏡一起使用。\n\n此選項可在遊戲執行時透過點選下方的「套用」進行變更;您只需將設定視窗移到一旁,然後進行試驗,直到找到您喜歡的遊戲效果。\n\n如果不確定,請選擇無狀態。" } @@ -22542,7 +22542,7 @@ "sv_SE": "Välj det skalfilter som ska tillämpas vid användning av upplösningsskala.\n\nBilinjär fungerar bra för 3D-spel och är ett säkert standardalternativ.\n\nNärmast rekommenderas för pixel art-spel.\n\nFSR 1.0 är bara ett skarpningsfilter, rekommenderas inte för FXAA eller SMAA.\n\nOmrådesskalning rekommenderas vid nedskalning av upplösning som är större än utdatafönstret. Det kan användas för att uppnå en supersamplad anti-alias-effekt vid nedskalning med mer än 2x.\n\nDetta alternativ kan ändras medan ett spel körs genom att klicka på \"Tillämpa\" nedan. du kan helt enkelt flytta inställningsfönstret åt sidan och experimentera tills du hittar ditt föredragna utseende för ett spel.\n\nLämna som BILINJÄR om du är osäker.", "th_TH": "เลือกตัวกรองสเกลที่จะใช้เมื่อใช้สเกลความละเอียด\n\nBilinear ทำงานได้ดีกับเกม 3D และเป็นตัวเลือกเริ่มต้นที่ปลอดภัย\n\nแนะนำให้ใช้เกมภาพพิกเซลที่ใกล้เคียงที่สุด\n\nFSR 1.0 เป็นเพียงตัวกรองความคมชัด ไม่แนะนำให้ใช้กับ FXAA หรือ SMAA\n\nตัวเลือกนี้สามารถเปลี่ยนแปลงได้ในขณะที่เกมกำลังทำงานอยู่โดยคลิก \"นำไปใช้\" ด้านล่าง คุณสามารถย้ายหน้าต่างการตั้งค่าไปด้านข้างและทดลองจนกว่าคุณจะพบรูปลักษณ์ที่คุณต้องการสำหรับเกม", "tr_TR": "Choose the scaling filter that will be applied when using resolution scale.\n\nBilinear works well for 3D games and is a safe default option.\n\nNearest is recommended for pixel art games.\n\nFSR 1.0 is merely a sharpening filter, not recommended for use with FXAA or SMAA.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nLeave on BILINEAR if unsure.", - "uk_UA": "Виберіть фільтр масштабування, що використається при збільшенні роздільної здатності.\n\n\"Білінійний\" добре виглядає в 3D іграх, і хороше налаштування за умовчуванням.\n\n\"Найближчий\" рекомендується для ігор з піксель-артом.\n\n\"FSR 1.0\" - фільтр різкості. Не варто використовувати разом з FXAA або SMAA.\n\nЦю опцію можна змінювати під час гри кліком на \"Застосувати\" нижче; ви можете відсунути вікно налаштувань і поекспериментувати з тим, як відображатиметься гра.\n\nЗалиште на \"Білінійний\", якщо не впевнені.", + "uk_UA": "Виберіть фільтр масштабування, що використається при збільшенні роздільної здатності.\n\n\"Білінійний\" добре виглядає в 3D іграх, і хороше налаштування за умовчуванням.\n\n\"Найближчий\" рекомендується для ігор з піксель-артом.\n\n\"FSR 1.0\" - фільтр різкості. Не варто використовувати разом з FXAA або SMAA.\n\nЦю опцію можна змінювати під час гри кліком на \"Застосувати\" нижче; ви можете відсунути вікно налаштувань і поекспериментувати з тим, як відображатиметься гра.\n\nЗалиште \"Білінійний\", якщо не впевнені.", "zh_CN": "选择在分辨率缩放时将使用的缩放过滤器。\n\nBilinear(双线性过滤)对于3D游戏效果较好,是一个安全的默认选项。\n\nNearest(最近邻过滤)推荐用于像素艺术游戏。\n\nFSR(超级分辨率锐画)只是一个锐化过滤器,不推荐与 FXAA 或 SMAA 抗锯齿一起使用。\n\nArea(局部过滤),当渲染分辨率大于窗口实际分辨率,推荐该选项。该选项在渲染比例大于2.0的情况下,可以实现超采样的效果。\n\n在游戏运行时,通过点击下面的“应用”按钮可以使设置生效;你可以将设置窗口移开,并试验找到您喜欢的游戏画面效果。\n\n如果不确定,请保持为“Bilinear(双线性过滤)”。", "zh_TW": "選擇使用解析度縮放時套用的縮放過濾器。\n\n雙線性 (Bilinear) 濾鏡適用於 3D 遊戲,是一個安全的預設選項。\n\n建議像素美術遊戲使用近鄰性 (Nearest) 濾鏡。\n\nFSR 1.0 只是一個銳化濾鏡,不建議與 FXAA 或 SMAA 一起使用。\n\n此選項可在遊戲執行時透過點選下方的「套用」進行變更;您只需將設定視窗移到一旁,然後進行試驗,直到找到您喜歡的遊戲效果。\n\n如果不確定,請保持雙線性 (Bilinear) 狀態。" } @@ -23867,7 +23867,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Список сумісності — {0} ігор", "zh_CN": "", "zh_TW": "" } @@ -23942,7 +23942,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Шукати серед {0} перевірених ігор...", "zh_CN": "", "zh_TW": "" } @@ -24017,7 +24017,7 @@ "sv_SE": "Spelbart", "th_TH": "", "tr_TR": "", - "uk_UA": "Оптимально", + "uk_UA": "Справна", "zh_CN": "可游玩", "zh_TW": "可暢順遊玩" } @@ -24267,7 +24267,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Власна конфігурація", "zh_CN": "", "zh_TW": "" } @@ -24292,7 +24292,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "(Глобальні)", "zh_CN": "", "zh_TW": "" } From 04361b864ab296dfd9e5d76f711306d8154528d1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 8 Mar 2025 20:45:47 -0600 Subject: [PATCH 13/24] stable release channel repo --- .github/workflows/release.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d4292162a..bafd4af1e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,8 @@ env: RYUJINX_BASE_VERSION: "1.2" RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "release" RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Ryubing" - RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx" + RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO: "Ryujinx" + RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Stable-Releases" RELEASE: 1 jobs: @@ -52,7 +53,7 @@ jobs: | Linux ARM 64-bit | [Stable Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) | | macOS | [Stable macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) | - **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }} + **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }} omitBodyDuringUpdate: true owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} @@ -92,7 +93,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs - sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash @@ -173,7 +174,7 @@ jobs: | Linux ARM 64-bit | [Stable Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) | | macOS | [Stable macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) | - **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }} + **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }} omitBodyDuringUpdate: true allowUpdates: true replacesArtifacts: true @@ -222,7 +223,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs - sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash From fc75dbc8b88ec2a80dbd2ec4867921feb91f35fd Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 8 Mar 2025 20:49:21 -0600 Subject: [PATCH 14/24] Update release.yml --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bafd4af1e..69e4dc216 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,7 +34,7 @@ jobs: script: | github.rest.git.createRef({ owner: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}", - repo: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}", + repo: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}", ref: 'refs/tags/${{ steps.version_info.outputs.build_version }}', sha: context.sha }) From d5527f87cbb361660870ae9ba41ddabb4eef00ff Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 8 Mar 2025 21:06:31 -0600 Subject: [PATCH 15/24] UI: [ci skip] fix changelog urls on new release channel --- src/Ryujinx.Common/ReleaseInformation.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs index cbf93013f..9c77480ed 100644 --- a/src/Ryujinx.Common/ReleaseInformation.cs +++ b/src/Ryujinx.Common/ReleaseInformation.cs @@ -37,7 +37,7 @@ namespace Ryujinx.Common public static string GetChangelogUrl(Version currentVersion, Version newVersion) => IsCanaryBuild ? $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelSourceRepo}/compare/Canary-{currentVersion}...Canary-{newVersion}" - : $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelSourceRepo}/releases/tag/{newVersion}"; + : $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelRepo}/releases/{newVersion}"; public static string GetChangelogForVersion(Version version) => $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelRepo}/releases/tag/{version}"; From 1219f329c1dfe237dbe7af63dcc1cf4be26f8de1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 10 Mar 2025 01:24:06 -0500 Subject: [PATCH 16/24] misc: chore: [ci skip] fully fix changelog urls for stable --- src/Ryujinx.Common/ReleaseInformation.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs index 9c77480ed..68db97465 100644 --- a/src/Ryujinx.Common/ReleaseInformation.cs +++ b/src/Ryujinx.Common/ReleaseInformation.cs @@ -37,9 +37,9 @@ namespace Ryujinx.Common public static string GetChangelogUrl(Version currentVersion, Version newVersion) => IsCanaryBuild ? $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelSourceRepo}/compare/Canary-{currentVersion}...Canary-{newVersion}" - : $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelRepo}/releases/{newVersion}"; + : GetChangelogForVersion(newVersion); public static string GetChangelogForVersion(Version version) => - $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelRepo}/releases/tag/{version}"; + $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelRepo}/releases/{version}"; } } From cdf60eecc09fab90ac5bfba8a3795702439ae9c7 Mon Sep 17 00:00:00 2001 From: Evan Husted <1-greem@users.noreply.git.ryujinx.app> Date: Tue, 11 Mar 2025 06:06:10 +0000 Subject: [PATCH 17/24] small readme update (test) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 219e0e598..1948052ba 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@
- Ryujinx + Ryujinx # Ryujinx [![Release workflow](https://github.com/Ryubing/Ryujinx/actions/workflows/release.yml/badge.svg)](https://github.com/Ryubing/Ryujinx/actions/workflows/release.yml) -[![Latest release](https://img.shields.io/github/v/release/GreemDev/Ryujinx)](https://github.com/Ryubing/Ryujinx/releases/latest) +[![Latest release](https://img.shields.io/github/v/release/Ryubing/Ryujinx)](https://github.com/Ryubing/Ryujinx/releases/latest)
[![Canary workflow](https://github.com/Ryubing/Ryujinx/actions/workflows/canary.yml/badge.svg)](https://github.com/Ryubing/Ryujinx/actions/workflows/canary.yml) [![Latest canary release](https://img.shields.io/github/v/release/Ryubing/Canary-Releases?label=canary)](https://github.com/Ryubing/Canary-Releases/releases/latest) From 3b06f4cb7826f2ad7726666ef7dcff1815749be2 Mon Sep 17 00:00:00 2001 From: shinyoyo Date: Tue, 11 Mar 2025 14:35:19 +0800 Subject: [PATCH 18/24] Updated Zh-CN Simplified Chinese. (#737) --- src/Ryujinx/Assets/locales.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 245951c89..d3c901424 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -2768,7 +2768,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Створити користувацьку конфігурацію", - "zh_CN": "", + "zh_CN": "创建自定义设置", "zh_TW": "" } }, @@ -2793,7 +2793,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Редагувати користувацьку конфігурацію", - "zh_CN": "", + "zh_CN": "编辑自定义设置", "zh_TW": "" } }, @@ -2868,7 +2868,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Відредагувати наявну індивідуальну конфігурацію для цієї гри.", - "zh_CN": "", + "zh_CN": "编辑选定游戏的现存独立配置", "zh_TW": "" } }, @@ -3843,7 +3843,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Показати оригінальний UI (Потрібен перезапуск)", - "zh_CN": "", + "zh_CN": "显示原始 UI 样式 (需要重启)", "zh_TW": "" } }, @@ -3868,7 +3868,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Показати старий інтерфейс Avalonia Ryujinx, який був у Ryujinx 1.1.1403. Ця опція активна за замовчуванням на всіх інших, окрім Windows платформах.\nПовернеться класична панель заголовка, а всі суттєві зміни інтерфейсу будуть скасовані, зокрема горизонтальне розміщення навігації в налаштуваннях.", - "zh_CN": "", + "zh_CN": "显示旧的类似 Ryujinx 1.1.1403 的 Avalonia Ryujinx UI。在非 Windows 平台上默认启用此选项。\n经典样式的标题栏已回归并且恢复了对窗口布局的重大重构;例如在工具提示上方放置设置导航。", "zh_TW": "" } }, @@ -23868,7 +23868,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Список сумісності — {0} ігор", - "zh_CN": "", + "zh_CN": "兼容性列表 - {0} 条", "zh_TW": "" } }, @@ -23943,7 +23943,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Шукати серед {0} перевірених ігор...", - "zh_CN": "", + "zh_CN": "搜索 {0} 兼容性条目...", "zh_TW": "" } }, @@ -24268,7 +24268,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Власна конфігурація", - "zh_CN": "", + "zh_CN": "自定义配置", "zh_TW": "" } }, @@ -24293,7 +24293,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "(Глобальні)", - "zh_CN": "", + "zh_CN": "(全局)", "zh_TW": "" } }, From 6b402847d202e0dff78604c3e4390edf2eee1a3e Mon Sep 17 00:00:00 2001 From: Daniel Nylander Date: Tue, 11 Mar 2025 18:16:33 +0800 Subject: [PATCH 19/24] Updated Swedish in locales.json (#748) --- src/Ryujinx/Assets/locales.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index d3c901424..79a32e312 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1664,7 +1664,7 @@ "pl_PL": "Rozszerzenie pliku: {0}", "pt_BR": "Extensão: {0}", "ru_RU": "Расширение файла: {0}", - "sv_SE": "Filänd: {0}", + "sv_SE": "Filändelse: {0}", "th_TH": "นามสกุลไฟล์: {0}", "tr_TR": "Dosya Uzantısı: {0}", "uk_UA": "Розширення файлу: {0}", @@ -1789,7 +1789,7 @@ "pl_PL": "Rozszerzenie pliku", "pt_BR": "Extensão", "ru_RU": "Расширение файла", - "sv_SE": "Filänd", + "sv_SE": "Filändelse", "th_TH": "นามสกุลไฟล์", "tr_TR": "Dosya Uzantısı", "uk_UA": "Розширення файлу", @@ -4014,7 +4014,7 @@ "pl_PL": "", "pt_BR": "Carregar Automaticamente Pasta de DLC e Atualizações", "ru_RU": "Автозагрузка папки с DLC/Обновлениями", - "sv_SE": "Läs automatisk in DLC/speluppdateringar", + "sv_SE": "Läs automatiskt in DLC/speluppdateringar", "th_TH": "โหลดไดเรกทอรี DLC/ไฟล์อัปเดต อัตโนมัติ", "tr_TR": "", "uk_UA": "Автозавантаження теки DLC/Оновлень", @@ -7264,7 +7264,7 @@ "pl_PL": "Przyciski", "pt_BR": "Botões", "ru_RU": "Кнопки", - "sv_SE": "Knappar", + "sv_SE": "Handlingsknappar", "th_TH": "ปุ่มกด", "tr_TR": "Tuşlar", "uk_UA": "Кнопки", @@ -14914,7 +14914,7 @@ "pl_PL": "Wielowątkowość Backendu Graficznego:", "pt_BR": "Multi Enfileiramento do Renderizador Gráfico:", "ru_RU": "Многопоточность графического бэкенда:", - "sv_SE": "Multithreading för grafikbakände:", + "sv_SE": "Multitrådning för grafikbakände:", "th_TH": "มัลติเธรด กราฟิกเบื้องหลัง:", "tr_TR": "Grafik Backend Multithreading:", "uk_UA": "Багатопотоковість графічного сервера:", @@ -18714,7 +18714,7 @@ "pl_PL": "", "pt_BR": "Não Reduzido", "ru_RU": "Не обрезан", - "sv_SE": "Inte optimerad", + "sv_SE": "Orörd", "th_TH": "", "tr_TR": "", "uk_UA": "Необрізані", From e6339ac95041b11373b4ce67f98ccd08ee45199e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 11 Mar 2025 21:35:25 -0500 Subject: [PATCH 20/24] fix logo in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1948052ba..447dda021 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
- Ryujinx + Ryujinx From 659e580f4d1f287cb3f0aed900580a444e231aac Mon Sep 17 00:00:00 2001 From: WilliamWsyHK Date: Wed, 12 Mar 2025 12:34:57 +0800 Subject: [PATCH 21/24] Update TChinese translation (#738) --- src/Ryujinx/Assets/locales.json | 112 ++++++++++++++++---------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 79a32e312..e84475119 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -469,7 +469,7 @@ "tr_TR": "", "uk_UA": "Відкрити теку скріншотів", "zh_CN": "打开截图文件夹", - "zh_TW": "" + "zh_TW": "開啟螢幕擷取畫面資料夾" } }, { @@ -619,7 +619,7 @@ "tr_TR": "", "uk_UA": "Запускати ігри з прихованим інтерфейсом", "zh_CN": "启动游戏时隐藏 UI", - "zh_TW": "" + "zh_TW": "開啟遊戲時隱藏 UI" } }, { @@ -1569,7 +1569,7 @@ "tr_TR": "", "uk_UA": "Розроблено: {0}", "zh_CN": "由 {0} 开发", - "zh_TW": "" + "zh_TW": "由 {0} 開發" } }, { @@ -1869,7 +1869,7 @@ "tr_TR": "", "uk_UA": "Сумісність:", "zh_CN": "兼容性:", - "zh_TW": "" + "zh_TW": "相容性:" } }, { @@ -1894,7 +1894,7 @@ "tr_TR": "", "uk_UA": "ID гри:", "zh_CN": "标题 ID:", - "zh_TW": "" + "zh_TW": "標題 ID:" } }, { @@ -1919,7 +1919,7 @@ "tr_TR": "", "uk_UA": "Розміщені ігри: {0}", "zh_CN": "服务的游戏: {0}", - "zh_TW": "" + "zh_TW": "LDN 上主持的遊戲數量: {0}" } }, { @@ -1944,7 +1944,7 @@ "tr_TR": "", "uk_UA": "Гравців онлайн: {0}", "zh_CN": "在线玩家: {0}", - "zh_TW": "" + "zh_TW": "LDN 上在線的玩家數量: {0}" } }, { @@ -2294,7 +2294,7 @@ "tr_TR": "", "uk_UA": "Очистити кеш PPTC", "zh_CN": "清理 PPTC 缓存", - "zh_TW": "" + "zh_TW": "清除 PPTC" } }, { @@ -2319,7 +2319,7 @@ "tr_TR": "", "uk_UA": "Видаляє всі файли кешу PPTC для застосунку", "zh_CN": "删除应用程序的所有 PPTC 缓存", - "zh_TW": "" + "zh_TW": "清除應用程式的 PPTC" } }, { @@ -2369,7 +2369,7 @@ "tr_TR": "Uygulamanın shader önbelleğini temizler", "uk_UA": "Видаляє кеш шейдерів застосунку (гри)", "zh_CN": "删除游戏的着色器缓存文件,下次启动游戏时重新生成着色器缓存文件", - "zh_TW": "刪除應用程式的著色器快取" + "zh_TW": "清除應用程式的著色器快取檔案" } }, { @@ -2644,7 +2644,7 @@ "tr_TR": "", "uk_UA": "Витягти RomFS з обраного файлу DLC", "zh_CN": "从选定的 DLC 文件中解压 RomFS", - "zh_TW": "" + "zh_TW": "從已選擇的 DLC 檔案中提取 RomFS" } }, { @@ -2769,7 +2769,7 @@ "tr_TR": "", "uk_UA": "Створити користувацьку конфігурацію", "zh_CN": "创建自定义设置", - "zh_TW": "" + "zh_TW": "建立遊戲獨立自訂 (per-game) 設定檔" } }, { @@ -2794,7 +2794,7 @@ "tr_TR": "", "uk_UA": "Редагувати користувацьку конфігурацію", "zh_CN": "编辑自定义设置", - "zh_TW": "" + "zh_TW": "編輯遊戲獨立自訂 (per-game) 設定檔" } }, { @@ -2844,7 +2844,7 @@ "tr_TR": "Mevcut oyun için bağımsız bir yapılandırma oluşturur", "uk_UA": "Створюйте незалежну конфігурацію для поточної гри", "zh_CN": "为当前游戏创建独立的配置", - "zh_TW": "為當前遊戲創建獨立的配置" + "zh_TW": "為已選擇的遊戲建立遊戲獨立自訂 (game-specific) 的設定檔" } }, { @@ -2869,7 +2869,7 @@ "tr_TR": "", "uk_UA": "Відредагувати наявну індивідуальну конфігурацію для цієї гри.", "zh_CN": "编辑选定游戏的现存独立配置", - "zh_TW": "" + "zh_TW": "為已選擇的遊戲編輯遊戲獨立自訂 (game-specific) 的設定檔" } }, { @@ -2894,7 +2894,7 @@ "tr_TR": "", "uk_UA": "Iнформація про сумісність", "zh_CN": "显示兼容性项目", - "zh_TW": "" + "zh_TW": "顯示相容性資訊" } }, { @@ -2919,7 +2919,7 @@ "tr_TR": "", "uk_UA": "Показати цю гру в Списку Сумісності. Список сумісності також можна зайти в меню Довідки.", "zh_CN": "在兼容性列表中显示选定的游戏,您通常可以通过帮助菜单访问。", - "zh_TW": "" + "zh_TW": "在相容性列表中顯示已選擇的遊戲。你也可以透過「說明」選單開啟。" } }, { @@ -2944,7 +2944,7 @@ "tr_TR": "", "uk_UA": "Інформація про гру", "zh_CN": "显示游戏信息", - "zh_TW": "" + "zh_TW": "顯示遊戲資訊" } }, { @@ -2969,7 +2969,7 @@ "tr_TR": "", "uk_UA": "Показати статистику та деталі обраної гри.", "zh_CN": "显示当前选定游戏的状态与详细信息。", - "zh_TW": "" + "zh_TW": "顯示目前已選擇遊戲的狀態及詳細資訊。" } }, { @@ -3519,7 +3519,7 @@ "tr_TR": "", "uk_UA": "Перевірка оновлень:", "zh_CN": "检查更新", - "zh_TW": "" + "zh_TW": "檢查更新:" } }, { @@ -3544,7 +3544,7 @@ "tr_TR": "", "uk_UA": "Вимкнути", "zh_CN": "关闭", - "zh_TW": "" + "zh_TW": "關閉" } }, { @@ -3569,7 +3569,7 @@ "tr_TR": "", "uk_UA": "Запитувати щоразу", "zh_CN": "提示", - "zh_TW": "" + "zh_TW": "提示" } }, { @@ -3594,7 +3594,7 @@ "tr_TR": "", "uk_UA": "Оновлювати в фоні", "zh_CN": "背景", - "zh_TW": "" + "zh_TW": "背景" } }, { @@ -3619,7 +3619,7 @@ "tr_TR": "", "uk_UA": "При втраті фокуса емулятором:", "zh_CN": "当模拟器在后台时:", - "zh_TW": "" + "zh_TW": "當模擬器「失去焦點」(如切換工作)時:" } }, { @@ -3644,7 +3644,7 @@ "tr_TR": "", "uk_UA": "Нічого не робити", "zh_CN": "什么事情也不做", - "zh_TW": "" + "zh_TW": "沒有動作" } }, { @@ -3669,7 +3669,7 @@ "tr_TR": "", "uk_UA": "Блокувати введення", "zh_CN": "禁用输入", - "zh_TW": "" + "zh_TW": "停用輸入" } }, { @@ -3694,7 +3694,7 @@ "tr_TR": "", "uk_UA": "Вимкнути звук", "zh_CN": "静音", - "zh_TW": "" + "zh_TW": "靜音" } }, { @@ -3719,7 +3719,7 @@ "tr_TR": "", "uk_UA": "Блокувати введення та Вимкнути звук", "zh_CN": "阻止输入且静音", - "zh_TW": "" + "zh_TW": "停用輸入且靜音" } }, { @@ -3744,7 +3744,7 @@ "tr_TR": "", "uk_UA": "Поставити на паузу", "zh_CN": "暂停模拟", - "zh_TW": "" + "zh_TW": "暫停模擬" } }, { @@ -3819,7 +3819,7 @@ "tr_TR": "", "uk_UA": "Вимкнути введення, якщо вікно неактивне", "zh_CN": "在后台时禁用输入", - "zh_TW": "" + "zh_TW": "在「失去焦點」時停用輸入" } }, { @@ -4869,7 +4869,7 @@ "tr_TR": "", "uk_UA": "Синхронізувати з системним годинником", "zh_CN": "与系统时间同步", - "zh_TW": "" + "zh_TW": "與系統時間同步" } }, { @@ -5294,7 +5294,7 @@ "tr_TR": "", "uk_UA": "Ігнорувати Аплет Контролера", "zh_CN": "忽略控制器小程序", - "zh_TW": "" + "zh_TW": "忽略控制器小程式" } }, { @@ -6144,7 +6144,7 @@ "tr_TR": "", "uk_UA": "Увімкнути журнали інтерфейсу", "zh_CN": "启用 UI 日志", - "zh_TW": "" + "zh_TW": "啟用 UI 日誌" } }, { @@ -6544,7 +6544,7 @@ "tr_TR": "", "uk_UA": "Скинути налаштування", "zh_CN": "重置设置", - "zh_TW": "" + "zh_TW": "重設設定" } }, { @@ -6569,7 +6569,7 @@ "tr_TR": "", "uk_UA": "Я хочу скинути налаштування.", "zh_CN": "我要重置我的设置。", - "zh_TW": "" + "zh_TW": "我想重設我的設定。" } }, { @@ -8494,7 +8494,7 @@ "tr_TR": "", "uk_UA": "Вимкнути", "zh_CN": "关闭", - "zh_TW": "" + "zh_TW": "關閉" } }, { @@ -8519,7 +8519,7 @@ "tr_TR": "", "uk_UA": "Веселка", "zh_CN": "彩虹", - "zh_TW": "" + "zh_TW": "彩虹" } }, { @@ -8544,7 +8544,7 @@ "tr_TR": "", "uk_UA": "Швидкість зміни кольорів", "zh_CN": "彩虹滚动速度", - "zh_TW": "" + "zh_TW": "彩虹滾動速度" } }, { @@ -8569,7 +8569,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "颜色", - "zh_TW": "" + "zh_TW": "顏色" } }, { @@ -13844,7 +13844,7 @@ "tr_TR": "", "uk_UA": "Ви збираєтесь видалити всі дані PPTC з:\n\n{0}\n\nБажаєте продовжити цю операцію?", "zh_CN": "您正要清理 PPTC 数据:\n\n{0}\n\n您确实要继续吗?", - "zh_TW": "" + "zh_TW": "您將要刪除以下遊戲的 PPTC:\n\n{0}\n\n您確定要繼續嗎?" } }, { @@ -16694,7 +16694,7 @@ "tr_TR": "", "uk_UA": "Діалогове вікно Аплету Контролера не з'явиться, якщо геймпад було відключено під час роботи програми.\n\nЗалиште вимкненим якщо не впевнені.", "zh_CN": "在应用程序运行时如果游戏手柄断开连接则不会显示控制器小程序对话框。\n\n如果不确定,请保持关闭状态。", - "zh_TW": "" + "zh_TW": "在模擬應用程式時如果遊戲手柄中斷連線則不會顯示控制器小程式。\n\n如果不確定,請保持關閉狀態。" } }, { @@ -17169,7 +17169,7 @@ "tr_TR": "", "uk_UA": "Виводити повідомлення журналу Avalonia (UI) в консоль", "zh_CN": "在控制台显示 Avalonia (UI) 的日志信息", - "zh_TW": "" + "zh_TW": "在控制台中輸出 Avalonia (UI) 日誌訊息。" } }, { @@ -17369,7 +17369,7 @@ "tr_TR": "", "uk_UA": "Відкрити теку куди зберігаються скріншоти Ryujinx", "zh_CN": "打开 Ryujinx 截图文件夹", - "zh_TW": "" + "zh_TW": "開啟 Ryujinx 螢幕擷取畫面資料夾" } }, { @@ -18119,7 +18119,7 @@ "tr_TR": "", "uk_UA": "Доступне оновлення!", "zh_CN": "有可用的更新!", - "zh_TW": "" + "zh_TW": "有可用的更新!" } }, { @@ -19944,7 +19944,7 @@ "tr_TR": "", "uk_UA": "Налаштування LED", "zh_CN": "LED 设置", - "zh_TW": "" + "zh_TW": "LED 設定" } }, { @@ -21794,7 +21794,7 @@ "tr_TR": "Yeniden Doku Sıkıştırılmasını Aktif Et", "uk_UA": "Увімкнути рекомпресію текстури", "zh_CN": "启用纹理压缩", - "zh_TW": "開啟材質重新壓縮" + "zh_TW": "啟用材質重新壓縮" } }, { @@ -24144,7 +24144,7 @@ "tr_TR": "", "uk_UA": "Запускається та оптимально працює (без збоїв або графічних багів) на середньостатистичному комп'ютері.", "zh_CN": "启动和游戏时不会出现任何崩溃或任何类型的 GPU bug 且速度足够快可以在一般 PC 上尽情游玩。", - "zh_TW": "" + "zh_TW": "啟動和遊玩時不會出現任何崩潰或任何類型的 GPU bug 且速度足夠快可以在一般 PC 上盡情遊玩。" } }, { @@ -24169,7 +24169,7 @@ "tr_TR": "", "uk_UA": "Запускається, але в грі на вас чекатимуть одна або декілька наступних проблем: збої, зависання, графічні баги, спотворений звук або ж гра загалом працюватиме надто повільно. Можливо, її все ще можна пройти, але досвід буде не найкращим.", "zh_CN": "可以成功启动并进入游戏但可能会遇到以下一种或多种问题: 崩溃、卡死、GPU bug、令人无法接受的音频,或者只是太慢。仍然可以继续进行游戏,但是可能无法达到预期。", - "zh_TW": "" + "zh_TW": "能啟動並進入遊戲,但可能會遇到下列狀況:崩潰、卡死、GPU bug、令人無法接受的聲音、或遊戲過慢。遊戲或可繼續進行,但是可能無法達到預期效果。" } }, { @@ -24194,7 +24194,7 @@ "tr_TR": "", "uk_UA": "Запускається та проходить початковий екран, але пограти не вийде.", "zh_CN": "可以启动并通过标题画面但是无法进入到主要的游戏流程。", - "zh_TW": "" + "zh_TW": "能啟動並通過標題畫面,但是無法進入主要的遊戲畫面。" } }, { @@ -24219,7 +24219,7 @@ "tr_TR": "", "uk_UA": "Запускається, але не відображає навіть початкового екрану.", "zh_CN": "可以启动但是无法通过标题画面。", - "zh_TW": "" + "zh_TW": "能啟動,但是無法通過標題畫面。" } }, { @@ -24244,7 +24244,7 @@ "tr_TR": "", "uk_UA": "Взагалі не запускається.", "zh_CN": "无法启动或显示无任何动静。", - "zh_TW": "" + "zh_TW": "無法啟動" } }, { @@ -24269,7 +24269,7 @@ "tr_TR": "", "uk_UA": "Власна конфігурація", "zh_CN": "自定义配置", - "zh_TW": "" + "zh_TW": "遊戲獨立自訂 (game-specific) 設定" } }, { @@ -24294,7 +24294,7 @@ "tr_TR": "", "uk_UA": "(Глобальні)", "zh_CN": "(全局)", - "zh_TW": "" + "zh_TW": "(全域)" } }, { @@ -24319,7 +24319,7 @@ "tr_TR": "", "uk_UA": "Оберіть DLC які бажаєте вилучити", "zh_CN": "选择一个要解压的 DLC", - "zh_TW": "" + "zh_TW": "選擇要提取的 DLC" } }, { @@ -24344,7 +24344,7 @@ "tr_TR": "", "uk_UA": "Зображення картки активності Discord", "zh_CN": "Rich Presence 图像", - "zh_TW": "" + "zh_TW": "Rich Presence 圖像" } }, { @@ -24369,7 +24369,7 @@ "tr_TR": "", "uk_UA": "Динамічна картка активності Discord", "zh_CN": "动态 Rich Presence", - "zh_TW": "" + "zh_TW": "動態 Rich Presence" } } ] From 20111a651c27878b23e01b05b4fb0ca667182501 Mon Sep 17 00:00:00 2001 From: Milihraim <112830494+Milihraim@users.noreply.github.com> Date: Wed, 12 Mar 2025 08:12:37 +0300 Subject: [PATCH 22/24] Update Russian (#745) --- src/Ryujinx/Assets/locales.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index e84475119..465dbd29e 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -2763,7 +2763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Создать пользовательскую конфигурацию", + "ru_RU": "Задать индивидуальные параметры", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -2788,7 +2788,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Изменить пользовательскую конфигурацию", + "ru_RU": "Изменить индивидуальные параметры", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -2863,7 +2863,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Отредактировать существующую независимую конфигурацию для выбранной игры.", + "ru_RU": "Отредактировать существующие независимые параметры для выбранной игры.", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -3838,7 +3838,7 @@ "no_NO": "Vis original UI-stil (krever omstart)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Включить оригинальный интерфейса (требуется перезагрузка)", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -3863,7 +3863,7 @@ "no_NO": "Vis det eldre Avalonia Ryujinx-grensesnittet som minner om Ryujinx 1.1.1403. Dette er aktivert som standard på plattformer som ikke er Windows.\nTittellinjen i klassisk stil er tilbake, og store omarbeidinger av vindusoppsettet er reversert, for eksempel plasseringen av innstillingsnavigasjonen over dette verktøytipset.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Показать старый пользовательский интерфейс Avalonia Ryujinx, напоминающий Ryujinx 1.1.1403. Включено по умолчанию на платформах, отличных от Windows.\nСтрока заголовка в классическом стиле вернётся на место, а основные изменения в оформлении окна будут отменены; например, расположение навигации по настройкам над этой всплывающей подсказкой.", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -5038,7 +5038,7 @@ "no_NO": "Lyd Inn/Ut", "pl_PL": "", "pt_BR": "", - "ru_RU": "Выход/Вход звука", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -6588,7 +6588,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Ок", + "ru_RU": "", "sv_SE": "Ok", "th_TH": "ตกลง", "tr_TR": "Tamam", @@ -7038,7 +7038,7 @@ "no_NO": "", "pl_PL": "Pro Kontroler", "pt_BR": "", - "ru_RU": "Pro контроллер", + "ru_RU": "", "sv_SE": "", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", @@ -23863,7 +23863,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Список совместимости — записей: {0}", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -23938,7 +23938,7 @@ "no_NO": "Søk i {0} kompatibilitetsoppføringer...", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Поиск среди {0} записей о совместимости...", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -24263,7 +24263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Индивидуальные параметры", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -24288,7 +24288,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "(Глобальный)", "sv_SE": "", "th_TH": "", "tr_TR": "", From 05b4bd8c61b9ee9b1d471f0ccf5309d9f478dcba Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 12 Mar 2025 14:17:14 -0500 Subject: [PATCH 23/24] UI: Use a new repo for amiibo stuff specifically --- src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs index e550c4ae0..48c0837b4 100644 --- a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs @@ -432,7 +432,7 @@ namespace Ryujinx.Ava.UI.ViewModels { try { - HttpResponseMessage response = await _httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Head, "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/Amiibo.json")); + HttpResponseMessage response = await _httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Head, "https://raw.githubusercontent.com/Ryubing/Nfc/refs/heads/main/tags.json")); if (response.IsSuccessStatusCode) { @@ -451,7 +451,7 @@ namespace Ryujinx.Ava.UI.ViewModels { try { - HttpResponseMessage response = await _httpClient.GetAsync($"https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/Amiibo.json"); + HttpResponseMessage response = await _httpClient.GetAsync("https://raw.githubusercontent.com/Ryubing/Nfc/refs/heads/main/tags.json"); if (response.IsSuccessStatusCode) { From ddc00cf2d8774a676c96d87c11ad2bf738c45ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hack=E8=8C=B6=E3=82=93?= <120134269+Hackjjang@users.noreply.github.com> Date: Fri, 14 Mar 2025 03:56:47 +0900 Subject: [PATCH 24/24] Update Korean translation (#764) --- src/Ryujinx/Assets/locales.json | 86 ++++++++++++++++----------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 465dbd29e..47db0501e 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -84,7 +84,7 @@ "he_IL": "", "it_IT": "Applet Editor Mii", "ja_JP": "", - "ko_KR": "Mii 편집 애플릿", + "ko_KR": "애플릿 Mii 편집기", "no_NO": "Mii-redigeringsapplet", "pl_PL": "", "pt_BR": "Editor de Mii", @@ -459,7 +459,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "스크린샷 폴더 열기", "no_NO": "", "pl_PL": "", "pt_BR": "Abrir Pasta de Capturas de Tela", @@ -1559,7 +1559,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "{0}에서 개발", "no_NO": "Utviklet av {0}", "pl_PL": "", "pt_BR": "Desenvolvido por {0}", @@ -1859,7 +1859,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "호환성 :", "no_NO": "Kompatibilitet", "pl_PL": "", "pt_BR": "Compatibilidade:", @@ -1884,7 +1884,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "타이틀 ID :", "no_NO": "Tittel ID:", "pl_PL": "", "pt_BR": "ID do Título:", @@ -1909,7 +1909,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "호스트 게임 : {0}", "no_NO": "Spill som Arrangeres: {0}", "pl_PL": "", "pt_BR": "Jogos Hospedados: {0}", @@ -1934,7 +1934,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "온라인 플레이어 : {0}", "no_NO": "Online-spillere: {0}", "pl_PL": "", "pt_BR": "Jogadores Online: {0}", @@ -2759,7 +2759,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 구성 만들기", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -2784,7 +2784,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 구성 편집", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -2859,7 +2859,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "선택한 게임에 대한 기존 독립 구성 편집", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -3509,7 +3509,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "업데이트 확인 :", "no_NO": "Se etter Oppdateringer:", "pl_PL": "", "pt_BR": "Verificar Atualizações:", @@ -3534,7 +3534,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "끔", "no_NO": "Av", "pl_PL": "", "pt_BR": "Desligado", @@ -3559,7 +3559,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "프롬프트", "no_NO": "Spør", "pl_PL": "", "pt_BR": "Ao Abrir", @@ -3584,7 +3584,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "백그라운드", "no_NO": "Bakgrunn", "pl_PL": "", "pt_BR": "2° Plano", @@ -3609,7 +3609,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "에뮬레이터 초점 손실 :", "no_NO": "På Emulator Fokus Tapt:", "pl_PL": "", "pt_BR": "Ao Perder o Foco:", @@ -3634,7 +3634,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "아무것도 하지 않음", "no_NO": "Gjør Ingenting", "pl_PL": "", "pt_BR": "Não Fazer Nada", @@ -3659,7 +3659,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "입력 차단", "no_NO": "Blokkinngang", "pl_PL": "", "pt_BR": "Bloquear Controles", @@ -3684,7 +3684,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "음소거", "no_NO": "Demp Lyd", "pl_PL": "", "pt_BR": "Ficar Mudo", @@ -3709,7 +3709,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "입력 차단 및 음소거", "no_NO": "Blokker Inputs og demp Volumet", "pl_PL": "", "pt_BR": "Bloquear Controles & Ficar Mudo", @@ -3734,7 +3734,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "에뮬레이션 일시 중지", "no_NO": "Pause Emulatoren", "pl_PL": "", "pt_BR": "Pausar a Emulação", @@ -3809,7 +3809,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "초점이 맞지 않으면 입력 비활성화", "no_NO": "Deaktiver inndata når vinduet er ute av fokus", "pl_PL": "", "pt_BR": "Desativar Controles Quando Estiver Fora de Foco", @@ -3834,7 +3834,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "원래 UI 스타일 표시(다시 시작 필요)", "no_NO": "Vis original UI-stil (krever omstart)", "pl_PL": "", "pt_BR": "", @@ -3859,7 +3859,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "Ryujinx 1.1.1403을 연상시키는 이전 Avalonia Ryujinx UI를 표시합니다. 이 기능은 Windows가 아닌 플랫폼에서는 기본적으로 활성화됩니다.\n 클래식 스타일의 타이틀 바가 돌아왔고 주요 창 레이아웃 재작업이 역전되었습니다. 이 툴팁 위의 설정 탐색 배치와 같은 작업입니다.", "no_NO": "Vis det eldre Avalonia Ryujinx-grensesnittet som minner om Ryujinx 1.1.1403. Dette er aktivert som standard på plattformer som ikke er Windows.\nTittellinjen i klassisk stil er tilbake, og store omarbeidinger av vindusoppsettet er reversert, for eksempel plasseringen av innstillingsnavigasjonen over dette verktøytipset.", "pl_PL": "", "pt_BR": "", @@ -5284,7 +5284,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "컨트롤러 애플릿 무시", "no_NO": "", "pl_PL": "", "pt_BR": "Ignorar Applet do Controlador", @@ -6134,7 +6134,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "UI 로그 활성화", "no_NO": "Aktivere UI-logger", "pl_PL": "", "pt_BR": "Habilitar Logs da IU", @@ -6534,7 +6534,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "설정 초기화", "no_NO": "Tilbakestill innstillinger", "pl_PL": "", "pt_BR": "Redefinir Configurações", @@ -6559,7 +6559,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "설정을 초기화하고 싶습니다.", "no_NO": "Jeg vil tilbakestille innstillingene mine.", "pl_PL": "", "pt_BR": "Quero redefinir minhas configurações.", @@ -13484,7 +13484,7 @@ "he_IL": "שגיאה בהצגת דיאלוג ErrorApplet: {0}", "it_IT": "Errore nella visualizzazione della finestra dell'ErrorApplet: {0}", "ja_JP": "エラーアプレットダイアログ表示エラー: {0}", - "ko_KR": "애플릿 오류류 대화 상자 표시 오류 : {0}", + "ko_KR": "애플릿 오류 대화 상자 표시 오류 : {0}", "no_NO": "Feil ved visning av Feilmeldingsdialog: {0}", "pl_PL": "Błąd wyświetlania okna Dialogowego ErrorApplet: {0}", "pt_BR": "Erro ao exibir applet ErrorApplet: {0}", @@ -16684,7 +16684,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "앱이 실행 중일 때, 게임패드의 연결이 끊어지면 컨트롤러 애플릿 대화 상자가 나타나지 않습니다.\n\n모르시면 끔으로 두십시오.", "no_NO": "", "pl_PL": "", "pt_BR": "A caixa de diálogo do Applet do controlador não aparecerá se o controle for desconectado enquanto um aplicativo estiver em execução.\n\nDeixe a opção DESLIGADO se não tiver certeza.", @@ -17159,7 +17159,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "콘솔에 Avalonia(UI) 로그 메시지를 출력합니다.", "no_NO": "Skriver ut Avalonia (UI)-loggmeldinger i konsollen.", "pl_PL": "", "pt_BR": "Imprime mensagens de log do Avalonia (UI) no console.", @@ -17359,7 +17359,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "Ryujinx 스크린샷 폴더 열기", "no_NO": "", "pl_PL": "", "pt_BR": "Abre a pasta de capturas de tela do Ryujinx", @@ -18109,7 +18109,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "업데이트 가능!", "no_NO": "Oppdatering tilgjengelig!", "pl_PL": "", "pt_BR": "Atualização Disponível!", @@ -23859,7 +23859,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "호환성 목록 - {0}개 항목", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -23934,7 +23934,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "어카이브 {0} 호환성 항목...", "no_NO": "Søk i {0} kompatibilitetsoppføringer...", "pl_PL": "", "pt_BR": "", @@ -24134,7 +24134,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "어떠한 충돌이나 GPU 버그 없이 부팅 및 플레이가 가능하며, 일반 PC에서 충분히 즐길 수 있을 만큼 빠른 속도입니다.", "no_NO": "Starter opp og spiller uten krasj eller GPU-feil av noe slag, og med en hastighet som er rask nok til å ha rimelig glede av på en gjennomsnittlig PC.", "pl_PL": "", "pt_BR": "Inicializa e roda sem travamentos ou bugs de GPU de qualquer tipo, e em uma velocidade rápida o suficiente para ser aproveitado em um PC comum.", @@ -24159,7 +24159,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "부팅하고 게임에 들어가지만 충돌, 교착 상태, GPU 버그, 방해가 될 정도로 나쁜 오디오 또는 너무 느린 문제 중 하나 이상으로 인해 문제가 발생합니다. 게임은 여전히 ​​가능할 수 있습니다.", "no_NO": "Starter og går i gang i spillet, men lider av ett eller flere av følgende: krasjer, fastlåser, GPU-feil, distraherende dårlig lyd eller er rett og slett for tregt. Spillet kan fortsatt spilles helt til ende, men ikke slik det er ment å spilles.", "pl_PL": "", "pt_BR": "Inicializa e entra no jogo, mas sofre de um ou mais dos seguintes: travamentos, deadlocks, bugs de GPU, áudio ruim que distrai ou é simplesmente muito lento. O jogo ainda pode ser jogado até o fim, mas não da forma como foi criado para ser jogado.", @@ -24184,7 +24184,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "부팅하고 타이틀 화면이 나오지만 메인 게임 플레이로 진입할 수 없습니다.", "no_NO": "Starter opp og går forbi tittelskjermen, men kommer ikke inn i hovedspillet.", "pl_PL": "", "pt_BR": "Inicializa e passa da tela de título, mas não entra no jogo principal.", @@ -24209,7 +24209,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "부팅되지만 타이틀 화면을 통과하지 못합니다.", "no_NO": "Starter, men kommer ikke lenger enn til tittelskjermen.", "pl_PL": "", "pt_BR": "Inizializa, mas não passa da tela de título.", @@ -24234,7 +24234,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "부팅되지 않거나 활동 흔적이 보이지 않습니다.", "no_NO": "Starter ikke opp eller viser ingen tegn til aktivitet.", "pl_PL": "", "pt_BR": "Não inicializa ou não mostra sinais de atividade.", @@ -24259,7 +24259,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 설정", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -24284,7 +24284,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "(글로벌)", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -24334,7 +24334,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "리치 프레즌스 이미지", "no_NO": "Rikt nærværsbilde", "pl_PL": "", "pt_BR": "Imagem da Presença do Discord", @@ -24359,7 +24359,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "다이내믹 리치 프레즌스", "no_NO": "Dynamisk og rik tilstedeværelse", "pl_PL": "", "pt_BR": "Presença Dinâmica do Discord",