File placement
For packaged Windows builds, place anticheat.dll, anticheat.lic, and anticheat.ini next to the executable that loads the game.
Windows\YourGame.exe
Windows\YourGame\Binaries\Win64\YourGame-Win64-Shipping.exe
If the shipping binary is the real process, place the files next to that binary.
Startup load
A startup module, subsystem, or plugin should load the DLL once early in the game lifecycle.
void* H = FPlatformProcess::GetDllHandle(TEXT("anticheat.dll"));
if (!H)
{
// Log a clear startup error for the studio.
}
The provided sample wrapper resolves exports from the DLL. It should fail visibly in logs if the DLL is missing, the license is invalid, or the platform is not Windows x64.
Blueprint surface
Blueprint users should get named nodes or components, for example:
- Korvayne Start
- Korvayne Set Player Id
- Korvayne Set Session Id
- Korvayne Set Telemetry Token
- Protected Float - Get / Set
- Protected Int - Get / Set
- Korvayne Protect Save
- Korvayne Verify Save
- Korvayne Report Shot
Goal: the person building gameplay in Blueprints should not pass memory addresses, call C functions, or understand import libraries.
Protected saves
Serialize the save game object normally, then protect the resulting byte array before writing. Verify the file before deserializing on load.
TArray<uint8> Plain = SerializeMySave();
FString Context = FString::Printf(TEXT("player=%s;slot=profile;schema=1"), *PlayerId);
ACTGuard::ProtectSaveFile(TCHAR_TO_UTF8(*Path), Plain.GetData(), Plain.Num(), TCHAR_TO_UTF8(*Context));
TArray<uint8> Verified;
int32 Rc = ACTGuard::VerifySaveFile(TCHAR_TO_UTF8(*Path), TCHAR_TO_UTF8(*Context), Verified);
If verification fails, reject the load or restore a backup. Do not deserialize unverified bytes.
Report shots
Aim behavior is not automatic in drop-in mode. The SDK does not read mouse input, target positions, or visibility state by itself. The Unreal wrapper should expose one Blueprint node that the weapon, ability, or hit-resolution graph calls after the local player's shot is resolved.
Korvayne Report Shot
Aim Speed Per Ms
Reaction Ms
Had Line Of Sight
Hit
| Blueprint value | Where to get it |
|---|---|
Aim Speed Per Ms | Save the local controller/camera rotation from the previous weapon tick, compare it with the rotation when the shot fires, then divide by elapsed milliseconds. |
Reaction Ms | When your targeting, overlap, trace, or visibility logic first marks an enemy as visible, save Now. On shot, send the time difference in milliseconds. |
Had Line Of Sight | Use the same line trace or hit-validation boolean your weapon already trusts for the shot. |
Hit | Use the final local weapon result after damage/hit resolution, not a prediction from before the trace finishes. |
Blueprint-only rule: if these values are not available in the graph yet, skip this node for now. Do not feed placeholder values every frame; handle/module/hook/debugger/ValueGuard checks still work without shot reports.
- Call it once per local human-player shot after hit and line-of-sight are known.
- Do not call it for AI pawns, remote replicated players, spectators, or replay playback.
- Keep
behavior_response = reportwhile collecting clean baseline logs.
The SDK turns those reports into advisory AimSnap, Triggerbot, or Wallhack evidence when the supplied shot values cross simple built-in thresholds.
| Evidence | Current condition |
|---|---|
AimSnap | Hit shot with Aim Speed Per Ms > 8.0. |
Triggerbot | Three hit shots with reaction time below 60ms; normal reactions above 120ms reset the counter. |
Wallhack | Hit shot while Had Line Of Sight is false. |
Telemetry for these events is controlled by [TelemetryEvents] aim_behavior; local action is controlled by [Enforcement] behavior_response. Keep this report-only until real player baselines are reviewed.
Packaging checks
- Package the game for Windows x64.
- Run the Dropper or copy the three runtime files next to the final executable.
- Start the game and confirm
anticheat.logappears. - Run common launchers, overlays, capture tools, and any title-specific QA handle tests.
- Only then add ValueGuard nodes to selected gameplay values.
