Merge branch 'master' into locale

This commit is contained in:
GabCoolGuy 2024-11-19 20:23:08 +01:00 committed by GitHub
commit 1bd05deade
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 513 additions and 27 deletions

View file

@ -174,7 +174,7 @@ jobs:
uses: ncipollo/release-action@v1 uses: ncipollo/release-action@v1
with: with:
name: ${{ steps.version_info.outputs.build_version }} name: ${{ steps.version_info.outputs.build_version }}
artifacts: "release_output/*.tar.gz,release_output/*.zip/*AppImage*" artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*"
tag: ${{ steps.version_info.outputs.build_version }} tag: ${{ steps.version_info.outputs.build_version }}
body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}" body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}"
omitBodyDuringUpdate: true omitBodyDuringUpdate: true

View file

@ -707,6 +707,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Blue Attire",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01010300", "head": "01010300",
@ -3526,6 +3542,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Black Cat Clothes",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01400000", "head": "01400000",
@ -4160,6 +4192,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -5848,6 +5896,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -6126,6 +6190,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -8341,6 +8421,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -9020,6 +9116,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000100", "head": "01000100",
@ -9496,6 +9608,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Blue Attire",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01010000", "head": "01010000",
@ -9833,6 +9961,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -14667,6 +14811,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01030000", "head": "01030000",
@ -16119,6 +16279,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Black Cat Clothes",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01050000", "head": "01050000",
@ -16717,6 +16893,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Black Cat Clothes",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01070000", "head": "01070000",
@ -19745,6 +19937,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Black Cat Clothes",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01080000", "head": "01080000",
@ -20503,6 +20711,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Blue Attire",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01010000", "head": "01010000",
@ -21805,6 +22029,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -22340,6 +22580,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Black Cat Clothes",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01020100", "head": "01020100",
@ -22990,6 +23246,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -23440,6 +23712,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -24660,6 +24948,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Black Cat Clothes",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01410000", "head": "01410000",
@ -24954,6 +25258,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Black Cat Clothes",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01060000", "head": "01060000",
@ -25286,6 +25606,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -29114,6 +29450,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Blue Attire",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01010000", "head": "01010000",
@ -32512,6 +32864,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -32928,6 +33296,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000100", "head": "01000100",
@ -34800,6 +35184,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Red Tunic",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01000000", "head": "01000000",
@ -37569,6 +37969,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Blue Attire",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01010100", "head": "01010100",
@ -41293,6 +41709,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Black Cat Clothes",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01020100", "head": "01020100",
@ -45153,6 +45585,22 @@
"0100F2C0115B6000" "0100F2C0115B6000"
], ],
"gameName": "The Legend of Zelda: Tears of the Kingdom" "gameName": "The Legend of Zelda: Tears of the Kingdom"
},
{
"amiiboUsage": [
{
"Usage": "Receive the Blue Attire",
"write": false
},
{
"Usage": "Receive random materials",
"write": false
}
],
"gameID": [
"01008CF01BAAC000"
],
"gameName": "The Legend of Zelda: Echoes of Wisdom"
} }
], ],
"head": "01010000", "head": "01010000",
@ -47896,5 +48344,5 @@
"type": "Figure" "type": "Figure"
} }
], ],
"lastUpdated": "2024-10-01T00:00:25.035619" "lastUpdated": "2024-11-17T15:28:47.035619"
} }

View file

