NACP: Difference between revisions
No edit summary |
|||
| (45 intermediate revisions by 8 users not shown) | |||
| Line 1: | Line 1: | ||
Roughly equivalent to non-gfx areas of 3DS SMDH | This is '''control.nacp''', "nn::ns::ApplicationControlProperty". | ||
Roughly equivalent to non-gfx areas of 3DS SMDH. All strings for language-entries are UTF-8, unlike SMDH which uses UTF-16. | |||
Total size is 0x4000-bytes. | Total size is 0x4000-bytes. | ||
=Structure= | = Structure = | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 11: | Line 13: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| | | 0x3000 (0x300 * 16) | ||
| | | [[#ApplicationTitle|Title]] | ||
|- | |||
| 0x3000 | |||
| 0x25 | |||
| Isbn | |||
|- | |- | ||
| | | 0x3025 | ||
| | | 0x1 | ||
| | | [[#StartupUserAccount|StartupUserAccount]] | ||
|- | |- | ||
| | | 0x3026 | ||
| | | 0x1 | ||
| | | [[#UserAccountSwitchLock|UserAccountSwitchLock]] | ||
|- | |- | ||
| | | 0x3027 | ||
| | | 0x1 | ||
| | | [[#AddOnContentRegistrationType|AddOnContentRegistrationType]] | ||
|- | |- | ||
| 0x3028 | | 0x3028 | ||
| 0x4 | | 0x4 | ||
| | | AttributeFlag | ||
|- | |- | ||
| 0x302C | | 0x302C | ||
| 0x4 | | 0x4 | ||
| | | SupportedLanguageFlag | ||
|- | |- | ||
| 0x3030 | | 0x3030 | ||
| 0x4 | | 0x4 | ||
| | | ParentalControlFlag | ||
|- | |- | ||
| 0x3034 | | 0x3034 | ||
| | | 0x1 | ||
| | | [[#Screenshot|Screenshot]] | ||
|- | |||
| 0x3035 | |||
| 0x1 | |||
| [[#VideoCapture|VideoCapture]] | |||
|- | |||
| 0x3036 | |||
| 0x1 | |||
| [[#DataLossConfirmation|DataLossConfirmation]] | |||
|- | |||
| 0x3037 | |||
| 0x1 | |||
| [[#PlayLogPolicy|PlayLogPolicy]] | |||
|- | |- | ||
| 0x3038 | | 0x3038 | ||
| 0x8 | | 0x8 | ||
| | | PresenceGroupId | ||
|- | |- | ||
| 0x3040 | | 0x3040 | ||
| 0x20 | | 0x20 | ||
| | | RatingAge | ||
|- | |- | ||
| 0x3060 | | 0x3060 | ||
| 0x10 | | 0x10 | ||
| | | DisplayVersion | ||
|- | |- | ||
| 0x3070 | | 0x3070 | ||
| 0x8 | | 0x8 | ||
| | | AddOnContentBaseId | ||
|- | |- | ||
| 0x3078 | | 0x3078 | ||
| 0x8 | | 0x8 | ||
| | | SaveDataOwnerId | ||
|- | |- | ||
| 0x3080 | | 0x3080 | ||
| | | 0x8 | ||
| | | UserAccountSaveDataSize | ||
|- | |||
| 0x3088 | |||
| 0x8 | |||
| UserAccountSaveDataJournalSize | |||
|- | |- | ||
| | | 0x3090 | ||
| | | 0x8 | ||
| | | DeviceSaveDataSize | ||
|- | |- | ||
| | | 0x3098 | ||
| | | 0x8 | ||
| | | DeviceSaveDataJournalSize | ||
|- | |- | ||
| | | 0x30A0 | ||
| | | 0x8 | ||
| | | BcatDeliveryCacheStorageSize | ||
|- | |- | ||
| | | 0x30A8 | ||
| 0x8 | | 0x8 | ||
| | | ApplicationErrorCodeCategory | ||
|- | |- | ||
| | | 0x30B0 | ||
| | | 0x40 (0x8 * 8) | ||
| | | LocalCommunicationId | ||
|- | |- | ||
| 0x30F0 | | 0x30F0 | ||
| | | 0x1 | ||
| | | [[#LogoType|LogoType]] | ||
|- | |||
| 0x30F1 | |||
| 0x1 | |||
| [[#LogoHandling|LogoHandling]] | |||
|- | |||
| 0x30F2 | |||
| 0x1 | |||
| [[#RuntimeAddOnContentInstall|RuntimeAddOnContentInstall]] | |||
|- | |||
| 0x30F3 | |||
| 0x1 | |||
| [[#RuntimeParameterDelivery|RuntimeParameterDelivery]] | |||
|- | |- | ||
| 0x30F4 | | 0x30F4 | ||
| | | 0x1 | ||
| | | [[#AppropriateAgeForChina|AppropriateAgeForChina]] | ||
|- | |||
| 0x30F5 | |||
| 0x1 | |||
| Reserved | |||
|- | |||
| 0x30F6 | |||
| 0x1 | |||
| [[#CrashReport|CrashReport]] | |||
|- | |||
| 0x30F7 | |||
| 0x1 | |||
| [[#Hdcp|Hdcp]] | |||
|- | |- | ||
| 0x30F8 | | 0x30F8 | ||
| 0x8 | | 0x8 | ||
| | | SeedForPseudoDeviceId | ||
|- | |- | ||
| 0x3100 | | 0x3100 | ||
| | | 0x41 | ||
| | | [[BCAT_Content_Container|BcatPassphrase]] (all-zero when unused) | ||
|- | |||
| 0x3141 | |||
| 0x1 | |||
| StartupUserAccountOption | |||
|- | |||
| 0x3142 | |||
| 0x6 | |||
| ReservedForUserAccountSaveDataOperation | |||
|- | |||
| 0x3148 | |||
| 0x8 | |||
| UserAccountSaveDataSizeMax | |||
|- | |||
| 0x3150 | |||
| 0x8 | |||
| UserAccountSaveDataJournalSizeMax | |||
|- | |||
| 0x3158 | |||
| 0x8 | |||
| DeviceSaveDataSizeMax | |||
|- | |||
| 0x3160 | |||
| 0x8 | |||
| DeviceSaveDataJournalSizeMax | |||
|- | |||
| 0x3168 | |||
| 0x8 | |||
| TemporaryStorageSize | |||
|- | |||
| 0x3170 | |||
| 0x8 | |||
| CacheStorageSize | |||
|- | |||
| 0x3178 | |||
| 0x8 | |||
| CacheStorageJournalSize | |||
|- | |||
| 0x3180 | |||
| 0x8 | |||
| CacheStorageDataAndJournalSizeMax | |||
|- | |||
| 0x3188 | |||
| 0x2 | |||
| CacheStorageIndexMax | |||
|- | |||
| 0x318A | |||
| 0x1 | |||
| Reserved | |||
|- | |||
| 0x318B | |||
| 0x1 | |||
| RuntimeUpgrade | |||
|- | |||
| 0x318C | |||
| 0x4 | |||
| SupportingLimitedApplicationLicenses | |||
|- | |||
| 0x3190 | |||
| 0x80 (0x8 * 16) | |||
| PlayLogQueryableApplicationId | |||
|- | |||
| 0x3210 | |||
| 0x1 | |||
| [[#PlayLogQueryCapability|PlayLogQueryCapability]] | |||
|- | |||
| 0x3211 | |||
| 0x1 | |||
| RepairFlag | |||
|- | |||
| 0x3212 | |||
| 0x1 | |||
| ProgramIndex | |||
|- | |||
| 0x3213 | |||
| 0x1 | |||
| RequiredNetworkServiceLicenseOnLaunchFlag | |||
|- | |||
| 0x3214 | |||
| 0x1 | |||
| [20.0.0+] [[#ApplicationErrorCodePrefix|ApplicationErrorCodePrefix]] | |||
|- | |||
| 0x3215 | |||
| 0x1 | |||
| [21.0.0+] [[#TitlesDataFormat|TitlesDataFormat]] | |||
|- | |||
| 0x3216 | |||
| 0x1 | |||
| [20.0.0+] AcdIndex | |||
|- | |||
| 0x3217 | |||
| 0x1 | |||
| [20.0.0+] [[#ApparentPlatform|ApparentPlatform]] | |||
|- | |||
| 0x3218 | |||
| 0x198 | |||
| [[#NeighborDetectionClientConfiguration|NeighborDetectionClientConfiguration]] | |||
|- | |||
| 0x33B0 | |||
| 0x10 | |||
| [[#JitConfiguration|JitConfiguration]] | |||
|- | |||
| 0x33C0 | |||
| 0x40 (0x2 * 32) | |||
| RequiredAddOnContentsSetBinaryDescriptor | |||
|- | |||
| 0x3400 | |||
| 0x1 | |||
| PlayReportPermission | |||
|- | |||
| 0x3401 | |||
| 0x1 | |||
| CrashScreenshotForProd | |||
|- | |||
| 0x3402 | |||
| 0x1 | |||
| CrashScreenshotForDev | |||
|- | |||
| 0x3403 | |||
| 0x1 | |||
| ContentsAvailabilityTransitionPolicy | |||
|- | |||
| 0x3404 | |||
| 0x4 | |||
| [21.0.0+] SupportedLanguageFlagForNxAddon | |||
|- | |||
| 0x3408 | |||
| 0x40 | |||
| [[#AccessibleLaunchRequiredVersionValue|AccessibleLaunchRequiredVersion]] | |||
|- | |||
| 0x3448 | |||
| 0x89 | |||
| [20.0.0+] [[#ApplicationControlDataCondition|ApplicationControlDataCondition]] | |||
|- | |||
| 0x34D1 | |||
| 0x1 | |||
| [20.0.0+] InitialProgramIndex | |||
|- | |||
| 0x34D2 | |||
| 0x2 | |||
| Reserved | |||
|- | |||
| 0x34D4 | |||
| 0x4 | |||
| [20.0.0+] AccessibleProgramIndexFlags | |||
|- | |||
| 0x34D8 | |||
| 0x1 | |||
| [20.0.0+] AlbumFileExport | |||
|- | |||
| 0x34D9 | |||
| 0x7 | |||
| Reserved | |||
|- | |||
| 0x34E0 | |||
| 0x80 | |||
| [20.0.0+] [[#SaveDataCertificateBytes|SaveDataCertificateBytes]] | |||
|- | |||
| 0x3560 | |||
| 0x1 | |||
| [20.0.0+] HasInGameVoiceChat | |||
|- | |||
| 0x3561 | |||
| 0x3 | |||
| Reserved | |||
|- | |||
| 0x3564 | |||
| 0x4 | |||
| [20.0.0+] SupportedExtraAddOnContentFlag | |||
|- | |||
| 0x3568 | |||
| 0x1 | |||
| [21.0.0+] HasKaraokeFeature | |||
|- | |||
| 0x3569 | |||
| 0x697 | |||
| Reserved | |||
|- | |||
| 0x3C00 | |||
| 0x400 | |||
| [20.0.0+] [[#PlatformSpecificRegion|PlatformSpecificRegion]] | |||
|} | |} | ||
== | == ApplicationTitle == | ||
This is "nn::ns::ApplicationTitle". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 114: | Line 340: | ||
| 0x0 | | 0x0 | ||
| 0x200 | | 0x200 | ||
| | | Name (application name strings) | ||
|- | |- | ||
| 0x200 | | 0x200 | ||
| 0x100 | | 0x100 | ||
| | | Publisher (application publisher strings) | ||
|} | |||
Entry index for each [[Settings_services#LanguageCode|language]]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Entry-index || Icon [[NCA_Content_FS#FS-type3|language]] filename | |||
|- | |||
| 0 || "AmericanEnglish" | |||
|- | |||
| 1 || "BritishEnglish" | |||
|- | |||
| 2 || "Japanese" | |||
|- | |||
| 3 || "French" | |||
|- | |||
| 4 || "German" | |||
|- | |||
| 5 || "LatinAmericanSpanish" | |||
|- | |||
| 6 || "Spanish" | |||
|- | |||
| 7 || "Italian" | |||
|- | |||
| 8 || "Dutch" | |||
|- | |||
| 9 || "CanadianFrench" | |||
|- | |||
| 10 || "Portuguese" | |||
|- | |||
| 11 || "Russian" | |||
|- | |||
| 12 || "Korean" | |||
|- | |||
| 13 || "TraditionalChinese" | |||
|- | |||
| 14 || "SimplifiedChinese" | |||
|- | |||
| 15 || [10.1.0+] "BrazilianPortuguese" | |||
|- | |||
| 16 || [21.0.0+] "Polish" | |||
|- | |||
| 17 || [21.0.0+] "Thai" | |||
|} | |||
Official apps tend to have most of the title entries' strings set only to English. Some apps don't have certain title entries set at all. | |||
== StartupUserAccount == | |||
This is "nn::ns::StartupUserAccount". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || Required | |||
|- | |||
| 2 || RequiredWithNetworkServiceAccountAvailable | |||
|} | |||
== UserAccountSwitchLock == | |||
This is "nn::ns::UserAccountSwitchLock". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Disable | |||
|- | |||
| 1 || Enable | |||
|} | |||
== AddOnContentRegistrationType == | |||
This is "nn::ns::AddOnContentRegistrationType". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || AllOnLaunch | |||
|- | |||
| 1 || OnDemand | |||
|} | |||
== Screenshot == | |||
This is "nn::ns::Screenshot". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Allow | |||
|- | |||
| 1 || Deny | |||
|} | |||
== VideoCapture == | |||
This is "nn::ns::VideoCapture". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Disable | |||
|- | |||
| 1 || Manual | |||
|- | |||
| 2 || Enable | |||
|} | |||
This is the enum used to determine how gameplay recording can occur, if at all. | |||
When this value is 0, gameplay cannot be recorded. When this value is 1, the game must manually sacrifice some of its heap as transfer memory for AM's IApplicationProxy->InitializeGamePlayRecording(). When this value is 2, AM will call NS->BoostSystemMemoryResourceSize(), and allocate the required memory for recording automatically without the usermode process having to do anything. | |||
== DataLossConfirmation == | |||
This is "nn::ns::DataLossConfirmation". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || Required | |||
|} | |||
== PlayLogPolicy == | |||
This is "nn::ns::PlayLogPolicy". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Open | |||
|- | |||
| 1 || LogOnly | |||
|- | |||
| 2 || None | |||
|- | |||
| 3 || Closed | |||
|} | |||
[[Applet_Manager_services|AM]] passes [[Shared_Database_services#PlayLogPolicy|this]] to [[Shared_Database_services|pdm:ntfy]] cmd9. | |||
== LogoType == | |||
This is "nn::ns::LogoType". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || LicensedByNintendo | |||
|- | |||
| 1 || DistributedByNintendo | |||
|- | |||
| 2 || Nintendo | |||
|} | |||
== LogoHandling == | |||
This is "nn::ns::LogoHandling". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Auto | |||
|- | |||
| 1 || Manual | |||
|} | |||
== RuntimeAddOnContentInstall == | |||
This is "nn::ns::RuntimeAddOnContentInstall". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Deny | |||
|- | |||
| 1 || AllowAppend | |||
|- | |||
| 2 || AllowAppendButDontDownloadWhenUsingNetwork | |||
|} | |||
== RuntimeParameterDelivery == | |||
This is "nn::ns::RuntimeParameterDelivery". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Always | |||
|- | |||
| 1 || AlwaysIfUserStateMatched | |||
|- | |||
| 2 || OnRestart | |||
|} | |||
== AppropriateAgeForChina == | |||
This is "nn::ns::AppropriateAgeForChina". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || Age8 | |||
|- | |||
| 2 || Age12 | |||
|- | |||
| 3 || Age16 | |||
|} | |} | ||
== CrashReport == | |||
This is "nn::ns::CrashReport". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Deny | |||
|- | |||
| 1 || Allow | |||
|} | |||
== Hdcp == | |||
This is "nn::ns::Hdcp". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || Required | |||
|} | |||
== PlayLogQueryCapability == | |||
This is "nn::ns::PlayLogQueryCapability". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || WhiteList | |||
|- | |||
| 2 || All | |||
|} | |||
This is used with [[Applet_Manager_services|AM]] commands QueryApplicationPlayStatistics and QueryApplicationPlayStatisticsByUid, to verify whether querying the specified titleIDs are allowed. When not allowed, error 0x3E880 is returned. | |||
When this value is 0, the specified titleIDs must match the user-process titleID. When this value is 1, the specified titleIDs must match the user-process titleID, or one of the titleIDs from PlayLogQueryableApplicationId. When this value is 2, all titleIDs are allowed. | |||
== ApplicationErrorCodePrefix == | |||
This is "nn::ns::ApplicationErrorCodePrefix". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x1 | |||
| Value | |||
|} | |||
S1 games (including S2-Edition) built for [20.0.0+] set this to 0x2. This is set to 0x3 with S2-only games. | |||
== TitlesDataFormat == | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| Format0 | |||
|- | |||
| 1 | |||
| Format1 | |||
|} | |||
With Format0, [[#ApplicationTitle|Title]] is an uncompressed array of up to 16 [[#ApplicationTitle|ApplicationTitle]] entries. | |||
With Format1, [[#ApplicationTitle|Title]] is Deflate compressed: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x2 | |||
| DataSize | |||
|- | |||
| 0x2 | |||
| 0x2FFE | |||
| Data | |||
|} | |||
== ApparentPlatform == | |||
This is "nn::ns::ApparentPlatform". | |||
This is 0x0 with S1 games. This is set to 0x1 with S2-only and Switch 2 Edition games. | |||
== NeighborDetectionClientConfiguration == | |||
This is "nn::ns::NeighborDetectionClientConfiguration". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x18 | |||
| [[#NeighborDetectionGroupConfiguration|SendGroupConfiguration]] | |||
|- | |||
| 0x18 | |||
| 0x180 (0x18 * 16) | |||
| [[#NeighborDetectionGroupConfiguration|ReceivableGroupConfigurations]] | |||
|} | |||
=== NeighborDetectionGroupConfiguration === | |||
This is "nn::ns::NeighborDetectionGroupConfiguration". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x8 | |||
| Id | |||
|- | |||
| 0x8 | |||
| 0x10 | |||
| Key | |||
|} | |||
== JitConfiguration == | |||
This is "nn::ns::JitConfiguration". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x8 | |||
| [[#JitConfigurationFlag|Flags]] | |||
|- | |||
| 0x8 | |||
| 0x8 | |||
| MemorySize | |||
|} | |||
=== JitConfigurationFlag === | |||
This is "nn::ns::JitConfigurationFlag". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| None | |||
|- | |||
| 1 | |||
| Enabled | |||
|} | |||
== AccessibleLaunchRequiredVersionValue == | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x40 (0x8 * 8) | |||
| Array of [[NCM_services#ApplicationId|ApplicationId]] | |||
|} | |||
== ApplicationControlDataCondition == | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x8 (0x1 * 8) | |||
| Type | |||
|- | |||
| 0x8 | |||
| 0x80 (0x10 * 8) | |||
| [[#ApplicationControlDataConditionData|Data]] | |||
|- | |||
| 0x88 | |||
| 0x1 | |||
| Count | |||
|} | |||
=== ApplicationControlDataConditionData === | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x1 | |||
| Priority | |||
|- | |||
| 0x1 | |||
| 0x7 | |||
| Reserved | |||
|- | |||
| 0x8 | |||
| 0x2 | |||
| AocIndex | |||
|- | |||
| 0xA | |||
| 0x6 | |||
| Reserved | |||
|} | |||
== SaveDataCertificateBytes == | |||
When initialized, the first two bytes here are both 0x1. With S2-only games, the second byte is instead set to 0x4. | |||
u8 +0x11 is 0x0 with S1 games, this is 0x1 with S2-only games. | |||
== PlatformSpecificRegion == | |||
Data here is only initialized with S2-only games. | |||
Latest revision as of 22:40, 20 February 2026
This is control.nacp, "nn::ns::ApplicationControlProperty".
Roughly equivalent to non-gfx areas of 3DS SMDH. All strings for language-entries are UTF-8, unlike SMDH which uses UTF-16.
Total size is 0x4000-bytes.
Structure
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x3000 (0x300 * 16) | Title |
| 0x3000 | 0x25 | Isbn |
| 0x3025 | 0x1 | StartupUserAccount |
| 0x3026 | 0x1 | UserAccountSwitchLock |
| 0x3027 | 0x1 | AddOnContentRegistrationType |
| 0x3028 | 0x4 | AttributeFlag |
| 0x302C | 0x4 | SupportedLanguageFlag |
| 0x3030 | 0x4 | ParentalControlFlag |
| 0x3034 | 0x1 | Screenshot |
| 0x3035 | 0x1 | VideoCapture |
| 0x3036 | 0x1 | DataLossConfirmation |
| 0x3037 | 0x1 | PlayLogPolicy |
| 0x3038 | 0x8 | PresenceGroupId |
| 0x3040 | 0x20 | RatingAge |
| 0x3060 | 0x10 | DisplayVersion |
| 0x3070 | 0x8 | AddOnContentBaseId |
| 0x3078 | 0x8 | SaveDataOwnerId |
| 0x3080 | 0x8 | UserAccountSaveDataSize |
| 0x3088 | 0x8 | UserAccountSaveDataJournalSize |
| 0x3090 | 0x8 | DeviceSaveDataSize |
| 0x3098 | 0x8 | DeviceSaveDataJournalSize |
| 0x30A0 | 0x8 | BcatDeliveryCacheStorageSize |
| 0x30A8 | 0x8 | ApplicationErrorCodeCategory |
| 0x30B0 | 0x40 (0x8 * 8) | LocalCommunicationId |
| 0x30F0 | 0x1 | LogoType |
| 0x30F1 | 0x1 | LogoHandling |
| 0x30F2 | 0x1 | RuntimeAddOnContentInstall |
| 0x30F3 | 0x1 | RuntimeParameterDelivery |
| 0x30F4 | 0x1 | AppropriateAgeForChina |
| 0x30F5 | 0x1 | Reserved |
| 0x30F6 | 0x1 | CrashReport |
| 0x30F7 | 0x1 | Hdcp |
| 0x30F8 | 0x8 | SeedForPseudoDeviceId |
| 0x3100 | 0x41 | BcatPassphrase (all-zero when unused) |
| 0x3141 | 0x1 | StartupUserAccountOption |
| 0x3142 | 0x6 | ReservedForUserAccountSaveDataOperation |
| 0x3148 | 0x8 | UserAccountSaveDataSizeMax |
| 0x3150 | 0x8 | UserAccountSaveDataJournalSizeMax |
| 0x3158 | 0x8 | DeviceSaveDataSizeMax |
| 0x3160 | 0x8 | DeviceSaveDataJournalSizeMax |
| 0x3168 | 0x8 | TemporaryStorageSize |
| 0x3170 | 0x8 | CacheStorageSize |
| 0x3178 | 0x8 | CacheStorageJournalSize |
| 0x3180 | 0x8 | CacheStorageDataAndJournalSizeMax |
| 0x3188 | 0x2 | CacheStorageIndexMax |
| 0x318A | 0x1 | Reserved |
| 0x318B | 0x1 | RuntimeUpgrade |
| 0x318C | 0x4 | SupportingLimitedApplicationLicenses |
| 0x3190 | 0x80 (0x8 * 16) | PlayLogQueryableApplicationId |
| 0x3210 | 0x1 | PlayLogQueryCapability |
| 0x3211 | 0x1 | RepairFlag |
| 0x3212 | 0x1 | ProgramIndex |
| 0x3213 | 0x1 | RequiredNetworkServiceLicenseOnLaunchFlag |
| 0x3214 | 0x1 | [20.0.0+] ApplicationErrorCodePrefix |
| 0x3215 | 0x1 | [21.0.0+] TitlesDataFormat |
| 0x3216 | 0x1 | [20.0.0+] AcdIndex |
| 0x3217 | 0x1 | [20.0.0+] ApparentPlatform |
| 0x3218 | 0x198 | NeighborDetectionClientConfiguration |
| 0x33B0 | 0x10 | JitConfiguration |
| 0x33C0 | 0x40 (0x2 * 32) | RequiredAddOnContentsSetBinaryDescriptor |
| 0x3400 | 0x1 | PlayReportPermission |
| 0x3401 | 0x1 | CrashScreenshotForProd |
| 0x3402 | 0x1 | CrashScreenshotForDev |
| 0x3403 | 0x1 | ContentsAvailabilityTransitionPolicy |
| 0x3404 | 0x4 | [21.0.0+] SupportedLanguageFlagForNxAddon |
| 0x3408 | 0x40 | AccessibleLaunchRequiredVersion |
| 0x3448 | 0x89 | [20.0.0+] ApplicationControlDataCondition |
| 0x34D1 | 0x1 | [20.0.0+] InitialProgramIndex |
| 0x34D2 | 0x2 | Reserved |
| 0x34D4 | 0x4 | [20.0.0+] AccessibleProgramIndexFlags |
| 0x34D8 | 0x1 | [20.0.0+] AlbumFileExport |
| 0x34D9 | 0x7 | Reserved |
| 0x34E0 | 0x80 | [20.0.0+] SaveDataCertificateBytes |
| 0x3560 | 0x1 | [20.0.0+] HasInGameVoiceChat |
| 0x3561 | 0x3 | Reserved |
| 0x3564 | 0x4 | [20.0.0+] SupportedExtraAddOnContentFlag |
| 0x3568 | 0x1 | [21.0.0+] HasKaraokeFeature |
| 0x3569 | 0x697 | Reserved |
| 0x3C00 | 0x400 | [20.0.0+] PlatformSpecificRegion |
ApplicationTitle
This is "nn::ns::ApplicationTitle".
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x200 | Name (application name strings) |
| 0x200 | 0x100 | Publisher (application publisher strings) |
Entry index for each language:
| Entry-index | Icon language filename |
|---|---|
| 0 | "AmericanEnglish" |
| 1 | "BritishEnglish" |
| 2 | "Japanese" |
| 3 | "French" |
| 4 | "German" |
| 5 | "LatinAmericanSpanish" |
| 6 | "Spanish" |
| 7 | "Italian" |
| 8 | "Dutch" |
| 9 | "CanadianFrench" |
| 10 | "Portuguese" |
| 11 | "Russian" |
| 12 | "Korean" |
| 13 | "TraditionalChinese" |
| 14 | "SimplifiedChinese" |
| 15 | [10.1.0+] "BrazilianPortuguese" |
| 16 | [21.0.0+] "Polish" |
| 17 | [21.0.0+] "Thai" |
Official apps tend to have most of the title entries' strings set only to English. Some apps don't have certain title entries set at all.
StartupUserAccount
This is "nn::ns::StartupUserAccount".
| Value | Description |
|---|---|
| 0 | None |
| 1 | Required |
| 2 | RequiredWithNetworkServiceAccountAvailable |
UserAccountSwitchLock
This is "nn::ns::UserAccountSwitchLock".
| Value | Description |
|---|---|
| 0 | Disable |
| 1 | Enable |
AddOnContentRegistrationType
This is "nn::ns::AddOnContentRegistrationType".
| Value | Description |
|---|---|
| 0 | AllOnLaunch |
| 1 | OnDemand |
Screenshot
This is "nn::ns::Screenshot".
| Value | Description |
|---|---|
| 0 | Allow |
| 1 | Deny |
VideoCapture
This is "nn::ns::VideoCapture".
| Value | Description |
|---|---|
| 0 | Disable |
| 1 | Manual |
| 2 | Enable |
This is the enum used to determine how gameplay recording can occur, if at all.
When this value is 0, gameplay cannot be recorded. When this value is 1, the game must manually sacrifice some of its heap as transfer memory for AM's IApplicationProxy->InitializeGamePlayRecording(). When this value is 2, AM will call NS->BoostSystemMemoryResourceSize(), and allocate the required memory for recording automatically without the usermode process having to do anything.
DataLossConfirmation
This is "nn::ns::DataLossConfirmation".
| Value | Description |
|---|---|
| 0 | None |
| 1 | Required |
PlayLogPolicy
This is "nn::ns::PlayLogPolicy".
| Value | Description |
|---|---|
| 0 | Open |
| 1 | LogOnly |
| 2 | None |
| 3 | Closed |
AM passes this to pdm:ntfy cmd9.
LogoType
This is "nn::ns::LogoType".
| Value | Description |
|---|---|
| 0 | LicensedByNintendo |
| 1 | DistributedByNintendo |
| 2 | Nintendo |
LogoHandling
This is "nn::ns::LogoHandling".
| Value | Description |
|---|---|
| 0 | Auto |
| 1 | Manual |
RuntimeAddOnContentInstall
This is "nn::ns::RuntimeAddOnContentInstall".
| Value | Description |
|---|---|
| 0 | Deny |
| 1 | AllowAppend |
| 2 | AllowAppendButDontDownloadWhenUsingNetwork |
RuntimeParameterDelivery
This is "nn::ns::RuntimeParameterDelivery".
| Value | Description |
|---|---|
| 0 | Always |
| 1 | AlwaysIfUserStateMatched |
| 2 | OnRestart |
AppropriateAgeForChina
This is "nn::ns::AppropriateAgeForChina".
| Value | Description |
|---|---|
| 0 | None |
| 1 | Age8 |
| 2 | Age12 |
| 3 | Age16 |
CrashReport
This is "nn::ns::CrashReport".
| Value | Description |
|---|---|
| 0 | Deny |
| 1 | Allow |
Hdcp
This is "nn::ns::Hdcp".
| Value | Description |
|---|---|
| 0 | None |
| 1 | Required |
PlayLogQueryCapability
This is "nn::ns::PlayLogQueryCapability".
| Value | Description |
|---|---|
| 0 | None |
| 1 | WhiteList |
| 2 | All |
This is used with AM commands QueryApplicationPlayStatistics and QueryApplicationPlayStatisticsByUid, to verify whether querying the specified titleIDs are allowed. When not allowed, error 0x3E880 is returned.
When this value is 0, the specified titleIDs must match the user-process titleID. When this value is 1, the specified titleIDs must match the user-process titleID, or one of the titleIDs from PlayLogQueryableApplicationId. When this value is 2, all titleIDs are allowed.
ApplicationErrorCodePrefix
This is "nn::ns::ApplicationErrorCodePrefix".
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x1 | Value |
S1 games (including S2-Edition) built for [20.0.0+] set this to 0x2. This is set to 0x3 with S2-only games.
TitlesDataFormat
| Value | Description |
|---|---|
| 0 | Format0 |
| 1 | Format1 |
With Format0, Title is an uncompressed array of up to 16 ApplicationTitle entries.
With Format1, Title is Deflate compressed:
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x2 | DataSize |
| 0x2 | 0x2FFE | Data |
ApparentPlatform
This is "nn::ns::ApparentPlatform".
This is 0x0 with S1 games. This is set to 0x1 with S2-only and Switch 2 Edition games.
NeighborDetectionClientConfiguration
This is "nn::ns::NeighborDetectionClientConfiguration".
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x18 | SendGroupConfiguration |
| 0x18 | 0x180 (0x18 * 16) | ReceivableGroupConfigurations |
NeighborDetectionGroupConfiguration
This is "nn::ns::NeighborDetectionGroupConfiguration".
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x8 | Id |
| 0x8 | 0x10 | Key |
JitConfiguration
This is "nn::ns::JitConfiguration".
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x8 | Flags |
| 0x8 | 0x8 | MemorySize |
JitConfigurationFlag
This is "nn::ns::JitConfigurationFlag".
| Value | Description |
|---|---|
| 0 | None |
| 1 | Enabled |
AccessibleLaunchRequiredVersionValue
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x40 (0x8 * 8) | Array of ApplicationId |
ApplicationControlDataCondition
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x8 (0x1 * 8) | Type |
| 0x8 | 0x80 (0x10 * 8) | Data |
| 0x88 | 0x1 | Count |
ApplicationControlDataConditionData
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x1 | Priority |
| 0x1 | 0x7 | Reserved |
| 0x8 | 0x2 | AocIndex |
| 0xA | 0x6 | Reserved |
SaveDataCertificateBytes
When initialized, the first two bytes here are both 0x1. With S2-only games, the second byte is instead set to 0x4.
u8 +0x11 is 0x0 with S1 games, this is 0x1 with S2-only games.
PlatformSpecificRegion
Data here is only initialized with S2-only games.