- Last Updated
Game-Time Choice System
Understanding
The game-time choice system (shutdown system) is a system that lets guardians choose and restrict the game-play time of youths under 19.
The STOVE platform supports this feature for games rated under 19.
The STOVE PC SDK delivers the time remaining until game exit, the notification message, and the message-display time via a Base SDK callback.
The game should use this info to display an in-game notification and, when 0 minutes is reached, exit the game naturally.
It's a required item for domestic services rated under 19.
It's a PC-SDK-only feature and isn't provided on mobile. Target games must integrate it.
This feature is not supported when running the game through the Steam Launcher. Therefore, you cannot use it if you're running the game through the Steam Launcher.
Application Environment and Operating Scope
| Item | Details |
|---|---|
| Provided platform | PC SDK 3.0 (Base SDK) only. Not supported on mobile. |
| Target games | Domestic-service games usable by those under 19. (games exclusively for those 18 and older aren't integration targets) |
| Target users | The callback operates only for youth users under 19 for whom a guardian has set the game-time choice system. |
| Notification timing | The callback is called at the times near game exit (10 minutes before, 5 minutes before, 1 minute before) and at exit. Up to 4 times. |
Info the SDK Delivers
When a target user logs in to the game, the following info is delivered via a callback at set times.
The game uses these values to build the notification UI and forcibly exits the game at the exit time.
| Delivered info | Description |
|---|---|
| Time remaining until game exit | In minutes. Delivered as values of 10, 5, 1, or 0. When 0, handle immediate game exit. |
| Shutdown notification message | A notification message reflecting the remaining time. Shown in the game UI. |
| Message-display time | The time the notification must be shown on screen (in seconds). |
When the playable time is 0 minutes, forced game-exit handling is needed.
You must terminate the game process after the user's confirmation input, and omitting the exit handling can cause a policy violation.
Callback Timing and Notifications
The OnShutdownFinished callback is called up to 4 times, from near game-time expiry to the exit point.
The game UI should display a notification matching each point.
| Call timing | Message example | Game handling |
|---|---|---|
| 10 minutes before | "You are subject to the game-time choice system, and game use will be restricted in 10 minutes." | Show a logout notification in 10 minutes in the UI. |
| 5 minutes before | "You are subject to the game-time choice system, and game use will be restricted in 5 minutes." | Show a logout notification in 5 minutes in the UI. |
| 1 minute before | "You are subject to the game-time choice system, and game use will be restricted in 1 minute." | Show a logout notification in 1 minute in the UI. |
| Shutdown (0 minutes) | "You are subject to the game-time choice system; game use is restricted, so the game will now exit." | After showing the logout notification, exit the game immediately upon the user's confirmation. |
Integration Guide
Integration Preparation
To use the game-time choice system feature, the list of shutdown-target games and the play-time settings must be completed in advance.
For those settings, contact the publishing technical contact.
| Item | Details | Owner |
|---|---|---|
| Add to the shutdown game list | Register game-time-choice-system target games in the shutdown game list. | Publishing Tech |
| Store registration and store-key issuance | Register the store and issue the store key to use on the child-settings page. | Publishing Tech |
| Game-time choice system page | Build a page where child settings and play-time settings are possible. | Publishing Tech |
| One-stop shutdown service | Apply default-standard play-time settings without child settings. | Publishing Tech |
| Base SDK integration | Base SDK integration into the game is required before using the feature. | CP company |
| Base SDK initialization | Complete initialization via the Base_Initialize API. Base_RunCallback() must be called periodically in the game loop to drive callbacks. |
CP company |
Basic Integration Structure
From game launch to exit, it operates in the order register notification → receive callback → display notification and handle exit.
| Step | What's handled |
|---|---|
| ① Register the notification | ㆍ After Base SDK initialization, register the shutdown notification with the Base_ShutdownNotification API. ㆍ Once registered, the PC SDK looks up shutdown info via a Web API and calls the OnShutdownFinished callback near the exit point.ㆍ Call only once. Calling it inside the Base_Initialize success callback is recommended. |
| ② Receive the callback | ㆍ Look up the remaining time, notification message, and display time from the StovePCShutdown struct delivered via the callback.ㆍ Called up to 4 times (10 min, 5 min, 1 min, 0 min) only for target users. No callback for non-target users. |
| ③ Display the notification and handle exit | ㆍ Display the notification in the game UI and keep it for at least the delivered display time (seconds). ㆍ When 0 minutes is reached, show the exit notice → user confirmation input → terminate the game process. ㆍ Compose the exit notification with close blocking and top z-order. |
StovePCShutdown Struct
The struct delivered via the callback provides the following methods.
| Method name | Return type | Description |
|---|---|---|
| GetInadvanceTimeInMinutes() | int32_t | The current user's time remaining until game exit (minutes). When 0, exit the game immediately. |
| GetShutdownMessage() | const wchar_t* | The shutdown notification message. |
| GetExposureTimeInSeconds() | int32_t | The message-display time (in seconds). |
Development
PC (PCSDK)
This is a PC-SDK-only feature.
It isn't provided on mobile, and the callback isn't called for non-shutdown-target users. In that case, gameplay proceeds normally.
Prerequisites
- BaseSDK integration and initialization (
Base_Initialize) must come first. - The callback-driving function (
Base_RunCallback()) must be called periodically in the game loop for the callback to be delivered correctly. - The publishing technical contact must complete, in advance, adding to the shutdown game list, store registration and key issuance, building the game-time choice system page, and applying the one-stop shutdown service.
- Registration only needs to be called once. We recommend calling it after initialization succeeds.
Development Flow
- Register the notification: After initialization completes, call the shutdown-notification-registration function (
Base_ShutdownNotification). - PCSDK internal handling: The PCSDK looks up the user's shutdown info via a Web API. If they're a target user, the event is registered; if not, the callback isn't called.
- Advance-notification callback (10/5/1 minutes before): The shutdown-notification callback is delivered. Get the remaining time with
StovePCShutdown'sGetInadvanceTimeInMinutes()(inadvanceTimeInMinutesin C#) and the message withGetShutdownMessage()(shutdownMessagein C#), and display them in the UI. Keep it for at leastGetExposureTimeInSeconds()(exposureTimeInSecondsin C#). - Exit callback (0 minutes): When the remaining time (
GetInadvanceTimeInMinutes()) is 0, display the exit-notice UI and take the user's confirmation input. - Exit the game: After the user confirms, terminate the game process immediately. Omitting the exit notice can be a policy violation.
Troubleshooting
| Situation | Cause | Solution |
|---|---|---|
| I registered the callback but it's never called even after playing a while (test account) | For users not subject to shutdown (accounts 18 or older, or where the guardian hasn't set a time), the SDK has no reason to send a notification, so the callback isn't called. This is normal behavior. | To verify shutdown behavior, log in with an under-19 test account for which a guardian has set the game-time choice system. Requesting account registration from the publishing technical contact avoids issues. |
| I registered the callback but it isn't called even for general users | Base_RunCallback() isn't called in the game main loop, or you attempted callback registration before BaseSDK initialization completed. A callback registered before initialization isn't activated. | Move callback registration to after OnInitializeFinished succeeds, and call Base_RunCallback() every frame or at a regular interval in the main loop. Ordering the boot sequence as BaseSDK initialization → callback registration → entering the main loop avoids issues. |
| The callback isn't called even for a shutdown-target account | The game isn't registered in the STOVE shutdown game list, so the SDK doesn't recognize this game as a shutdown target. This often happens with new games or new builds. | Request that the publishing technical contact register the game in the shutdown game list. Re-testing after registration completes avoids issues. |
| I received the 0-minute callback but the game doesn't exit | The SDK only sends a signal that 0 minutes is reached; the actual game exit must be handled by the game itself. If you don't implement exit-handling code, the user can keep playing. | On receiving the 0-minute callback, show the exit-notice UI and, after the user confirms, terminate the process immediately. Setting a timer to force exit after a set time even if the user doesn't press confirm avoids issues. |
| The exit-notice UI is hidden by other game UI, or the user ignores and closes it | The exit notice is at the same z-order as regular pop-ups, or you made it closable by user input, so it's unintentionally ignored. | Always display the exit-notice UI at the top z-order and block arbitrary closing by the user. Composing it to accept only "OK" input and exit immediately means the user can't avoid exit, which avoids issues. |
ShutdownNotification isn't Korea-only
For accounts with shutdown applied, it works overseas too. Register this callback in global builds as well.
Sample Code
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
// 1) Register the shutdown notification — call once inside the Base_Initialize success callback
Base_ShutdownNotification(
[](CallbackResult callbackResult, StovePCShutdown shutdown)
{
if (!callbackResult.GetResult().IsSuccessful())
{
// Non-target-user / exception handling
return;
}
int32_t remaining = shutdown.GetInadvanceTimeInMinutes();
const wchar_t* msg = shutdown.GetShutdownMessage();
int32_t exposureSec = shutdown.GetExposureTimeInSeconds();
// Display the message in the UI, keep it for at least exposureSec
if (remaining == 0)
{
// Show the exit-notice UI → user confirmation input → terminate the game process
}
}
);