Merge d22a6b2c72464951e3655c88d63686ad3645455c into fec4f4ada9f28f897457033f9954c84cc15d0b02

This commit is contained in:
Evan Husted 2025-01-11 14:13:08 -06:00 committed by GitHub
commit 96b2ca789e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
37 changed files with 4131 additions and 22 deletions

View File

@ -17,6 +17,7 @@
<PackageVersion Include="FluentAvaloniaUI" Version="2.1.0" />
<PackageVersion Include="GtkSharp.Dependencies" Version="1.1.1" />
<PackageVersion Include="GtkSharp.Dependencies.osx" Version="0.0.5" />
<PackageVersion Include="Humanizer" Version="2.14.1" />
<PackageVersion Include="LibHac" Version="0.19.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
@ -37,6 +38,7 @@
<PackageVersion Include="Ryujinx.GtkSharp" Version="3.24.24.59-ryujinx" />
<PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" />
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
<PackageVersion Include="Sep" Version="0.6.0" />
<PackageVersion Include="shaderc.net" Version="0.1.0" />
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
<PackageVersion Include="Silk.NET.Vulkan" Version="2.21.0" />
@ -49,4 +51,4 @@
<PackageVersion Include="System.Management" Version="8.0.0" />
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
</ItemGroup>
</Project>
</Project>

3423
docs/compatibility.csv Normal file

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,7 @@
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" />
<PackageReference Include="MsgPack.Cli" />
<PackageReference Include="System.Management" />
<PackageReference Include="Humanizer" />
</ItemGroup>
</Project>

View File

@ -6,6 +6,9 @@
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<FontFamily x:Key="JetBrainsMono">avares://Ryujinx/Assets/Fonts/Mono/#JetBrains Mono</FontFamily>
</ResourceDictionary>
<MergeResourceInclude Source="/Assets/Styles/Themes.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
@ -14,4 +17,4 @@
<sty:FluentAvaloniaTheme PreferSystemTheme="False" />
<StyleInclude Source="/Assets/Styles/Styles.xaml"/>
</Application.Styles>
</Application>
</Application>

View File

@ -0,0 +1,10 @@
# This is the official list of project authors for copyright purposes.
# This file is distinct from the CONTRIBUTORS.txt file.
# See the latter for an explanation.
#
# Names should be added to this file as:
# Name or Organization <email address>
JetBrains <>
Philipp Nurullin <philipp.nurullin@jetbrains.com>
Konstantin Bulenkov <kb@jetbrains.com>

Binary file not shown.

View File