@ -49,6 +49,9 @@ namespace ARMeilleure.Instructions
case 0b11_011_1101_0000_011: case 0b11_011_1101_0000_011:
EmitGetTpidrroEl0(context); EmitGetTpidrroEl0(context);
return; return;
case 0b11_011_1101_0000_101:
EmitGetTpidr2El0(context);
return;
case 0b11_011_1110_0000_000: case 0b11_011_1110_0000_000:
info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntfrqEl0)); info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntfrqEl0));
break; break;
@ -84,6 +87,9 @@ namespace ARMeilleure.Instructions
case 0b11_011_1101_0000_010: case 0b11_011_1101_0000_010:
EmitSetTpidrEl0(context); EmitSetTpidrEl0(context);
return; return;
case 0b11_011_1101_0000_101:
EmitGetTpidr2El0(context);
return;
default: default:
throw new NotImplementedException($"Unknown MSR 0x{op.RawOpCode:X8} at 0x{op.Address:X16}."); throw new NotImplementedException($"Unknown MSR 0x{op.RawOpCode:X8} at 0x{op.Address:X16}.");
@ -213,6 +219,17 @@ namespace ARMeilleure.Instructions
SetIntOrZR(context, op.Rt, result); SetIntOrZR(context, op.Rt, result);
} }
private static void EmitGetTpidr2El0(ArmEmitterContext context)
{
OpCodeSystem op = (OpCodeSystem)context.CurrOp;
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
Operand result = context.Load(OperandType.I64, context.Add(nativeContext, Const((ulong)NativeContext.GetTpidr2El0Offset())));
SetIntOrZR(context, op.Rt, result);
}
private static void EmitSetNzcv(ArmEmitterContext context) private static void EmitSetNzcv(ArmEmitterContext context)
{ {
OpCodeSystem op = (OpCodeSystem)context.CurrOp; OpCodeSystem op = (OpCodeSystem)context.CurrOp;

View file

@ -21,6 +21,7 @@ namespace ARMeilleure.State
public ulong ExclusiveValueLow; public ulong ExclusiveValueLow;
public ulong ExclusiveValueHigh; public ulong ExclusiveValueHigh;
public int Running; public int Running;
public long Tpidr2El0;
} }
private static NativeCtxStorage _dummyStorage = new(); private static NativeCtxStorage _dummyStorage = new();
@ -176,6 +177,9 @@ namespace ARMeilleure.State
public long GetTpidrroEl0() => GetStorage().TpidrroEl0; public long GetTpidrroEl0() => GetStorage().TpidrroEl0;
public void SetTpidrroEl0(long value) => GetStorage().TpidrroEl0 = value; public void SetTpidrroEl0(long value) => GetStorage().TpidrroEl0 = value;
public long GetTpidr2El0() => GetStorage().Tpidr2El0;
public void SetTpidr2El0(long value) => GetStorage().Tpidr2El0 = value;
public int GetCounter() => GetStorage().Counter; public int GetCounter() => GetStorage().Counter;
public void SetCounter(int value) => GetStorage().Counter = value; public void SetCounter(int value) => GetStorage().Counter = value;
@ -232,6 +236,11 @@ namespace ARMeilleure.State
return StorageOffset(ref _dummyStorage, ref _dummyStorage.TpidrroEl0); return StorageOffset(ref _dummyStorage, ref _dummyStorage.TpidrroEl0);
} }
public static int GetTpidr2El0Offset()
{
return StorageOffset(ref _dummyStorage, ref _dummyStorage.Tpidr2El0);
}
public static int GetCounterOffset() public static int GetCounterOffset()
{ {
return StorageOffset(ref _dummyStorage, ref _dummyStorage.Counter); return StorageOffset(ref _dummyStorage, ref _dummyStorage.Counter);

View file

@ -16,6 +16,7 @@ namespace Ryujinx.UI.Common.Helper
public static string LaunchPathArg { get; private set; } public static string LaunchPathArg { get; private set; }
public static string LaunchApplicationId { get; private set; } public static string LaunchApplicationId { get; private set; }
public static bool StartFullscreenArg { get; private set; } public static bool StartFullscreenArg { get; private set; }
public static bool HideAvailableUpdates { get; private set; }
public static void ParseArguments(string[] args) public static void ParseArguments(string[] args)
{ {
@ -93,6 +94,9 @@ namespace Ryujinx.UI.Common.Helper
OverrideHideCursor = args[++i]; OverrideHideCursor = args[++i];
break; break;
case "--hide-updates":
HideAvailableUpdates = true;
break;
case "--software-gui": case "--software-gui":
OverrideHardwareAcceleration = false; OverrideHardwareAcceleration = false;
break; break;

View file

@ -101,13 +101,13 @@ namespace Ryujinx.UI.Common.Helper
{ {
RegistryKey key = Registry.CurrentUser.OpenSubKey(@$"Software\Classes\{ext}"); RegistryKey key = Registry.CurrentUser.OpenSubKey(@$"Software\Classes\{ext}");
if (key is null) var openCmd = key?.OpenSubKey(@"shell\open\command");
if (openCmd is null)
{ {
return false; return false;
} }
var openCmd = key.OpenSubKey(@"shell\open\command");
string keyValue = (string)openCmd.GetValue(string.Empty); string keyValue = (string)openCmd.GetValue(string.Empty);
return keyValue is not null && (keyValue.Contains("Ryujinx") || keyValue.Contains(AppDomain.CurrentDomain.FriendlyName)); return keyValue is not null && (keyValue.Contains("Ryujinx") || keyValue.Contains(AppDomain.CurrentDomain.FriendlyName));

View file

@ -6,7 +6,7 @@
"SettingsTabSystemMemoryManagerMode": "内存管理模式:", "SettingsTabSystemMemoryManagerMode": "内存管理模式:",
"SettingsTabSystemMemoryManagerModeSoftware": "软件管理", "SettingsTabSystemMemoryManagerModeSoftware": "软件管理",
"SettingsTabSystemMemoryManagerModeHost": "本机映射 (较快)", "SettingsTabSystemMemoryManagerModeHost": "本机映射 (较快)",
"SettingsTabSystemMemoryManagerModeHostUnchecked": "跳过检查的本机映射 (最快,不安全)", "SettingsTabSystemMemoryManagerModeHostUnchecked": "跳过检查的本机映射 (最快,不安全)",
"SettingsTabSystemUseHypervisor": "使用 Hypervisor 虚拟化", "SettingsTabSystemUseHypervisor": "使用 Hypervisor 虚拟化",
"MenuBarFile": "文件(_F)", "MenuBarFile": "文件(_F)",
"MenuBarFileOpenFromFile": "加载游戏文件(_L)", "MenuBarFileOpenFromFile": "加载游戏文件(_L)",
@ -104,14 +104,14 @@
"SettingsTabGeneralCheckUpdatesOnLaunch": "启动时检查更新", "SettingsTabGeneralCheckUpdatesOnLaunch": "启动时检查更新",
"SettingsTabGeneralShowConfirmExitDialog": "退出游戏时需要确认", "SettingsTabGeneralShowConfirmExitDialog": "退出游戏时需要确认",
"SettingsTabGeneralRememberWindowState": "记住窗口大小和位置", "SettingsTabGeneralRememberWindowState": "记住窗口大小和位置",
"SettingsTabGeneralShowTitleBar": "Show Title Bar (Requires restart)", "SettingsTabGeneralShowTitleBar": "显示标题栏 (需要重启)",
"SettingsTabGeneralHideCursor": "隐藏鼠标指针:", "SettingsTabGeneralHideCursor": "隐藏鼠标指针:",
"SettingsTabGeneralHideCursorNever": "从不隐藏", "SettingsTabGeneralHideCursorNever": "从不隐藏",
"SettingsTabGeneralHideCursorOnIdle": "自动隐藏", "SettingsTabGeneralHideCursorOnIdle": "自动隐藏",
"SettingsTabGeneralHideCursorAlways": "始终隐藏", "SettingsTabGeneralHideCursorAlways": "始终隐藏",
"SettingsTabGeneralGameDirectories": "游戏目录", "SettingsTabGeneralGameDirectories": "游戏目录",
"SettingsTabGeneralAutoloadDirectories": "自动加载DLC/游戏更新目录", "SettingsTabGeneralAutoloadDirectories": "自动加载DLC/游戏更新目录",
"SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAutoloadNote": "DLC/游戏更新可自动加载和卸载",
"SettingsTabGeneralAdd": "添加", "SettingsTabGeneralAdd": "添加",
"SettingsTabGeneralRemove": "删除", "SettingsTabGeneralRemove": "删除",
"SettingsTabSystem": "系统", "SettingsTabSystem": "系统",
@ -146,7 +146,7 @@
"SettingsTabSystemSystemTime": "系统时钟:", "SettingsTabSystemSystemTime": "系统时钟:",
"SettingsTabSystemEnableVsync": "启用垂直同步", "SettingsTabSystemEnableVsync": "启用垂直同步",
"SettingsTabSystemEnablePptc": "开启 PPTC 缓存", "SettingsTabSystemEnablePptc": "开启 PPTC 缓存",
"SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC", "SettingsTabSystemEnableLowPowerPptc": "低功耗 PPTC 加载",
"SettingsTabSystemEnableFsIntegrityChecks": "启用文件系统完整性检查", "SettingsTabSystemEnableFsIntegrityChecks": "启用文件系统完整性检查",
"SettingsTabSystemAudioBackend": "音频处理引擎:", "SettingsTabSystemAudioBackend": "音频处理引擎:",
"SettingsTabSystemAudioBackendDummy": "无", "SettingsTabSystemAudioBackendDummy": "无",
@ -413,7 +413,7 @@
"AvatarSetBackgroundColor": "设置背景色", "AvatarSetBackgroundColor": "设置背景色",
"AvatarClose": "关闭", "AvatarClose": "关闭",
"ControllerSettingsLoadProfileToolTip": "加载配置文件", "ControllerSettingsLoadProfileToolTip": "加载配置文件",
"ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsViewProfileToolTip": "预览配置文件",
"ControllerSettingsAddProfileToolTip": "新增配置文件", "ControllerSettingsAddProfileToolTip": "新增配置文件",
"ControllerSettingsRemoveProfileToolTip": "删除配置文件", "ControllerSettingsRemoveProfileToolTip": "删除配置文件",
"ControllerSettingsSaveProfileToolTip": "保存配置文件", "ControllerSettingsSaveProfileToolTip": "保存配置文件",
@ -674,7 +674,7 @@
"UserErrorUnknownDescription": "出现未知错误!", "UserErrorUnknownDescription": "出现未知错误!",
"UserErrorUndefinedDescription": "出现未定义错误!此类错误不应出现,请联系开发者!", "UserErrorUndefinedDescription": "出现未定义错误!此类错误不应出现,请联系开发者!",
"OpenSetupGuideMessage": "打开安装指南", "OpenSetupGuideMessage": "打开安装指南",
"NoUpdate": "无更新(或不加载游戏更新", "NoUpdate": "无更新(默认版本",
"TitleUpdateVersionLabel": "游戏更新的版本 {0}", "TitleUpdateVersionLabel": "游戏更新的版本 {0}",
"TitleBundledUpdateVersionLabel": "捆绑:版本 {0}", "TitleBundledUpdateVersionLabel": "捆绑:版本 {0}",
"TitleBundledDlcLabel": "捆绑:", "TitleBundledDlcLabel": "捆绑:",
@ -770,17 +770,17 @@
"XCITrimmerTrim": "Trim", "XCITrimmerTrim": "Trim",
"XCITrimmerUntrim": "Untrim", "XCITrimmerUntrim": "Untrim",
"UpdateWindowUpdateAddedMessage": "{0} 个更新被添加", "UpdateWindowUpdateAddedMessage": "{0} 个更新被添加",
"UpdateWindowBundledContentNotice": "捆绑的更新无法被移除,只可被禁用。", "UpdateWindowBundledContentNotice": "游戏整合的更新无法移除,可尝试禁用。",
"CheatWindowHeading": "适用于 {0} [{1}] 的金手指", "CheatWindowHeading": "适用于 {0} [{1}] 的金手指",
"BuildId": "游戏版本 ID", "BuildId": "游戏版本 ID",
"DlcWindowBundledContentNotice": "捆绑的DLC无法被移除只可被禁用。", "DlcWindowBundledContentNotice": "游戏整合的DLC无法移除可尝试禁用。",
"DlcWindowHeading": "{0} 个 DLC", "DlcWindowHeading": "{0} 个 DLC",
"DlcWindowDlcAddedMessage": "{0} 个DLC被添加", "DlcWindowDlcAddedMessage": "{0} 个DLC被添加",
"AutoloadDlcAddedMessage": "{0} 个DLC被添加", "AutoloadDlcAddedMessage": "{0} 个DLC被添加",
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", "AutoloadDlcRemovedMessage": "{0} 个失效的DLC已移除",
"AutoloadUpdateAddedMessage": "{0} 个游戏更新被添加", "AutoloadUpdateAddedMessage": "{0} 个游戏更新被添加",
"AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "AutoloadUpdateRemovedMessage": "{0} 个失效的游戏更新已移除",
"ModWindowHeading": "{0} Mod(s)", "ModWindowHeading": "{0} Mod",
"UserProfilesEditProfile": "编辑所选", "UserProfilesEditProfile": "编辑所选",
"Continue": "Continue", "Continue": "Continue",
"Cancel": "取消", "Cancel": "取消",
@ -810,7 +810,7 @@
"SettingsEnableMacroHLE": "启用 HLE 宏加速", "SettingsEnableMacroHLE": "启用 HLE 宏加速",
"SettingsEnableMacroHLETooltip": "GPU 宏指令的高级模拟。\n\n提高性能表现但一些游戏可能会出现图形错误。\n\n如果不确定请保持开启状态。", "SettingsEnableMacroHLETooltip": "GPU 宏指令的高级模拟。\n\n提高性能表现但一些游戏可能会出现图形错误。\n\n如果不确定请保持开启状态。",
"SettingsEnableColorSpacePassthrough": "色彩空间直通", "SettingsEnableColorSpacePassthrough": "色彩空间直通",
"SettingsEnableColorSpacePassthroughTooltip": "使 Vulkan 图形引擎直接传输原始色彩信息。对于色域 (例如 DCI-P3) 显示器的用户来说,可以产生更鲜艳的颜色,代价是损失部分色彩准确度。", "SettingsEnableColorSpacePassthroughTooltip": "使 Vulkan 图形引擎直接传输原始色彩信息。对于广色域 (例如 DCI-P3) 显示器的用户来说,可以产生更鲜艳的颜色,代价是损失部分色彩准确度。",
"VolumeShort": "音量", "VolumeShort": "音量",
"UserProfilesManageSaves": "管理存档", "UserProfilesManageSaves": "管理存档",
"DeleteUserSave": "确定删除此游戏的用户存档吗?", "DeleteUserSave": "确定删除此游戏的用户存档吗?",
@ -829,9 +829,9 @@
"GraphicsScalingFilterLabel": "缩放过滤:", "GraphicsScalingFilterLabel": "缩放过滤:",
"GraphicsScalingFilterTooltip": "选择在分辨率缩放时将使用的缩放过滤器。\n\nBilinear双线性过滤对于3D游戏效果较好是一个安全的默认选项。\n\nNearest最近邻过滤推荐用于像素艺术游戏。\n\nFSR超级分辨率锐画只是一个锐化过滤器不推荐与 FXAA 或 SMAA 抗锯齿一起使用。\n\nArea局部过滤当渲染分辨率大于窗口实际分辨率推荐该选项。该选项在渲染比例大于2.0的情况下,可以实现超采样的效果。\n\n在游戏运行时通过点击下面的“应用”按钮可以使设置生效你可以将设置窗口移开并试验找到您喜欢的游戏画面效果。\n\n如果不确定请保持为“Bilinear双线性过滤”。", "GraphicsScalingFilterTooltip": "选择在分辨率缩放时将使用的缩放过滤器。\n\nBilinear双线性过滤对于3D游戏效果较好是一个安全的默认选项。\n\nNearest最近邻过滤推荐用于像素艺术游戏。\n\nFSR超级分辨率锐画只是一个锐化过滤器不推荐与 FXAA 或 SMAA 抗锯齿一起使用。\n\nArea局部过滤当渲染分辨率大于窗口实际分辨率推荐该选项。该选项在渲染比例大于2.0的情况下,可以实现超采样的效果。\n\n在游戏运行时通过点击下面的“应用”按钮可以使设置生效你可以将设置窗口移开并试验找到您喜欢的游戏画面效果。\n\n如果不确定请保持为“Bilinear双线性过滤”。",
"GraphicsScalingFilterBilinear": "Bilinear双线性过滤", "GraphicsScalingFilterBilinear": "Bilinear双线性过滤",
"GraphicsScalingFilterNearest": "Nearest最近邻过滤)", "GraphicsScalingFilterNearest": "Nearest邻近过滤)",
"GraphicsScalingFilterFsr": "FSR超级分辨率锐画技术", "GraphicsScalingFilterFsr": "FSR超级分辨率锐画技术",
"GraphicsScalingFilterArea": "Area局部过滤)", "GraphicsScalingFilterArea": "Area区域过滤)",
"GraphicsScalingFilterLevelLabel": "等级", "GraphicsScalingFilterLevelLabel": "等级",
"GraphicsScalingFilterLevelTooltip": "设置 FSR 1.0 的锐化等级,数值越高,图像越锐利。", "GraphicsScalingFilterLevelTooltip": "设置 FSR 1.0 的锐化等级,数值越高,图像越锐利。",
"SmaaLow": "SMAA 低质量", "SmaaLow": "SMAA 低质量",
@ -848,7 +848,7 @@
"AboutChangelogButtonTooltipMessage": "点击这里在浏览器中打开此版本的更新日志。", "AboutChangelogButtonTooltipMessage": "点击这里在浏览器中打开此版本的更新日志。",
"SettingsTabNetworkMultiplayer": "多人联机游玩", "SettingsTabNetworkMultiplayer": "多人联机游玩",
"MultiplayerMode": "联机模式:", "MultiplayerMode": "联机模式:",
"MultiplayerModeTooltip": "修改 LDN 多人联机游玩模式。\n\nldn_mitm 联机插件将修改游戏中的本地无线和本地游玩功能,使其表现得像局域网一样,允许和其他安装了 ldn_mitm 插件的 Ryujinx 模拟器和破解的任天堂 Switch 主机在同一网络下进行本地连接,实现多人联机游玩。\n\n多人联机游玩要求所有玩家必须运行相同的游戏版本例如任天堂明星大乱斗特别版 v13.0.1 无法与 v13.0.0 版本联机)。\n\n如果不确定请保持为“禁用”。", "MultiplayerModeTooltip": "修改 LDN 多人联机游玩模式。\n\nldn_mitm 联机插件将修改游戏中的本地无线和本地游玩功能,使其表现得像局域网一样,允许和其他安装了 ldn_mitm 插件的 Ryujinx 模拟器和破解的任天堂 Switch 主机在同一网络下进行本地连接,实现多人联机游玩。\n\n多人联机游玩要求所有玩家必须运行相同的游戏版本例如游戏版本 v13.0.1 无法与 v13.0.0 联机)。\n\n如果不确定请保持为“禁用”。",
"MultiplayerModeDisabled": "禁用", "MultiplayerModeDisabled": "禁用",
"MultiplayerModeLdnMitm": "ldn_mitm", "MultiplayerModeLdnMitm": "ldn_mitm",
"MultiplayerModeLdnRyu": "RyuLDN", "MultiplayerModeLdnRyu": "RyuLDN",

View file

@ -102,6 +102,7 @@ namespace Ryujinx.Ava.UI.ViewModels
private float _volumeBeforeMute; private float _volumeBeforeMute;
private string _backendText; private string _backendText;
private bool _areMimeTypesRegistered = FileAssociationHelper.AreMimeTypesRegistered;
private bool _canUpdate = true; private bool _canUpdate = true;
private Cursor _cursor; private Cursor _cursor;
private string _title; private string _title;
@ -804,10 +805,15 @@ namespace Ryujinx.Ava.UI.ViewModels
{ {
get => FileAssociationHelper.IsTypeAssociationSupported; get => FileAssociationHelper.IsTypeAssociationSupported;
} }
public bool AreMimeTypesRegistered public bool AreMimeTypesRegistered
{ {
get => FileAssociationHelper.AreMimeTypesRegistered; get => _areMimeTypesRegistered;
set {
_areMimeTypesRegistered = value;
OnPropertyChanged();
}
} }
public ObservableCollectionExtended<ApplicationData> Applications public ObservableCollectionExtended<ApplicationData> Applications

View file

@ -165,7 +165,8 @@ namespace Ryujinx.Ava.UI.Views.Main
private async void InstallFileTypes_Click(object sender, RoutedEventArgs e) private async void InstallFileTypes_Click(object sender, RoutedEventArgs e)
{ {
if (FileAssociationHelper.Install()) ViewModel.AreMimeTypesRegistered = FileAssociationHelper.Install();
if (ViewModel.AreMimeTypesRegistered)
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty); await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty);
else else
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesErrorMessage]); await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesErrorMessage]);
@ -173,7 +174,8 @@ namespace Ryujinx.Ava.UI.Views.Main
private async void UninstallFileTypes_Click(object sender, RoutedEventArgs e) private async void UninstallFileTypes_Click(object sender, RoutedEventArgs e)
{ {
if (FileAssociationHelper.Uninstall()) ViewModel.AreMimeTypesRegistered = !FileAssociationHelper.Uninstall();
if (!ViewModel.AreMimeTypesRegistered)
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty); await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty);
else else
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesErrorMessage]); await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesErrorMessage]);

View file

@ -383,7 +383,7 @@ namespace Ryujinx.Ava.UI.Windows
await Dispatcher.UIThread.InvokeAsync(async () => await UserErrorDialog.ShowUserErrorDialog(UserError.NoKeys)); await Dispatcher.UIThread.InvokeAsync(async () => await UserErrorDialog.ShowUserErrorDialog(UserError.NoKeys));
} }
if (ConfigurationState.Instance.CheckUpdatesOnStart && Updater.CanUpdate()) if (ConfigurationState.Instance.CheckUpdatesOnStart && !CommandLineState.HideAvailableUpdates && Updater.CanUpdate())
{ {
await this.BeginUpdateAsync() await this.BeginUpdateAsync()
.ContinueWith( .ContinueWith(