Skip to content

acidicoala/ScreamAPI

Repository files navigation

ScreamAPI

Legit DLC Unlocker for Epic Online Services.

✨ Features

  • πŸ”“ Emulate DLC ownership in legitimately owned games
  • πŸ›… Emulate Entitlements ownership
  • ⌚ Block playtime tracking
  • βœ’οΈ Print EOS SDK logs

πŸ”— Links

πŸ“– Introduction

❓ What is ScreamAPI?

ScreamAPI is a DLC unlocker for games that are legitimately owned in your Epic Games account. It attempts to fool games that use Epic Online Services Software Development Kit (EOS SDK) into thinking that you own the game's DLCs. However, ScreamAPI does not modify the rest of the EOS SDK, hence features like multiplayer, achievements, and so on remain fully functional.

❔ Which games are supported?

Only games that use Epic Online Services Software Development Kit for the DLC ownership verification are supported. Hence, if a game's installation directory does not contain any EOSSDK-Win32-Shipping.dll or EOSSDK-Win64-Shipping.dll files then it's definitely not supported. Even if a game uses EOS SDK DLL, it's not guaranteed to be supported because each game might implement additional custom verification checks. Therefore, you have to first research the game's topic, to see if it supports unlocking.

Additionally, there are several points to bear in mind when it comes to unlocking DLCs with ScreamAPI:

  • ScreamAPI most definitely will not work with games that use 3rd party DRM, such as games from Ubisoft, Rockstar, etc.
  • ScreamAPI is unlikely to unlock anything in Free-To-Play games since they typically store all player data on the corresponding game server and hence all the checks are server-side.
  • ScreamAPI will not work with games that employ additional ownership protection or if the game is using alternative DLC verification mechanism.
  • ScreamAPI is unlikely to work with games that use an anti-cheat, since they typically detect any DLL/EXE that has been tampered with. Sometimes it is possible to disable an anti-cheat, but that typically entails the loss of online capabilities. Search in the respective game topic for more information about how to disable anti-cheat.
  • Some games include DLC files in their base game, regardless of whether you own the DLC or not. However, some games download additional DLC files only after a user has bought the corresponding DLC. In this case, not only will you need to install ScreamAPI, but you also have to get the additional DLC files from somewhere else and put them into the game folder. Up-to-date DLC files often can be found in corresponding game topics.
  • Some games don't use any DRM at all, in which case ScreamAPI is useless. All you need to do is to download the DLC files and place them in the game folder.

:shipit: Usage

Warning

Please proceed with usage at your own risk. Usage of this unlocker entails breaking one or more terms of service, which might result in a permanent loss of your account.

To use ScreamAPI, you need to install it into the game folder following the instructions below. Once installed, ScreamAPI is automatically loaded by a game every time you launch the game. ScreamAPI supports 2 installation modes: Hook mode and Proxy mode.

↔️ Mode comparison

πŸͺ Hook mode

  • Advantages:
    • Persists after game updates
    • Can be loaded by other injectors
    • Can sometimes bypass DLL integrity checks
  • Disadvantages:
    • Might need an additional DLL to get injected (like Koaloader)

πŸ”€ Proxy mode

  • Advantages:
    • Guaranteed to load
  • Disadvantages:
    • Might need reinstallation aftera game update

My advice is to try installing the unlocker in hook mode first. If it doesn't work, try installing it in proxy mode instead. If that didn't work, refer to the Troubleshooting section below.

πŸ›  Installation instructions

Note

To determine the bitness of a game you can open Task Manager, navigate to Details tab, right-click on the column headers, click Select columns, tick checkbox next to Platform and click OK. This will allow you to see a game's bitness in the Details tab while a game is running.

πŸͺ Hook mode

  • Download the latest ScreamAPI release zip.
  • From this downloaded zip extract ScreamAPI32.dll or ScreamAPI64.dll, depending on a game's bitness.
  • Rename the unzipped DLL to version.dll.
  • Place this version.dll next to the game's .exe file.

πŸͺ Hook mode with Koaloader

