Skip to content
Stove
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_OverImmersionNotification API to register the overindulgence-prevention notification.
    • This API only needs to be called once, and we recommend calling it inside the Base_Initialize success callback.
    • Once registered, the OnOverImmersionFinished callback is called automatically every hour from the start of play.

  • Receiving the callback and extracting info
    • The callback delivers a StovePCOverImmersion struct. 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 by Base_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.

  • 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

  1. Register the notification After initialization completes, call the notification-registration API (Base_OverImmersionNotification) to register the overindulgence-prevention notification.
  2. 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)
  3. Verify the result Check success via the callback result. (CallbackResult.IsSuccessful()) In countries other than Korea, NOT_SUPPORTED_COUNTRY (31) is returned.
  4. Extract the info Get the message, elapsed time, and minimum display time from the overindulgence-info object. (GetWarningMessage(), GetElapsedTimeInHours(), GetMinExposureTimeInSeconds())
  5. 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

SituationCauseSolution
I registered the overindulgence-prevention callback but it isn't called even after an hourIf 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 calledYou 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 buildsOverindulgence 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 EnglishThe 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 seeThe 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

cpp
// 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)
        }
    }
);

Frequently Asked Questions



Q1. Which games should the overindulgence-prevention feature be applied to?
A. It's a mandatory item applied to games serviced online domestically, per the Enforcement Decree of the 「Game Industry Promotion Act」.
PC games providing domestic service must integrate it, and failure to do so may be subject to administrative measures for legal violation.
Q2. Should the overindulgence-prevention feature also be applied to mobile games?
A. The STOVE overindulgence-prevention feature is a PC-SDK-only feature and isn't separately provided on mobile.
Mobile games subject to the law must implement the mandatory display within the game themselves.
Q3. How is it handled when servicing in countries other than Korea?
A. The overindulgence-prevention feature works only in Korea.
Calling the Base_OverImmersionNotification API in a country other than Korea returns a NOT_SUPPORTED_COUNTRY (31) error in the callback.
If you run a global build on a single codebase, implement it so the message-display logic is bypassed naturally by branching on the error code.
Q4. When servicing in Vietnam, can I use the same feature?
A. Vietnam service must use a separate Vietnam-regulation feature.
Since its behavior and display requirements differ from Korea's overindulgence-prevention feature, separate integration is needed; refer to the Vietnam age-rating (LOTUS) guide.
Q5. Do I have to call Base_OverImmersionNotification every time?
A. You only need to call it once. We recommend calling it inside the Base_Initialize success callback.
Once registered, the callback is called automatically every hour from the start of play, so there's no need to re-register at each call.
Q6. The callback isn't called. How do I check?
A. The SDK's asynchronous API callbacks run on the thread that calls Base_RunCallback().
First check whether Base_RunCallback() is being called periodically in the game loop.
Also check whether Base SDK initialization (Base_Initialize) succeeded, whether registration happens after the initialization callback, and whether it's being called from a non-Korea-country IP.
Q7. How do I display the message in multiple languages?
A. The message received via GetWarningMessage() is automatically translated into and delivered in the language set by the Base_SetLanguage API.
There's no need for the game to manage separate multilingual resources—just call the language setting at the appropriate time.
Q8. How should I decide the message's display location and time?
A. The overindulgence-warning message provided by the Base SDK must be displayed at an identifiable location in-game (an area with secured readability and visibility).
Keep the display time at least the GetMinExposureTimeInSeconds() value delivered via the callback.
Mind the z-order and interaction control so it isn't hidden by other UI elements or immediately closable by the user.
Q9. Can I implement it in the game myself without using the SDK?
A. The CP company (developer) can also implement it directly using its own counter/message resources.
However, it must satisfy all the message content, display interval (1 hour), minimum display time, and readability requirements the law demands.
Because of the burden of responding to legal changes, we recommend the auto-updating approach via SDK integration.



Need to contact us directly? stove.developers@smilegate.com