@ -0,0 +1,93 @@
Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "الوضع:",
"MultiplayerModeTooltip": "تغيير وضع LDN متعدد اللاعبين.\n\nسوف يقوم LdnMitm بتعديل وظيفة اللعب المحلية/اللاسلكية المحلية في الألعاب لتعمل كما لو كانت شبكة LAN، مما يسمح باتصالات الشبكة المحلية نفسها مع محاكيات ريوجينكس الأخرى وأجهزة نينتندو سويتش المخترقة التي تم تثبيت وحدة ldn_mitm عليها.\n\nيتطلب وضع اللاعبين المتعددين أن يكون جميع اللاعبين على نفس إصدار اللعبة (على سبيل المثال، يتعذر على الإصدار 13.0.1 من سوبر سماش برذرز ألتميت الاتصال بالإصدار 13.0.0).\n\nاتركه معطلا إذا لم تكن متأكدا.",
"MultiplayerModeDisabled": "معطل",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Modus:",
"MultiplayerModeTooltip": "Ändert den LDN-Mehrspielermodus.\n\nLdnMitm ändert die lokale drahtlose/lokale Spielfunktionalität in Spielen so, dass sie wie ein LAN funktioniert und lokale, netzwerkgleiche Verbindungen mit anderen Ryujinx-Instanzen und gehackten Nintendo Switch-Konsolen ermöglicht, auf denen das ldn_mitm-Modul installiert ist.\n\nMultiplayer erfordert, dass alle Spieler die gleiche Spielversion verwenden (d.h. Super Smash Bros. Ultimate v13.0.1 kann sich nicht mit v13.0.0 verbinden).\n\nIm Zweifelsfall auf DISABLED lassen.",
"MultiplayerModeDisabled": "Deaktiviert",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Λειτουργία:",
"MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.",
"MultiplayerModeDisabled": "Disabled",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -795,5 +795,15 @@
"MultiplayerMode": "Mode:",
"MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.",
"MultiplayerModeDisabled": "Disabled",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Modo:",
"MultiplayerModeTooltip": "Cambiar modo LDN multijugador.\n\nLdnMitm modificará la funcionalidad local de juego inalámbrico para funcionar como si fuera LAN, permitiendo locales conexiones de la misma red con otras instancias de Ryujinx y consolas hackeadas de Nintendo Switch que tienen instalado el módulo ldn_mitm.\n\nMultijugador requiere que todos los jugadores estén en la misma versión del juego (por ejemplo, Super Smash Bros. Ultimate v13.0.1 no se puede conectar a v13.0.0).\n\nDejar DESACTIVADO si no está seguro.",
"MultiplayerModeDisabled": "Deshabilitar",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Mode :",
"MultiplayerModeTooltip": "Changer le mode multijoueur LDN.\n\nLdnMitm modifiera la fonctionnalité de jeu sans fil local/jeu local dans les jeux pour fonctionner comme s'il s'agissait d'un LAN, permettant des connexions locales sur le même réseau avec d'autres instances de Ryujinx et des consoles Nintendo Switch piratées ayant le module ldn_mitm installé.\n\nLe multijoueur nécessite que tous les joueurs soient sur la même version du jeu (par exemple, Super Smash Bros. Ultimate v13.0.1 ne peut pas se connecter à v13.0.0).\n\nLaissez DÉSACTIVÉ si vous n'êtes pas sûr.",
"MultiplayerModeDisabled": "Désactivé",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "מצב:",
"MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.",
"MultiplayerModeDisabled": "Disabled",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Modalità:",
"MultiplayerModeTooltip": "Cambia la modalità multigiocatore LDN.\n\nLdnMitm modificherà la funzionalità locale wireless/local play nei giochi per funzionare come se fosse in modalità LAN, consentendo connessioni locali sulla stessa rete con altre istanze di Ryujinx e console Nintendo Switch modificate che hanno il modulo ldn_mitm installato.\n\nLa modalità multigiocatore richiede che tutti i giocatori usino la stessa versione del gioco (es. Super Smash Bros. Ultimate v13.0.1 non può connettersi con la v13.0.0).\n\nNel dubbio, lascia l'opzione su Disabilitato.",
"MultiplayerModeDisabled": "Disabilitato",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "モード:",
"MultiplayerModeTooltip": "LDNマルチプレイヤーモードを変更します.\n\nldn_mitmモジュールがインストールされた, 他のRyujinxインスタンスや,ハックされたNintendo Switchコンソールとのローカル/同一ネットワーク接続を可能にします.\n\nマルチプレイでは, すべてのプレイヤーが同じゲームバージョンである必要がありますSuper Smash Bros. Ultimate v13.0.1はv13.0.0に接続できません).\n\n不明な場合は「無効」のままにしてください.",
"MultiplayerModeDisabled": "無効",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "모드 :",
"MultiplayerModeTooltip": "LDN 멀티플레이어 모드를 변경합니다.\n\nLdnMitm은 로컬 무선/로컬 플레이 기능을 수정하여 LAN 모드에 있는 것처럼 만들어 로컬이나 동일한 네트워크 상에 있는 다른 Ryujinx 인스턴스나 커펌된 닌텐도 스위치 콘솔(ldn_mitm 모듈 설치 필요)과 연결할 수 있습니다.\n\n멀티플레이어 모드는 모든 플레이어들이 동일한 게임 버전을 요구합니다. 예를 들어 슈퍼 스매시브라더스 얼티밋 v13.0.1 사용자는 v13.0.0 사용자와 연결할 수 없습니다.\n\n해당 옵션에 대해 잘 모른다면 비활성화해두세요.",
"MultiplayerModeDisabled": "비활성화됨",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Tryb:",
"MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.",
"MultiplayerModeDisabled": "Wyłączone",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Modo:",
"MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.",
"MultiplayerModeDisabled": "Disabled",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Режим:",
"MultiplayerModeTooltip": "Меняет многопользовательский режим LDN.\n\nLdnMitm модифицирует функциональность локальной беспроводной/игры на одном устройстве в играх, позволяя играть с другими пользователями Ryujinx или взломанными консолями Nintendo Switch с установленным модулем ldn_mitm, находящимися в одной локальной сети друг с другом.\n\nМногопользовательская игра требует наличия у всех игроков одной и той же версии игры (т.е. Super Smash Bros. Ultimate v13.0.1 не может подключиться к v13.0.0).\n\nРекомендуется оставить отключенным.",
"MultiplayerModeDisabled": "Отключено",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "โหมด:",
"MultiplayerModeTooltip": "เปลี่ยนโหมดผู้เล่นหลายคนของ LDN\n\nLdnMitm จะปรับเปลี่ยนฟังก์ชันการเล่นแบบไร้สาย/ภายใน จะให้เกมทำงานเหมือนกับว่าเป็น LAN ช่วยให้สามารถเชื่อมต่อภายในเครือข่ายเดียวกันกับอินสแตนซ์ Ryujinx อื่น ๆ และคอนโซล Nintendo Switch ที่ถูกแฮ็กซึ่งมีโมดูล ldn_mitm ติดตั้งอยู่\n\nผู้เล่นหลายคนต้องการให้ผู้เล่นทุกคนอยู่ในเกมเวอร์ชันเดียวกัน (เช่น Super Smash Bros. Ultimate v13.0.1 ไม่สามารถเชื่อมต่อกับ v13.0.0)\n\nปล่อยให้ปิดการใช้งานหากไม่แน่ใจ",
"MultiplayerModeDisabled": "Disabled",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Mod:",
"MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.",
"MultiplayerModeDisabled": "Devre Dışı",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "Режим:",
"MultiplayerModeTooltip": "Змінити LDN мультиплеєру.\n\nLdnMitm змінить функціонал бездротової/локальної гри в іграх, щоб вони працювали так, ніби це LAN, що дозволяє локальні підключення в тій самій мережі з іншими екземплярами Ryujinx та хакнутими консолями Nintendo Switch, які мають встановлений модуль ldn_mitm.\n\nМультиплеєр вимагає, щоб усі гравці були на одній і тій же версії гри (наприклад Super Smash Bros. Ultimate v13.0.1 не зможе під'єднатися до v13.0.0).\n\nЗалиште на \"Вимкнено\", якщо не впевнені, ",
"MultiplayerModeDisabled": "Вимкнено",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "联机模式:",
"MultiplayerModeTooltip": "修改 LDN 多人联机游玩模式。\n\nldn_mitm 联机插件将修改游戏中的本地无线和本地游玩功能,使其表现得像局域网一样,允许和其他安装了 ldn_mitm 插件的 Ryujinx 模拟器和破解的任天堂 Switch 主机在同一网络下进行本地连接,实现多人联机游玩。\n\n多人联机游玩要求所有玩家必须运行相同的游戏版本例如任天堂明星大乱斗特别版 v13.0.1 无法与 v13.0.0 版本联机)。\n\n如果不确定请保持为“禁用”。",
"MultiplayerModeDisabled": "禁用",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -776,5 +776,15 @@
"MultiplayerMode": "模式:",
"MultiplayerModeTooltip": "變更 LDN 多人遊戲模式。\n\nLdnMitm 將修改遊戲中的本機無線/本機遊戲功能,使其如同區域網路一樣執行,允許與其他安裝了 ldn_mitm 模組的 Ryujinx 實例和已破解的 Nintendo Switch 遊戲機進行本機同網路連線。\n\n多人遊戲要求所有玩家使用相同的遊戲版本 (例如Super Smash Bros. Ultimate v13.0.1 無法連接 v13.0.0)。\n\n如果不確定請保持 Disabled (停用) 狀態。",
"MultiplayerModeDisabled": "已停用",
"MultiplayerModeLdnMitm": "ldn_mitm"
"MultiplayerModeLdnMitm": "ldn_mitm",
"CompatibilityListOpen": "Open Compatibility List",
"CompatibilityListLastUpdated": "Last updated: {0}",
"CompatibilityListWarning": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.",
"CompatibilityListSearchBoxWatermark": "Search compatibility entries...",
"CompatibilityListOnlyShowOwnedGames": "Only show owned games",
"CompatibilityListPlayable": "Playable",
"CompatibilityListIngame": "Ingame",
"CompatibilityListMenus": "Menus",
"CompatibilityListBoots": "Boots",
"CompatibilityListNothing": "Nothing"
}

