diff options
| author | mageven <62494521+mageven@users.noreply.github.com> | 2020-06-20 23:08:14 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-20 19:38:14 +0200 |
| commit | 1c2af7ce926bd6f48309247dc65012d410d77bee (patch) | |
| tree | d9c280ebdd4bda537abe39e953de08f47c50101a /Ryujinx.HLE/HOS/Services/Fs | |
| parent | 4d56f97f1e62cf3d5a5de3088f5b755a7dcf5f51 (diff) | |
Implement aoc:u and support loading AddOnContent (#1221)
* Initial rebased AddOnContent support
* Fix bounds calculation
* Use existing GameCard in VFS per Xpl0itR's suggestion
+ Add dummy IPurchaseEventManager per AcK's suggestion
* Support multiple containers
* Add option to selectively disable addons
* Import tickets from AOC FS
* Load all nsps in base directory automatically
* Revert LoadNsp renaming
Removes conflicts with Mods PR. Not much is lost, old names were fine.
* Address AcK's comments
* Address Thog's comments
Dispose opened nsp files
Fix potential bug by clearing metadata on load
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Fs')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs index 35cf160f..6c843b27 100644 --- a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs +++ b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs @@ -372,17 +372,26 @@ namespace Ryujinx.HLE.HOS.Services.Fs byte[] padding = context.RequestData.ReadBytes(7); long titleId = context.RequestData.ReadInt64(); + // We do a mitm here to find if the request is for an AOC. + // This is because AOC can be distributed over multiple containers in the emulator. + if (context.Device.System.ContentManager.GetAocDataStorage((ulong)titleId, out LibHac.Fs.IStorage aocStorage)) + { + Logger.PrintInfo(LogClass.Loader, $"Opened AddOnContent Data TitleID={titleId:X16}"); + + MakeObject(context, new FileSystemProxy.IStorage(aocStorage)); + + return ResultCode.Success; + } + NcaContentType contentType = NcaContentType.Data; - StorageId installedStorage = - context.Device.System.ContentManager.GetInstalledStorage(titleId, contentType, storageId); + StorageId installedStorage = context.Device.System.ContentManager.GetInstalledStorage(titleId, contentType, storageId); if (installedStorage == StorageId.None) { contentType = NcaContentType.PublicData; - installedStorage = - context.Device.System.ContentManager.GetInstalledStorage(titleId, contentType, storageId); + installedStorage = context.Device.System.ContentManager.GetInstalledStorage(titleId, contentType, storageId); } if (installedStorage != StorageId.None) |
