NACP: Difference between revisions

No edit summary
No edit summary
 
(10 intermediate revisions by 2 users not shown)
Line 13: Line 13:
|-
|-
| 0x0
| 0x0
| 0x3000 (0x300*0x10)
| 0x3000 (0x300 * 16)
| [[#ApplicationTitle|Title entries]]
| [[#ApplicationTitle|Title]]
|-
|-
| 0x3000
| 0x3000
Line 22: Line 22:
| 0x3025
| 0x3025
| 0x1
| 0x1
| StartupUserAccount
| [[#StartupUserAccount|StartupUserAccount]]
|-
|-
| 0x3026
| 0x3026
| 0x1
| 0x1
| UserAccountSwitchLock
| [[#UserAccountSwitchLock|UserAccountSwitchLock]]
|-
|-
| 0x3027
| 0x3027
| 0x1
| 0x1
| AddOnContentRegistrationType
| [[#AddOnContentRegistrationType|AddOnContentRegistrationType]]
|-
|-
| 0x3028
| 0x3028
Line 46: Line 46:
| 0x3034
| 0x3034
| 0x1
| 0x1
| Screenshot
| [[#Screenshot|Screenshot]]
|-
|-
| 0x3035
| 0x3035
| 0x1
| 0x1
| [[#VideoCapture]]
| [[#VideoCapture|VideoCapture]]
|-
|-
| 0x3036
| 0x3036
| 0x1
| 0x1
| DataLossConfirmation
| [[#DataLossConfirmation|DataLossConfirmation]]
|-
|-
| 0x3037
| 0x3037
| 0x1
| 0x1
| [[#PlayLogPolicy]]
| [[#PlayLogPolicy|PlayLogPolicy]]
|-
|-
| 0x3038
| 0x3038
Line 105: Line 105:
|-
|-
| 0x30B0
| 0x30B0
| 0x40 (0x8*0x8)
| 0x40 (0x8 * 8)
| LocalCommunicationId
| LocalCommunicationId
|-
|-
| 0x30F0
| 0x30F0
| 0x1
| 0x1
| LogoType
| [[#LogoType|LogoType]]
|-
|-
| 0x30F1
| 0x30F1
| 0x1
| 0x1
| LogoHandling
| [[#LogoHandling|LogoHandling]]
|-
|-
| 0x30F2
| 0x30F2
| 0x1
| 0x1
| RuntimeAddOnContentInstall
| [[#RuntimeAddOnContentInstall|RuntimeAddOnContentInstall]]
|-
|-
| 0x30F3
| 0x30F3
| 0x1
| 0x1
| RuntimeParameterDelivery
| [[#RuntimeParameterDelivery|RuntimeParameterDelivery]]
|-
|-
| 0x30F4
| 0x30F4
| 0x2
| 0x1
| [[#AppropriateAgeForChina|AppropriateAgeForChina]]
|-
| 0x30F5
| 0x1
| Reserved
| Reserved
|-
|-
| 0x30F6
| 0x30F6
| 0x1
| 0x1
| CrashReport
| [[#CrashReport|CrashReport]]
|-
|-
| 0x30F7
| 0x30F7
| 0x1
| 0x1
| Hdcp
| [[#Hdcp|Hdcp]]
|-
|-
| 0x30F8
| 0x30F8
Line 189: Line 193:
|-
|-
| 0x318A
| 0x318A
| 0x6
| 0x1
| Reserved
| Reserved
|-
| 0x318B
| 0x1
| RuntimeUpgrade
|-
| 0x318C
| 0x4
| SupportingLimitedApplicationLicenses
|-
|-
| 0x3190
| 0x3190
| 0x80 (0x8*0x10)
| 0x80 (0x8 * 16)
| PlayLogQueryableApplicationId
| PlayLogQueryableApplicationId
|-
|-
| 0x3210
| 0x3210
| 0x1
| 0x1
| PlayLogQueryCapability
| [[#PlayLogQueryCapability|PlayLogQueryCapability]]
|-
|-
| 0x3211
| 0x3211
Line 213: Line 225:
|-
|-
| 0x3214
| 0x3214
| 0x4
| 0x1
| Reserved
| [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
| 0x3218
| 0x198
| 0x198
| [[#ApplicationNeighborDetectionClientConfiguration|NeighborDetectionClientConfiguration]]
| [[#NeighborDetectionClientConfiguration|NeighborDetectionClientConfiguration]]
|-
|-
| 0x33B0
| 0x33B0
| 0x10
| 0x10
| [[#ApplicationJitConfiguration|JitConfiguration]]
| [[#JitConfiguration|JitConfiguration]]
|-
|-
| 0x33C0
| 0x33C0
| 0xC40
| 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
| Reserved
|-
| 0x3564
| 0x4
| [20.0.0+] SupportedExtraAddOnContentFlag
|-
| 0x3568
| 0x1
| [21.0.0+] HasKaraokeFeature
|-
| 0x3569
| 0x697
| Reserved
|-
| 0x3C00
| 0x400
| [20.0.0+] [[#PlatformSpecificRegion|PlatformSpecificRegion]]
|}
|}


== ApplicationTitle ==
== ApplicationTitle ==
Total size is 0x300-bytes.
This is "nn::ns::ApplicationTitle".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 240: Line 340:
| 0x0
| 0x0
| 0x200
| 0x200
| Application name strings
| Name (application name strings)
|-
|-
| 0x200
| 0x200
| 0x100
| 0x100
| Application publisher strings
| Publisher (application publisher strings)
|}
|}


Entry index for each [[Settings_services#LanguageCode|language]]:
Entry index for each [[Settings_services#LanguageCode|language]]:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 282: Line 381:
|-
|-
| 14 || "SimplifiedChinese"
| 14 || "SimplifiedChinese"
|-
| 15 || [10.1.0+] "BrazilianPortuguese"
|-
| 16 || [21.0.0+] "Polish"
|-
| 17 || [21.0.0+] "Thai"
|}
|}


Official apps tend to have the title entries' strings set only to English. Some apps don't have certain title entries set at all. In addition, official apps usually (?) don't have the following title entries set: Korean, Taiwanese, and Chinese.
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 ==
== VideoCapture ==
This is the enum used to determine how gameplay recording can occur, if at all.
This is "nn::ns::VideoCapture".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Value || Meaning
! Value || Description
|-
|-
| 0 || Disabled
| 0 || Disable
|-
|-
| 1 || Enabled
| 1 || Manual
|-
|-
| 2 || Automatic
| 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.
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 ==
== 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.
[[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 ==
== 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.
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"
{| class="wikitable" border="1"
|-
|-
! Value || Meaning || Description
! Offset
! Size
! Description
|-
|-
| 0 || None || The specified titleIDs must match the user-process titleID.
| 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
|-
|-
| 1 || WhiteList || The specified titleIDs must match the user-process titleID, or one of the titleIDs from PlayLogQueryableApplicationId.
| 0
| Format0
|-
|-
| 2 || All || All titleIDs are allowed.
| 1
| Format1
|}
|}


== ApplicationNeighborDetectionClientConfiguration ==
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"
{| class="wikitable" border="1"
|-
|-
Line 328: Line 664:
| 0x0
| 0x0
| 0x18
| 0x18
| [[#ApplicationNeighborDetectionGroupConfiguration|SendGroupConfiguration]]
| [[#NeighborDetectionGroupConfiguration|SendGroupConfiguration]]
|-
|-
| 0x18
| 0x18
| 0x180 (0x18 * 0x10)
| 0x180 (0x18 * 16)
| [[#ApplicationNeighborDetectionGroupConfiguration|ReceivableGroupConfigurations]]
| [[#NeighborDetectionGroupConfiguration|ReceivableGroupConfigurations]]
|}
|}


=== ApplicationNeighborDetectionGroupConfiguration ===
=== NeighborDetectionGroupConfiguration ===
This is "nn::ns::NeighborDetectionGroupConfiguration".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 344: Line 682:
| 0x0
| 0x0
| 0x8
| 0x8
| GroupId
| Id
|-
|-
| 0x8
| 0x8
Line 351: Line 689:
|}
|}


== ApplicationJitConfiguration ==
== JitConfiguration ==
This is "nn::ns::JitConfiguration".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 360: Line 700:
| 0x0
| 0x0
| 0x8
| 0x8
| Flags
| [[#JitConfigurationFlag|Flags]]
|-
|-
| 0x8
| 0x8
Line 366: Line 706:
| MemorySize
| 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.