143 Commits

Author SHA1 Message Date
acidicoala 3bd112c8f4 Refactored version check 2026-01-17 12:06:19 +05:00
acidicoala 7b54b4bc7b Added null checks 2026-01-14 19:34:00 +05:00
acidicoala 077096b7ed renew steamapi_handle 2026-01-12 04:10:43 +05:00
acidicoala bc8ee85e19 Fixed proxy mode detection 2026-01-08 23:16:10 +05:00
acidicoala 5aaa9ed151 Added trace logs to proxy exports 2026-01-04 21:41:26 +05:00
acidicoala e2b126c8b6 Regenerated README [skip ci] 2026-01-04 07:22:14 +05:00
acidicoala 2f6d6cc9aa Regenerated linux proxy exports 2026-01-04 07:12:44 +05:00
acidicoala 8784df5f45 Fix mbedtls include attempt 3 2026-01-04 06:54:06 +05:00
acidicoala dc12301090 Fix mbedtls include attempt 2 2026-01-04 06:13:58 +05:00
acidicoala 907e939b67 Fixed string section name 2026-01-04 04:49:35 +05:00
acidicoala 7b82994b17 Regenerate linux proxy exports 2026-01-04 04:49:28 +05:00
acidicoala 11bd820921 Sync KoalaBox (brotli, openssl) 2026-01-04 04:49:19 +05:00
acidicoala 9acf7312d3 Fixed static order init fiasco 2026-01-02 21:57:41 +05:00
acidicoala 3b8635d16b Version bump to 4.1.0 2025-12-27 20:45:44 +05:00
acidicoala e430350ffd Added instructions on adding support for new Steamworks SDK 2025-12-27 19:04:38 +05:00
acidicoala 0341c97d4f Fix README [skip ci] 2025-12-26 20:17:57 +05:00
acidicoala c6aefbc460 Fallback to original DLC count 2025-12-26 20:02:56 +05:00
acidicoala 1f7a31d938 Update interface lookup 2025-12-26 19:59:18 +05:00
acidicoala 5910de7f27 Fix steamworks headers and binaries 2025-12-26 19:55:02 +05:00
acidicoala 5aa97db828 Fix steamworks downloader 2025-12-26 19:38:24 +05:00
acidicoala e09cd7cef2 Added Steamworks SDK v1.63 2025-12-26 19:38:09 +05:00
acidicoala e69734f9e7 Sync KoalaBox 2025-12-24 23:35:55 +05:00
acidicoala bfc59ab64f Sync KoalaBox 2025-12-24 23:06:24 +05:00
acidicoala a6f43d80e6 Sync KoalaBox 2025-12-24 22:46:34 +05:00
acidicoala db58468823 Sync KoalaBox 2025-12-24 22:25:29 +05:00
acidicoala 15ba0ed447 KoalaBox sync 2025-12-23 03:02:45 +05:00
acidicoala aa0504ff14 Sync KoalaBox 2025-10-13 02:20:28 +05:00
acidicoala 3312e92dce Sync KoalaBox 2025-10-13 01:58:36 +05:00
acidicoala e6dbffb671 Sync KoalaBox 2025-10-12 17:31:21 +05:00
acidicoala ef3b8894e3 Bump config schema version URL 2025-10-12 16:25:32 +05:00
acidicoala 009d839ec3 Updated Linux instructions 2025-10-12 16:23:24 +05:00
acidicoala 70160206b8 Sync KoalaBox 2025-10-12 03:40:31 +05:00
acidicoala 86eb2085e7 Sync KoalaBox 2025-10-11 02:50:31 +05:00
acidicoala 5f07cec291 Sync KoalaBox 2025-10-09 16:07:15 +05:00
acidicoala 4bf9898f83 Update CI 2025-10-07 03:16:11 +05:00
acidicoala 1f8fab7b48 Remove linux sources from windows build 2025-10-07 01:12:47 +05:00
acidicoala 36d5143463 Fix #if directives 2025-10-07 00:54:52 +05:00
acidicoala d5db62c2f2 Generate proxy exports on demand 2025-10-07 00:41:49 +05:00
acidicoala 7e9c4c42b9 Added debug logs 2025-10-06 23:57:44 +05:00
acidicoala cc17984702 Added debug logs 2025-10-06 23:46:33 +05:00
acidicoala 293f490e1d Added debug logs 2025-10-06 23:22:49 +05:00
acidicoala 060d6e15a3 Implemented tag release 2025-10-06 23:01:40 +05:00
acidicoala 96ec32228c Removed debug log 2025-10-06 20:01:58 +05:00
acidicoala 725be9f346 Sync KoalaBox 2025-10-06 19:49:04 +05:00
acidicoala 5382c84906 Setup Github user in dockerfile 2025-10-06 19:32:53 +05:00
acidicoala 5629b7b5e2 Added debug logs in CI 2025-10-06 19:02:20 +05:00
acidicoala 673cd11e47 Added init & shutdown checks 2025-10-06 18:53:22 +05:00
acidicoala ec99d79bf7 Update README [skip ci] 2025-10-06 01:52:02 +05:00
acidicoala fb17902116 Update CI 2025-10-06 01:21:35 +05:00
acidicoala fce11580d6 Sync KoalaBox 2025-10-06 01:00:00 +05:00
acidicoala 2fad0ee43f Updated CI 2025-10-05 23:47:15 +05:00
acidicoala 73fab4020d Sync KoalaBox 2025-10-05 23:38:23 +05:00
acidicoala bdbd1ff540 Updated CI 2025-10-05 23:10:37 +05:00
acidicoala 477f019b49 Updated CI 2025-10-05 22:53:04 +05:00
acidicoala 8d3d2c13d8 Updated CI 2025-10-05 22:29:31 +05:00
acidicoala b362bb2828 Updated CI 2025-10-05 22:27:43 +05:00
acidicoala 06809b2c5d Updated CI 2025-10-05 22:14:32 +05:00
acidicoala 85710cce37 Updated CI 2025-10-05 22:08:00 +05:00
acidicoala fe7eef72bd Updated CI 2025-10-05 19:43:43 +05:00
acidicoala 1572a0fd4a Updated CI 2025-10-05 19:42:00 +05:00
acidicoala 7e744f5492 Updated CI 2025-10-05 19:40:36 +05:00
acidicoala c29445126b Updated CI 2025-10-05 19:38:54 +05:00
acidicoala c6767419e4 Updated CI 2025-10-05 19:38:27 +05:00
acidicoala dac3cad5e2 Updated CI 2025-10-05 19:37:54 +05:00
acidicoala 62071a1489 Fix CI 2025-10-05 19:35:59 +05:00
acidicoala f8de04812a Updated CI 2025-10-05 19:29:51 +05:00
acidicoala df43442fce Updated CI 2025-10-05 19:09:45 +05:00
acidicoala 76cf15126c Updated CI 2025-10-05 19:04:49 +05:00
acidicoala 8194a3333d Updated CI 2025-10-05 19:03:15 +05:00
acidicoala 599749a799 Use docker container in CI 2025-10-05 18:46:31 +05:00
acidicoala ef5bc217b0 Fix Linux build 2025-10-05 16:31:53 +05:00
acidicoala 9f1a5edd5f Fix Linux build 2025-10-05 16:10:15 +05:00
acidicoala d879b21bd4 Fix Linux build 2025-10-05 16:00:15 +05:00
acidicoala 5aa9ffef85 Refactored lib and module namespaces 2025-10-05 07:31:05 +05:00
acidicoala 0c6c8e02b6 Fix Build CI 2025-10-04 21:29:43 +05:00
acidicoala 0f5d98e42b Fix Build CI 2025-10-04 21:15:33 +05:00
acidicoala 2da049ec2a Fix Build CI 2025-10-04 21:02:31 +05:00
acidicoala 227a920e11 Fix Build CI 2025-10-04 21:01:00 +05:00
acidicoala 21a4f56145 Fix Build CI 2025-10-04 21:00:02 +05:00
acidicoala 3ab61365ce Fix Build CI 2025-10-04 20:59:37 +05:00
acidicoala 2ce8967257 Fix Build CI 2025-10-04 20:57:13 +05:00
acidicoala 83623841bd Fix Build CI 2025-10-04 20:56:42 +05:00
acidicoala d46acb56e8 Fix Build CI 2025-10-04 20:53:25 +05:00
acidicoala 7ec6f5b277 Fix Build CI 2025-10-04 20:50:03 +05:00
acidicoala 7758663b2e Fix Build CI 2025-10-04 20:39:32 +05:00
acidicoala 3d5261e293 Fix Build CI 2025-10-04 20:37:48 +05:00
acidicoala 469299340f Fix Build CI 2025-10-04 20:35:26 +05:00
acidicoala e3505e48fb Fix Build CI 2025-10-04 17:40:44 +05:00
acidicoala 35ea324898 Reworked lib::get_exports 2025-10-04 17:24:36 +05:00
acidicoala b4c12f5a37 Fix Build CI 2025-10-04 05:22:37 +05:00
acidicoala 8a92c50fd3 Fix Build CI 2025-10-04 05:13:11 +05:00
acidicoala fe5c4cede4 Fix Build CI 2025-10-04 04:55:27 +05:00
acidicoala d7d5eb349b Fix Build CI 2025-10-04 04:39:39 +05:00
acidicoala 7b20bde2fc Fix Build CI 2025-10-04 04:22:50 +05:00
acidicoala 02e66ed624 Fix Build CI 2025-10-04 03:46:21 +05:00
acidicoala 23ee93464a Fix Build CI 2025-10-04 03:43:18 +05:00
acidicoala ca5fcf8cb0 Added debug steps 2025-10-04 02:55:45 +05:00
acidicoala 2b3930031f Added debug steps 2025-10-04 02:41:27 +05:00
acidicoala debb44c138 Added missing Linux dependencies 2025-10-04 01:39:56 +05:00
acidicoala 21cab6c469 Fix Build CI 2025-10-04 01:28:24 +05:00
acidicoala 7cb32f84db Added missing Linux dev dependencies 2025-10-04 01:16:00 +05:00
acidicoala 9a0ab12b86 Added missing Linux dev dependencies 2025-10-04 01:03:37 +05:00
acidicoala 05569a4019 Switch to clang compiler on Linux 2025-10-04 00:52:09 +05:00
acidicoala 49efd831bf Implemented get_section using elfio 2025-10-04 00:42:13 +05:00
acidicoala 9944f3bd3f Added missing header 2025-10-04 00:14:25 +05:00
acidicoala 53868e8bed Fix Build CI 2025-10-04 00:06:00 +05:00
acidicoala 842387bb2f Updated readme 2025-10-04 00:01:42 +05:00
acidicoala c062696706 Fix build error 2025-10-03 23:46:00 +05:00
acidicoala aea513fbd1 Fix missing optional include 2025-10-03 23:29:57 +05:00
acidicoala 99564ae4b7 Fix build CI, update major version 2025-10-03 23:12:32 +05:00
acidicoala 046df29a6b Fix Build CI 2025-10-03 23:06:38 +05:00
acidicoala 5012ed3da8 Added Linux instructions 2025-10-03 22:59:38 +05:00
acidicoala 297382f6a2 Fix build CI 2025-10-03 21:51:48 +05:00
acidicoala e6fe7ad22e Fix build CI 2025-10-03 21:45:11 +05:00
acidicoala 548ba0fe00 Fix build CI 2025-10-03 21:42:05 +05:00
acidicoala cd8be9f80a Fix build CI 2025-10-03 21:39:57 +05:00
acidicoala ca4457556c Fix build CI 2025-10-03 21:37:29 +05:00
acidicoala 509b70c0b0 New build CI 2025-10-03 21:34:20 +05:00
acidicoala ac9c1a3fcc Implement get_bitness on windows 2025-09-29 00:32:56 +05:00
acidicoala 265829f434 Full support for 64-bit Linux 2025-09-28 21:05:01 +05:00
acidicoala d03f95adb7 Added notes about self-hook mode 2025-09-26 22:59:18 +05:00
acidicoala d8e1333d42 Refactored tool deps into KoalaBoxTools 2025-09-26 22:49:10 +05:00
acidicoala 922b649fc3 Reworked configure_linker_exports 2025-09-26 00:16:15 +05:00
acidicoala d829396c08 Refactored linux exports generator with inja 2025-09-25 01:24:53 +05:00
acidicoala 59d45c9dab 64-bit proxy mode for Linux 2025-09-24 22:37:53 +05:00
acidicoala 81a8ef42ab Version bump 2025-09-24 19:40:18 +05:00
acidicoala e72bc29635 Replaced get_module_version_info with non-throwing variant 2025-09-23 18:29:55 +05:00
acidicoala 593c0cb4bc Added win::check_self_duplicates 2025-09-23 15:00:00 +05:00
acidicoala d3fd17779c Updated readme [skip ci] 2025-09-22 23:07:37 +05:00
acidicoala f5b8c0c89f Added support for self-injection via winhttp.dll 2025-09-22 22:47:53 +05:00
acidicoala 8decbafb53 Reworked algorithm for finding App ID 2025-09-22 21:31:47 +05:00
acidicoala 7ab9895b58 Added winmm.dll for self-injection 2025-09-22 03:57:11 +05:00
acidicoala c75bbcf636 Fix CI 2025-09-22 01:45:26 +05:00
acidicoala c409ff3202 Sync KoalaBox 2025-09-21 23:39:07 +05:00
acidicoala 8a6c8d0fba Sync KoalaBox 2025-09-21 23:37:21 +05:00
acidicoala 7781636335 Fix CI 2025-09-21 22:34:04 +05:00
acidicoala e0ba771d52 Fix CI 2025-09-21 22:26:59 +05:00
acidicoala b0a4ea0f24 Version bump 2025-09-21 22:18:27 +05:00
acidicoala c5f8a37702 Fixed late hooking 2025-09-21 21:48:24 +05:00
acidicoala 50b7792375 Replaced local ntapi.hpp with winsiderss/phnt 2025-09-21 07:00:04 +05:00
acidicoala bdbd02087c Restored Steamworks SDK v1.62 + linux bin fixer 2025-09-20 23:27:03 +05:00
acidicoala f30aee0da9 Use init_null_logger 2025-09-20 07:54:13 +05:00
acidicoala b4a9e8fd79 Switch to DLL_MAIN helper 2025-09-20 07:36:49 +05:00
237 changed files with 74968 additions and 4579 deletions
+1
View File
@@ -1,3 +1,4 @@
* text eol=lf * text eol=lf
*.dll binary *.dll binary
*.so binary
-18
View File
@@ -1,18 +0,0 @@
name: Continuous Integration
on: push
jobs:
ci:
name: CI
uses: acidicoala/KoalaBox/.github/workflows/build-and-package.yml@1bdfeefa9933092a747c46679b3d872470ef4998
permissions:
contents: write
with:
arch: '[ 32, 64 ]'
config: Release
modules: '[ "SmokeAPI" ]'
zip_command: >
zip -j $ZIP_NAME
artifacts/*/*.dll
res/SmokeAPI.config.json
res/README.txt
+11
View File
@@ -0,0 +1,11 @@
name: '🚧 Development Build'
on:
push:
branches:
- '**' # This prevents dev builds on tag pushes
jobs:
dev-build:
name: '🚧 Development Build'
uses: acidicoala/SmokeAPI/.github/workflows/matrix-build.yml@master
+18
View File
@@ -0,0 +1,18 @@
name: Matrix Build
on:
workflow_call:
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ Linux, Windows ]
bitness: [ 32, 64 ]
uses: acidicoala/KoalaBox/.github/workflows/build-cmake.yml@master
with:
module: SmokeAPI
os: ${{ matrix.os }}
bitness: ${{ matrix.bitness }}
+20
View File
@@ -0,0 +1,20 @@
name: '🏷️ Tag Release'
on:
push:
tags:
- '*'
jobs:
build-binaries:
name: '🏗️ Build Binaries'
uses: acidicoala/SmokeAPI/.github/workflows/matrix-build.yml@master
create-release:
name: '📦 Create Release'
uses: acidicoala/KoalaBox/.github/workflows/create-release.yml@master
needs: build-binaries
with:
zip_files: >
res/README.txt
res/SmokeAPI.config.json
+1 -1
View File
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" /> <module classpath="CIDR" type="CPP_MODULE" version="4" />
+18
View File
@@ -4,9 +4,16 @@
<w>abcdefghijklmnopqrstuvwxyz</w> <w>abcdefghijklmnopqrstuvwxyz</w>
<w>acidicoala</w> <w>acidicoala</w>
<w>ajaxgetdlclist</w> <w>ajaxgetdlclist</w>
<w>cstring</w>
<w>dlmopen</w> <w>dlmopen</w>
<w>dlopen</w> <w>dlopen</w>
<w>dlsym</w>
<w>dynsym</w>
<w>elfio</w>
<w>endfor</w>
<w>ghcr</w>
<w>indicies</w> <w>indicies</w>
<w>inja</w>
<w>inlinentd</w> <w>inlinentd</w>
<w>isteamapps</w> <w>isteamapps</w>
<w>isteamclient</w> <w>isteamclient</w>
@@ -16,9 +23,20 @@
<w>koality</w> <w>koality</w>
<w>koaloader</w> <w>koaloader</w>
<w>libgtk</w> <w>libgtk</w>
<w>libsteam</w>
<w>memcpy</w>
<w>movabs</w>
<w>movl</w>
<w>peparse</w>
<w>phnt</w>
<w>polyhook</w> <w>polyhook</w>
<w>rtld</w>
<w>simplecpp</w> <w>simplecpp</w>
<w>steamapi</w>
<w>steamapps</w> <w>steamapps</w>
<w>steamclient</w>
<w>winhttp</w>
<w>winmm</w>
<w>wstr</w> <w>wstr</w>
</words> </words>
</dictionary> </dictionary>
+1
View File
@@ -20,4 +20,5 @@
<option name="useRustfmt" value="true" /> <option name="useRustfmt" value="true" />
<option name="version" value="2" /> <option name="version" value="2" />
</component> </component>
<component name="WestSettings"><![CDATA[{}]]></component>
</project> </project>
@@ -1,7 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="exports_generator [32] [linux]" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="FALSE libsteam_api_o $ProjectFileDir$/res/steamworks/*/binaries/linux32/libsteam_api.so $CMakeCurrentGenerationDir$/generated/libsteam_api_exports.cpp" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="exports_generator" CONFIG_NAME="Debug [32]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="exports_generator">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
@@ -1,7 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="exports_generator [64] [win]" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="FALSE steam_api64_o $ProjectFileDir$/res/steamworks/*/binaries/steam_api64.dll $CMakeCurrentGenerationDir$/generated/linker_exports_for_steam_api.h" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="exports_generator" CONFIG_NAME="Debug [32]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="exports_generator">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
@@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="linux_exports_generator [32]" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="--input_libs_glob $ProjectFileDir$/res/steamworks/*/binaries/linux32/libsteam_api.so --output_path $ProjectFileDir$/src/generated/32/proxy_exports" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="linux_exports_generator" CONFIG_NAME="Debug [64]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="linux_exports_generator">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
@@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="linux_exports_generator [64]" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="--input_libs_glob $ProjectFileDir$/res/steamworks/*/binaries/linux64/libsteam_api.so --output_path $ProjectFileDir$/src/generated/64/proxy_exports" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="linux_exports_generator" CONFIG_NAME="Debug [64]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="linux_exports_generator">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
+1 -1
View File
@@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="steamworks_downloader [prompt]" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="$Prompt$" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$ProjectFileDir$/res" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="steamworks_downloader" CONFIG_NAME="Debug [32]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="steamworks_downloader"> <configuration default="false" name="steamworks_downloader [prompt]" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="$Prompt$" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$ProjectFileDir$/res" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="steamworks_downloader" CONFIG_NAME="Debug [64]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="steamworks_downloader">
<method v="2"> <method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method> </method>
+1 -1
View File
@@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="sync" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$ProjectFileDir$" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="sync" CONFIG_NAME="Debug [32]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="sync"> <configuration default="false" name="sync" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$ProjectFileDir$" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="sync" CONFIG_NAME="Debug [64]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="sync">
<method v="2"> <method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method> </method>
@@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="windows_exports_generator [64]" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="--forwarded_dll_name &quot;steam_api64_o&quot; --lib_files_glob &quot;$ProjectFileDir$\res\steamworks\*\binaries\steam_api64.dll&quot; --output_file_path &quot;$CMakeCurrentGenerationDir$\generated\linker_exports_for_steam_api.h&quot; --sources_input_path &quot;&quot;" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="SmokeAPI" TARGET_NAME="windows_exports_generator" CONFIG_NAME="Debug [64]" RUN_TARGET_PROJECT_NAME="SmokeAPI" RUN_TARGET_NAME="windows_exports_generator">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
+40 -24
View File
@@ -1,11 +1,8 @@
cmake_minimum_required(VERSION 3.24) cmake_minimum_required(VERSION 3.24)
project(SmokeAPI VERSION 3.1.3) project(SmokeAPI VERSION 4.1.3)
include(KoalaBox/cmake/KoalaBox.cmake) include(KoalaBox/cmake/KoalaBox.cmake)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DKB_DEBUG)
endif()
add_subdirectory(KoalaBox) add_subdirectory(KoalaBox)
add_subdirectory(tools) add_subdirectory(tools)
@@ -29,8 +26,22 @@ set(SMOKE_API_STATIC_SOURCES
static/smoke_api/steamclient/steamclient.hpp static/smoke_api/steamclient/steamclient.hpp
) )
if(IS_LINUX)
set(GENERATED_SOURCES_DIR src/generated/${BITNESS})
file(MAKE_DIRECTORY ${GENERATED_SOURCES_DIR})
set(GENERATED_SOURCES
${GENERATED_SOURCES_DIR}/proxy_exports.hpp
${GENERATED_SOURCES_DIR}/proxy_exports.cpp
)
foreach(SRC IN LISTS GENERATED_SOURCES)
file(TOUCH ${SRC})
endforeach()
endif()
set(SMOKE_API_SOURCES set(SMOKE_API_SOURCES
${SMOKE_API_STATIC_SOURCES} ${SMOKE_API_STATIC_SOURCES}
${GENERATED_SOURCES}
src/smoke_api/smoke_api.cpp src/smoke_api/smoke_api.cpp
src/smoke_api/smoke_api.hpp src/smoke_api/smoke_api.hpp
src/steam_api/virtuals/isteamapps.cpp src/steam_api/virtuals/isteamapps.cpp
@@ -39,7 +50,6 @@ set(SMOKE_API_SOURCES
src/steam_api/virtuals/isteamhttp.cpp src/steam_api/virtuals/isteamhttp.cpp
src/steam_api/virtuals/isteaminventory.cpp src/steam_api/virtuals/isteaminventory.cpp
src/steam_api/virtuals/isteamuser.cpp src/steam_api/virtuals/isteamuser.cpp
src/steam_api/virtuals/isteamutils.cpp
src/steam_api/virtuals/steam_api_virtuals.hpp src/steam_api/virtuals/steam_api_virtuals.hpp
src/steam_api/steam_client.hpp src/steam_api/steam_client.hpp
src/steam_api/steam_client.cpp src/steam_api/steam_client.cpp
@@ -54,7 +64,6 @@ if(WIN32)
list(APPEND SMOKE_API_SOURCES src/main_win.cpp) list(APPEND SMOKE_API_SOURCES src/main_win.cpp)
else() else()
set_32_and_64(LINUX_DIR linux32 linux64)
set(STEAM_API_MODULE libsteam_api) set(STEAM_API_MODULE libsteam_api)
set(STEAMCLIENT_DLL steamclient) set(STEAMCLIENT_DLL steamclient)
@@ -74,7 +83,6 @@ target_include_directories(SmokeAPI_common INTERFACE
) )
target_link_libraries(SmokeAPI_common INTERFACE KoalaBox $<TARGET_OBJECTS:KoalaBox>) target_link_libraries(SmokeAPI_common INTERFACE KoalaBox $<TARGET_OBJECTS:KoalaBox>)
### Static SmokeAPI ### Static SmokeAPI
add_library(SmokeAPI_static STATIC ${SMOKE_API_STATIC_SOURCES}) add_library(SmokeAPI_static STATIC ${SMOKE_API_STATIC_SOURCES})
@@ -106,23 +114,31 @@ if(WIN32)
configure_linker_exports( configure_linker_exports(
TARGET SmokeAPI TARGET SmokeAPI
HEADER_NAME "linker_exports_for_steam_api.h" HEADER_NAME "linker_exports_for_steam_api.h"
FORWARDED_DLL "${STEAM_API_MODULE}_o" FORWARDED_DLL_NAME "${STEAM_API_MODULE}_o"
INPUT_SOURCES_DIR "" LIB_FILES_GLOB "${CMAKE_CURRENT_SOURCE_DIR}/res/steamworks/*/binaries/${STEAM_API_MODULE}.dll"
DLL_FILES_GLOB "${CMAKE_CURRENT_SOURCE_DIR}/res/steamworks/*/binaries/${STEAM_API_MODULE}.dll" SOURCES_INPUT_PATH ""
) )
configure_linker_exports(
TARGET SmokeAPI set(HEADER_CONTENT "#pragma once\n\n")
HEADER_NAME "linker_exports_for_version.h"
FORWARDED_DLL "C:/Windows/System32/version.dll" foreach(WIN_DLL version winhttp winmm)
INPUT_SOURCES_DIR "" set(HEADER_NAME "linker_exports_for_${WIN_DLL}.h")
DLL_FILES_GLOB "C:/Windows/System32/version.dll" configure_linker_exports(
TARGET SmokeAPI
HEADER_NAME "${HEADER_NAME}"
FORWARDED_DLL_NAME "C:/Windows/System32/${WIN_DLL}.dll"
LIB_FILES_GLOB "C:/Windows/System32/${WIN_DLL}.dll"
SOURCES_INPUT_PATH ""
)
set(HEADER_CONTENT "${HEADER_CONTENT}#include <${HEADER_NAME}>\n")
endforeach()
file(GENERATE
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/generated/linker_exports_for_windows_dlls.h"
CONTENT "${HEADER_CONTENT}"
) )
else()
# configure_linker_exports( # Ignore linker warnings regarding COM-related private exports
# TARGET SmokeAPI set_target_properties(SmokeAPI PROPERTIES LINK_FLAGS "/ignore:4104")
# HEADER_NAME "libsteam_api_exports.cpp"
# FORWARDED_DLL "${STEAM_API_MODULE}_o.so"
# DLL_FILES_GLOB "${CMAKE_CURRENT_SOURCE_DIR}/res/steamworks/*/binaries/${LINUX_DIR}/${STEAM_API_MODULE}.so"
# INPUT_SOURCES_DIR ""
# )
endif() endif()
+154 -21
View File
@@ -3,12 +3,15 @@
# SmokeAPI # SmokeAPI
_Legit DLC Unlocker for Steamworks._
_Legit DLC ownership emulation for Steamworks._
## ✨ Features ## ✨ Features
* `🔓` Emulate DLC ownership in legitimately owned games * `🔓` Emulate DLC ownership in legitimately owned games
* `🛅` Emulate Inventory item ownership * `🛅` Emulate Inventory item ownership
* `📄` Optional configuration
* `🐧` Support for 32-bit and 64-bit Windows and Linux systems
## 🔗 Links ## 🔗 Links
@@ -20,7 +23,7 @@ _Legit DLC Unlocker for Steamworks._
### ❓ What is SmokeAPI? ### ❓ What is SmokeAPI?
SmokeAPI is a DLC unlocker for games that are _legitimately_ owned in your Steam account. SmokeAPI is a tool for Steamworks DLC ownership emulation in games that are _legitimately_ owned in Steam.
It attempts to fool games that use Steamworks SDK (Steamworks) into thinking that you own the game's DLCs. It attempts to fool games that use Steamworks SDK (Steamworks) into thinking that you own the game's DLCs.
However, SmokeAPI does not modify the rest of the Steamworks, hence features like multiplayer, achievements, and so on remain fully functional. However, SmokeAPI does not modify the rest of the Steamworks, hence features like multiplayer, achievements, and so on remain fully functional.
@@ -33,7 +36,10 @@ Therefore, **you have to first research the game's topic**, to see if it support
Additionally, there are several points to bear in mind when it comes to unlocking DLCs with SmokeAPI: Additionally, there are several points to bear in mind when it comes to unlocking DLCs with SmokeAPI:
* SmokeAPI most definitely will not work with games that use 3rd party DRM, such as games from Ubisoft, Rockstar, etc.* SmokeAPI 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.
* SmokeAPI most definitely will not work with games that use 3rd party DRM, such as games from Ubisoft, Rockstar, etc.
* SmokeAPI most likely will not work with games that use Denuvo SecureDLC.
* SmokeAPI 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.
* SmokeAPI will not work with games that employ additional ownership protection or if the game is using alternative DLC verification mechanism. * SmokeAPI will not work with games that employ additional ownership protection or if the game is using alternative DLC verification mechanism.
* SmokeAPI 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. * SmokeAPI 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 SmokeAPI, 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 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 SmokeAPI, 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.
@@ -66,13 +72,13 @@ SmokeAPI supports **2** installation modes: _Hook mode_ and _Proxy mode_.
- **Advantages**: - **Advantages**:
- Guaranteed to load - Guaranteed to load
- **Disadvantages**: - **Disadvantages**:
- Might need reinstallation aftera game update - Might need reinstallation after a game update
My advice is to try installing the unlocker in hook mode first. 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 it doesn't work, try installing it in proxy mode instead.
If that didn't work, refer to the _Troubleshooting_ section below. If that didn't work, refer to the _Troubleshooting_ section below.
## 🛠 Installation instructions ## 🛠 Installation instructions (🪟 Windows)
> [!NOTE] > [!NOTE]
> To determine the bitness of a game you can open _Task Manager_, navigate to _Details_ tab, > To determine the bitness of a game you can open _Task Manager_, navigate to _Details_ tab,
@@ -81,37 +87,47 @@ If that didn't work, refer to the _Troubleshooting_ section below.
### 🪝 Hook mode ### 🪝 Hook mode
Hook mode itself has two sub-modes: Self-Hook and Hook with injector.
#### 🪝 Self-Hook mode
In self-hook mode SmokeAPI is injected automatically without the help of third-party injectors.
It works best when a game doesn't have any protections against DLL injection.
The main advantage of this mode is its minimal setup, which adds only 1 new DLL to the game folder.
- Download the [latest SmokeAPI release zip]. - Download the [latest SmokeAPI release zip].
- From this downloaded zip extract `SmokeAPI32.dll` or `SmokeAPI64.dll`, depending on a game's bitness. - From this downloaded zip extract `smoke_api32.dll` or `smoke_api64.dll`, depending on a game's bitness.
- Rename the unzipped DLL to `version.dll`. - Rename the unzipped DLL to `version.dll` or `winhttp.dll` or `winmm.dll`.
- Place this `version.dll` next to the game's `.exe` file. - Place this `version.dll` or `winhttp.dll` or `winmm.dll` next to the game's `.exe` file.
#### 🪝 Hook mode with Koaloader #### 🪝 Hook mode with Koaloader
If a game doesn't load If a game doesn't load `version.dll` or `winhttp.dll` or `winmm.dll`, you can use an alternative injector to load
`version.dll`, you can use an alternative injector to load SmokeAPI into the game process. SmokeAPI into the game process.
One such injector is [Koaloader], which supports different DLLs that a typical game might load. One such injector is [Koaloader], which supports different DLLs that a typical game might load.
For example, assuming that the game loads `winmm.dll`: For example, assuming that the game loads `d3d11.dll`:
- Install Koaloader: - Install Koaloader:
- Download the [latest Koaloader release zip]. - 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. - From this downloaded zip extract `d3d11.dll` from `d3d11-32` or `d3d11-64`, depending on a game's bitness.
- Place `winmm.dll` next to the game's `.exe` file. - Place `d3d11.dll` next to the game's `.exe` file.
- Install SmokeAPI - Install SmokeAPI
- Download the [latest SmokeAPI release zip]. - Download the [latest SmokeAPI release zip].
- From this downloaded zip extract `SmokeAPI32.dll` or `SmokeAPI64.dll`, depending on a game's bitness. - From this downloaded zip extract `smoke_api32.dll` or `smoke_api64.dll`, depending on a game's bitness.
- Place `SmokeAPI32.dll` or `SmokeAPI64.dll` next to the game's `.exe` file. - Place `smoke_api32.dll` or `smoke_api64.dll` next to the game's `.exe` file.
#### 🪝 Hook mode with Special K #### 🪝 Hook mode with Special K
There are games which have extra protections that break hook mode. There are games which have extra protections that break hook mode.
In such cases, it might be worth trying [Special K], which can inject SmokeAPI as a [custom plugin]. In such cases, it might be worth trying [Special K], which can inject SmokeAPI as a [custom plugin].
---
### 🔀 Proxy mode ### 🔀 Proxy mode
- Find a `steam_api.dll` or `steam_api64.dll` file in game directory, and rename it to `steam_api_o.dll` or `steam_api64_o.dll`. - Find a `steam_api.dll` or `steam_api64.dll` file in game directory, and rename it to `steam_api_o.dll` or `steam_api64_o.dll`.
- Download the [latest SmokeAPI release zip]. - Download the [latest SmokeAPI release zip].
- From this downloaded zip extract `SmokeAPI32.dll` or `SmokeAPI64.dll`, depending on a game's bitness. - From this downloaded zip extract `smoke_api32.dll` or `smoke_api64.dll`, depending on a game's bitness.
- Rename this extracted DLL to `steam_api.dll` or `steam_api64.dll`, depending on a game's bitness. - Rename this extracted DLL to `steam_api.dll` or `steam_api64.dll`, depending on a game's bitness.
- Place this renamed unlocker DLL next to the `steam_api_o.dll` or `steam_api64_o.dll` file. - Place this renamed unlocker DLL next to the `steam_api_o.dll` or `steam_api64_o.dll` file.
@@ -120,6 +136,102 @@ In such cases, it might be worth trying [Special K], which can inject SmokeAPI a
[Special K]: https://www.special-k.info [Special K]: https://www.special-k.info
[custom plugin]: https://wiki.special-k.info/en/SpecialK/Tools#custom-plugin [custom plugin]: https://wiki.special-k.info/en/SpecialK/Tools#custom-plugin
## 🛠️ Installation instructions (🐧 Linux)
> [!NOTE]
> Linux support in SmokeAPI is highly experimental/unstable and has known issues.
> If none of the methods below work for you, then consider running a Windows version of a game
> via Proton compatibility layer and follow the instructions in the Windows section.
### ✔️ Requirements
Linux builds of SmokeAPI depend on several libraries. These libraries are usually included in the
[Steam Linux Runtime 3.0 (sniper)](https://github.com/ValveSoftware/steam-runtime#readme),
so nothing is required to be installed on the system. But when launching a game directly via its executable
(such as in case of hook mode) your system needs to have the following required libraries installed.
The following list features links in Arch Linux repositories, but if you are using a different distribution,
you should use the equivalent package for your distro.
Required libraries:
- [gcc-libs](https://archlinux.org/packages/core/x86_64/gcc-libs/)
[[32-bit](https://archlinux.org/packages/core/x86_64/lib32-gcc-libs/)]
- [glibc](https://archlinux.org/packages/core/x86_64/glibc/)
[[32-bit](https://archlinux.org/packages/core/x86_64/lib32-glibc/)]
- [libidn2](https://archlinux.org/packages/core/x86_64/libidn2/)
[[32-bit](https://archlinux.org/packages/multilib/x86_64/lib32-libidn2/)]
- [libnghttp2](https://archlinux.org/packages/core/x86_64/libnghttp2/)
[[32-bit](https://archlinux.org/packages/multilib/x86_64/lib32-libnghttp2/)]
- [zlib](https://archlinux.org/packages/core/x86_64/zlib/)
[[32-bit](https://archlinux.org/packages/multilib/x86_64/lib32-zlib/)]
- [zstd](https://archlinux.org/packages/core/x86_64/zstd/)
[[32-bit](https://archlinux.org/packages/multilib/x86_64/lib32-zstd/)]
Optional libraries:
- [gtk3](https://archlinux.org/packages/extra/x86_64/gtk3/)
[[32-bit](https://archlinux.org/packages/multilib/x86_64/lib32-gtk3/)]
---
Just like on Windows, SmokeAPI features 32 and 64-bit Linux builds.
In release archive they are named as `libsmoke_api32.so` or `libsmoke_api64.so` respectively.
However, unlike Windows, it is recommended to use proxy mode, rather than hook mode.
This is because the current hook mode installation method has to directly launch game
executable. However, by default Steam doesn't do that, instead it launches certain wrappers
that setup game environment with optimal parameters. Hence, launching a game without those
wrappers might cause issues in theory. However, in practice real tests show that hook mode has higher
chance of success compared to proxy mode. So, at the end of the day, try both modes to see which one works
best for you.
### 🔀 Proxy mode (🐧 Linux)
Same as on Windows:
1. Rename the original `libsteam_api.so` to `libsteam_api_o.so`
2. Extract and paste the `libsmoke_api32.so` or `libsmoke_api64.so` to the same directory, renaming it to `libsteam_api.so`.
### 🪝 Hook mode (🐧 Linux)
Linux doesn't have the same easily exploitable library injection mechanism that Windows has.
However, it is possible to force any Linux executable to load any library by using the
`LD_PRELOAD` environment variable. In fact, Steam itself already uses that to inject its overlay,
hence we can use it as well. But we have to include that overlay library as well when specifying
`LD_PRELOAD`, otherwise the game will be launched with SmokeAPI, but without Steam overlay.
For example:
1. Extract and paste the `libsmoke_api32.so` or `libsmoke_api64.so` in the root of game's installation directory.
2. In Steam _Library_ open game's _Properties_, switch to the _General_ tab, and set the following _LAUNCH OPTIONS_:
| Bitness | Launch Options |
|---------|---------------------------------------------------------------------------------------------------------------------------------|
| 32-bit | `LD_PRELOAD="./libsmoke_api32.so $HOME/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so" ./<GameExe32> ; exit ; %command%` |
| 64-bit | `LD_PRELOAD="./libsmoke_api64.so $HOME/.local/share/Steam/ubuntu12_64/gameoverlayrenderer.so" ./<GameExe64> ; exit ; %command%` |
Where `<GameExe32>` and `<GameExe64>` correspond to the actual filename of the game executable. For example:
- `TheEscapists2.x86` (32-bit)
- `TheEscapists2.x86_64` (64-bit)
- `_linux/darkest.bin.x86` (32-bit)
- `_linux/darkest.bin.x86_64` (64-bit)
- `eurotrucks2` (64-bit)
- `binaries/victoria3` (64-bit)
And so on. Notice that Linux executables do not have `.exe` extension like on Windows, so make sure to copy the entire
file name as it is. Naturally, the exact options might change depending on where files are located on your filesystem
and other environment variables you might have specified previously.
If you have other environment variables, and you don't know how to correctly combine them,
then please make extensive use of search engines and LLMs for guidance and examples
before seeking help the official forum topic.
> [!NOTE]
> The `; exit ; %command%` at the end of launch options
> is a trick used to force Steam to directly run the game executable.
## ⚙ Configuration ## ⚙ Configuration
SmokeAPI does not require any manual configuration. SmokeAPI does not require any manual configuration.
@@ -171,7 +283,7 @@ Below you can find an example config where nearly every option has been customiz
```json ```json
{ {
"$schema": "https://raw.githubusercontent.com/acidicoala/SmokeAPI/refs/tags/v3.1.2/res/SmokeAPI.schema.json", "$schema": "https://raw.githubusercontent.com/acidicoala/SmokeAPI/refs/tags/v4.0.0/res/SmokeAPI.schema.json",
"$version": 4, "$version": 4,
"logging": true, "logging": true,
"log_steam_http": true, "log_steam_http": true,
@@ -208,11 +320,12 @@ Below you can find an example config where nearly every option has been customiz
``` ```
</details> </details>
## 🎓 Extra info ## 🎓 Extra info
### 🔑 How SmokeAPI works in games with large number of DLCs ### 🔑 How SmokeAPI works in games with large number of DLCs
Some games that have a large number of DLCs begin ownership verification by querying the Steamworks API for a list of all available DLCs. Some the games that have a large number of DLCs begin ownership verification by querying the Steamworks API for a list of all available DLCs.
Once the game receives the list, it will go over each item and check the ownership. Once the game receives the list, it will go over each item and check the ownership.
The issue arises from the fact that response from Steamworks SDK may max out at 64, depending on how much unowned DLCs the user has. The issue arises from the fact that response from Steamworks SDK may max out at 64, depending on how much unowned DLCs the user has.
To alleviate this issue, SmokeAPI will make a web request to Steam API for a full list of DLCs, which works well most of the time. To alleviate this issue, SmokeAPI will make a web request to Steam API for a full list of DLCs, which works well most of the time.
@@ -230,6 +343,11 @@ They will be added to the list of missing DLC IDs to facilitate config-less oper
[extra DLCs]: https://github.com/acidicoala/public-entitlements/blob/main/steam/v2/dlc.json [extra DLCs]: https://github.com/acidicoala/public-entitlements/blob/main/steam/v2/dlc.json
### 🔢 Supported Steamworks SDK versions
SmokeAPI aims to support all Steamworks SDK version.
At the time of writing, the latest supported version is **1.63**.
## 🔧 Troubleshooting ## 🔧 Troubleshooting
### 🔐 DLCs are not unlocked ### 🔐 DLCs are not unlocked
@@ -254,10 +372,10 @@ If you have made sure that you picked the right DLL for Koaloader, then try addi
### 💥 The game is crashing ### 💥 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](https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads) If the game is crashing or not opening as expected after installing an unlocker, then try to download and install the [Latest supported Visual C++ Redistributable version](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-supported-redistributable-version)
<details><summary>Download page</summary> <details><summary>Download page screenshot</summary>
![Download page](https://i.ibb.co/n6K0X27/redist.jpg) ![Download page](https://i.ibb.co/PZBXqHpB/vc-redist.jpg)
</details> </details>
## 🏗️ Building from source ## 🏗️ Building from source
@@ -290,8 +408,17 @@ For example:
``` ```
[Visual Studio Build Tools 2022]: https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022 [Visual Studio Build Tools 2022]: https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022
[CMake]: https://cmake.org/ [CMake]: https://cmake.org/
### 🆕 Adding support for new Steamworks SDK
- Run `steamworks_downloader [prompt]` providing directory which contains Steamworks SDK zip files.
- Run `steamworks_parser`
- Run `linux_exports_generator [32]`
- Run `linux_exports_generator [64]`
## 📚 Acknowledgments ## 📚 Acknowledgments
This project makes use of the following open source projects: This project makes use of the following open source projects:
@@ -307,12 +434,18 @@ This project makes use of the following open source projects:
- [microsoft/wil](https://github.com/microsoft/wil) - [microsoft/wil](https://github.com/microsoft/wil)
- [p-ranav/glob](https://github.com/p-ranav/glob) - [p-ranav/glob](https://github.com/p-ranav/glob)
- [pantor/inja](https://github.com/pantor/inja) - [pantor/inja](https://github.com/pantor/inja)
- [jarro2783/cxxopts](https://github.com/jarro2783/cxxopts)
- [serge1/ELFIO](https://github.com/serge1/ELFIO)
- [Mbed-TLS/mbedtls](https://github.com/Mbed-TLS/mbedtls)
- [bshoshany/thread-pool](https://github.com/bshoshany/thread-pool) - [bshoshany/thread-pool](https://github.com/bshoshany/thread-pool)
- [batterycenter/embed](https://github.com/batterycenter/embed) - [batterycenter/embed](https://github.com/batterycenter/embed)
## 📄 License ## 📄 License
This software is licensed under the [Unlicense](https://unlicense.org), This software is licensed under the [Unlicense](https://unlicense.org),
terms of which are available in [UNLICENSE.txt](UNLICENSE.txt). terms of which are available in [UNLICENSE.txt](UNLICENSE.txt).
[Koaloader]: https://github.com/acidicoala/Koaloader [Koaloader]: https://github.com/acidicoala/Koaloader
+20 -11
View File
@@ -1,24 +1,24 @@
{% extends "./KoalaBox/templates/README.base.md" %} {% extends "./KoalaBox/templates/README.base.md" %}
{% block content %} {% block content %}
_Legit DLC Unlocker for Steamworks._ _Legit DLC ownership emulation for Steamworks._
## ✨ Features ## ✨ Features
* `🔓` Emulate DLC ownership in legitimately owned games * `🔓` Emulate DLC ownership in legitimately owned games
* `🛅` Emulate Inventory item ownership * `🛅` Emulate Inventory item ownership
* `📄` Optional configuration
* `🐧` Support for 32-bit and 64-bit Windows and Linux systems
{% include "KoalaBox/templates/markdown/links.md" %} {% include "KoalaBox/templates/markdown/links.md" %}
{% include "KoalaBox/templates/markdown/intro.md" %} {% include "KoalaBox/templates/markdown/intro.md" %}
{% include "KoalaBox/templates/markdown/usage.md" %} {% include "KoalaBox/templates/markdown/usage.md" %}
{% include "KoalaBox/templates/markdown/install-win.md" %}
{% include "KoalaBox/templates/markdown/installation.md" %} {% include "KoalaBox/templates/markdown/install-linux.md" %}
{% include "KoalaBox/templates/markdown/configuration.md" %} {% include "KoalaBox/templates/markdown/configuration.md" %}
@@ -26,7 +26,7 @@ _Legit DLC Unlocker for Steamworks._
### 🔑 How SmokeAPI works in games with large number of DLCs ### 🔑 How SmokeAPI works in games with large number of DLCs
Some games that have a large number of DLCs begin ownership verification by querying the Steamworks API for a list of all available DLCs. Some the games that have a large number of DLCs begin ownership verification by querying the Steamworks API for a list of all available DLCs.
Once the game receives the list, it will go over each item and check the ownership. Once the game receives the list, it will go over each item and check the ownership.
The issue arises from the fact that response from Steamworks SDK may max out at 64, depending on how much unowned DLCs the user has. The issue arises from the fact that response from Steamworks SDK may max out at 64, depending on how much unowned DLCs the user has.
To alleviate this issue, SmokeAPI will make a web request to Steam API for a full list of DLCs, which works well most of the time. To alleviate this issue, SmokeAPI will make a web request to Steam API for a full list of DLCs, which works well most of the time.
@@ -44,15 +44,24 @@ They will be added to the list of missing DLC IDs to facilitate config-less oper
[extra DLCs]: https://github.com/acidicoala/public-entitlements/blob/main/steam/v2/dlc.json [extra DLCs]: https://github.com/acidicoala/public-entitlements/blob/main/steam/v2/dlc.json
{% include "KoalaBox/templates/markdown/troubleshooting.md" %} ### 🔢 Supported Steamworks SDK versions
{{ project_name }} aims to support all Steamworks SDK version.
At the time of writing, the latest supported version is **1.63**.
{% include "KoalaBox/templates/markdown/troubleshooting.md" %}
{% include "KoalaBox/templates/markdown/building.md" %} {% include "KoalaBox/templates/markdown/building.md" %}
### 🆕 Adding support for new Steamworks SDK
{% include "KoalaBox/templates/markdown/acknowledgements.md" %} - Run `steamworks_downloader [prompt]` providing directory which contains Steamworks SDK zip files.
{% block extra_oss_libs %} - Run `steamworks_parser`
- [bshoshany/thread-pool](https://github.com/bshoshany/thread-pool) - Run `linux_exports_generator [32]`
- Run `linux_exports_generator [64]`
{% include "KoalaBox/templates/markdown/acknowledgements.md" %}{% block extra_oss_libs %}- [bshoshany/thread-pool](https://github.com/bshoshany/thread-pool)
- [batterycenter/embed](https://github.com/batterycenter/embed) - [batterycenter/embed](https://github.com/batterycenter/embed)
{% endblock %}
{% endblock %} {% endblock %}
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"$schema": "https://raw.githubusercontent.com/acidicoala/SmokeAPI/refs/tags/v3.1.2/res/SmokeAPI.schema.json", "$schema": "https://raw.githubusercontent.com/acidicoala/SmokeAPI/refs/tags/v4.0.0/res/SmokeAPI.schema.json",
"$version": 4, "$version": 4,
"logging": true, "logging": true,
"log_steam_http": false, "log_steam_http": false,
+3 -3
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/acidicoala/SmokeAPI/refs/tags/v3.1.2/res/SmokeAPI.schema.json", "$id": "https://raw.githubusercontent.com/acidicoala/SmokeAPI/refs/tags/v4.0.0/res/SmokeAPI.schema.json",
"title": "SmokeAPI configuration", "title": "SmokeAPI configuration",
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@@ -20,8 +20,8 @@
"logging": { "logging": {
"type": "boolean", "type": "boolean",
"default": false, "default": false,
"x-packaged-default": true,
"description": "Enables logging to SmokeAPI.log.log file.", "description": "Enables logging to SmokeAPI.log.log file.",
"x-packaged-default": true,
"x-valid-values": "`true` or `false`." "x-valid-values": "`true` or `false`."
}, },
"log_steam_http": { "log_steam_http": {
@@ -120,7 +120,7 @@
}, },
"examples": [ "examples": [
{ {
"$schema": "https://raw.githubusercontent.com/acidicoala/SmokeAPI/refs/tags/v3.1.2/res/SmokeAPI.schema.json", "$schema": "https://raw.githubusercontent.com/acidicoala/SmokeAPI/refs/tags/v4.0.0/res/SmokeAPI.schema.json",
"$version": 4, "$version": 4,
"logging": true, "logging": true,
"log_steam_http": true, "log_steam_http": true,
+1 -1
View File
@@ -1,4 +1,4 @@
#pragma once #pragma once
#define STEAM_API_MODULE "${STEAM_API_MODULE}" #define STEAM_API_MODULE "${STEAM_API_MODULE}"
#define STEAMCLIENT_DLL "${STEAMCLIENT_DLL}" #define STEAMCLIENT_DLL "${STEAMCLIENT_DLL}"
+4468 -4272
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More