* update the tool `generate_emu_config` to generate a new file `steam_settings/branches.json` which contain all info about the branches of the game, needed by SDK v1.60
this json file could be put inside the global settings folder, but **not recommended**, it is meant to be generated per-game basis
* deprecate the setting `build_id` in `configs.app.ini`, the user selected branch (`branch_name`) is now used to grab the build id of that branch from `branches.json`.
if no `branch_name` is specified, the emu will use the default branch called `public`.
if `branches.json` is missing the `public` branch, the emu will force add it in memory with a default build id = 10
* add new properties to `mods.json`:
-`min_game_branch`
-`max_game_branch`
-`total_files_sizes`
unclear how they're used for now, but they're introduced in SDK v1.60
* add a somewhat useless/stub implementation for the new interface `ISteamTimeline001` (introduced in SDK v1.60), could be extended later to interact with the built-in overlay or save the info to disk for external applications to listen to events
* add a new option `allow_unknown_stats` in `configs.main.ini` to allow games to change unknown stats.
the emu by default rejects any changes to a stat not mentioned inside `steam_settings/stats.txt`, this option allows these changes
* add a new option `save_only_higher_stat_achievement_progress` in `configs.main.ini` and enable it by default.
this option will prevent the emu from updating the progress of any achievement due to a stat change/update, if the new value is less than or equal the current one.
this solves an overlay spam problem and avoids *some* useless disk write operations.
unfortunately some games abuse stats and update them a lot during gameplay with useless and disposable values, this will cause a lot of disk write operations and cannot be avoided unless you remove the definition of that stat from `steam_settings/stats.txt`, or avoiding that definition file altogether and forget about stats
* fix a problem when searching for the user selected language during the initialization of the overlay, leading to invalid language selection in some cases
* fix a potential problem when searching for the user selected language in the achievements schema, which might lead to invalid language selection in some cases
* fix a problem with `utf-8` path handling in ColdClientLoader for Windows, also fix more `utf-8` related problems in the emu and use the library `utfcpp` to convert `utf8`<--->`utf16` strings instead of using Win32 APIs
* in `Steam_User_Stats::ResetAllStats()` reset the achievement `progress` only if it was defined in the original schema in `steam_settings/achievements.json`
* implement a new debug logger to fix a problem where the debug log wasn't being generated when the path contained non-Latin characters.
* re-wrote the code of ColdClientLoader for Windows to use the library `SimpleIni` like the emu instead of relying on Win32 APIs, much easier and intuitive
you need `stats.txt` and `achievements.json` inside your local `steam_settings` folder for this feature to work properly
* fix an old problem where games would crash on exit if the overlay was enabled, more prominent in `DirectX 12` games, also set the overlay hook procedure to an empty function before cleaning up the overlay
* remove an invalid condition when resetting stats, only write to disk and share values with any gameserver if the stat value isn't already the default
* add a try-catch block when initializing `current progress` and `max progress` during user achievements construction since they throw exception for achievements without progress
* always trigger `UserStatsStored_t` and `UserAchievementStored_t` callbacks in `Steam_User_Stats::IndicateAchievementProgress()` even if the value wasn't updated, games my halt otherwise
* return false in `Steam_User_Stats::GetAchievementProgressLimits()` if the achievement has no progress
* remove invalid code in the overlay which made it ignore the background transparency/alpha set by the user (`Background_A=0.55`) in `configs.overlay.ini`, also fixed some internal defaults
* fix a mistake in the overlay where the achievement description wasn't being set before posting the notification, the notification message/string is needed to calculate the height dynamically
* remove an irritating transparency effect in the overlay which was added to all popup windows (settings, achievements list, etc...) making the text blended with the game's scene and unclear
* allow specifying various notifications durations for the overlay, these are the new values in `configs.overlay.ini`
you can set these values in the global settings, just like all the other settings in all `.ini` files
you can also override them per-game by modifying your local `steam_settings/configs.overlay.ini`
* for Windows `ColdClientLoader`: if the file `load_order.txt` is used, then only load the files mentioned with their respective order, otherwise load all valid PE files as usual
this allows placing PE files (beside your target .dll) that are not supposed to be loaded early, or handled later by your .dll
* avoid setting an early/initial window size and position for the overlay, only at the relevant place (slight optimization)
* replace the overlay example font (in `steam_settings.EXAMPLE/fonts.EXAMPLE/`) with Google's `Roboto` medium, the built-in one is still the same!
* in the overlay show the warning for bad appid only once until the user closes this warning
* the emu will now terminate the process and generate a file called `EMU_MISSING_INTERFACE.txt` (beside the library) if an app requested a missing interface
* reduce binaries sizes on Linux by avoiding `-Wl,--whole-archive` and using `-Wl,--start-group -lmylib1 -lmylib2 ... -Wl,--end-group` instead on all libraries,
allowing the linker to go back and forth between them to resolve missing symbols
* restore accidentally removed flag for ipv6, for `SteamClient020`
* make the test achievement in the overlay include a random progress
* add new button to the overlay `toggle user info` to show/hide user info, also make user info hidden by default
* added 2 new options to the overlay appearance `Notification_Margin_x` and `Notification_Margin_y` which allow specifying a small gap horizontally or vertically for the notifications
* updated the built-in overlay appearance & the example overlay ini file with a darker look and feel + changed some defaults, inspired by additions of **[schmurger]**
note that the icon for this test achievement is selected randomly from the current list of achievements
* added a new overlay appearance option `Achievement_Unlock_Datetime_Format` which allows changing the date/time format of the unlocked achievements, suggested by **[Clompress]**
* removed the condition which disabled the overlay sounds when it is shown, suggested by **[Vlxst]**
* don't use global appdata path in `matchmaking` + `matchmaking_servers`, instead use current/active save directory, in case we're using local_save_path
* allow changing the name of the base/global folder used to store save data, suggested by **[Clompress]**
by default it would be the new folder `GSE Saves` (instead of `Goldberg SteamEmu Saves`)
this could be changed only by setting the option `saves_folder_name` inside the local file `steam_settings/configs.user.ini`, the global one will not work
* new switches for the `generate_emu_config` tool, suggested by **[M4RCK5]**
-`-skip_ach`: skip downloading & generating achievements and their images
you can create a global `.ini` file `GSE Saves/settings/config.xxx.ini` for the common options, and another local one `steam_settings/config.xxx.ini` for the game-specific options, and the emu will merge them.
* introduced a new behavior in the emu, which makes it by default add a lot of Steam builtin and preowned IDs to the DLC list, and the emu's list of installed apps
you can disable this via the option `disable_steam_preowned_ids` in `configs.main.ini`
* reverted the changes to `Steam_Apps::BIsAppInstalled()`, now it will return true when the given app id is found in the DLC list, this function is also controlled via `installed_app_ids.txt`
* removed the limit on the amount of characters for local saves
* allow specifying absolute paths for local saves
* removed the warning for using `force_xxx.txt` files from the overlay, since it's no longer relevant, also removed the code which disables the user input when this warning was displayed
* added callbacks alongside call results in various interfaces, allowing some games to work properly
* trigger additional `UserAchievementStored_t` callbacks in `Steam_User_Stats::StoreStats()` for all the unlocked achievements prior to calling this function
* trigger `UserStatsStored_t` callback in `Steam_User_Stats::IndicateAchievementProgress()` instead of a call result (call result is removed),
might break stuff
* trigger `UserStatsReceived_t` callback as well as call result in `Steam_User_Stats::RequestUserStats()`, needed by some games
* trigger additional `PersonaStateChange_t` callback in `Steam_Friends::SetPersonaName()`
* trigger `SteamInventoryRequestPricesResult_t` callback as well as call result in `Steam_Inventory::RequestPrices()`
* trigger `SteamUGCQueryCompleted_t` callback as well as call result in `Steam_UGC::SendQueryUGCRequest()`
* trigger callback as well as call result in many places including the following classes:
* allow sharing leaderboards scores with connected players, adjust players ranks locally, and sort entries as needed by the game, suggested by **[M4RCK5]**
this will only work when people connected on the same network are playing the same game, once they disconnect their leaderboard entry will be lost (no data persistence for other players), also it doesn't work well with VPN clients.
-`matchmaking_server_list_actual_type.txt`: enable the behavior which allows steam matchmaking to use the actual type of the requestd server list, otherwise it's always LAN
-`matchmaking_server_details_via_source_query.txt`: enable the behavior which allows steam matchmaking to use actual source server query to grab the server info
* added a new flag `-reldir` for the `generate_emu_config` script which allows it to generate temp files/folders, and expect input files, relative to the current workig directory, suggested by **[ImportTaste]**
* build the python scripts `achievements_gen.py` and `parse_controller_vdf.py` into binary form using `pyinstaller` for a more user friendly usage, suggested by **[DogancanYr]**
* change the scripts `achievements_gen.py` and `parse_controller_vdf.py` to accept multiple files
* generate_emu_config: allow setting the steam id of apps/games owners from an external file `top_owners_ids.txt` beside the script, suggested by **[M4RCK5]**
* **[Detanup01]** added implementation for `Steam_Remote_Storage::EnumerateUserSubscribedFiles()` +
mods files handles in `Steam_Remote_Storage::UGCDownload()` + `Steam_Remote_Storage::UGCDownloadToLocation()`
which makes mods now work for many games
* **[Kola124]** enhanced the settings parser to detect primary and preview mod files sizes automatically +
use the base Steam URL by default for workshop URL + auto calculate the mod `score` from up/down votes
also thanks to **[BTFighter]** for providing logs
* **Breaking change** mod preview image file must exist in `steam_settings\mod_images\<MOD_ID>`
* an enhancement to the settings parser to attempt to auto detect mods when `mods.json` is not present, with the same behavior as when the json file was created.
this works for mods with only 1 primary file and only 1 preview file
* fixed the generated path of mod `preview_url`, previously it would contain back slashes `\` on Windows
* use last week epoch as the default time for mods dates (created, added, etc...)
* make sure the mod path is always normalized and absolute, required by some APIs
favorite mods list are now saved in `favorites.txt` in the user save data folder
* cold client loader can now inject user dlls, and force inject the `steamclient(64).dll` library,
also you can control the injection order via a file `load_order.txt`, check its readme and the provided example
* a new experimental dll (which must be injected first) to patch Stub drm v3.1 in memory, check the injection example of the cold client loader
* cold client loader will now treat relative paths as relative to its own path, previously it used the current active directory
* cold client loader no longer needs an explicit setting for the `ExeRunDir`, by default it would be the folder of the exe
* in cold client loader, the option `ResumeByDebugger` is now available for the release build
* cold client loader is now built for 32-bit and 64-bit separately, and will display a nag about architecture difference if for example the app was 32-bit and the loader was 64-bit, this could be disabled via the setting `IgnoreLoaderArchDifference=1`
* added a very basic crashes logger/printer, enabled by creating a file called `crash_printer_location.txt` inside the `steam_settings` folder, check README.realease.md for more details
*`Steam UGC`: make sure returned mod folder from `GetItemInstallInfo()` is null terminated, previously some apps would get a bad malformed string because of this
*`Steam_RemoteStorage`: very basic implementation for `GetQueryUGCNumTags()`, `GetQueryUGCTag()`, `GetQueryUGCTagDisplayName()`
* new function in local storage to get list of folders at root level, given some path
* **[Detanup01]** added option to send auth token with new Ticket! + an option to include the GC token
by default the emu will send the old token format for various APIs, like:
*`Steam_GameServer::GetAuthSessionTicket()`
*`Steam_User::GetAuthSessionTicket()`
*`Steam_User::GetAuthTicketForWebApi()`
this allows the emu to generate new ticket data, and additionally the GC token.
check the new config files `new_app_ticket.txt` and `gc_token.txt` in the `steam_settings` folder
* **[Detanup01]** fixed print issues in some places
* **[remelt]** use the `index` argument to grab the preview URL from UGC query result, fixed by: https://cs.rin.ru/forum/viewtopic.php?p=2964432#p2964432
* **[remelt]** allow overriding mod `path`& mod `preview_url` in the `mods.json` file, suggested by: https://cs.rin.ru/forum/viewtopic.php?p=2964432#p2964432
* allow setting the mod `score` in the `mods.json`
* when the mod `preview_url` is not overridden, don't set it automatically if `preview_filename` was empty, otherwise the `preview_url` will be pointing to the entire `mod_images` folder, like: `file://C:/my_game/steam_settings/mod_images/`
instead set it to an empty string
* updated `mods.EXAMPLE.json`
* added 2 new config files `is_beta_branch.txt` and `force_branch_name.txt`
by default the emu will report a `non-beta` branch with the name `public` when the game calls `Steam_Apps::GetCurrentBetaName()`
these new config files allow changing that behavior, check the `steam_settings` folder
* refactored the `steamclient_loader` script for Linux + new options and enhancements to make it similar to the Windows version, check its new README!
* for steamclient loader (Windows + Linux): pass loader arguments to the target exe, allowing it to be used from external callers, example by the `lobby_connect` tool
* deprecated the `find_interface` scripts, now the executable is built for Windows & Linux!
* included the `steam_settings.EXAMPLE` for Linux build
* updated release READMEs!
* added a README for the repo with detailed build steps
>>>>>>>>> ---
* check for invalid data pointer in `GetAuthSessionTicket()`
* additional sanity check in `InitiateGameConnection()` + print input data address in debug build
* moved the example `app id` and `interfaces` files inside `steam_settings` folder, to avoid encouraging putting files outside
>>>>>>>>> ---
* fixed all debug build warnings for Linux & Windows (no more scary messages!)
* updated Linux & Windows build scripts to avoid removing the entire build folder before building + introduced `clean` flag
* added licenses & sources of all extrnal libraries + added a new cryptography library `Mbed TLS`
you have to rebuilt the deps
* deprecated the separate/dedicated cleanup script for Windows, it's now inlined in the main build script
* For Windows build script: deprecated `low perf`&`win xp` options
* For Linux build script: deprecated `low perf` option
* restored all original but unused repo files into their separate folder
* lots of refactoring and relocation in the source repo:
- all build stuff will be inside `build` folder
- restructured the entire repo
- generate proto source files in the `build\tmp` folder insead of the actual source folder
* fixed the implementation of `BIsAppInstalled()`, it must lock the global mutex since it is thread-safe, otherwise it will cause starvation and the current thread wion't yield, which triggers some games
* lock the global mutex and the overlay mutex in different places just to be on the safe side, without it, some games suffer from thread starvation, might slow things down
* added a startup timer + counter for reference, currently used to print timestamp in debug log
* consistent debug log location, for games that change cwd multiple times while running
* fixed error propagation in Windows build script, apparently set /a var+=another_var works only if another_var is a defined env var but NOT one of the "magic" builtins like errorlevel
* apply the fix for the Linux build (due to newer glibc) from this pull request by Randy Li: https://gitlab.com/Mr_Goldberg/goldberg_emulator/-/merge_requests/42/
* add updated translation of Spanish + Latin American to the overlay by dragonslayer609 from viewtopic.php?p=2936892#p2936892
* add updated translation of Russian to the overlay by GogoVan from viewtopic.php?p=2939565#p2939565
* add more interfaces to look for in the original steam_api by alex47exe from viewtopic.php?p=2935557#p2935557
* add fix for glyphs icons for xbox 360 controller by 0x0315 from viewtopic.php?p=2949498#p2949498
* bare minimum implementation for SDK 1.58a
+ backup the current version of the interface 'steam ugc'
- without sudo, run `./build_linux.sh` and pass the argument `release` or `debug` to build the emu in the corresponding mode, this will build the emu inside the folder `build-linux`
some additional arguments you can pass to the script:
+ `-lib-32`: prevent building 32-bit libsteam_api.so
+ `-lib-64`: prevent building 64-bit libsteam_api.so