How acidicoala/smokeapi works
SmokeAPI is a Steamworks compatibility layer that emulates DLC and inventory ownership checks in legitimately owned games while leaving other Steamworks behavior intact. The documented workflow is game launch/loading, interception of Steamworks calls through hook or proxy mode, then ownership responses to the game. CMake identifies runtime entry points and API/interface source files, but their implementation was not sampled, so internal call wiring is intentionally limited. Optional configuration is documented, though its implementation path is not established by the excerpts.
Main entry points: api.cpp Steam API Facade · smoke_api.cpp SmokeAPI Runtime · main_win.cpp Windows Entry · main_linux.cpp Linux Entry
Components 16
Runtime Loading
- Windows Entry
src/main_win.cpp - Linux Entry
src/main_linux.cpp - SmokeAPI Runtime
src/smoke_api/smoke_api.cpp - Hook Mode
- Proxy Mode
Ownership Emulation
- Inventory Interface
static/smoke_api/interfaces/steam_inventory.cpp - DLC Ownership
src/steam_api/virtuals/isteamapps.cpp - Inventory Ownership
static/smoke_api/interfaces/steam_inventory.cpp - Runtime Cache
static/smoke_api/cache.hpp - Optional Configuration
Steamworks Compatibility
- Steam API Facade
static/smoke_api/api.cpp - App Interface
static/smoke_api/interfaces/steam_apps.cpp - User Interface
static/smoke_api/interfaces/steam_user.cpp - HTTP Interface
static/smoke_api/interfaces/steam_http.cpp - Steamworks SDK
res/steamworks/122/headers/steam/isteamapps.h
Other components
- Game Process
Connections 13
- Game Process → Windows Entry: loads on Windows
- Game Process → Linux Entry: loads on Linux
- Hook Mode → SmokeAPI Runtime: loads runtime
- Proxy Mode → SmokeAPI Runtime: loads runtime
- SmokeAPI Runtime → Steam API Facade: exposes API
- Steam API Facade → Steamworks SDK: presents compatibility
- Game Process → Steam API Facade: calls Steamworks
- Steam API Facade → DLC Ownership: handles DLC checks
- Steam API Facade → Inventory Ownership: handles inventory checks
- Steam API Facade → App Interface: uses app interface
- Steam API Facade → User Interface: uses user interface
- Steam API Facade → HTTP Interface: uses HTTP interface
- Steam API Facade → Inventory Interface: uses inventory interface