If a game doesn't load version.dll, you can use an alternative injector to load ScreamAPI into the game process. One such injector is Koaloader, which supports different DLLs that a typical game might load. For example, assuming that the game loads winmm.dll:

  • Install Koaloader:
    • Download the latest Koaloader release zip.
    • From this downloaded zip extract winmm.dll from winmm-32 or winmm-64, depending on a game's bitness.
    • Place winmm.dll next to the game's .exe file.
  • Install ScreamAPI
    • Download the latest ScreamAPI release zip.
    • From this downloaded zip extract ScreamAPI32.dll or ScreamAPI64.dll, depending on a game's bitness.
    • Place ScreamAPI32.dll or ScreamAPI64.dll next to the game's .exe file.

πŸͺ Hook mode with Special K

There are games which have extra protections that break hook mode. In such cases, it might be worth trying Special K, which can inject ScreamAPI as a custom plugin.

πŸ”€ Proxy mode

  • Find a EOSSDK-Win32-Shipping.dll or EOSSDK-Win64-Shipping.dll file in game directory, and rename it to EOSSDK-Win32-Shipping_o.dll or EOSSDK-Win64-Shipping_o.dll.
  • Download the latest ScreamAPI release zip.
  • From this downloaded zip extract ScreamAPI32.dll or ScreamAPI64.dll, depending on a game's bitness.
  • Rename this extracted DLL to EOSSDK-Win32-Shipping.dll or EOSSDK-Win64-Shipping.dll, depending on a game's bitness.
  • Place this renamed unlocker DLL next to the EOSSDK-Win32-Shipping_o.dll or EOSSDK-Win64-Shipping_o.dll file.

Important

When a game opens a web page on Epic Games website, which asks your permission to share your profile info with the game, you need to accept that for the DLC unlocking to work properly. Many games simply don't start DLC ownership checks until they have received this permission.

βš™ Configuration

ScreamAPI does not require any manual configuration. By default, it uses the most reasonable options and tries to unlock all DLCs that it can. However, there might be circumstances in which you need more custom-tailored behaviour, such as disabling certain DLCs, or selectively enabling just a few of them. In this case you can use a configuration file ScreamAPI.config.json that you can find here in this repository or in the release zip. To use it, simply place it next to the ScreamAPI DLL. It will be read upon each launch of a game.

The config file is expected to conform to the JSON standard. It is recommended to use a text editor with JSON schema supports. This greatly assists with editing since it warns not just about syntax errors, but also about invalid values. One such editor is Visual Studio Code.

VS Code demo

This example showcases how VS code highlights an invalid value and displays a list of valid values that are accepted. VS Code demo

Below you can find the detailed description of each available config option. In the absence of the config file, default values specified below will be used.

Option Description Type Default Valid values
logging Enables logging to ScreamAPI.log.log file. Boolean false true or false.
log_eos Enables or disables interception of EOS SDK logs. Requires 'logging' to be enabled. Boolean false true or false.
block_metrics Blocks reporting of analytics and usage metrics by the game to Epic Online Services. Metrics sent by EOS SDK itself remain unaffected. Boolean false true or false.
namespace_id Namespace ID of the game that is used when fetching entitlements. Normally ScreamAPI will automatically get this during EOS SDK initialization. However, in case of late injection, this option can be used to provide the game's namespace ID. String "" Namespace ID of any game can be found on ScreamDB.
default_dlc_status Specifies default DLC status. String "unlocked" "unlocked" or "locked" or "original".
override_dlc_status Overrides the status of individual DLCs. An object with "key": "value" pairs, where key is DLC ID (32-character hex string) and value is DLC status. Object {} An object with "key": "value" pairs, where key is DLC ID and value is DLC status.
extra_graphql_endpoints When a game requests all available entitlements ScreamAPI has to make a request to a valid Epic Games GraphQL endpoint to fetch this information. This means that when Epic Games changes their endpoints, ScreamAPI loses ability to automatically fetch entitlements. This where this option becomes useful, allowing users to specify latest GraphQL endpoint (or several). Array [] An array of valid GraphQL endpoints (["https://..."]).
extra_entitlements Additional entitlements that ScreamAPI will inject when a game requests all entitlements owned by the player. There is usually no need to manually entitlement IDs because ScreamAPI will automatically fetch them from Epic Games Store servers. However, if the servers are not accessible then this option becomes useful. Object {} An object with "key": "value" pairs, where key is DLC IDand value is DLC title. Title is used only for logging, hence it can be left empty (i.e. "").
Advanced options

NOTE: These options do not affect the unlocker, and should be left unmodified. They serve as utilities for text or GUI editors.