View File

@ -389,7 +389,7 @@
<x:Double x:Key="ControlContentThemeFontSize">13</x:Double>
<x:Double x:Key="MenuItemHeight">26</x:Double>
<x:Double x:Key="TabItemMinHeight">28</x:Double>
<x:Double x:Key="ContentDialogMaxWidth">600</x:Double>
<x:Double x:Key="ContentDialogMaxWidth">900</x:Double>
<x:Double x:Key="ContentDialogMaxHeight">756</x:Double>
</Styles.Resources>
</Styles>

View File

@ -0,0 +1,162 @@
using Humanizer;
using nietras.SeparatedValues;
using Ryujinx.Ava.Common.Locale;
using Ryujinx.Common.Logging;
using System;
using System.IO;
using System.Linq;
using System.Reflection;
namespace Ryujinx.Ava.Modules.Compatibility
{
public struct ColumnIndices(Func<string, 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);
}
public class CompatibilityCsv
{
static CompatibilityCsv()
{
using Stream csvStream = Assembly.GetExecutingAssembly()
.GetManifestResourceStream("RyujinxGameCompatibilityList")!;
csvStream.Position = 0;
using SepReader reader = Sep.Reader().From(csvStream);
ColumnIndices columnIndices = new(reader.Header.IndexOf);
Entries = reader
.Enumerate(row => new CompatibilityEntry(ref columnIndices, row))
.OrderBy(it => it.GameName)
.ToArray();
Logger.Debug?.Print(LogClass.UI, "Compatibility CSV loaded.", "LoadCompatCsv");
}
public static CompatibilityEntry[] Entries { get; private set; }
}
public class CompatibilityEntry
{
public CompatibilityEntry(ref ColumnIndices indices, SepReader.Row row)
{
string titleIdRow = ColStr(row[indices.TitleId]);
TitleId = !string.IsNullOrEmpty(titleIdRow)
? titleIdRow
: null;
GameName = ColStr(row[indices.GameName]);
Labels = ColStr(row[indices.Labels]).Split(';');
Status = ColStr(row[indices.Status]).ToLower() switch
{
"playable" => LocaleKeys.CompatibilityListPlayable,
"ingame" => LocaleKeys.CompatibilityListIngame,
"menus" => LocaleKeys.CompatibilityListMenus,
"boots" => LocaleKeys.CompatibilityListBoots,
"nothing" => LocaleKeys.CompatibilityListNothing,
_ => null
};
if (DateTime.TryParse(ColStr(row[indices.LastUpdated]), out var dt))
LastUpdated = dt;
return;
string ColStr(SepReader.Col col) => col.ToString().Trim('"');
}
public string GameName { get; }
public bool CheckTitleId(Func<string, bool> checker) => TitleId is not null && checker(TitleId);
public bool MatchesId(string titleId) =>
TitleId is not null && TitleId.Equals(titleId, StringComparison.OrdinalIgnoreCase);
public bool NearMatchesId(string titleId) =>
TitleId is not null && TitleId.Contains(titleId, StringComparison.OrdinalIgnoreCase);
public bool MatchesAnyId(params string[] titleIds) =>
TitleId is not null && titleIds.Any(it => TitleId.Equals(it, StringComparison.OrdinalIgnoreCase));
public string TitleId { get; }
public string[] Labels { get; }
internal LocaleKeys? Status { get; }
public DateTime LastUpdated { get; }
public string LocalizedLastUpdated =>
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.CompatibilityListLastUpdated, LastUpdated.Humanize());
public string LocalizedStatus => LocaleManager.Instance[Status!.Value];
public string FormattedTitleId => TitleId ?? new string(' ', 16);
public string FormattedIssueLabels => string.Join(",", Labels
.Select(FormatLabelName));
public static string FormatLabelName(string labelName) => labelName.ToLower() switch
{
"audio" => "Audio",
"bug" => "Bug",
"cpu" => "CPU",
"gpu" => "GPU",
"gui" => "GUI",
"help wanted" => "Help Wanted",
"horizon" => "Horizon",
"infra" => "Project Infra",
"invalid" => "Invalid",
"kernel" => "Kernel",
"ldn" => "LDN",
"linux" => "Linux",
"macos" => "macOS",
"question" => "Question",
"windows" => "Windows",
"graphics-backend:opengl" => "Graphics: OpenGL",
"graphics-backend:vulkan" => "Graphics: Vulkan",
"ldn-works" => "LDN Works",
"ldn-untested" => "LDN Untested",
"ldn-broken" => "LDN Broken",
"ldn-partial" => "Partial LDN",
"nvdec" => "NVDEC",
"services" => "NX Services",
"services-horizon" => "Horizon OS Services",
"slow" => "Runs Slow",
"crash" => "Crashes",
"deadlock" => "Deadlock",
"regression" => "Regression",
"opengl" => "OpenGL",
"opengl-backend-bug" => "OpenGL Backend Bug",
"vulkan-backend-bug" => "Vulkan Backend Bug",
"mac-bug" => "Mac-specific Bug(s)",
"amd-vendor-bug" => "AMD GPU Bug",
"intel-vendor-bug" => "Intel GPU Bug",
"loader-allocator" => "Loader Allocator",
"audout" => "AudOut",
"32-bit" => "32-bit Game",
"UE4" => "Unreal Engine 4",
"homebrew" => "Homebrew Content",
"online-broken" => "Online Broken",
_ => Capitalize(labelName)
};
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}";
}
}
}

