hle: Set ProcessResult name from NACP (#4633)

* Extract titleName from nacp

* Address formatting feedback

* Check if the desired language is actually available
This commit is contained in:
TSRBerry 2023-04-05 03:34:21 +02:00 committed by GitHub
parent c9bc4eaf58
commit 52d6f2e656
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 4 deletions

View File

@ -405,7 +405,16 @@ namespace Ryujinx.HLE.Loaders.Processes
// Once everything is loaded, we can load cheats. // Once everything is loaded, we can load cheats.
device.Configuration.VirtualFileSystem.ModLoader.LoadCheats(programId, tamperInfo, device.TamperMachine); device.Configuration.VirtualFileSystem.ModLoader.LoadCheats(programId, tamperInfo, device.TamperMachine);
return new ProcessResult(metaLoader, applicationControlProperties, diskCacheEnabled, allowCodeMemoryForJit, processContextFactory.DiskCacheLoadState, process.Pid, meta.MainThreadPriority, meta.MainThreadStackSize); return new ProcessResult(
metaLoader,
applicationControlProperties,
diskCacheEnabled,
allowCodeMemoryForJit,
processContextFactory.DiskCacheLoadState,
process.Pid,
meta.MainThreadPriority,
meta.MainThreadStackSize,
device.System.State.DesiredTitleLanguage);
} }
public static Result LoadIntoMemory(KProcess process, IExecutable image, ulong baseAddress) public static Result LoadIntoMemory(KProcess process, IExecutable image, ulong baseAddress)

View File

@ -2,6 +2,7 @@
using LibHac.Ns; using LibHac.Ns;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Cpu; using Ryujinx.Cpu;
using Ryujinx.HLE.HOS.SystemState;
using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.HLE.Loaders.Processes.Extensions;
using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Common;
@ -9,7 +10,7 @@ namespace Ryujinx.HLE.Loaders.Processes
{ {
public struct ProcessResult public struct ProcessResult
{ {
public static ProcessResult Failed => new(null, new ApplicationControlProperty(), false, false, null, 0, 0, 0); public static ProcessResult Failed => new(null, new ApplicationControlProperty(), false, false, null, 0, 0, 0, TitleLanguage.AmericanEnglish);
private readonly byte _mainThreadPriority; private readonly byte _mainThreadPriority;
private readonly uint _mainThreadStackSize; private readonly uint _mainThreadStackSize;
@ -35,7 +36,8 @@ namespace Ryujinx.HLE.Loaders.Processes
IDiskCacheLoadState diskCacheLoadState, IDiskCacheLoadState diskCacheLoadState,
ulong pid, ulong pid,
byte mainThreadPriority, byte mainThreadPriority,
uint mainThreadStackSize) uint mainThreadStackSize,
TitleLanguage titleLanguage)
{ {
_mainThreadPriority = mainThreadPriority; _mainThreadPriority = mainThreadPriority;
_mainThreadStackSize = mainThreadStackSize; _mainThreadStackSize = mainThreadStackSize;
@ -50,7 +52,17 @@ namespace Ryujinx.HLE.Loaders.Processes
{ {
ulong programId = metaLoader.GetProgramId(); ulong programId = metaLoader.GetProgramId();
if (ApplicationControlProperties.Title.ItemsRo.Length > 0)
{
var langIndex = ApplicationControlProperties.Title.ItemsRo.Length > (int)titleLanguage ? (int)titleLanguage : 0;
Name = ApplicationControlProperties.Title[langIndex].NameString.ToString();
}
else
{
Name = metaLoader.GetProgramName(); Name = metaLoader.GetProgramName();
}
ProgramId = programId; ProgramId = programId;
ProgramIdText = $"{programId:x16}"; ProgramIdText = $"{programId:x16}";
Is64Bit = metaLoader.IsProgram64Bit(); Is64Bit = metaLoader.IsProgram64Bit();