Option Description Type Default Valid values
$schema URL of a JSON Schema that corresponds to this config. String ScreamAPI.schema.json URL to a valid ScreamAPI config JSON schema.
$version Reserved for use by tools like GUI config editors. Integer 3 Integer numbers from 1 and beyond.

Below you can find an example config where nearly every option has been customized.

Complete example
{
  "$schema": "https://raw.githubusercontent.com/acidicoala/ScreamAPI/refs/tags/v4.0.0/res/ScreamAPI.schema.json",
  "$version": 3,
  "logging": true,
  "log_eos": true,
  "block_metrics": true,
  "namespace_id": "115577f4ef1e4055aaf0da534fdfe81e",
  "default_dlc_status": "unlocked",
  "override_dlc_status": {
    "89867f8b0e79421698e4705a72a48b49": "original",
    "f462bd795cc04772b0c285349bd61cc6": "unlocked",
    "72620675f0e549f39d8e28b77fb88303": "locked"
  },
  "extra_graphql_endpoints": [
    "https://launcher.store.epicgames.com/graphql",
    "https://graphql.unrealengine.com/ue/graphql"
  ],
  "extra_entitlements": {
    "fa7463c069a74d07aadf315df9b4e28b": "Big Top Breakout",
    "89867f8b0e79421698e4705a72a48b49": "Dungeons and Duct Tape"
  }
}

πŸŽ“ Extra info

πŸ”‘ When does ScreamAPI handle entitlement requests?

When a game requests a list of entitlements that user owns, it may specify an optional list of entitlement IDs. The EOS SDK is supposed to respond only with entitlements that match these IDs. Hence, ScreamAPI can use this information to generate a response which contains all entitlements specified by the game. However, if a game does not provide a list of entitlement IDs then ScreamAPI has to resort to making a request to Epic Games Store servers to retrieve all offered DLCs, whose IDs will be used to generate a response.

πŸ”§ Troubleshooting

πŸ” DLCs are not unlocked

There are many reasons why the DLCs remain locked. In some games DLC unlocking is inherently impossible because of online-only state, profile, etc. In other cases it may be possible, but only after dealing with custom game checks. To learn about the specifics, consult the corresponding game topic in the forum.

If you are sure that DLC unlocking in a targeted game is inherently possible, then you have to verify that installation was successful. To do that, add the unlocker's config file next to the unlocker DLL and enable logging in it. You should see a *.log file being generated upon the game launch, which could provide insight into what went wrong. Use this log file when requesting support in the forum. If after launching the game no *.log file was generated, then it means that installation was not performed correctly.

If you installed the unlocker via proxy mode, then make sure that you have renamed the unlocker DLL exactly like the original DLL and placed it exactly in its place. Also verify that the original DLL was renamed by adding _o at the end of the filename. Notice that the second symbol is a literal o (short for original), not a numeral zero 0.

If you installed the unlocker via hook mode, then make sure that you have picked a compatible Koaloader DLL. Not all games will try to load version.dll, hence you need will need to try another. You can use Process Monitor to find out which Koaloader DLL is supported by a game, and where to place it. Click on the cyan funnel icon on the top to open filter editor, and add 3 filters (Process name, Result, and Path), as shown in the screenshot below. Launch the game with the Process Monitor active, and you should see DLLs that a game was trying to load from its directory.

Process Monitor screenshot

Process Monitor

If you have made sure that you picked the right DLL for Koaloader, then try adding Koaloader's config file and enable logging in it. The log file from Koaloader can show if it was able to successfully load the unlocker DLL.

πŸ’₯ The game is crashing

If the game is crashing or not opening as expected after installing an unlocker, then try to download and install the latest Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017, 2019, and 2022

Download page

Download page

πŸ—οΈ Building from source

βœ”οΈ Requirements

  • CMake v3.24 or newer (Make sure that cmake is available from powershell)
  • Visual Studio Build Tools 2022 with Desktop Development for C++ workload installed
    • Tested on Windows 11 SDK (10.0.26100.4188)

πŸ‘¨β€πŸ’» Commands

Build the project

.\build.ps1 $arch $config

where

Variable Valid values
$arch 32 or 64
$config Debug or Release

For example:

.\build.ps1 64 Release

πŸ“š Acknowledgments

This project makes use of the following open source projects:

πŸ“„ License

This software is licensed under the Unlicense, terms of which are available in UNLICENSE.txt.