View File

@ -44,7 +44,6 @@
<PackageReference Include="Avalonia.Svg.Skia" />
<PackageReference Include="DynamicData" />
<PackageReference Include="FluentAvaloniaUI" />
<PackageReference Include="OpenTK.Core" />
<PackageReference Include="Ryujinx.Audio.OpenAL.Dependencies" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'linux-arm64' AND '$(RuntimeIdentifier)' != 'osx-x64' AND '$(RuntimeIdentifier)' != 'osx-arm64'" />
<PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" />
@ -52,6 +51,7 @@
<PackageReference Include="Silk.NET.Vulkan" />
<PackageReference Include="Silk.NET.Vulkan.Extensions.EXT" />
<PackageReference Include="Silk.NET.Vulkan.Extensions.KHR" />
<PackageReference Include="Sep" />
<PackageReference Include="SPB" />
<PackageReference Include="SharpZipLib" />
</ItemGroup>
@ -102,6 +102,10 @@
<AvaloniaResource Include="UI\**\*.xaml">
<SubType>Designer</SubType>
</AvaloniaResource>
<AvaloniaResource Include="Assets\Fonts\Mono\JetBrainsMonoNL-Bold.ttf" />
<AvaloniaResource Include="Assets\Fonts\Mono\JetBrainsMonoNL-BoldItalic.ttf" />
<AvaloniaResource Include="Assets\Fonts\Mono\JetBrainsMonoNL-Italic.ttf" />
<AvaloniaResource Include="Assets\Fonts\Mono\JetBrainsMonoNL-Regular.ttf" />
<AvaloniaResource Include="Assets\Fonts\SegoeFluentIcons.ttf" />
<AvaloniaResource Include="Assets\Styles\Themes.xaml">
<Generator>MSBuild:Compile</Generator>
@ -137,6 +141,9 @@
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="..\..\docs\compatibility.csv" LogicalName="RyujinxGameCompatibilityList">
<Link>Assets\RyujinxGameCompatibility.csv</Link>
</EmbeddedResource>
<EmbeddedResource Include="Assets\Locales\ar_SA.json" />
<EmbeddedResource Include="Assets\Locales\el_GR.json" />
<EmbeddedResource Include="Assets\Locales\en_US.json" />

