Applications that use CTR-NEX must comply with all the guidelines listed in this chapter.
6.9.1 Save Data Rollbacks
Save data for downloadable applications and extra data for card-based software can be rolled back when the SD Card is swapped or a similar operation is performed. When save data is rolled back, it may become inconsistent with data saved on the network (for example, ranking data that was uploaded may no longer match local save data that is rolled back). Be careful to avoid problems that would be caused by rolling back save data. Potential measures might involve updating the data on the network with the rolled-back data, or arranging data so that it is not adversely affected when save data is rolled back.
No required guideline items.
6.9.2 Measures Against Cheating
Some players of online games will try to cheat in order to win or harass others, such as by using illegal tools to alter data. These kinds of actions upset users who play by the rules, and can make people reluctant to play online. Nintendo therefore recommends implementing measures like the following to combat cheating.
- Establish upper limits on parameters and other values to prevent characters from becoming too powerful.
- Add a signature to data to prevent it from being altered.
- Check the game state to detect suspiciously improbable runs of good luck; for example, a players technique only causes the most damage possible when a random value is assigned or only the most powerful game items are generated.
No required guideline items.
6.9.3 Prohibition of Using NEX in Free Titles
Free and Free-to-Start titles are prohibited from using NEX communication features. (Free-to-Start is a business model where the application allows the user to start playing at no charge, but charges to continue playing or for additional elements, etc.)
Contact Nintendo at support@noa.com in advance if you are planning such an application. However, note that it is acceptable for your application to use NEX if you are using it only for authentication and do not use an NEX game server.
Free-to-Start–style titles allow users to start playing at no charge. It is more difficult to predict the scale of server needs for these titles than for purchasable (non-free) titles, and they require flexible server scaling after release.
To address these problems, Nintendo is preparing separate servers for free or Free-to-Start titles that use NEX features; these servers have a different configuration than those used by purchasable titles.
Because these servers require different preparation than traditional servers, you must contact Nintendo in advance.
Note that setup and day-to-day operation of this server environment also incurs additional expenses.
6.9.3.1 Checking That Nintendo Was Contacted in Advance Regarding Use of NEX by Free Titles
Guideline Item |
You must contact Nintendo in advance if your application uses NEX.
|
---|---|
Software to Be Tested |
Applications that use NEX and are released as free or Free-to-Start.
|
Exceptions |
Applications that use NEX only for authentication and do not use a NEX game server.
|
Test Method |
On OMAS, go to the title's Common Title Data page and check the Special Guideline Approval section.
|
Pass/Fail Determination |
Passes if the status for this guideline item is "Approved" on the list of applicable guidelines. |
6.9.4 Restrictions on Frequency of Server Access
It is prohibited to call the functions listed in Table 6-3 NEX API Functions That Trigger Server Access too frequently. Calling these functions excessively increases the load on the server, and could prevent the server from providing stable network services. Do not call the functions listed in Table 6-3 NEX API Functions That Trigger Server Access more frequently than the limits given in the "Call Frequency" column.
However, if the user performs unusual actions not expected based on the application's specifications, it is acceptable to exceed the prescribed limits. "Unusual user actions not expected based on the application's specifications" include the examples below. In general, the user is performing an unusual action when they interrupt the normal flow of operations required for online play with an unrelated operation; for example, canceling and retrying instead of pressing the A Button to proceed normally.
- The user repeatedly joins and leaves matchmaking sessions.
- The user repeatedly enters and exits a mode that checks rankings, from a section of the game that neither affects nor is affected by rankings.
- The user repeatedly connects to and disconnects from the network.
- The user repeatedly closes and restarts the application.
Actions that are not considered unusual include: canceling if encouraged to do so by application specifications; repeatedly searching by repeatedly pressing a button; and re-acquiring a different category of rankings every time the user goes to the next page of results in ranking mode, if this is how ranking mode is implemented. These actions are considered normal and expected based on specifications, and do not qualify as exceptions to this requirement. If you are unsure whether a given situation counts as an exception, contact Nintendo at support@noa.com.
Except for the Exceptions noted in section 6.9.4.2 Prohibition Against Periodic Access to Server, your application must not call these functions automatically and at periodic intervals. This way of calling functions is prohibited even if the call frequency falls within the limits. This is because if many copies of the same application are played simultaneously, such calls would place a heavy load on the server even if the frequency of such calls is low. For example, the following specifications are prohibited:
- Searching for matchmaking sessions in the background every n minutes while the user is playing in single-player mode.
- Downloading the latest ranking data in the background every n minutes.
- Uploading data to a data store in the background every n minutes.
Specifications which access servers every time a user performs a particular operation can easily result in the application exceeding the access frequency limits and failing Lotcheck.
Nintendo recommends implementing a cache and thereby decreasing server access frequency to some extent.
On the other hand, it is fine to call these functions automatically in response to a specific event within the application due to gameplay. For example, it is fine to have application designs that upload the Activity Log automatically when the user clears a stage. However, if stages in your application are extremely short in duration and users clear stages in quick succession, then the application might greatly exceed the call frequency limits in the scope of normal gameplay. Be aware that such cases are a violation of this guideline item.
Also, it is prohibited to automatically call these functions again when they fail. Even when the function does not fail (for example, when no matchmaking session that applies to the condition is found), it is also prohibited to have game designs that automatically call search functions again.
Classes | Function Name | Call Frequency |
---|---|---|
NgsFacade | TestConnectivity | Up to 10 times per minute. |
UtilityClient | AcquireNexUniqueId | Up to 10 times per minute for each. |
AcquireNexUniqueIdWithPassword |
||
AssociateNexUniqueIdWithMyPrincipalId | ||
GetAssociatedNexUniqueIdWithMyPrincipalId | ||
GetIntegerSettings | ||
MatchMakingClient | UnregisterGathering |
Up to 10 times per minute for each.
|
EndParticipation | ||
FindByID | ||
FindByOwner | ||
GetSessionURLs | ||
GetDetailedParticipants | ||
UpdateSessionHost |
||
MigrateGatheringOwnership | ||
UpdateGatheringOwnership | ||
GetParticipantsURLs | Up to 10 times per minute. (Only usable when using VSocket.) | |
MatchmakeExtensionClient | AutoMatchmake |
Up to 10 times per minute for each. Note: Functions shown in parentheses are old function names used up to CTR-NEX 3.2.
|
CreateMatchmakeSession | ||
BrowseMatchmakeSession | ||
JoinMatchmakeSession | ||
CloseParticipation | ||
OpenParticipation | ||
ModifyMatchmakeSessionAttribute |
||
UpdateMatchmakeSessionAttribute | ||
UpdateApplicationBuffer |
||
UpdateMatchmakeSession | ||
UpdateNotificationData | ||
GetFriendNotificationData | ||
CreatePersistentGathering (CreateCommunity) | ||
UpdatePersistentGathering (UpdateCommunity) | ||
JoinPersistentGathering (JoinCommunity) | ||
FindPersistentGatheringByGatheringId (FindCommunityByGatheringId) | ||
FindOfficialPersistentGathering (FindOfficialCommunity) | ||
FindPersistentGatheringByParticipant (FindCommunityByParticipant) | ||
GetPlayingSession | ||
UpdatePrivacySetting | ||
AddToBlackList | ||
RemoveFromBlackList | ||
GetMyBlackList | ||
ClearBlackList | ||
GenerateMatchmakeSessionSystemPassword | ||
ClearMatchmakeSessionSystemPassword | ||
FindMatchmakeSessionByGatheringIdDetail | ||
FindMatchmakeSessionByParticipant | ||
FindMatchmakeSessionByGatheringId | ||
FindMatchmakeSessionByOwner | ||
GenerateMatchmakeSessionSystemPassword | ||
ClearMatchmakeSessionSystemPassword | ||
FindCommunityByOwner | ||
UpdateProgressScore | Up to 2 times per minute. | |
MessagingClient | SendInstant | Up to 10 times per minute for each. |
SendChat | ||
MatchmakeRefereeClient |
StartRound |
Up to 10 times per minute for each. |
GetStartRoundParam | ||
EndRound | ||
EndRoundWithoutReport | ||
GetRoundParticipants | ||
GetNotSummarizedRound | ||
GetRound | ||
GetStats | ||
CreateStats | ||
GetOrCreateStats | ||
RankingClient
|
UploadScore |
Up to 15 calls every 5 minutes for all calls to these functions combined. |
DeleteScore | ||
UploadCommonData | ||
DeleteCommonData | ||
ChangeAttributes | ||
GetCommonData | ||
GetRanking | ||
GetRankingByPIDList | ||
GetRankingByUniqueIdList | ||
GetApproxOrder | ||
GetStats | ||
GetCachedTopXRanking |
Up to 20 calls every 5 minutes for all calls to these functions combined. |
|
GetCachedTopXRankings | ||
Ranking2Client | PutScore | Up to 10 times per minute for each. |
GetCommonData | ||
PutCommonData | ||
DeleteCommonData | ||
GetRanking | Up to 20 times per minute for each. | |
GetCategorySetting | ||
DataStoreClient | GetObject | Up to 10 times per minute for each. |
PostObject | ||
UpdateObject | ||
GetRating | ||
CompleteSuspendedPostObject | ||
DeleteObject | ||
ChangeMeta | ||
GetMeta | ||
RateObject | ||
RateObjects | ||
RateObjectWithPosting | ||
RateObjectsWithPosting | ||
ResetRating | ||
TouchObject | ||
GetPersistenceInfo | ||
PerpetuateObject | ||
UnperpetuateObject | ||
GetPasswordInfo | ||
SearchObjectLight | ||
SearchObject | Up to 5 times per minute. | |
SubscriberClient | PostContent | Up to 10 times per minute for each. |
DeleteContent | ||
GetContent | Up to 10 times per minute. However, if the function is called at repeated automatic intervals, it must be called no more than once per minute. |
Features to check function call history and call frequency are provided in NMAS. Alternatively, you can use the NEX library's nn::nex::DebugClient class to retrieve the function call history from the server. However, you cannot embed the nn::nex::DebugClient class in a master ROM. In order to check how frequently functions are called from a master ROM, you must create a separate application whose purpose is to check the function call frequency and which uses the nn::nex::DebugClient class to do so. Refer to the NEX Debug sample program when you create this application.
6.9.4.1 Restrictions on Frequency of Calls to NEX API
Guideline Item |
The frequency of calls to NEX API functions that trigger server access must not exceed the limits in the "Call Frequency" column of Table 6-3 NEX API Functions That Trigger Server Access. |
---|---|
Software to Be Tested |
Applications that use NEX.
|
Exceptions |
The user performs unusual actions not expected based on application specifications.
|
Test Method |
|
Pass/Fail Determination |
Passes if OK is displayed under Determination for all functions. |
6.9.4.2 Prohibition Against Periodic Access to Server
Guideline Item |
Applications must not make automated and periodic calls to NEX API functions that trigger access to the server.
|
---|---|
Software to Be Tested |
Applications that use NEX.
|
Exceptions |
When the function being called periodically is one of the following functions:
|
Test Method |
|
Pass/Fail Determination |
Passes if, in step 4, Times Called does not show a periodic increase.
|
6.9.4.3 Prohibition Against Automatic Retry
Guideline Item |
If a NEX API function that triggers access to the server fails, the application must not automatically try to call it again. |
---|---|
Software to Be Tested |
Applications that use NEX. |
Test Method |
Check the source code.
|
Pass/Fail Determination |
Passes if, when one of the functions listed in Table 6-3 NEX API Functions That Trigger Server Access fails, the application does not automatically call it again.
|