* add `-def1` ... `-def5` arguments, which can be used to generate your preferred custom config if no `-def` argument is provided, `-def1` will be used by default, to automatically copy from the following folders: * `.\_DEFAULT\0` ............... essential emu files, like latest GSE dlls (*steam_api.dll* and *steam_api64.dll*) * `.\_DEFAULT\1` ............... other GSE files and folders, including default ini files * `.\_DEFAULT\<appid>` ... other GSE files and folders, but only for the current `<appid>`, if the folder exists * (Windows only) add some useful helper tools, written in *AutoIt3*: * **gse_acw_helper.exe** - add the required achievements schema db files for *Achievement Watcher*, if .\steam_misc\extra_acw\extra_acw.zip file exists (if generated by `generate_emu_config.exe -acw <appid>`) * **gse_debug_switch.exe** - automatically switch between release and debug versions of the emulator, if *steam_api.7z* / *steam_api64.7z* file exists (or *steamclient.7z* / *steamclient64.7z*, if you use the steamclient version) paths to release and debug files inside 7z, can be customized in .\steam_misc\tools\au3\scripts\gse_debug_switch.ini * **gse_generate_interfaces.exe** - simple x64-x86 launcher for *generate_interfaces.exe* it also writes all found steam interfaces to CODEX *steam_emu.ini* (if generated by `generate_emu_config -cdx <appid>`) make sure to name your original dll to one of these formats, so it can automatically find its interfaces: * `valve_api.dll / valve_api64.dll` * `steam_api.dll.bak / steam_api64.dll.bak` or `steam_api.dll.org / steam_api64.dll.org` * `steam_api.bak / steam_api64.bak` or `steam_api.org / steam_api64.org` * `steam_api_orig.dll / steam_api64_orig.dll` or `steam_api_legit.dll / steam_api64_legit.dll` * **gse_lobby_connect.exe** - simple x64-x86 launcher for *lobby_connect.exe* * new folder structure, compatible with current and future helper tools --- default arguments are `-acw -cdx -clr <appid>` NEVER delete `.\steam_misc\app_backup`, `.\steam_misc\app_info`, `.\steam_misc\tools` and `.\steam_settings` folders MIGHT need `.\steam_misc\extra_acw` and `.\steam_misc\extra_cdx` for compatibility with Achievement Watcher and CODEX * add `-scx` argument to automatically download images / videos for trading cards, backgrounds, badges, emoticons and other tradable items unfortunately I couldn't find any direct steam api method to download the files, so I had to write a rudimentary web scrapper to extract the download links from a third-party website, hence the *scx_gen.py* script might need updating in the future if the website design changes * download screenshots and videos: * download thumbnails for both screenshots and videos, and compress them to `.zip` files * screenshots and videos are now numbered from first to last published, as in the Steam store page * add `-vids_low` / `-vids_max` arguments to download all videos, in low and / or high quality * create / update .\\*top_owners_ids.txt* when .\\*top_owners_ids.html* is present * generate controller action sets txt files for all found controller vdf configs, and zip them inside .\steam_misc\app_backup\app_backup.zip by default, the emu supports only `xboxone` and `xbox360` controller configs, though if the're are any issues with the default supported controller action sets inside .\steam_settings\controller folder, you could try to unpack and overwrite action sets for other unsupported controller configs * (Windows only) add *AdvancedRun* launchers (cmd console + silent) for `.bat` files and `.py` scripts * **[alex47exe]** major overhaul of **migrate_gse** - uses the same `.\_DEFAULT\0` and `.\_DEFAULT\1` folder structure for default configs it can convert old `.txt` format to `.ini` format, minus *branches.json*, which would require using *top_owners_ids.txt* and some login code from **generate_emu_config**, which should actually be used to properly generate the config files, instead of converting from the old `.txt` format * [alex47exe] *generate_interfaces.exe* - find all Steam Interfaces instead of only old ones the emu will ignore the ones it doesn't require, while we'll have the complete list to write it to CODEX *steam_emu.ini* * [alex47exe] *lobby_connect.exe* - improve cmd console text alignment * [alex47exe] `mods_img` instead of `mod_images` (better folder consistency), better example for `mods_img`, minor tweaks to `.ini` and `.md` files
119 lines
3.6 KiB
C++
119 lines
3.6 KiB
C++
#include <regex>
|
|
#include <string>
|
|
#include <fstream>
|
|
#include <streambuf>
|
|
#include <iostream>
|
|
#include <filesystem>
|
|
|
|
// these are defined in dll.cpp at the top like this:
|
|
// static char old_xxx[128] = ...
|
|
|
|
const static std::vector<std::string> interface_patterns = {
|
|
R"(STEAMAPPLIST_INTERFACE_VERSION\d+)",
|
|
R"(STEAMAPPS_INTERFACE_VERSION\d+)",
|
|
R"(STEAMAPPTICKET_INTERFACE_VERSION\d+)",
|
|
R"(SteamClient\d+)",
|
|
R"(SteamController\d+)",
|
|
R"(SteamFriends\d+)",
|
|
R"(SteamGameCoordinator\d+)",
|
|
R"(SteamGameServerStats\d+)",
|
|
R"(SteamGameServer\d+)",
|
|
R"(SteamGameStats\d+)",
|
|
R"(STEAMHTMLSURFACE_INTERFACE_VERSION_\d+)",
|
|
R"(STEAMHTTP_INTERFACE_VERSION\d+)",
|
|
R"(SteamInput\d+)",
|
|
R"(STEAMINVENTORY_INTERFACE_V\d+)",
|
|
R"(SteamMasterServerUpdater\d+)",
|
|
R"(SteamMatchGameSearch\d+)",
|
|
R"(SteamMatchMakingServers\d+)",
|
|
R"(SteamMatchMaking\d+)",
|
|
R"(STEAMMUSIC_INTERFACE_VERSION\d+)",
|
|
R"(STEAMMUSICREMOTE_INTERFACE_VERSION\d+)",
|
|
R"(SteamNetworkingMessages\d+)",
|
|
R"(SteamNetworkingSocketsSerialized\d+)",
|
|
R"(SteamNetworkingSockets\d+)",
|
|
R"(SteamNetworkingUtils\d+)",
|
|
R"(SteamNetworking\d+)",
|
|
R"(STEAMPARENTALSETTINGS_INTERFACE_VERSION\d+)",
|
|
R"(SteamParties\d+)",
|
|
R"(STEAMREMOTEPLAY_INTERFACE_VERSION\d+)",
|
|
R"(STEAMREMOTESTORAGE_INTERFACE_VERSION\d+)",
|
|
R"(STEAMSCREENSHOTS_INTERFACE_VERSION\d+)",
|
|
R"(STEAMTIMELINE_INTERFACE_V\d+)",
|
|
R"(STEAMTV_INTERFACE_V\d+)",
|
|
R"(STEAMUGC_INTERFACE_VERSION\d+)",
|
|
R"(STEAMUNIFIEDMESSAGES_INTERFACE_VERSION\d+)",
|
|
R"(STEAMUSERSTATS_INTERFACE_VERSION\d+)",
|
|
R"(SteamUser\d+)",
|
|
R"(SteamUtils\d+)",
|
|
R"(STEAMVIDEO_INTERFACE_V\d+)"
|
|
};
|
|
|
|
unsigned int findinterface(
|
|
std::ofstream &out_file,
|
|
const std::string &file_contents,
|
|
const std::string &interface_patt)
|
|
{
|
|
std::regex interface_regex(interface_patt);
|
|
auto begin = std::sregex_iterator(file_contents.begin(), file_contents.end(), interface_regex);
|
|
auto end = std::sregex_iterator();
|
|
|
|
unsigned int matches = 0;
|
|
for (std::sregex_iterator i = begin; i != end; ++i) {
|
|
std::smatch match = *i;
|
|
std::string match_str = match.str();
|
|
out_file << match_str << std::endl;
|
|
++matches;
|
|
}
|
|
|
|
return matches;
|
|
}
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
std::cout << "Generate_Interfaces.exe for Goldberg Steam Emulator " << std::endl << std::endl;
|
|
|
|
if (argc < 2) {
|
|
std::cerr << "Usage: " << argv[0] << " <path to steam_api .dll or .so>" << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
std::ifstream steam_api_file(std::filesystem::u8path(argv[1]), std::ios::binary);
|
|
if (!steam_api_file.is_open()) {
|
|
std::cerr << "Error opening file" << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
std::string steam_api_contents(
|
|
(std::istreambuf_iterator<char>(steam_api_file)),
|
|
std::istreambuf_iterator<char>());
|
|
steam_api_file.close();
|
|
|
|
if (steam_api_contents.size() == 0) {
|
|
std::cerr << "Error loading data" << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
std::cout << "Please wait... Generating steam_interfaces.txt" << std::endl << std::endl;
|
|
|
|
unsigned int total_matches = 0;
|
|
std::ofstream out_file(std::filesystem::u8path("steam_interfaces.txt"));
|
|
if (!out_file.is_open()) {
|
|
std::cerr << "Error opening output file" << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
for (const auto &patt : interface_patterns) {
|
|
total_matches += findinterface(out_file, steam_api_contents, patt);
|
|
std::cout << "Searching for '" + patt + "'..." << std::endl;
|
|
}
|
|
out_file.close();
|
|
|
|
if (total_matches == 0) {
|
|
std::cerr << "No interfaces were found" << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|