View File

@ -0,0 +1,73 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="using:Ryujinx.Ava.UI.ViewModels"
xmlns:helpers="using:Ryujinx.Ava.UI.Helpers"
xmlns:locale="using:Ryujinx.Ava.Common.Locale"
xmlns:ui="using:FluentAvalonia.UI.Controls"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:compatibility="clr-namespace:Ryujinx.Ava.Modules.Compatibility"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Ryujinx.UI.Controls.CompatibilityList"
x:DataType="vm:CompatibilityViewModel">
<UserControl.DataContext>
<vm:CompatibilityViewModel />
</UserControl.DataContext>
<Grid RowDefinitions="*,Auto,*">
<Grid
Grid.Row="0"
HorizontalAlignment="Center"
ColumnDefinitions="Auto,*"
Margin="0 0 0 10">
<TextBlock
Grid.Column="1"
Margin="5, 0, 0, 0"
FontStyle="Italic"
VerticalAlignment="Center"
TextWrapping="Wrap"
Text="{locale:Locale CompatibilityListWarning}" />
</Grid>
<Grid Grid.Row="1" ColumnDefinitions="*,Auto,Auto">
<TextBox Grid.Column="0" HorizontalAlignment="Stretch" Watermark="{locale:Locale CompatibilityListSearchBoxWatermark}" TextChanged="TextBox_OnTextChanged" />
<CheckBox Grid.Column="1" Margin="7, 0, 0, 0" IsChecked="{Binding OnlyShowOwnedGames}" />
<TextBlock Grid.Column="2" Margin="-10, 0, 0, 0" Text="{locale:Locale CompatibilityListOnlyShowOwnedGames}" />
</Grid>
<ScrollViewer Grid.Row="2">
<ListBox Margin="0,5, 0, 0"
Background="Transparent"
ItemsSource="{Binding CurrentEntries}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type compatibility:CompatibilityEntry}">
<Grid Width="750"
Margin="5"
ColumnDefinitions="Auto,Auto,Auto,*"
Background="Transparent"
ToolTip.Tip="{Binding LocalizedLastUpdated}">
<TextBlock Grid.Column="0"
Text="{Binding GameName}"
Width="320"
TextWrapping="Wrap" />
<TextBlock Grid.Column="1"
Width="135"
Padding="7, 0, 0, 0"
FontFamily="{StaticResource JetBrainsMono}"
Text="{Binding FormattedTitleId}"
TextWrapping="Wrap" />
<TextBlock Grid.Column="2"
Padding="7, 0"
VerticalAlignment="Center"
Text="{Binding LocalizedStatus}"
Width="85"
Foreground="{Binding Status, Converter={x:Static helpers:PlayabilityStatusConverter.Shared}}"
TextWrapping="NoWrap" />
<TextBlock Grid.Column="3"
VerticalAlignment="Center"
Text="{Binding FormattedIssueLabels}"
TextWrapping="WrapWithOverflow" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
</Grid>
</UserControl>

