Adds the ability to read and write to amiibo bin files (#348)
This introduces the ability to read and write game data and model information from an Amiibo dump file (BIN format). Note that this functionality requires the presence of a key_retail.bin file. For the option to appear and function in the UI, ensure that the key_retail.bin file is located in the <RyujinxData>/system folder.
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_الإجراءات",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "محاكاة رسالة الاستيقاظ",
|
||||
"MenuBarActionsScanAmiibo": "فحص Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_الأدوات",
|
||||
"MenuBarToolsInstallFirmware": "تثبيت البرنامج الثابت",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "تثبيت برنامج ثابت من XCI أو ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Aktionen",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Aufwachnachricht simulieren",
|
||||
"MenuBarActionsScanAmiibo": "Amiibo scannen",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Tools",
|
||||
"MenuBarToolsInstallFirmware": "Firmware installieren",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Firmware von einer XCI- oder einer ZIP-Datei installieren",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Δράσεις",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Προσομοίωση Μηνύματος Αφύπνισης",
|
||||
"MenuBarActionsScanAmiibo": "Σάρωση Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Εργαλεία",
|
||||
"MenuBarToolsInstallFirmware": "Εγκατάσταση Firmware",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Εγκατάσταση Firmware από XCI ή ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Actions",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Simulate Wake-up message",
|
||||
"MenuBarActionsScanAmiibo": "Scan An Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Tools",
|
||||
"MenuBarToolsInstallFirmware": "Install Firmware",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Install a firmware from XCI or ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Acciones",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Simular mensaje de reactivación",
|
||||
"MenuBarActionsScanAmiibo": "Escanear Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Herramientas",
|
||||
"MenuBarToolsInstallFirmware": "Instalar firmware",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Instalar firmware desde un archivo XCI o ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Actions",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Simuler un message de réveil",
|
||||
"MenuBarActionsScanAmiibo": "Scanner un Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Outils",
|
||||
"MenuBarToolsInstallFirmware": "Installer un firmware",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Installer un firmware depuis un fichier XCI ou ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_פעולות",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "דמה הודעת השכמה",
|
||||
"MenuBarActionsScanAmiibo": "סרוק אמיבו",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_כלים",
|
||||
"MenuBarToolsInstallFirmware": "התקן קושחה",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "התקן קושחה מקובץ- ZIP/XCI",
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
"MenuBarActions": "_Azioni",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Simula messaggio Wake-up",
|
||||
"MenuBarActionsScanAmiibo": "Scansiona un Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Strumenti",
|
||||
"MenuBarToolsInstallFirmware": "Installa firmware",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Installa un firmware da file XCI o ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "アクション(_A)",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "スリープ復帰メッセージをシミュレート",
|
||||
"MenuBarActionsScanAmiibo": "Amiibo をスキャン",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "ツール(_T)",
|
||||
"MenuBarToolsInstallFirmware": "ファームウェアをインストール",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "XCI または ZIP からファームウェアをインストール",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "동작(_A)",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "웨이크업 메시지 시뮬레이션",
|
||||
"MenuBarActionsScanAmiibo": "Amiibo 스캔",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "도구(_T)",
|
||||
"MenuBarToolsInstallFirmware": "펌웨어 설치",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "XCI 또는 ZIP으로 펌웨어 설치",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Akcje",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Symuluj wiadomość wybudzania",
|
||||
"MenuBarActionsScanAmiibo": "Skanuj Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Narzędzia",
|
||||
"MenuBarToolsInstallFirmware": "Zainstaluj oprogramowanie",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Zainstaluj oprogramowanie z XCI lub ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Ações",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "_Simular mensagem de acordar console",
|
||||
"MenuBarActionsScanAmiibo": "Escanear um Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Ferramentas",
|
||||
"MenuBarToolsInstallFirmware": "_Instalar firmware",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Instalar firmware a partir de um arquivo ZIP/XCI",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Действия",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Имитировать сообщение пробуждения",
|
||||
"MenuBarActionsScanAmiibo": "Сканировать Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Инструменты",
|
||||
"MenuBarToolsInstallFirmware": "Установка прошивки",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "Установить прошивку из XCI или ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "การดำเนินการ",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "จำลองข้อความปลุก",
|
||||
"MenuBarActionsScanAmiibo": "สแกนหา Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_เครื่องมือ",
|
||||
"MenuBarToolsInstallFirmware": "ติดตั้งเฟิร์มแวร์",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "ติดตั้งเฟิร์มแวร์จาก ไฟล์ XCI หรือ ไฟล์ ZIP",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "_Eylemler",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "Uyandırma Mesajı Simüle Et",
|
||||
"MenuBarActionsScanAmiibo": "Bir Amiibo Tara",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "_Araçlar",
|
||||
"MenuBarToolsInstallFirmware": "Yazılım Yükle",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "XCI veya ZIP'ten Yazılım Yükle",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "操作(_A)",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "模拟唤醒消息",
|
||||
"MenuBarActionsScanAmiibo": "扫描 Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "工具(_T)",
|
||||
"MenuBarToolsInstallFirmware": "安装系统固件",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "从 XCI 或 ZIP 文件中安装系统固件",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"MenuBarActions": "動作(_A)",
|
||||
"MenuBarOptionsSimulateWakeUpMessage": "模擬喚醒訊息",
|
||||
"MenuBarActionsScanAmiibo": "掃描 Amiibo",
|
||||
"MenuBarActionsScanAmiiboBin": "Scan An Amiibo (From Bin)",
|
||||
"MenuBarTools": "工具(_T)",
|
||||
"MenuBarToolsInstallFirmware": "安裝韌體",
|
||||
"MenuBarFileToolsInstallFirmwareFromFile": "從 XCI 或 ZIP 安裝韌體",
|
||||
|
||||
@@ -29,12 +29,14 @@ using Ryujinx.HLE;
|
||||
using Ryujinx.HLE.FileSystem;
|
||||
using Ryujinx.HLE.HOS;
|
||||
using Ryujinx.HLE.HOS.Services.Account.Acc;
|
||||
using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption;
|
||||
using Ryujinx.HLE.UI;
|
||||
using Ryujinx.Input.HLE;
|
||||
using Ryujinx.UI.App.Common;
|
||||
using Ryujinx.UI.Common;
|
||||
using Ryujinx.UI.Common.Configuration;
|
||||
using Ryujinx.UI.Common.Helper;
|
||||
using Silk.NET.Vulkan;
|
||||
using SkiaSharp;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -71,6 +73,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
private string _gpuStatusText;
|
||||
private string _shaderCountText;
|
||||
private bool _isAmiiboRequested;
|
||||
private bool _isAmiiboBinRequested;
|
||||
private bool _showShaderCompilationHint;
|
||||
private bool _isGameRunning;
|
||||
private bool _isFullScreen;
|
||||
@@ -317,7 +320,16 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
public bool IsAmiiboBinRequested
|
||||
{
|
||||
get => _isAmiiboBinRequested && _isGameRunning;
|
||||
set
|
||||
{
|
||||
_isAmiiboBinRequested = value;
|
||||
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
public bool ShowLoadProgress
|
||||
{
|
||||
get => _showLoadProgress;
|
||||
@@ -2060,6 +2072,32 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
}
|
||||
}
|
||||
}
|
||||
public async Task OpenBinFile()
|
||||
{
|
||||
if (!IsAmiiboRequested)
|
||||
return;
|
||||
|
||||
if (AppHost.Device.System.SearchingForAmiibo(out int deviceId))
|
||||
{
|
||||
var result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.OpenFileDialogTitle],
|
||||
AllowMultiple = false,
|
||||
FileTypeFilter = new List<FilePickerFileType>
|
||||
{
|
||||
new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats])
|
||||
{
|
||||
Patterns = new[] { "*.bin" },
|
||||
}
|
||||
}
|
||||
});
|
||||
if (result.Count > 0)
|
||||
{
|
||||
AppHost.Device.System.ScanAmiiboFromBin(result[0].Path.LocalPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void ToggleFullscreen()
|
||||
{
|
||||
|
||||
@@ -241,6 +241,13 @@
|
||||
Icon="{ext:Icon mdi-cube-scan}"
|
||||
InputGesture="Ctrl + A"
|
||||
IsEnabled="{Binding IsAmiiboRequested}" />
|
||||
<MenuItem
|
||||
Name="ScanAmiiboMenuItemFromBin"
|
||||
AttachedToVisualTree="ScanBinAmiiboMenuItem_AttachedToVisualTree"
|
||||
Click="OpenBinFile"
|
||||
Header="{ext:Locale MenuBarActionsScanAmiiboBin}"
|
||||
Icon="{ext:Icon mdi-cube-scan}"
|
||||
IsEnabled="{Binding IsAmiiboBinRequested}" />
|
||||
<MenuItem
|
||||
Command="{Binding TakeScreenshot}"
|
||||
Header="{ext:Locale MenuBarFileToolsTakeScreenshot}"
|
||||
|
||||
@@ -13,6 +13,7 @@ using Ryujinx.Ava.UI.ViewModels;
|
||||
using Ryujinx.Ava.UI.Windows;
|
||||
using Ryujinx.Common;
|
||||
using Ryujinx.Common.Utilities;
|
||||
using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption;
|
||||
using Ryujinx.HLE;
|
||||
using Ryujinx.UI.App.Common;
|
||||
using Ryujinx.UI.Common;
|
||||
@@ -151,6 +152,9 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
public async void OpenAmiiboWindow(object sender, RoutedEventArgs e)
|
||||
=> await ViewModel.OpenAmiiboWindow();
|
||||
|
||||
public async void OpenBinFile(object sender, RoutedEventArgs e)
|
||||
=> await ViewModel.OpenBinFile();
|
||||
|
||||
public async void OpenCheatManagerForCurrentApp(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!ViewModel.IsGameRunning)
|
||||
@@ -173,6 +177,12 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
ViewModel.IsAmiiboRequested = ViewModel.AppHost.Device.System.SearchingForAmiibo(out _);
|
||||
}
|
||||
|
||||
private void ScanBinAmiiboMenuItem_AttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e)
|
||||
{
|
||||
if (sender is MenuItem)
|
||||
ViewModel.IsAmiiboBinRequested = ViewModel.IsAmiiboRequested && AmiiboBinReader.HasKeyRetailBinPath();
|
||||
}
|
||||
|
||||
private async void InstallFileTypes_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
ViewModel.AreMimeTypesRegistered = FileAssociationHelper.Install();
|
||||
|
||||
Reference in New Issue
Block a user