- Last Updated
Overindulgence Prevention
Understanding
Games serviced online domestically must display an overindulgence-prevention message on the game screen at set intervals, per the Enforcement Decree of the 「Game Industry Promotion Act」.
To handle this mandatory display, the STOVE PC SDK delivers the overindulgence-warning message, elapsed play time, and minimum message-display time via a callback through the Base SDK.
The game can use the delivered info to build a UI that displays the message at an identifiable location in-game.
Overindulgence prevention is a required item for domestic service.
It's a PC-SDK-only feature and isn't provided on mobile. Target games must integrate it.
Application Environment and Operating Scope
| Item | Details |
|---|---|
| Provided platform | PC SDK 3.0 (Base SDK) only. Not supported on mobile. |
| Operating country | Works only in Korea. Calling from countries other than Korea returns a NOT_SUPPORTED_COUNTRY (31) error. |
| Target games | Games serviced online domestically. Mandatory per the Enforcement Decree of the Game Industry Promotion Act. |
| Vietnam service | Vietnam uses a separate Vietnam-regulation feature. Applied separately from overindulgence prevention. |
Info the SDK Delivers
After play starts, the following info is delivered via a callback at set intervals.
The game uses these values to build the mandatory-display UI.
| Delivered info | Description |
|---|---|
| Overindulgence-warning message | A law-compliant overindulgence-prevention message. Translated into and delivered in the language set by the Base_SetLanguage API. |
| Elapsed play time | The elapsed time accumulated from the start of play (in hours). |
| Minimum message-display time | The minimum time the message must be shown on screen (in seconds). |
The message must be displayed at an identifiable location in-game.
The overindulgence-warning message provided by the Base SDK must be displayed at a readable location the user can perceive, and kept for at least the delivered minimum display time.
Message-Display Example
The message delivered via the callback has the form below. The elapsed-time info is included in the message.
"1 hour has passed since you started playing. Excessive gameplay can interfere with a normal daily life."
Application Methods
You can apply the overindulgence-prevention message by choosing one of two methods.
Both methods must satisfy the legal requirements (display interval, minimum display time, readability, etc.).
| Method | Description | Recommended |
|---|---|---|
| PC SDK integration | After registering the Base SDK's Base_OverImmersionNotification API, display the delivered info on screen in the callback that's called every hour. |
Recommended |
| CP-company self-implementation | The game manages its own counter/timer and message resources directly to display it. | Optional |
Integration Guide
Basic Integration Structure
- Register the notification
- After Base SDK initialization completes, call the
Base_OverImmersionNotificationAPI to register the overindulgence-prevention notification. - This API only needs to be called once, and we recommend calling it inside the
Base_Initializesuccess callback. - Once registered, the
OnOverImmersionFinishedcallback is called automatically every hour from the start of play.
- After Base SDK initialization completes, call the
- Receiving the callback and extracting info
- The callback delivers a
StovePCOverImmersionstruct. Look up the message, elapsed time, and minimum display time from the struct and display them on screen. - The message obtained via
GetWarningMessage()is the result translated into the language set byBase_SetLanguage. - If called from a country other than Korea, the callback returns a
NOT_SUPPORTED_COUNTRY (31)error. Implement it so that outside domestic service it's bypassed naturally with no special handling.
- The callback delivers a
- Displaying the message
- Display the message at an identifiable location in-game (e.g., a top/bottom banner area of the screen, the system-message area, etc.).
- Keep it on screen for the delivered minimum message-display time (seconds), then have it disappear naturally.
- Ensure the message area's z-order and readability so it isn't hidden by other UI.
Development
PC (PCSDK)
This is a PC-SDK-only feature.
It isn't provided on mobile, and calling from a country other than Korea returns a NOT_SUPPORTED_COUNTRY (31) error.
Prerequisites
- BaseSDK integration and initialization (
Base_Initialize) must come first. Calling before initialization means the callback won't work. - The callback-dispatch function (
Base_RunCallback()) must be called periodically in the game loop for the callback to be delivered correctly. - To display the message in multiple languages, set the language in advance with the language-setting API (
Base_SetLanguage(enum-based) /Base_SetLanguageEx(string-based)). The message received in the callback is automatically translated into the set language. - Registration only needs to be called once. We recommend calling it right after initialization succeeds.
Development Flow
- Register the notification
After initialization completes, call the notification-registration API (
Base_OverImmersionNotification) to register the overindulgence-prevention notification. - Receive the callback
The registered callback is called every hour from the start of play. The callback arguments are the callback result and the overindulgence-info object. (
CallbackResult,StovePCOverImmersion) - Verify the result
Check success via the callback result. (
CallbackResult.IsSuccessful()) In countries other than Korea,NOT_SUPPORTED_COUNTRY(31) is returned. - Extract the info
Get the message, elapsed time, and minimum display time from the overindulgence-info object. (
GetWarningMessage(),GetElapsedTimeInHours(),GetMinExposureTimeInSeconds()) - Display the message Show the message at an identifiable location in-game, keep it for at least the minimum display time (seconds), then have it disappear naturally.
Troubleshooting
| Situation | Cause | Solution |
|---|---|---|
| I registered the overindulgence-prevention callback but it isn't called even after an hour | If you don't call the callback-dispatch function (Base_RunCallback()) in the game main loop, the SDK has no way to deliver to the game even when it's time to notify. The callback runs only on the thread that called this dispatch function. | Call the callback-dispatch function every frame or at a regular interval in the main loop. Calling it once between input handling and rendering avoids issues. |
| Callback registration itself fails, or it registers but is never called | You registered the callback before BaseSDK initialization completed. Before initialization completes, the SDK doesn't know the user session, so the registered callback isn't activated. | Move the callback-registration code to after initialization succeeds (after OnInitializeFinished succeeds). Proceeding in the order BaseSDK initialization → callback registration in the boot sequence avoids issues. |
The registration API fails with NOT_SUPPORTED_COUNTRY (31) in non-Korea-country builds | Overindulgence prevention is a Korea-only regulation feature, so error 31 is returned outside Korea. Calling it as-is in a global build leaves meaningless errors in the boot log. | Check the country code (ISO 3166-1 ALPHA-2, "KR" for Korea) from the GDS info (Base_GetGds), and branch so you enter the registration code only when it's Korea. Skipping registration in non-Korea builds avoids issues. |
| It's registered but the notification message shows only in English | The notification text the SDK provides follows the language set by the language-setting API (Base_SetLanguage (enum-based), Base_SetLanguageEx (string-based)). If the callback arrives before the language is set, it's shown in the default (English). | Apply the game language with the language-setting API in the step before callback registration. Setting the language once right after boot makes all subsequent SDK messages come out in that language, which avoids issues. |
| The notification message is hidden by the game UI or hard to see | The game's handling of the message's location, z-order, and display time is insufficient, so it's buried under other UI. The SDK delivers only the message text; the display method is the game's responsibility. | Show it at an always-visible location such as the system-message area or a top/bottom banner, and set the z-order so it's above other UI. Allowing enough display time and not closing it right after user input avoids issues. |
Vietnam service uses a separate feature
Vietnam uses a different regulation flow (Vietnam age rating/overindulgence) than Korea's overindulgence-prevention feature.
Apply this API to Korean games, and for Vietnam service, refer to the separate Vietnam-regulation guide.
Sample Code
// Legacy C/C++ API (common to Native C/C++ and Unreal)
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
// (optional) Pre-set the language for multilingual display
Base_SetLanguageEx(L"ko");
// Register the overindulgence-prevention notification — call once inside the Base_Initialize success callback
Base_OverImmersionNotification(
[](CallbackResult callbackResult, StovePCOverImmersion overImmersion)
{
if (callbackResult.GetResult().IsSuccessful())
{
const wchar_t* message = overImmersion.GetWarningMessage();
int32_t elapsedHours = overImmersion.GetElapsedTimeInHours();
int32_t minExposureSec = overImmersion.GetMinExposureTimeInSeconds();
// Display message in the game UI, keep it for at least minExposureSec, then dismiss
}
else
{
// Bypass naturally for cases like non-Korea countries (NOT_SUPPORTED_COUNTRY=31)
}
}
);