View File

@ -0,0 +1,61 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Styling;
using FluentAvalonia.UI.Controls;
using Ryujinx.Ava.Common.Locale;
using Ryujinx.Ava.UI.Helpers;
using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Ava.UI.Windows;
using System.Threading.Tasks;
namespace Ryujinx.UI.Controls
{
public partial class CompatibilityList : UserControl
{
public static async Task Show()
{
var mainWindow = ((Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow as MainWindow);
ContentDialog contentDialog = new()
{
PrimaryButtonText = string.Empty,
SecondaryButtonText = string.Empty,
CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose],
Content = new CompatibilityList
{
DataContext = new CompatibilityViewModel(mainWindow!.ViewModel.Applications)
}
};
Style closeButton = new(x => x.Name("CloseButton"));
closeButton.Setters.Add(new Setter(WidthProperty, 80d));
Style closeButtonParent = new(x => x.Name("CommandSpace"));
closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, Avalonia.Layout.HorizontalAlignment.Right));
contentDialog.Styles.Add(closeButton);
contentDialog.Styles.Add(closeButtonParent);
await ContentDialogHelper.ShowAsync(contentDialog);
}
public CompatibilityList()
{
InitializeComponent();
}
private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e)
{
if (DataContext is not CompatibilityViewModel cvm)
return;
if (sender is not TextBox searchBox)
return;
cvm.Search(searchBox.Text);
}
}
}

