diff options
| author | Alex Barney <thealexbarney@gmail.com> | 2018-10-06 09:11:47 -0600 |
|---|---|---|
| committer | emmauss <emmausssss@gmail.com> | 2018-10-06 18:11:47 +0300 |
| commit | 5821ff675dba32458193ea0a4d9b4657dfe949c2 (patch) | |
| tree | eb8d908d63bcb554c7a9cfcbcd39104ba0dea28d /Ryujinx.HLE/HOS | |
| parent | bba9bf97d03596b89972cc77390311b9e9472688 (diff) | |
Misc content loading improvements (#432)
* Misc content loading improvements
Diffstat (limited to 'Ryujinx.HLE/HOS')
| -rw-r--r-- | Ryujinx.HLE/HOS/Horizon.cs | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/Ryujinx.HLE/HOS/Horizon.cs b/Ryujinx.HLE/HOS/Horizon.cs index d52c8af0..a3eaae4f 100644 --- a/Ryujinx.HLE/HOS/Horizon.cs +++ b/Ryujinx.HLE/HOS/Horizon.cs @@ -51,6 +51,8 @@ namespace Ryujinx.HLE.HOS public string CurrentTitle { get; private set; } + public bool EnableFsIntegrityChecks { get; set; } + public Horizon(Switch Device) { this.Device = Device; @@ -220,12 +222,19 @@ namespace Ryujinx.HLE.HOS ReadControlData(ControlNca); } + if (PatchNca != null) + { + PatchNca.SetBaseNca(MainNca); + + return (PatchNca, ControlNca); + } + return (MainNca, ControlNca); } public void ReadControlData(Nca ControlNca) { - Romfs ControlRomfs = new Romfs(ControlNca.OpenSection(0, false)); + Romfs ControlRomfs = new Romfs(ControlNca.OpenSection(0, false, EnableFsIntegrityChecks)); byte[] ControlFile = ControlRomfs.GetFile("/control.nacp"); @@ -254,8 +263,7 @@ namespace Ryujinx.HLE.HOS // Load title key from the NSP's ticket in case the user doesn't have a title key file if (TicketFile != null) { - // todo Change when Ticket(Stream) overload is added - Ticket Ticket = new Ticket(new BinaryReader(Nsp.OpenFile(TicketFile))); + Ticket Ticket = new Ticket(Nsp.OpenFile(TicketFile)); KeySet.TitleKeys[Ticket.RightsId] = Ticket.GetTitleKey(KeySet); } @@ -289,7 +297,7 @@ namespace Ryujinx.HLE.HOS public void LoadNca(Nca MainNca, Nca ControlNca) { - NcaSection RomfsSection = MainNca.Sections.FirstOrDefault(x => x?.Type == SectionType.Romfs); + NcaSection RomfsSection = MainNca.Sections.FirstOrDefault(x => x?.Type == SectionType.Romfs || x?.Type == SectionType.Bktr); NcaSection ExefsSection = MainNca.Sections.FirstOrDefault(x => x?.IsExefs == true); if (ExefsSection == null) @@ -301,16 +309,16 @@ namespace Ryujinx.HLE.HOS if (RomfsSection == null) { - Device.Log.PrintError(LogClass.Loader, "No RomFS found in NCA"); - - return; + Device.Log.PrintWarning(LogClass.Loader, "No RomFS found in NCA"); } + else + { + Stream RomfsStream = MainNca.OpenSection(RomfsSection.SectionNum, false, EnableFsIntegrityChecks); - Stream RomfsStream = MainNca.OpenSection(RomfsSection.SectionNum, false); - - Device.FileSystem.SetRomFs(RomfsStream); + Device.FileSystem.SetRomFs(RomfsStream); + } - Stream ExefsStream = MainNca.OpenSection(ExefsSection.SectionNum, false); + Stream ExefsStream = MainNca.OpenSection(ExefsSection.SectionNum, false, EnableFsIntegrityChecks); Pfs Exefs = new Pfs(ExefsStream); @@ -350,7 +358,7 @@ namespace Ryujinx.HLE.HOS Nacp ReadControlData() { - Romfs ControlRomfs = new Romfs(ControlNca.OpenSection(0, false)); + Romfs ControlRomfs = new Romfs(ControlNca.OpenSection(0, false, EnableFsIntegrityChecks)); byte[] ControlFile = ControlRomfs.GetFile("/control.nacp"); |