View File

@ -0,0 +1,27 @@
using Avalonia.Data.Converters;
using Avalonia.Media;
using Ryujinx.Ava.Common.Locale;
using System;
using System.Globalization;
namespace Ryujinx.Ava.UI.Helpers
{
public class PlayabilityStatusConverter : IValueConverter
{
private static readonly Lazy<PlayabilityStatusConverter> _shared = new(() => new());
public static PlayabilityStatusConverter Shared => _shared.Value;
public object Convert(object value, Type _, object __, CultureInfo ___)
=> ((LocaleKeys)value) switch
{
LocaleKeys.CompatibilityListNothing or
LocaleKeys.CompatibilityListBoots or
LocaleKeys.CompatibilityListMenus => Brushes.Red,
LocaleKeys.CompatibilityListIngame => Brushes.Yellow,
_ => Brushes.ForestGreen
};
public object ConvertBack(object value, Type _, object __, CultureInfo ___)
=> throw new NotSupportedException();
}
}

View File

@ -0,0 +1,58 @@
using Ryujinx.Ava.Modules.Compatibility;
using Ryujinx.UI.App.Common;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace Ryujinx.Ava.UI.ViewModels
{
public class CompatibilityViewModel : BaseModel
{
private bool _onlyShowOwnedGames = true;
public bool OnlyShowOwnedGames
{
get => _onlyShowOwnedGames;
set
{
_onlyShowOwnedGames = value;
OnPropertyChanged();
OnPropertyChanged(nameof(CurrentEntries));
}
}
private IEnumerable<CompatibilityEntry> _currentEntries = CompatibilityCsv.Entries;
private readonly string[] _ownedGameTitleIds = [];
public IEnumerable<CompatibilityEntry> CurrentEntries => OnlyShowOwnedGames
? _currentEntries.Where(x => x.MatchesAnyId(_ownedGameTitleIds))
: _currentEntries;
public CompatibilityViewModel() {}
public CompatibilityViewModel(ObservableCollection<ApplicationData> appLibraryApps)
{
_ownedGameTitleIds = appLibraryApps.Select(x => x.Id.ToString("X16")).ToArray();
}
public void Search(string searchTerm)
{
if (string.IsNullOrEmpty(searchTerm))
{
SetEntries(CompatibilityCsv.Entries);
return;
}
SetEntries(CompatibilityCsv.Entries.Where(x =>
x.GameName.Contains(searchTerm, StringComparison.OrdinalIgnoreCase)
|| x.NearMatchesId(searchTerm)));
}
private void SetEntries(IEnumerable<CompatibilityEntry> entries)
{
_currentEntries = entries.ToList();
OnPropertyChanged(nameof(CurrentEntries));
}
}
}

View File

@ -206,6 +206,9 @@
Click="OpenAboutWindow"
Header="{locale:Locale MenuBarHelpAbout}"
ToolTip.Tip="{locale:Locale OpenAboutTooltip}" />
<MenuItem
Click="OpenCompatibilityList"
Header="{locale:Locale CompatibilityListOpen}" />
</MenuItem>
</Menu>
</DockPanel>

View File

@ -15,6 +15,7 @@ using Ryujinx.UI.App.Common;
using Ryujinx.UI.Common;
using Ryujinx.UI.Common.Configuration;
using Ryujinx.UI.Common.Helper;
using Ryujinx.UI.Controls;
using System;
using System.Collections.Generic;
using System.IO;
@ -266,6 +267,11 @@ namespace Ryujinx.Ava.UI.Views.Main
{
await AboutWindow.Show();
}
public async void OpenCompatibilityList(object sender, RoutedEventArgs e)
{
await CompatibilityList.Show();
}
public void CloseWindow(object sender, RoutedEventArgs e)
{