* [alex47exe] major overhaul of **generate_emu_config** - custom configs, proper ini parsing, better logging and error handling, helper tools:

* 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
This commit is contained in:
alex47exe 2024-07-30 01:21:09 +01:00
parent 34dd0baf2f
commit ae979f1edb
210 changed files with 7749 additions and 1470 deletions

View File

@ -21,10 +21,10 @@ jobs:
runs-on: windows-2022
steps:
- name: Set up Python 3.10
- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.10"
python-version: "3.12"
### on Windows Git will auto change line ending to CRLF, not preferable
- name: Ensure LF line ending

View File

@ -1,6 +1,57 @@
* **[Detanup01]** Fix GetISteamGenericInterface when asking for Interface: STEAMTIMELINE_INTERFACE_V001
* **[KGHTW]** Fixing Steam Datagram Error.
## 2024/7/29
* **[alex47exe]** major overhaul of **generate_emu_config** - custom configs, proper ini parsing, better logging and error handling, helper tools:
* 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
---
## 2024/7/28
* **[Detanup01]** fix GetISteamGenericInterface() when asking for Interface `STEAMTIMELINE_INTERFACE_V001`
* **[KGHTW]** fix Steam Datagram Error
---
## 2024/7/7
@ -11,8 +62,8 @@
* **[qingchunnh]** update Chinese translations for the overlay
* 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`.
* 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`
@ -21,11 +72,10 @@
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.
* 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.
* 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 conditions for app/DLCs ownership APIs:
@ -47,8 +97,8 @@
## 2024/6/21
* fix the conditions for achievement progress indication when a game updates a stat which is tied to an achievement
now the user achievements will be updated and saved, and an overlay notification will be triggered.
works with **[Achievement Watcher by xan105](https://github.com/xan105/Achievement-Watcher)** and the built-in overlay.
now the user achievements will be updated and saved, and an overlay notification will be triggered
works with **[Achievement Watcher by xan105](https://github.com/xan105/Achievement-Watcher)** and the built-in overlay
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
@ -63,7 +113,7 @@
# duration of achievement progress indication
Notification_Duration_Progress=6.0
# duration of achievement unlocked
Notification_Duration_Achievement=7.0
Notification_Duration_Achievement=6.0
# duration of friend invitation
Notification_Duration_Invitation=8.0
# duration of chat message
@ -94,19 +144,18 @@
* **[Detanup01]** add `premake` build scripts, allowing the project to be built with different toolsets with ease on different platforms
for example the project could be built with `Visual Studio` on Windows, or via the `make` tool on Linux
* **[schmurger]** add progress bar to the achievements in the overlay, only for achievements that are not earned yet.
also implement notifications for these progress indications (whenever the game indicates a new progress).
* **[schmurger]** add progress bar to the achievements in the overlay, only for achievements that are not earned yet
also implement notifications for these progress indications (whenever the game indicates a new progress)
you can disable the achievement progress notifications via `disable_achievement_progress` inside `configs.overlay.ini`
* **[schmurger]** implement the function `Steam_User_Stats::GetAchievementProgressLimits()`
* **[Detanup01]** add missing interfaces `ISteamScreenshot` `v001` and `v002`
also fix lots of build warnings in Visual Studio
* third-party dependencies could now be built with a `premake` script, offering more flexibility.
* third-party dependencies could now be built with a `premake` script, offering more flexibility
for example you can choose to extract or build certain libraries only, you can also build 32-bit or 64-bit separately
---
**check the updated readme**
**and re-clone the repo recursively again!**
**check the updated readme and re-clone the repo recursively again!**
---
@ -131,9 +180,9 @@
* add new button to the overlay `toggle user info` to show/hide user info, also make user info hidden by default
* make all overlay popups toggle-able, clicking its button another time will hide or show the popup, depending on its previous state
* allow `Steam_User_Stats::ClearAchievement()` to reflect the status in the overlay
* initial support for building with `MSYS2` on Windows.
**this is still highly experimental and non-functional, this is more of tech demo at the moment**
the original SDK is created as `MSVC` library, and all games on Windows link with it.
* initial support for building with `MSYS2` on Windows
**This is still highly experimental and non-functional, this is more of tech demo at the moment**
The original SDK is created as `MSVC` library, and all games on Windows link with it
MinGW toolchain has a completely different **ABI** and the output binary will **not work**
* deprecated and removed the special Git branches `ci-build-*`, they were intended for automation but no longer maintained
@ -216,10 +265,10 @@
- `configs.overlay.ini`: configurations of the overlay
they could be placed inside the local `steam_settings` folder,
or inside the new global settings folder `GSE Saves/settings`, located at `%appdata%\GSE Saves\settings\` on Windows for example.
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.
or inside the new global settings folder `GSE Saves/settings`, located at `%appdata%\GSE Saves\settings\` on Windows for example
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
To avoid confusion, the global saves folder is changed to be `GSE Saves` by default.
To avoid confusion, the global saves folder is changed to be `GSE Saves` by default
* new tool `migrate_gse` to convert either your global `settings` folder, or your local `steam_settings` folder from the old format to the new one
- run the tool without arguments to let it convert the global settings folder
@ -249,7 +298,7 @@
- `SteamEnv`
- `SteamPath`
---
---
## 2024/4/11 (2)
@ -290,7 +339,7 @@
---
* **[breaking]** introduced a new config file `enable_experimental_overlay.txt`, which deprecates the config file `disable_overlay.txt`
in many occasions this feature was a source of crashes, so it's better to make it an opt-in option.
in many occasions this feature was a source of crashes, so it's better to make it an opt-in option
otherwise, the `experimental` and `Cold Client` builds of the emu will crash by default on startup for some apps/games
---
@ -324,7 +373,7 @@
- allow loading a custom font whose location is defined in `overlay_appearance.txt`
fonts with relative paths will be loaded from `steam_settings\fonts`
* 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.
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
this behavior could be enabled via `share_leaderboards_over_network.txt`
* implemented the missing interface `ISteamGameServerStats`, allowing game servers to exchange user stats & achievements with players
could be disabled via `disable_sharing_stats_with_gameserver.txt`,
@ -332,7 +381,7 @@
* for windows: updated stub drm patterns and added a workaround for older variants,
this increases the compatibility, but makes it easier to be detected
* for windows: new stub/mock dll `GameOverlayRenderer(64).dll` for the experimental cold client setup,
some apps verify the existence of this dll, either on disk, or inside their memory space.
some apps verify the existence of this dll, either on disk, or inside their memory space
**not recommended** to ignore it
* separated the config file `disable_leaderboards_create_unknown.txt`, previously it was tied to `leaderboards.txt`,
by default the emu will create any unknown leaderboards, you can disable this behavior with this file
@ -539,8 +588,8 @@
* **[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.
* **Breaking change** mod preview image file must exist in `steam_settings\mods_img\<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...)
@ -576,9 +625,9 @@
## 2024/1/3
* added a new option to the Windows version of the client loader to aid in debugging.
* added a new option to the Windows version of the client loader to aid in debugging
the option is called `ResumeByDebugger`, and setting it to `1` will prevent the loader from
auto resuming the main app thread, giving you a chance to attach your debugger.
auto resuming the main app thread, giving you a chance to attach your debugger
* make the script `generate_emu_config` generate an empty `DLC.txt` if the app has no DLCs
* windows build: sign each file after build with a self-signed generated certificate + note in the release readme regarding false-positives
* windows build: note in readme about Windows SDK
@ -600,13 +649,13 @@ auto resuming the main app thread, giving you a chance to attach your debugger.
* `Steam_User::GetAuthSessionTicket()`
* `Steam_User::GetAuthTicketForWebApi()`
this allows the emu to generate new ticket data, and additionally the GC token.
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/`
* 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 `mods_img` folder, like: `file://C:/my_game/steam_settings/mods_img/`
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`
@ -631,8 +680,8 @@ auto resuming the main app thread, giving you a chance to attach your debugger.
* 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
* 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
@ -813,7 +862,7 @@ auto resuming the main app thread, giving you a chance to attach your debugger.
- declare the new API: SteamAPI_ISteamUGC_GetUserContentDescriptorPreferences()
- (needs revise) update signature of the API: SteamAPI_ISteamUGC_SetItemTags() to add the new argument
this will potentially break compatibility with older version of the flat API
////////////////////
////////////////////
- declare new interface getter: SteamAPI_SteamRemotePlay_v002()
- declare the new API: SteamAPI_ISteamRemotePlay_BStartRemotePlayTogether()
////////////////////
@ -829,7 +878,7 @@ auto resuming the main app thread, giving you a chance to attach your debugger.
- implement the new API: SteamAPI_ISteamUGC_GetUserContentDescriptorPreferences()
- (needs revise) update signature of the API: SteamAPI_ISteamUGC_SetItemTags() to use the new argument
this will potentially break compatibility with older version of the flat API
////////////////////
////////////////////
- implement new interface getter SteamAPI_SteamRemotePlay_v002()
- implement the new API: SteamAPI_ISteamRemotePlay_BStartRemotePlayTogether()
////////////////////
@ -921,6 +970,8 @@ auto resuming the main app thread, giving you a chance to attach your debugger.
+ unpack the third party libraries (protobuf, zlib, etc...) from the folder `third-party` to `build-win-deps`
+ build the unpacked libraries from `build-win-deps`
you only need this step once, additionally you can pass these arguments to the script:
+ `-verbose`: force cmake to display extra info
+ `-j <n>`: force cmake to use `<n>` parallel build jobs
@ -959,7 +1010,6 @@ auto resuming the main app thread, giving you a chance to attach your debugger.
+ create a file called `my_login.txt`, then add your username in the first line, and your password in the second line
+ run the .exe file without any args to display all available options
* revert the changes to `SetProduct()` and `SetGameDescription()`
* in `steam_overlay.cpp`, in `AddAchievementNotification()`: prefer original paths of achievements icons first, then fallback to `achievement_images/`

View File

@ -1408,14 +1408,14 @@ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
@ -1685,10 +1685,11 @@ CMake was initially developed by Kitware with the following sponsorship:
7-Zip Extra files are under the GNU LGPL license.
Notes:
You can use 7-Zip Extra on any computer, including a computer in a commercial
organization. You don't need to register or pay for 7-Zip.
Notes:
You can use 7-Zip Extra on any computer, including a computer in a commercial
organization. You don't need to register or pay for 7-Zip.
It is allowed to digitally sign DLL files included into this package
with arbitrary signatures of third parties."
@ -1955,7 +1956,3 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Sean Middleditch
Copyright (C) 2010 Sean Middleditch
LICENSE: MIT/X
### Template License
License Here

View File

@ -1,9 +1,7 @@
## :large_orange_diamond: **This is a fork**
## :large_orange_diamond: **Goldberg Steam Emu**
Fork of https://gitlab.com/Mr_Goldberg/goldberg_emulator
Fork originally make by wizark952.
This is a latest version of his work.
Fork originally make by wizark952. This is a latest version of his work.
### Feel free to make a PR.
@ -41,10 +39,6 @@ You can find helper guides, scripts, and tools here in this wiki: https://github
You can also find instructions here in [README.release.md](./post_build/README.release.md)
---
---
<br/>
# **Compiling**
## One time setup
### **Cloning the repo**
@ -232,7 +226,7 @@ Open CMD in the repo folder, then run the following
```shell
make config=release_x32 -j 8 all
```
To see all possible build targets
To see all possible build targets
```shell
make help
```

View File

@ -1 +1,2 @@
Explanations for random thoughts and ideas.

View File

@ -963,7 +963,7 @@ static std::string get_mod_preview_url(const std::string &previewFileName, const
} else {
auto settings_folder = std::string(Local_Storage::get_game_settings_path());
std::replace(settings_folder.begin(), settings_folder.end(), '\\', '/');
return "file://" + settings_folder + "mod_images/" + mod_id + "/" + previewFileName;
return "file://" + settings_folder + "mods_img/" + mod_id + "/" + previewFileName;
}
}
@ -972,7 +972,7 @@ static void try_parse_mods_file(class Settings *settings_client, Settings *setti
{
for (auto mod = mod_items.begin(); mod != mod_items.end(); ++mod) {
try {
std::string mod_images_fullpath = Local_Storage::get_game_settings_path() + "mod_images" + PATH_SEPARATOR + std::string(mod.key());
std::string mod_images_fullpath = Local_Storage::get_game_settings_path() + "mods_img" + PATH_SEPARATOR + std::string(mod.key());
Mod_entry newMod;
newMod.id = std::stoull(mod.key());
newMod.title = mod.value().value("title", std::string(mod.key()));
@ -1063,7 +1063,7 @@ static void try_detect_mods_folder(class Settings *settings_client, Settings *se
{
std::vector<std::string> all_mods = Local_Storage::get_folders_path(mods_folder);
for (auto & mod_folder: all_mods) {
std::string mod_images_fullpath = Local_Storage::get_game_settings_path() + "mod_images" + PATH_SEPARATOR + mod_folder;
std::string mod_images_fullpath = Local_Storage::get_game_settings_path() + "mods_img" + PATH_SEPARATOR + mod_folder;
try {
Mod_entry newMod;
newMod.id = std::stoull(mod_folder);

View File

@ -533,7 +533,7 @@ int32 Steam_Remote_Storage::UGCRead( UGCHandle_t hContent, void *pvData, int32 c
if (dwf.source == Downloaded_File::DownloadSource::AfterSendQueryUGCRequest) {
std::string mod_base_path = dwf.mod_query_info.is_primary_file
? mod.path
: Local_Storage::get_game_settings_path() + "mod_images" + PATH_SEPARATOR + std::to_string(mod.id);
: Local_Storage::get_game_settings_path() + "mods_img" + PATH_SEPARATOR + std::to_string(mod.id);
mod_fullpath = common_helpers::to_absolute(mod_name, mod_base_path);
} else { // Downloaded_File::DownloadSource::FromUGCDownloadToLocation
@ -1116,7 +1116,7 @@ SteamAPICall_t Steam_Remote_Storage::UGCDownloadToLocation( UGCHandle_t hContent
: mod.previewFileName;
std::string mod_base_path = query_res.value().is_primary_file
? mod.path
: Local_Storage::get_game_settings_path() + "mod_images" + PATH_SEPARATOR + std::to_string(mod.id);
: Local_Storage::get_game_settings_path() + "mods_img" + PATH_SEPARATOR + std::to_string(mod.id);
int32 mod_size = query_res.value().is_primary_file
? mod.primaryFileSize
: mod.previewFileSize;

View File

@ -1,10 +1,8 @@
## What is this ?
This is the debug build of the emu, while the game/app is running
the emu will write various events to a log file called `STEAM_LOG.txt`.
This is the debug build of the emu, while the game/app is running, the emu will write various events to a log file called `STEAM_LOG.txt`
## Where is this log file ?
Generally it should be beside the .dll/.so iteself, unless the environment variable `GseAppPath`
is defined, in which case this will be the path of this log file
It should be beside the `.dll/.so` itself, unless the environment variable `GseAppPath` is defined, in which case this will be the path of this log file
## Why ?
This is intended for debugging purposes, use it to check the behavior of the emu while running.
This is intended for debugging purposes, use it to check the behavior of the emu while running

View File

@ -1,23 +1,25 @@
## What is this ?
This build of the emulator:
* Blocks all outgoing connections from the game to non **LAN** IPs
* Lets you use CPY cracks that use the `steam_api` dll to patch the exe in memory when the `SteamAPI_Init()` method is called
This experimental build of the emulator:
* Blocks all outgoing connections from the game to non-LAN IPs
* Lets you use CPY style cracks that use the `steam_api` dll to patch the exe in memory when the `SteamAPI_Init()` method is called
* Can load extra dlls in memory via `LoadLibraryW()`
* Mr.Goldberg's note:
> In this folder is an experimental build of the emulator with code that hooks a few windows socket functions. It should block all connections from the game to non LAN ips. This means the game should work without any problems for LAN play (even with VPN LAN as long as you use standard LAN ips 10.x.x.x, 192.168.x.x, etc...)
Mr.Goldberg's note:
> In this folder is an experimental build of the emulator with code that hooks a few windows socket functions. It should block all connections from the game to non-LAN IPs. This means the game should work without any problems for LAN play (even with VPN LAN as long as you use standard LAN IPs 10.x.x.x, 192.168.x.x, etc...)
> It likely doesn't work for some games but it should work for most of them.
> It likely doesn't work for some games but it should work for most of them
> Since this blocks all non LAN connections doing things like hosting a cracked server for people on the internet will not work or connecting to a cracked server that's hosted on an internet ip will not work.
> Since this blocks all non LAN connections doing things like hosting a cracked server for people on the internet will not work or connecting to a cracked server that's hosted on an internet IP will not work
## Why ?
Mr.Goldberg's note:
> Lots of games seem to connect to analytics services and other crap.
> Blocking the game from communicating with online ips without affecting the LAN functionality of this emu is a pain if you try to use a firewall.
> Lots of games seem to connect to analytics services and other crap
> Blocking the game from communicating with online IPs without affecting the LAN functionality of this emu is a pain if you try to use a firewall
## Which IPs are blocked ?
**All** IPs *except* these ranges:
## Which IPs are allowed ?
With `disable_lan_only=0` inside `.\steam_settings\configs.main.ini`, only **LAN-only IPs** are allowed:
* 10.0.0.0 - 10.255.255.255
* 127.0.0.0 - 127.255.255.255
* 169.254.0.0 - 169.254.255.255
@ -25,14 +27,12 @@ Mr.Goldberg's note:
* 192.168.0.0 - 192.168.255.255
* 224.0.0.0 - 255.255.255.255
## To disable the LAN only connections feature
Modify your `steam_settings\configs.main.ini` and set `disable_lan_only=1`.
To allow all IPs, including **non-LAN IPs**, modify your `.\steam_settings\configs.main.ini` and set `disable_lan_only=1`
## How to use a CPY style crack
1. Rename `steam_api.dll` crack to `cracksteam_api.dll`, or `steam_api64.dll` to `cracksteam_api64.dll`
2. Replace the `steamclient(64).dll` crack with the one in this folder.
3. Then use the emu like you normally would with all the configurations
2. Replace the `steamclient(64).dll` crack with the one in this folder
## How to load extra dlls in memory
Put the dll file inside the folder `steam_settings\load_dlls\` and it will be loaded automatically using the `LoadLibraryW()` function
Put the dll file inside the folder `.\steam_settings\load_dlls`, and it will be loaded automatically using the `LoadLibraryW()` function

View File

@ -1,2 +1,2 @@
## What is this ?
This build of the emu has the overlay enabled, it works on very few games
This experimental build of the emu for Linux. The overlay is enabled, though it works on very few games.

View File

@ -1,27 +1,26 @@
## What is this ?
This is a build of the `experimental` version of the emu in `steamclient` mode, with an included loader which was originally [written by Rat431](https://github.com/Rat431/ColdAPI_Steam/tree/master/src/ColdClientLoader) and later modified to suite the needs of this emu.
This is a build of the `experimental` version of the emu in `steamclient` mode, with an included loader which was originally [written by Rat431](https://github.com/Rat431/ColdAPI_Steam/tree/master/src/ColdClientLoader) and later modified to suit the needs of this emu.
The backend .dll/.so of Steam is a library called `steamclient`, this build will act as a `steamclient` allowing you to retain the original `steam_api(64).dll`.
See both the regular and experimental readmes for how to configure it.
The backend `.dll/.so` of Steam is a library called `steamclient`, this build will act as a `steamclient` allowing you to retain the original `steam_api(64).dll`. See both the regular and experimental readmes for how to configure it.
---
**Note** that all emu config files should be put beside the `steamclient(64).dll`.
**Note** that all emu config files should be put beside the `steamclient(64).dll`
You do not need to create a `steam_interfaces.txt` file for the `steamclient` version of the emu.
You do not need to create a `steam_interfaces.txt` file for the `steamclient` version of the emu
---
## How to ue it ?
## How to use it ?
1. Copy the following files to any folder:
* `steamclient.dll`
* `steamclient64.dll`
* `ColdClientLoader.ini`
* `steamclient_loader.exe`
2. While it is not mandatory, it is highly recommended to copy the relevant `GameOverlayRenderer` dll(s)
This is recommended because some apps check for the existence of this dll, either on disk, on inside their memory space, otherwise they'll trigger custom protection.
When in doubt, just copy both dlls.
2. While it is not mandatory, it is highly recommended to copy the relevant `GameOverlayRenderer` dll
This is recommended because some apps check for the existence of this dll, either on disk, on inside their memory space, otherwise they'll trigger custom protection
When in doubt, just copy both dlls:
* `GameOverlayRenderer.dll`: for 32-bit apps
* `GameOverlayRenderer64.dll`: for 64-bit apps
@ -48,37 +47,36 @@ You do not need to create a `steam_interfaces.txt` file for the `steamclient` ve
* `Mode` (in `[Persistence]` section):
- 0 = turned off
- 1 = loader will spawn the exe and keep hanging in the background until you press "OK"
- 2 = loader will NOT spawn exe, it will just setup the required environemnt and keep hanging in the background
- 2 = loader will NOT spawn exe, it will just setup the required environment and keep hanging in the background
you have to run the Exe manually, and finally press "OK" when you've finished playing
you have to rename the loader to "steam.exe"
it is advised to run the loader as admin in this mode
**Note** that any arguments passed to `steamclient_loader.exe` via command line will be passed to the target `.exe`.
Example: `steamclient_loader.exe` `-dx11`
If the additional exe arguments were both: passed via command line and set in the `.ini` file, then both will be cocatenated and passed to the exe.
If the additional exe arguments were both: passed via command line and set in the `.ini` file, then both will be concatenated and passed to the exe.
This allows the loader to be used/called from other external apps which set additional args.
### `DllsToInjectFolder`
The folder specified by this identifier should contain the .dll files you'd like to inject in the app earlier during its creation.
All the subfolders inside this folder will be traversed recursively, and the .dll files inside these subfolders will be loaded/injected.
## Using `DllsToInjectFolder`
The folder specified by this identifier should contain the dll files you'd like to inject in the app earlier during its creation.
All the subfolders inside this folder will be traversed recursively, and the dll files inside these subfolders will be loaded/injected.
Additionaly, you can create a file called `load_order.txt` inside your folder (root level, not inside any subdir), mentioning on each line the .dll files to inject.
The order of the lines will instruct the loader which .dll to inject first, the .dll mentioned on the first line will be injected first and so on.
Each line inside this file has to be the relative path of your target .dll, and it should be relative to your folder. Check the example.
Additionally, you can create a file called `load_order.txt` inside your folder (root level, not inside any subdir), mentioning on each line the dll files to inject.
The order of the lines will instruct the loader which dll to inject first, the dll mentioned on the first line will be injected first and so on.
Each line inside this file has to be the relative path of your target dll, and it should be relative to your folder. Check the example.
If this file is created then the loader will only inject the .dll files mentioned inside it, otherwise it will attempt to find all valid .dll files and inject them.
If this file is created then the loader will only inject the dll files mentioned inside it, otherwise it will attempt to find all valid dll files and inject them.
---
## `extra_dlls`
This folder contains an experimental dll which, when injected, will attempt to patch the Stub drm in memory, mainly for newer variants but it also works on some of the older ones.
## Using `extra_dlls`
This folder contains an experimental dll which, when injected, will attempt to patch the Stub DRM in memory, mainly for newer variants but it also works on some of the older ones.
This isn't a complete solution, just a different method.
This dll is meant to be injected during **startup** only, it must **not** be placed inside `steam_settings/load_dlls`, otherwise it would cause a huge FPS drop.
This dll is meant to be injected during **start-up** only, it must **NOT** be placed inside `.\steam_settings\load_dlls`, otherwise it would cause a huge FPS drop.
---
## `GameOverlayRenderer`
## Using `GameOverlayRenderer`
Some apps verify the existence of this dll, either on disk, or inside their memory space, that's why this dll exists.
It is **NOT** recommended to ignore this dll.

View File

@ -3,19 +3,19 @@ This tool will generate the file `steam_interfaces.txt` which is **always** reco
## How to use it ?
1. * On Windows
* Drag `steam_api.dll` or `steam_api64.dll` on this exe
* Drag `steam_api.dll` or `steam_api64.dll` on this exe.
* Or run the command line (example):
```batch
generate_interfaces_file.exe steam_api64.dll
generate_interfaces_x64.exe steam_api64.dll
```
* On Linux:
* Run the command line (example):
```bash
chmod 777 generate_interfaces_file_x64 # make sure we can execute the binary
generate_interfaces_file_x64 libsteam_api.so
chmod 777 generate_interfaces_x64 # make sure we can execute the binary
generate_interfaces_x64 libsteam_api.so
```
2. Copy the generated `steam_interfaces.txt` file inside the folder `steam_settings`
2. Copy the generated `steam_interfaces.txt` file inside the folder `steam_settings`.
---
In both cases, make sure the .dll/.so is **the original** one
In both cases, make sure the .dll / .so is **the original** one !
---

View File

@ -2,38 +2,37 @@
====Goldberg Steam Emulator====
---
An emulator that supports LAN multiplayer without steam.
An emulator that supports LAN multiplayer without Steam
https://gitlab.com/Mr_Goldberg/goldberg_emulator
---
## How to use:
1. Replace the `steam_api(64).dll` (Windows) or `libsteam_api.so` (Linux) from the game with the emu.
2. Use the command line tool `generate_emu_config` to generate the `steam_settings` folder
1. Replace the `steam_api(64).dll` (Windows) or `libsteam_api.so` (Linux) from the game with the emu
2. Use the command line tool `generate_emu_config` to generate the `.\steam_settings` folder
3. Use the command line tool `generate_interfaces` to generate the file `steam_interfaces.txt`,
then move it inside the folder `steam_settings`
4. Move the entire folder `steam_settings` beside the emu .dll/.so.
5. Copy the the example files `steam_settings.EXAMPLE\configs.xxx.EXAMPLE.ini` and paste them inside your own `steam_settings` folder, then the postfix `.EXAMPLE`.
6. Make sure to keep the **only** options you need, do **NOT** sepecify everything inside these .ini files
then move it inside the folder `.\steam_settings`
4. Move the entire folder `.\steam_settings` beside the emu `.dll/.so`
5. Copy the the example files `.\steam_settings.EXAMPLE\configs.xxx.EXAMPLE.ini` and paste them inside your own `steam_settings` folder, then remove `.EXAMPLE` from their name
Mr.Goldberg's note:
> If the game has DRM (other than steamworks) you need to remove it first.
> If the game has DRM (other than Steamworks) you need to remove it first
---
## Various configurations:
Due to the various changes and additions, it became tedious to document everything,
so it is recommended to check each example file in the `steam_settings` folder, and the various options inside `configs.xxx.ini`.
so it is recommended to check each example file in the `.\steam_settings` folder, and the various options inside `configs.xxx.ini`
---
When you use the emu at least once, some default configurations are saved inside the global settings folder
When you use the emu at least once, some default configurations are saved inside the global settings folder:
* `configs.main.ini`: configurations for the emu itself
* `configs.user.ini`: configurations specific to the user
* `configs.app.ini`: configurations specific to the game/app
* `configs.overlay.ini`: configurations of the overlay
* `configs.user.ini`: configurations for the user
* `configs.app.ini`: configurations for the game/app
* `configs.overlay.ini`: configurations for the overlay
---
@ -50,60 +49,58 @@ When you use the emu at least once, some default configurations are saved inside
* Otherwise:
`SAVE/GSE Saves/` (relative to the current directory, which might not be the same as app/game directory)
You can override the name of the base folder `GSE Saves` to whatever you want per game, to do this modify `configs.user.ini` inside your `steam_settings` folder and change the value of `saves_folder_name`.
Check the example file in `steam_settings.EXAMPLE\configs.EXAMPLE.ini`.
You can override the name of the base folder `GSE Saves` to whatever you want per game, to do this modify `configs.user.ini` inside your `.\steam_settings` folder and change the value of `saves_folder_name`
Check the example file in `.\steam_settings.EXAMPLE\configs.EXAMPLE.ini`
Any configurations inside your `steam_settings` folder will always override the global configurations.
Any configurations inside your `steam_settings` folder will always override the global configurations
---
## Portable saves:
If you want to use local/portable saves, specify the parameter `local_save_path` inside your local `steam_settings/configs.user.ini`, the emu will completely ignore the global settings folder, allowing a full portable behavior
If you want to use local/portable saves, specify the parameter `local_save_path` inside your local `.\steam_settings\configs.user.ini`, the emu will completely ignore the global settings folder, allowing a full portable behavior
---
## Languages:
You can include a `steam_settings\supported_languages.txt` file with a list of languages that the game supports.
You can include a `.\steam_settings\supported_languages.txt` file with a list of languages that the game supports
If the global emu language setting is not in this list of languages, the emu will default to the first language in the list
If the global emu language setting is not in this list of languages, the emu will default to the first language in the list.
See the `steam_settings.EXAMPLE` folder for an example.
See the `.\steam_settings.EXAMPLE` folder for an example.
---
## Depots:
This is pretty rare but some games might use depot ids to see if dlcs are installed.
You can provide a list of installed depots to the game with a `steam_settings\depots.txt` file.
This is pretty rare but some games might use depot ids to see if dlcs are installed
You can provide a list of installed depots to the game with a `.\steam_settings\depots.txt` file
See the `steam_settings.EXAMPLE` folder for an example.
See the `.\steam_settings.EXAMPLE` folder for an example
---
## Subscribed Groups:
Some games like payday 2 check which groups you are subscribed in and unlock things based on that.
You can provide a list of subscribed groups to the game with a `steam_settings\subscribed_groups.txt` file.
Some games like payday 2 check which groups you are subscribed in and unlock things based on that
You can provide a list of subscribed groups to the game with a `.\steam_settings\subscribed_groups.txt` file
See `steam_settings.EXAMPLE\subscribed_groups.EXAMPLE.txt` for an example for payday 2.
See `.\steam_settings.EXAMPLE\subscribed_groups.EXAMPLE.txt` for an example for PayDay 2
---
## Subscribed Groups (Clans):
Some games like counter-strike check which groups you are subscribed in and allow you to choose a group clan.
You can provide a list of subscribed group ids, names, and tags to the game with a `steam_settings\subscribed_groups_clans.txt` file.
Some games like Counter-Strike check which groups you are subscribed in and allow you to choose a group clan
You can provide a list of subscribed group ids, names, and tags to the game with a `.\steam_settings\subscribed_groups_clans.txt` file
Group ids must be valid and can be obtained by pasting '`/memberslistxml/?xml=1`' at the end of a Steam group page.
Group ids must be valid and can be obtained by pasting '`/memberslistxml/?xml=1`' at the end of a Steam group page
See `steam_settings.EXAMPLE\subscribed_groups_clans.EXAMPLE.txt` for an example.
See `.\steam_settings.EXAMPLE\subscribed_groups_clans.EXAMPLE.txt` for an example
---
## App paths:
Some rare games might need to be provided one or more paths to app ids.
For example the path to where a dlc is installed.
This sets the paths returned by the `Steam_Apps::GetAppInstallDir` function.
## App Paths:
Some rare games might need to be provided one or more paths to app ids, for example the path to where a dlc is installed
This sets the paths returned by the `Steam_Apps::GetAppInstallDir` function
See `[app::paths]` inside `steam_settings.EXAMPLE\configs.app.EXAMPLE.ini` for an example.
See `[app::paths]` inside `.\steam_settings.EXAMPLE\configs.app.EXAMPLE.ini` for an example
Note that paths are treated as relative paths **from where the steam_api dll is located**.
---
@ -111,51 +108,51 @@ Note that paths are treated as relative paths **from where the steam_api dll is
---
## Mods:
* Put your mod in the `steam_settings\mods\<MOD NUMBER>\` folder
* Modify `mods.json` and specify `primary_filename` and `preview_filename`, other options in this json file are optional.
* Put the mod image/preview inside `steam_settings\mod_images\<MOD NUMBER>`
* Put your mod in the `.\steam_settings\mods\<MOD NUMBER>\` folder
* Modify `mods.json` and specify `primary_filename` and `preview_filename`, other options in this json file are optional
* Put the mod image/preview inside `.\steam_settings\mods_img\<MOD NUMBER>`
Mod data folder must be a number corresponding to the file id of the mod.
Mod data folder must be a number corresponding to the file id of the mod
See the `steam_settings.EXAMPLE` folder for an example.
See the `.\steam_settings.EXAMPLE` folder for an example
---
## Steam appid:
Put your `steam_appid.txt` in the `steam_settings` folder because this is where the emulator checks first.
Put your `steam_appid.txt` in the `.\steam_settings` folder because this is where the emulator checks first
If there is no `steam_appid.txt` in the `steam_settings` folder it will try opening it from the run path of the game.
If one isn't there it will try to load it from beside steam api dll.
If there is no `steam_appid.txt` in the `.\steam_settings` folder it will try opening it from the run path of the game
If one isn't there it will try to load it from beside steam api dll
The steam appid can also be set using the `SteamAppId` or `SteamGameId` env variables (this is how real steam tells games what their appid is).
The steam appid can also be set using the `SteamAppId` or `SteamGameId` env variables (this is how real steam tells games what their appid is)
But it is highly recommended to always create this file inside `steam_settings` folder
It is highly recommended to always create this file inside `.\steam_settings` folder !
---
---
## Custom Broadcast IPs:
If you want to set custom ips (or domains) which the emulator will send broadcast packets to, make a list of them, one on each line in: `GSE Saves\settings\custom_broadcasts.txt`
If you want to set custom IPs (or domains) which the emulator will send broadcast packets to, make a list of them, one on each line in: `.\GSE Saves\settings\custom_broadcasts.txt`
If the custom IPs/domains are specific for one game only you can put the `custom_broadcasts.txt` in the `steam_settings` folder.
If the custom IPs (or domains) are specific for one game only you can put the `custom_broadcasts.txt` in the `.\steam_settings` folder
An example is provided in `steam_settings.EXAMPLE\custom_broadcasts.EXAMPLE.txt`
An example is provided in `.\steam_settings.EXAMPLE\custom_broadcasts.EXAMPLE.txt`
---
## Achievements, Items or Inventory:
Create a file named `items.json` and/or `achievements.json` inside the `steam_settings` folder which will contain every item/achievement you want to have in your game.
Create a file named `items.json` and/or `achievements.json` inside the `.\steam_settings` folder which will contain every item/achievement you want to have in your game.
An example can be found in `steam_settings.EXAMPLE` that works with Killing Floor 2.
An example can be found in `.\steam_settings.EXAMPLE` that works with Killing Floor 2.
The `items.json` syntax is simple, you **MUST** validate your `.json` file before trying to run your game or you won't have any item in your inventory.
Just look for "online json validator" on your web brower to valide your file.
The `items.json` syntax is simple, you **MUST** validate your `.json` file before trying to run your game or you won't have any item in your inventory
Just look for "online json validator" on your web browser to validate your file.
You can use https://steamdb.info/ to list items and attributes they have and put them into your .json, you can also use the command line tool `generate_emu_config`.
You can use https://steamdb.info/ to list items and attributes they have and put them into your `.json`, you can also use the command line tool `generate_emu_config`
Keep in mind that some item are not valid to have in your inventory.
Keep in mind that some item are not valid to have in your inventory !
---
For example, in PayDay2 all items below `item_id` `50000` will make your game crash.
For example, in PayDay2 all items below `item_id` `50000` will make your game crash
* `items.json` should contain all the item definitions for the game,
* `default_items.json` is the quantity of each item that you want a user to have initially in their inventory. By default the user will have no items.
@ -164,13 +161,12 @@ It is recommended to use the command line tool `generate_emu_config` for that ma
---
## Leaderboards:
By default the emulator assumes all leaderboards queried by the game `FindLeaderboard()` exist and creates them with the most common options (sort method descending, display type numeric).
In some games this default behavior doesn't work and so you may need to tweak which leaderboards the game sees.
By default the emulator assumes all leaderboards queried by the game `FindLeaderboard()` exist and creates them with the most common options (sort method descending, display type numeric)
In some games this default behavior doesn't work and so you may need to tweak which leaderboards the game sees
To do that, you can put a `leaderboards.txt` file in the `steam_settings` folder.
To do that, you can put a `leaderboards.txt` file in the `.\steam_settings` folder
The format is:
`LEADERBOARD_NAME=sort method=display type`
The format is: `LEADERBOARD_NAME=sort_method=display_type`
For the sort methods:
* 0 = none
@ -183,14 +179,14 @@ For the display type
* 2 = time seconds
* 3 = milliseconds
An example can be found in `steam_settings.EXAMPLE`
An example can be found in `.\steam_settings.EXAMPLE`
---
## Stats:
By default this emulator assumes all stats do not exist unless the option `allow_unknown_stats` in `configs.main.ini` is set to 1.
By default this emulator assumes all stats do not exist unless the option `allow_unknown_stats` in `configs.main.ini` is set to 1
To properly define the stats of a game, put a `stats.txt` file in the `steam_settings` folder.
To properly define the stats of a game, put a `stats.txt` file in the `.\steam_settings` folder
The format is:
`stat_name=type=default value`
@ -199,29 +195,29 @@ The type can be
* float
* avgrate
The default value is simply a number that represents the default value for the stat.
The default value is simply a number that represents the default value for the stat
You can use the command line tool `generate_emu_config` to generate a stats config
---
## SteamHTTP:
Create a `steam_settings\http\` folder which should contain the domain name and path to the files that will be returned by steamHTTP like so \(For example this url: `https://en.wikipedia.org/wiki/Main_Page`\):
Create a `.\steam_settings\http\` folder which should contain the domain name and path to the files that will be returned by steamHTTP like so \(For example this url: `https://en.wikipedia.org/wiki/Main_Page`\):
* Create a folder `steam_settings\http\en.wikipedia.org\wiki\Main_Page`
* Create a folder `.\steam_settings\http\en.wikipedia.org\wiki\Main_Page`
* The `Main_Page` **file** would contain the data returned by the steamHTTP api when it tries to access: `https://en.wikipedia.org/wiki/Main_Page`
An example that was made for payday 2 can be found in `steam_settings.EXAMPLE`
An example that was made for PayDay 2 can be found in `.\steam_settings.EXAMPLE`
---
## Avatar:
Copy a `png`, or a `jpg`, or a `jpeg` image file to your `GSE Settings/settings` folder and name it `account_avatar`.
You can also place this file inside the local `steam_settings` folder of the game.
Copy a `png`, or a `jpg`, or a `jpeg` image file to your `.\GSE Settings\settings` folder and name it `account_avatar`
You can also place this file inside the local `.\steam_settings` folder of the game
Players avatars are shared over the local network
You can find an example in `steam_settings.EXAMPLE`
You can find an example in `.\steam_settings.EXAMPLE`
---
@ -232,53 +228,55 @@ See the build in the experimental folder.
You must all be on the same LAN for it to work.
**IMPORTANT:**
Do not run more than one steam game with the **same appid** at the same time on the same computer with this emu or there might be network issues (dedicated servers should be fine though).
Do not run more than one steam game with the **same appid** at the same time on the same computer with this emu, or there might be network issues (dedicated servers should be fine though)
---
## Overlay:
**Note: at the moment this feature is only enabled in the experimental builds**
**It's a highly experimental feature, use at your own risk**
**It's a highly experimental feature, use at your own risk !**
---
This is made possible using the amazing third-party library `Ingame Overlay project`: https://github.com/Nemirtingas/ingame_overlay
The overlay can be enabled by modifying `configs.overlay.ini` and setting `enable_experimental_overlay=1`.
Use `SHIFT-TAB` to open the overlay.
The overlay can be enabled by modifying `configs.overlay.ini` and setting `enable_experimental_overlay=1`
Use `SHIFT-TAB` to open the overlay
This feature is **highly experimental** and might cause crashes or other problems.
This feature is **highly experimental** and might cause crashes or other problems
Alternatively, you can use the dedicated tool `lobby_connect` to join a game lobby.
Alternatively, you can use the dedicated tool `lobby_connect` to join a game lobby
---
## Overlay notifications sounds:
**Note: at the moment this feature is only enabled in the experimental builds for Windows only**
---
You can place a `.wav` file called `overlay_achievement_notification.wav` inside either the local `steam_settings/sounds` folder of the game, or inside `GSE Settings/settings/sounds` folder, which will be played whenever an achievement is unlocked.
You can place a `.wav` file called `overlay_achievement_notification.wav` inside either the local `.\steam_settings\sounds` folder of the game, or inside `.\GSE Settings\settings\sounds` folder, which will be played whenever an achievement is unlocked
You can place a `.wav` file called `overlay_friend_notification.wav` inside either the local `steam_settings/sounds` folder of the game, or inside `GSE Settings/settings/sounds` folder, which will be played whenever a friend sends an invitation.
You can place a `.wav` file called `overlay_friend_notification.wav` inside either the local `.\steam_settings\sounds` folder of the game, or inside `.\GSE Settings\settings\sounds` folder, which will be played whenever a friend sends an invitation
You can find an example in `steam_settings.EXAMPLE`
You can find an example in `.\steam_settings.EXAMPLE`
---
## Controller:
**Note: at the moment this feature is only enabled in the Windows experimental builds and the linux builds**
---
**Note: at the moment this feature is only enabled in the Windows experimental builds and the Linux builds**
**SteamController/SteamInput support is limited to XInput controllers**
SteamController/SteamInput support is limited to **XInput** controllers.
---
If your controller is not XInput, there are many tools (at least for windows) that you can use to make it emulate an XInput one.
Steam uses things called action sets for controller configuration. An action set is a group of action names.
Action names are bound to buttons, triggers or joysticks.
The emulator needs to know for each action set, which button is linked to which action name.
Steam uses things called action sets for controller configuration. An action set is a group of action names
Action names are bound to buttons, triggers or joysticks. The emulator needs to know for each action set, which button is linked to which action name
Create a `ACTION_SET_NAME.txt` file in the `steam_settings\controller\` folder for every action set the game uses.
Create a `ACTION_SET_NAME.txt` file in the `.\steam_settings\controller` folder for every action set the game uses
To see an example for the game Crystar see: `steam_settings.EXAMPLE\controller.EXAMPLE`
Example for the game Crystar: `.\steam_settings.EXAMPLE\controller.EXAMPLE`
In the action set txt files the format is:
* For digital actions (buttons, on or off):
@ -289,12 +287,12 @@ In the action set txt files the format is:
Actions can be bound to more than one button by separating the buttons with, like this:
`ACTION_NAME=A,B`
You can use the command line tool `generate_emu_config` to generate a config file.
Or if you want to configure a game yourself, find the `vdf` file for `xbox360` or `xbox one` controller of the game and use the tool `parse_controller_vdf`, you should be able to figure things out.
You can use the command line tool `generate_emu_config` to generate a config file
Or if you want to configure a game yourself, find the `vdf` file for `xbox360` or `xbox one` controller of the game and use the tool `parse_controller_vdf`, you should be able to figure things out
For example to get the vdf file for the game Crystar: https://steamdb.info/app/981750/config/
If you look at: `steamcontrollerconfigdetails`, you will see something like: `1779660455/controller_type: controller_xbox360`
`1779660455` refers to a file id that you can dl using your favorite steam workshop downloader site.
`1779660455` refers to a file id that you can download using your favourite steam workshop downloader site
The url would be: https://steamcommunity.com/sharedfiles/filedetails/?id=1779660455
The glyphs directory contains some glyphs for the controller buttons for the games that use the `GetGlyphForActionOrigin()` function.
@ -342,7 +340,7 @@ By default the emu will send the old token format for various APIs, like:
* `Steam_User::GetAuthSessionTicket()`
* `Steam_User::GetAuthTicketForWebApi()`
You can make the emu generate new ticket data, and additionally the GC token.
You can make the emu generate new ticket data, and additionally the GC token
Modify `configs.main.ini` and set `new_app_ticket=1` and additionally `gc_token=1`
---
@ -350,10 +348,10 @@ Modify `configs.main.ini` and set `new_app_ticket=1` and additionally `gc_token=
## Fake Windows dll/exe certificate and antivirus software:
The Windows build is signed with a fake self-signed certificate, this helps in bypassing some basic checks by apps,
but it also triggers some antivirus software.
but it also triggers some antivirus software
First of all, **never** install these certificates to your certificate store, they are randomly generated.
Second, the project is not a malware, if your antivirus software complains, be sure it's a false-positive.
First of all, **never** install these certificates to your certificate store, they are randomly generated
Second, the project is not a malware, if your antivirus software complains, be sure it's a false-positive
---
@ -395,26 +393,29 @@ Look for the column `API language code`
## Bypass overlay and auto accept game/lobby invites:
**Note: at the moment this feature is only enabled in the experimental builds**
---
When the overlay is enabled and working, you can bypass it and auto-accept invites (lobby or game) from a list of Steam IDs (SteamID64 format).
When the overlay is enabled and working, you can bypass it and auto-accept invites (lobby or game) from a list of Steam IDs (SteamID64 format)
The configuration file `auto_accept_invite.txt` allows you to do that, it works like this:
* Adding an empty file: will accept invites from anyone (same behavior as if the overlay was disabled)
* Adding a file with some friends IDs (each on a separate line):
* If the friend ID is found in this file, the invitation will be accepted automatically
* If the friend ID is not found, you'll get the regular overlay invitation
Check the example file in the `steam_settings` folder
Check the example file in the `.\steam_settings` folder
---
## Enable non-LAN behavior in `steam_matchmaking_servers`:
By default, match making servers (which handles browsing for matches) will always return LAN servers list whenever the game inquires about the available servers with a specific type (Internet, Friends, LAN, etc...).
You can make the emu return the proper/actual servers list for the given type, by modifying `configs.main.ini` and setting `matchmaking_server_list_actual_type-1`.
**This is currently broken**.
By default, match making servers (which handles browsing for matches) will always return LAN servers list whenever the game inquires about the available servers with a specific type (Internet, Friends, LAN, etc...)
You can make the emu return the proper/actual servers list for the given type, by modifying `configs.main.ini` and setting `matchmaking_server_list_actual_type-1`
**This is currently broken**
Also, match making servers will return the info of the server from the incoming local packets, you can make the emu retrieve the actual server info by performing a source server query, this is enabled by setting `matchmaking_server_details_via_source_query-1` inside `configs.main.ini`.
**This is currently broken**.
**This is currently broken**
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,27 +1,26 @@
# ############################################################################## #
# you do not have to specify everything, pick and choose the options you need only
# ############################################################################## #
# ################################################################################ #
# you do not have to specify everything, pick and choose the options you need only #
# ################################################################################ #
[app::general]
# by default the emu will report a `non-beta` branch when the game calls `Steam_Apps::GetCurrentBetaName()`
# make the game/app think we're playing on a beta branch
# by default the emu will report a 'non-beta' branch when the game calls 'Steam_Apps::GetCurrentBetaName()'
# if 1, makes the game/app think we're playing on a beta branch
is_beta_branch=0
# the name of the current branch, this must also exist in branches.json
# otherwise will be ignored by the emu and the default 'public' branch will be used
# the name of the current branch - this must also exist in 'branches.json'
# otherwise it'll be ignored and the default 'public' branch will be used
branch_name=public
[app::dlcs]
# should the emu report all DLCs as unlocked
# some games check for "hidden" DLCs, hence this should be set to 1 in that case
# but other games detect emus by querying for a fake/bad DLC, hence this should be set to 0 in that case
# default=1
# report all DLCs as unlocked; some games check for 'hidden' DLCs, hence this should be set to 1 in that case
# however, other games detect emus by querying for a fake/bad DLC, hence this should be set to 0 in that case
unlock_all=0
# format: ID=name
1234=DLCNAME
56789=This is another example DLC name
# 1234=DLCNAME
# 56789=This is another example DLC name
[app::paths]
556760=../DLCRoot0
1234=./folder_where_steam_api_is
3456=../folder_one_level_above_where_steam_api_is
5678=../../folder_two_levels_above_where_steam_api_is
# format: ID=path
# 556760=../DLCRoot0
# 1234=./folder_where_steam_api_is
# 3456=../folder_one_level_above_where_steam_api_is
# 5678=../../folder_two_levels_above_where_steam_api_is

View File

@ -1,59 +1,54 @@
# ############################################################################## #
# you do not have to specify everything, pick and choose the options you need only
# ############################################################################## #
# ################################################################################ #
# you do not have to specify everything, pick and choose the options you need only #
# ################################################################################ #
[main::general]
# generate new app auth ticket
new_app_ticket=1
# generate/embed GC token inside new App Ticket
# generate/embed GC token inside new app ticket
gc_token=1
# pretend the app is running on a steam deck
steam_deck=0
# enable avatar functionality
enable_account_avatar=0
# prevent Steam_User_Stats::FindLeaderboard() from always succeeding and creating the unknown leaderboard
# not recommended to disable this
# default=0, not recommended to change it
disable_leaderboards_create_unknown=0
# the emu will only save/update stats defined by the user, unknown stats requested or updated by the game will be rejected
# by default, the emu will only save/update stats defined in 'stats.txt', unknown stats requested or updated by the game will be rejected
# set this to 1 to allow unknown stats
# default=0
allow_unknown_stats=0
# whenever a game updates a stat which is tied to an achievement progress, the emu will save that progress immediately
# but some games will update the stat very frequently (with lower & higher values) resulting in a spam of disk writes or overlay notifications
# set this to 0 to save any stat achievement progress value (higher or lower)
# this has no impact on the stat itself, only the achievement progress of a stat which is tied to an achievement
# also has no impact on the functions which directly change stats, achievements, or achievements progress
# default=1
# if 0, whenever a game updates a stat which is tied to an achievement progress, the emu will save that stat progress immediately
# some games will update the stat very frequently (with lower & higher values) resulting in a spam of disk writes or overlay notifications
# set this to 1 to save stat progress only on higher progress value, thus avoiding spam of disk writes or overlay notifications
# this has no impact on the stat itself, only the achievement progress of a stat tied to an achievement progress
# also, this has no impact on the functions which directly change stats, achievements, or achievements progress
save_only_higher_stat_achievement_progress=1
# synchronize user stats/achievements with game servers as soon as possible instead of caching them until the next call to `Steam_RunCallbacks()`
# not recommended
# default=0, not recommended to change it
immediate_gameserver_stats=0
# use the proper type of the server list (internet, friends, etc...) when requested by the game
# otherwise, the emu will always return the type "LAN server"
# not recommended
# otherwise, the emu will always return the type 'LAN server'
# default=0, not recommended to change it
matchmaking_server_list_actual_type=0
# grab the server details for match making using an actual server query
# not recommended
# default=0, not recommended to change it
matchmaking_server_details_via_source_query=0
# very basic crash logger/printer
# this is intended to debug some annoying scenarios, and best used with the debug build of the emu
crash_printer_location=./path/relative/to/dll/crashes.txt
crash_printer_location=./EMU_CRASHES.txt
[main::connectivity]
# prevent hooking OS networking APIs and allow any external requests
# only used by the experimental builds on Windows
disable_lan_only=0
# disable all steam networking interface functionality
# this won't prevent games/apps from making external requests
disable_lan_only=1
# disable all steam networking interface functionality - this won't prevent games/apps from making external requests
# networking related functionality like lobbies or those that launch a server in the background will not work
disable_networking=0
# change the UDP/TCP port the emulator listens on, you should probably not change this because everyone needs to use the same port or you won't find yourselves on the network
listen_port=47584
# pretend steam is running in offline mode
# Some games that connect to online servers might only work if the steam emu behaves like steam is in offline mode
# pretend steam is running in offline mode; some games that connect to online servers might only work if the steam emu behaves like steam is in offline mode
offline=0
# prevent sharing stats and achievements with any game server,
# this also disables the interface ISteamGameServerStats
# prevent sharing stats and achievements with any game server, also disables the interface ISteamGameServerStats
disable_sharing_stats_with_gameserver=0
# do not send server details to the server browser, only works for game servers
disable_source_query=0
@ -66,19 +61,20 @@ disable_lobby_creation=0
# * set disable_lan_only=1
# * set disable_networking=0
# this will **not** work if the app is using native/OS web APIs
download_steamhttp_requests=0
download_steamhttp_requests=1
############################################
# mostly workarounds for specific problems #
############################################
# mostly workarounds for specific problems
[main::misc]
# force SetAchievement() to always return true
achievements_bypass=0
# force the function Steam_HTTP::SendHTTPRequest() to always succeed
force_steamhttp_success=0
# env var SteamOverlayGameId breaks Steam Input when the game is added to Steam as a non-steam game
disable_steamoverlaygameid_env_var=0
# add many Steam apps to the list of owned DLCs and the emu's list of installed app IDs
# useful for many Source-based games
disable_steamoverlaygameid_env_var=1
# add many Steam apps to the list of owned DLCs and the emu's list of installed app IDs, useful for many Source-based games
# https://developer.valvesoftware.com/wiki/Steam_Application_IDs
# https://developer.valvesoftware.com/wiki/Dedicated_Servers_List
# default=0
enable_steam_preowned_ids=0

View File

@ -1,19 +1,14 @@
# ----------------------------
# XXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXX USE AT YOUR OWN RISK XXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXX
# ----------------------------
#
# This feature might cause crashes or other problems
#
# ############################################################################## #
# you do not have to specify everything, pick and choose the options you need only
# ############################################################################## #
# #
# USE AT YOUR OWN RISK :: This feature might cause crashes or other problems #
# #
# ################################################################################ #
# you do not have to specify everything, pick and choose the options you need only #
# ################################################################################ #
[overlay::general]
# enable the experimental overlay, might cause crashes
enable_experimental_overlay=0
# amount of time to wait before attempting to detect and hook the renderer (DirectX, OpenGL, etc...)
enable_experimental_overlay=1
# amount of time to wait before attempting to detect and hook the renderer (DirectX, OpenGL, Vulkan, etc...)
# default=0
hook_delay_sec=0
# timeout for the renderer detector
@ -33,13 +28,12 @@ disable_warning_bad_appid=0
disable_warning_local_save=0
[overlay::appearance]
# load custom TrueType font from a path, it could be absolute, or relative
# relative paths will be looked up inside the local folder "steam_settings/fonts" first,
# if that wasn't found, it will be looked up inside the global folder "GSE Settings/settings/fonts"
Font_Override=Roboto-Medium.ttf
# global font size
# for built-in font, multiple of 16 is recommended. e.g. 16 32...
Font_Size=20.0
# load custom TrueType font from an absolute or relative path
# relative paths will be looked up inside the local folder 'steam_settings/fonts' first,
# if not found, it will be looked up inside the global folder 'GSE Settings/settings/fonts'
#Font_Override=Roboto-Medium.ttf
# global font size - for built-in font, multiple of 16 is recommended, e.g. 16, 32, etc
Font_Size=16.0
# achievement icon size
Icon_Size=64.0
@ -56,24 +50,25 @@ Notification_A=1.0
# notifications corners roundness
Notification_Rounding=10.0
# horizontal (x) and vertical (y) margins for the notifications
Notification_Margin_x=5.0
Notification_Margin_y=5.0
# duration/timing for various notification types (in seconds)
# duration of notification animation in seconds. Set to 0 to disable
# duration of notification animation in seconds - set to 0 to disable
Notification_Animation=0.35
# duration of achievement progress indication
Notification_Duration_Progress=6.0
# duration of achievement unlocked
Notification_Duration_Achievement=7.0
Notification_Duration_Achievement=6.0
# duration of friend invitation
Notification_Duration_Invitation=8.0
# duration of chat message
Notification_Duration_Chat=4.0
# format for the achievement unlock date/time, limited to 79 characters
# if the output formatted string exceeded this limit, the builtin format will be used
# if the output formatted string exceeded this limit, the built-in format will be used
# look for the format here: https://en.cppreference.com/w/cpp/chrono/c/strftime
Achievement_Unlock_Datetime_Format=%Y/%m/%d - %H:%M:%S

View File

@ -1,15 +1,14 @@
# ############################################################################## #
# you do not have to specify everything, pick and choose the options you need only
# ############################################################################## #
# ################################################################################ #
# you do not have to specify everything, pick and choose the options you need only #
# ################################################################################ #
[user::general]
# user account name
account_name=gse orca
account_name=goldberg
# Steam64 format
account_steamid=76561197960287930
# the language reported to the app/game
# look for the column 'API language code' here: https://partner.steamgames.com/doc/store/localization/languages
# this must also exist in 'supported_languages.txt', otherwise it will be ignored by the emu
# default=english
language=english
# report a country IP if the game queries it
@ -19,11 +18,10 @@ ip_country=US
[user::saves]
# when this is set, it will force the emu to use the specified location instead of the default global location
# path could be absolute, or relative to the location of the .dll/.so
# leading and trailing whitespaces are trimmed
# path could be absolute, or relative to the location of the .dll/.so, leading and trailing whitespaces are trimmed
# when this option is used, the global settings folder is completely ignored, allowing a full portable behavior
local_save_path=./path/relative/to/dll
# name of the base folder used to store save data, leading and trailing whitespaces are trimmed
# only useful if 'local_save_path' isn't used
#local_save_path=GSE Saves
# name of the default global folder used to store save data, leading and trailing whitespaces are trimmed
# default=GSE Saves
saves_folder_name=GSE Saves

View File

@ -1 +1,2 @@
Place your overlay fonts here, then modify `overlay_appearance` and point at the desired one.
Place your overlay fonts here, then modify `Font_Override` in `configs.overlay.ini` and point at the desired one

View File

@ -1,19 +1,19 @@
{
"9422": {
"12345": {
"title": "Some Workshop Item",
"description": "This is the prefered way of specifying mod details, primary file must exist in steam_settings/mods/9422 (along with any other mod files), and preview file must exist in steam_settings/mod_images/9422",
"description": "This is the prefered way of specifying mod details, primary file must exist in steam_settings/mods/12345 (along with any other mod files), and preview file must exist in steam_settings/mods_img/12345",
"primary_filename": "metadata.json",
"preview_filename": "thumbnail.png"
"preview_filename": "my_preview_image.jpg"
},
"111111111": {
"title": "Example Workshop Item",
"description": "Example Workshop Item with all Details",
"description": "Example Workshop Item with all details",
"steam_id_owner": 11111111111111111,
"time_created": 1554997000,
"time_updated": 1554997000,
"time_added": 1554997000,
"tags": "Maps, exampleTag, exampleTag2",
"tags": "Maps, exampleTag1, exampleTag2",
"primary_filename": "test.sav",
"primary_filesize": 1000000,
"preview_filename": "test.png",
@ -25,14 +25,14 @@
"upvotes": 10,
"downvotes": 1,
"num_children": 0,
"path": "C:\\games\\my_game\\steam_settings\\mods_data\\mod_111111111_data_folder",
"preview_url": "file://C:/games/my_game/steam_settings/mod_images/my_preview.jpg",
"path": "C:\\games\\my_game\\steam_settings\\mods\\111111111",
"preview_url": "file://C:/games/my_game/steam_settings/mods_img/111111111/preview.jpg",
"score": 0.7
},
"222222222": {
"title": "Example Workshop Item",
"description": "Example Workshop Item with some Details",
"description": "Example Workshop Item with some details",
"preview_url": "https://commons.wikimedia.org/wiki/File:Tree_in_Mississippi.jpg",
"score": 1.0
},

View File

@ -0,0 +1,2 @@
Put here the file whose name is specified by the JSON key `preview_filename` inside `mods.json`

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,5 +1,7 @@
**This is currently available for Windows only**
Place your overlay audio files here.
Place your overlay audio files here:
* `overlay_achievement_notification.wav`: will be played when an achievement is unlocked
* `overlay_friend_notification.wav`: will be played when a friend sends an invitation

View File

@ -1,2 +1,2 @@
Don't forget to modify the file `ColdClientLoader.ini` to point at the folder `extra_dlls`.
`load_order.txt` will force the order in which the dlls are injected into the app
The file`load_order.txt` will force the order in which the dlls are injected into the app.

View File

@ -1,18 +1,18 @@
This directory contains additional resources used during build.
* The folder [win](./win/) contains the resources added to the .dll/.exe binaries,
these include version info and an immitation of any extra resources found in the original .dll/.exe.
these include version info and an imitation of any extra resources found in the original .dll/.exe.
These resources are built using Microsoft's resourec compiler `rc.exe` during the build process,
These resources are built using Microsoft's resource compiler `rc.exe` during the build process,
and the output files are stored in `build\tmp\win\rsrc` as `*.res`.
These resources are later passed to the compiler `cl.exe` as any normal `.cpp` or `.c` file:
```bash
cl.exe myfile.cpp myres.res -o myout.exe
```
* [api](./win/api/): contains an immitation of the resources found in `steam_api(64).dll`
* [client](./win/client/): contains an immitation of the resources found in `steamclient(64).dll`
* [launcher](./win/launcher/): contains an immitation of the resources found in `steam.exe`
* [game_overlay_renderer](./win/game_overlay_renderer/): contains an immitation of the resources found in `GameOverlayRenderer(64).dll`
* [file_dos_stub](./win/file_dos_stub/): contains an immitation of how the DOS stub is manipulated after build
* [api](./win/api/): contains an imitation of the resources found in `steam_api(64).dll`
* [client](./win/client/): contains an imitation of the resources found in `steamclient(64).dll`
* [launcher](./win/launcher/): contains an imitation of the resources found in `steam.exe`
* [game_overlay_renderer](./win/game_overlay_renderer/): contains an imitation of the resources found in `GameOverlayRenderer(64).dll`
* [file_dos_stub](./win/file_dos_stub/): contains an imitation of how the DOS stub is manipulated after build

View File

@ -1,29 +1,24 @@
## What is this ?
This is a command line tool to generate the `steam_settings` folder for the emu,
you need a Steam account to grab most info, but you can use an anonymous account with limited access to Steam data.
<br/>
This is a command line tool to generate complete custom configs, including the `steam_settings` folder for the emu.
You need a Steam account to grab most info, but you can use an anonymous account with limited access to Steam data.
## Usage
```bash
generate_emu_config [options] <app id 1> [app id 2] [app id 3] ...
```
---
### Available **\[options\]**
To get all available options, run the tool without any arguments.
---
### Login:
## Using *my_login.txt*
You'll be asked each time to enter your username and password, but you can automate this prompt.
* You can create a file called `my_login.txt` beside this tool with the following data:
- Your **username** on the **first** line
- Your **password** on the **second** line
**But beware though of accidentally distributing your login data when using this file**.
Beware of accidentally distributing your login data when using this file !
---
* You can define these environment variables, note that these environment variables will override the file `my_login.txt`:
- `GSE_CFG_USERNAME`
@ -31,34 +26,37 @@ You'll be asked each time to enter your username and password, but you can autom
When defining these environment variables in a script, take care of special characters.
Example for Windows:
Example for Windows:
```shell
set GSE_CFG_USERNAME=my_username
set GSE_CFG_PASSWORD=123 abc
set GSE_CFG_PASSWORD=123abc
generate_emu_config.exe 480
```
Example for Linux:
Example for Linux:
```shell
export GSE_CFG_USERNAME=my_username
export GSE_CFG_PASSWORD=123 abc
export GSE_CFG_PASSWORD=123abc
./generate_emu_config 480
```
---
### Downloading data for new apps/games and defining extra account IDs:
## Using *top_owners_ids.txt*
The script uses public Steam IDs (in Steam64 format) of apps/games owners in order to query the required info, such as achievement data.
By default, it has a built-in list of public users IDs, and you can extend this list by creating a file called `top_owners_ids.txt` beside the script, then add each new ID in Steam64 format on a separate line.
By default, it has a built-in list of public users IDs, which can be extended by creating a file called `top_owners_ids.txt` beside the script, then adding each new ID in Steam64 format on a separate line. When you login with a non-anonymous account, its ID will be added to the top of the list.
When you login with a non-anonymous account, its ID will be added to the top of the list.
Steam IDs with public profiles that own a lot of games --- https://steamladder.com/ladder/games/
How to generate/update `top_owners_ids.txt` upon running generate_emu_config:
<br/>
- copy and paste the above address in your web browser
- right click and save web page, html only with the name top_owners_ids.html
- copy and paste `top_owners_ids.html` next to generate_emu_config exe or py
---
## Attributions and credits
* Windows icon by: [FroyoShark](https://www.iconarchive.com/artist/froyoshark.html)
license: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/)
License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/)
Source: [icon archive: Steam Icon](https://www.iconarchive.com/show/enkel-icons-by-froyoshark/Steam-icon.html)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,167 @@
[General]
# 0 - Show Advanced Run window
# 1 - Skip Advanced Run window
AutoRun=1
#
# 1 - Run .EXE File
# 2 - ShellExecute - Open the specified file, folder or URL with the default program
# 3 - Command Prompt - Execute command or batch file of Windows Command Prompt (.BAT, .CMD)
# 4 - PowerShell Command - Execute the specified PowerShell command
# 5 - PowerShell Script File - Run the specified PowerShell script (.PS1)
RunMode=3
# open, edit, explore, print - only for RunMode 2
ShellExecuteAction=open
# Program to Run - only for RunMode 1. For RunMode 2, 3, 4, 5 use CommandLine
EXEFilename=
# Command-line arguments, file to ShellExecute, Command Prompt / PowerShell file to run or Command Prompt / PowerShell command string to execute
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandLine=.\steam_misc\tools\bat\acw_helper.bat
# Start Directory - make sure any paths in CommandLine are relative to the start directory
StartDirectory=.\
# AdvancedRun process will wait in the background until the process executed by AdvancedRun is terminated, 0 - disabled, 1 -enabled
WaitProcess=1
# Process Priority Class:
# 64 - low, 32 - normal, 128 - high, 256 - realtime, 16384 - below normal, 32768 - above normal
PriorityClass=32
# Command Window Mode - only for RunMode 3, 4, 5
# 1 - Leave window opened after executing commands (same as 'CMD /K'), 2 - Close window after executing commands (same as 'CMD /C') - only for RunMode 3, 4, 5
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandWindowMode=2
# Main window state
# 0 - hidden, 1 - normal, 2 - minimized, 3 - maximized
WindowState=0
# Main window position
UseWindowPosition=0
WindowPosition=20,20
# Main window size
UseWindowSize=0
WindowSize=640,400
#
# 1 - Current User - Allow UAC Elevation
# 2 - Current User - Without UAC Elevation
# 3 - Administrator (Force UAC Elevation)
# 4 - SYSTEM User
# 5 - User of the selected process
# 6 - Child of the selected process (Using code injection)
# 7 - Specified username and password
# 8 - TrustedInstaller
# 9 - Another logged-in user
# 10 - Network Service
# 11 - Local Service
RunAs=1
# Selected process name - only for RunAs 5, 6
RunAsProcessName=
# Specified username - only for RunAs 7, 9 (password can't be set in this .CFG file, so it's better to run with /RunAsUserName "username" /RunAsPassword "password" parameters instead)
RunAsUserName=
# Specified domain - only for RunAs 7
RunAsDomain=
#
# Run on remote computer with temporary Windows service, 0 - disabled, 1 - enabled
RunFromService=0
# Remote computer name - only for RunFromService 1
ComputerName=
#
# Use search path to find the program location if the full path is not specified, 0 - disabled, 1 - enabled
UseSearchPath=0
# Parse the environment variables inside the command-line string before passing it to the program
ParseVarCommandLine=0
#
# Use process affinity mask, 0 - disabled, 1 - enabled
UseAffinityMask=0
# Set process affinity mask (space-delimited list) - e.g. '0 1 2 3' process runs only on first 4 cores
AffinityMask=0 1
#
# 0 - Compatibility mode disabled
# 1 - Windows 95
# 2 - Windows 98
# 3 - Windows NT 4.0 SP5
# 4 - Windows 2000
# 5 - Windows XP SP2
# 6 - Windows XP SP3
# 7 - Server 2003 SP1
# 8 - Server 2008 SP1
# 9 - Vista
# 10 - Vista SP1
# 11 - Vista SP2
# 12 - Windows 7
# 13 - Windows 8
OSCompatMode=0
# Use 1 to disable visual themes
CompatDisableVisualThemes=0
# Use 1 to disable desktop composition
CompatDisableDesktopComp=0
# Use 1 to run in 640 x 480 resolution
Compat640480=0
# Use 1 to disable full screen optimizations
CompatDisableFullScreenOpt=0
# 0 - Reduced colors disabled
# 1 - 8-bit, 256 colors
# 2 - 16-bit, 65536 colors
CompatColors=0
# 0 - High DPI scaling override disabled
# 1 - Application
# 2 - System
# 3 - System Enhanced
CompatHighDPI=0
# 1 - Use current system environment variables without any change
# 2 - Merge the following environment variables with the system variables
# 3 - Use only the following environment variables (ignore the system variables)
EnvironmentVariablesMode=1
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D5 03 00 00 4B 04 00 00 A2 08 00 00 FC 07 00 00
[EnvironmentVariables]
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 78 03 00 00 FC 02 00 00 45 08 00 00 AD 06 00 00
# Number of environment variables to merge - only for EnvironmentVariablesMode 2, 3
Lines=0
# Merge the following environment variables, one by one on each line
Line1=
Line2=
Line3=
Line4=
Line5=
Line6=
Line7=
Line8=
Line9=

View File

@ -0,0 +1,167 @@
[General]
# 0 - Show Advanced Run window
# 1 - Skip Advanced Run window
AutoRun=1
#
# 1 - Run .EXE File
# 2 - ShellExecute - Open the specified file, folder or URL with the default program
# 3 - Command Prompt - Execute command or batch file of Windows Command Prompt (.BAT, .CMD)
# 4 - PowerShell Command - Execute the specified PowerShell command
# 5 - PowerShell Script File - Run the specified PowerShell script (.PS1)
RunMode=3
# open, edit, explore, print - only for RunMode 2
ShellExecuteAction=open
# Program to Run - only for RunMode 1. For RunMode 2, 3, 4, 5 use CommandLine
EXEFilename=
# Command-line arguments, file to ShellExecute, Command Prompt / PowerShell file to run or Command Prompt / PowerShell command string to execute
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandLine=.\steam_misc\tools\bat\debug_switch.bat
# Start Directory - make sure any paths in CommandLine are relative to the start directory
StartDirectory=.\
# AdvancedRun process will wait in the background until the process executed by AdvancedRun is terminated, 0 - disabled, 1 -enabled
WaitProcess=1
# Process Priority Class:
# 64 - low, 32 - normal, 128 - high, 256 - realtime, 16384 - below normal, 32768 - above normal
PriorityClass=32
# Command Window Mode - only for RunMode 3, 4, 5
# 1 - Leave window opened after executing commands (same as 'CMD /K'), 2 - Close window after executing commands (same as 'CMD /C') - only for RunMode 3, 4, 5
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandWindowMode=2
# Main window state
# 0 - hidden, 1 - normal, 2 - minimized, 3 - maximized
WindowState=0
# Main window position
UseWindowPosition=0
WindowPosition=20,20
# Main window size
UseWindowSize=0
WindowSize=640,400
#
# 1 - Current User - Allow UAC Elevation
# 2 - Current User - Without UAC Elevation
# 3 - Administrator (Force UAC Elevation)
# 4 - SYSTEM User
# 5 - User of the selected process
# 6 - Child of the selected process (Using code injection)
# 7 - Specified username and password
# 8 - TrustedInstaller
# 9 - Another logged-in user
# 10 - Network Service
# 11 - Local Service
RunAs=1
# Selected process name - only for RunAs 5, 6
RunAsProcessName=
# Specified username - only for RunAs 7, 9 (password can't be set in this .CFG file, so it's better to run with /RunAsUserName "username" /RunAsPassword "password" parameters instead)
RunAsUserName=
# Specified domain - only for RunAs 7
RunAsDomain=
#
# Run on remote computer with temporary Windows service, 0 - disabled, 1 - enabled
RunFromService=0
# Remote computer name - only for RunFromService 1
ComputerName=
#
# Use search path to find the program location if the full path is not specified, 0 - disabled, 1 - enabled
UseSearchPath=0
# Parse the environment variables inside the command-line string before passing it to the program
ParseVarCommandLine=0
#
# Use process affinity mask, 0 - disabled, 1 - enabled
UseAffinityMask=0
# Set process affinity mask (space-delimited list) - e.g. '0 1 2 3' process runs only on first 4 cores
AffinityMask=0 1
#
# 0 - Compatibility mode disabled
# 1 - Windows 95
# 2 - Windows 98
# 3 - Windows NT 4.0 SP5
# 4 - Windows 2000
# 5 - Windows XP SP2
# 6 - Windows XP SP3
# 7 - Server 2003 SP1
# 8 - Server 2008 SP1
# 9 - Vista
# 10 - Vista SP1
# 11 - Vista SP2
# 12 - Windows 7
# 13 - Windows 8
OSCompatMode=0
# Use 1 to disable visual themes
CompatDisableVisualThemes=0
# Use 1 to disable desktop composition
CompatDisableDesktopComp=0
# Use 1 to run in 640 x 480 resolution
Compat640480=0
# Use 1 to disable full screen optimizations
CompatDisableFullScreenOpt=0
# 0 - Reduced colors disabled
# 1 - 8-bit, 256 colors
# 2 - 16-bit, 65536 colors
CompatColors=0
# 0 - High DPI scaling override disabled
# 1 - Application
# 2 - System
# 3 - System Enhanced
CompatHighDPI=0
# 1 - Use current system environment variables without any change
# 2 - Merge the following environment variables with the system variables
# 3 - Use only the following environment variables (ignore the system variables)
EnvironmentVariablesMode=1
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D5 03 00 00 4B 04 00 00 A2 08 00 00 FC 07 00 00
[EnvironmentVariables]
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 78 03 00 00 FC 02 00 00 45 08 00 00 AD 06 00 00
# Number of environment variables to merge - only for EnvironmentVariablesMode 2, 3
Lines=0
# Merge the following environment variables, one by one on each line
Line1=
Line2=
Line3=
Line4=
Line5=
Line6=
Line7=
Line8=
Line9=

View File

@ -0,0 +1,167 @@
[General]
# 0 - Show Advanced Run window
# 1 - Skip Advanced Run window
AutoRun=1
#
# 1 - Run .EXE File
# 2 - ShellExecute - Open the specified file, folder or URL with the default program
# 3 - Command Prompt - Execute command or batch file of Windows Command Prompt (.BAT, .CMD)
# 4 - PowerShell Command - Execute the specified PowerShell command
# 5 - PowerShell Script File - Run the specified PowerShell script (.PS1)
RunMode=3
# open, edit, explore, print - only for RunMode 2
ShellExecuteAction=open
# Program to Run - only for RunMode 1. For RunMode 2, 3, 4, 5 use CommandLine
EXEFilename=
# Command-line arguments, file to ShellExecute, Command Prompt / PowerShell file to run or Command Prompt / PowerShell command string to execute
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandLine=.\steam_misc\tools\bat\generate_interfaces.bat
# Start Directory - make sure any paths in CommandLine are relative to the start directory
StartDirectory=.\
# AdvancedRun process will wait in the background until the process executed by AdvancedRun is terminated, 0 - disabled, 1 -enabled
WaitProcess=1
# Process Priority Class:
# 64 - low, 32 - normal, 128 - high, 256 - realtime, 16384 - below normal, 32768 - above normal
PriorityClass=32
# Command Window Mode - only for RunMode 3, 4, 5
# 1 - Leave window opened after executing commands (same as 'CMD /K'), 2 - Close window after executing commands (same as 'CMD /C') - only for RunMode 3, 4, 5
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandWindowMode=2
# Main window state
# 0 - hidden, 1 - normal, 2 - minimized, 3 - maximized
WindowState=0
# Main window position
UseWindowPosition=0
WindowPosition=20,20
# Main window size
UseWindowSize=0
WindowSize=640,400
#
# 1 - Current User - Allow UAC Elevation
# 2 - Current User - Without UAC Elevation
# 3 - Administrator (Force UAC Elevation)
# 4 - SYSTEM User
# 5 - User of the selected process
# 6 - Child of the selected process (Using code injection)
# 7 - Specified username and password
# 8 - TrustedInstaller
# 9 - Another logged-in user
# 10 - Network Service
# 11 - Local Service
RunAs=1
# Selected process name - only for RunAs 5, 6
RunAsProcessName=
# Specified username - only for RunAs 7, 9 (password can't be set in this .CFG file, so it's better to run with /RunAsUserName "username" /RunAsPassword "password" parameters instead)
RunAsUserName=
# Specified domain - only for RunAs 7
RunAsDomain=
#
# Run on remote computer with temporary Windows service, 0 - disabled, 1 - enabled
RunFromService=0
# Remote computer name - only for RunFromService 1
ComputerName=
#
# Use search path to find the program location if the full path is not specified, 0 - disabled, 1 - enabled
UseSearchPath=0
# Parse the environment variables inside the command-line string before passing it to the program
ParseVarCommandLine=0
#
# Use process affinity mask, 0 - disabled, 1 - enabled
UseAffinityMask=0
# Set process affinity mask (space-delimited list) - e.g. '0 1 2 3' process runs only on first 4 cores
AffinityMask=0 1
#
# 0 - Compatibility mode disabled
# 1 - Windows 95
# 2 - Windows 98
# 3 - Windows NT 4.0 SP5
# 4 - Windows 2000
# 5 - Windows XP SP2
# 6 - Windows XP SP3
# 7 - Server 2003 SP1
# 8 - Server 2008 SP1
# 9 - Vista
# 10 - Vista SP1
# 11 - Vista SP2
# 12 - Windows 7
# 13 - Windows 8
OSCompatMode=0
# Use 1 to disable visual themes
CompatDisableVisualThemes=0
# Use 1 to disable desktop composition
CompatDisableDesktopComp=0
# Use 1 to run in 640 x 480 resolution
Compat640480=0
# Use 1 to disable full screen optimizations
CompatDisableFullScreenOpt=0
# 0 - Reduced colors disabled
# 1 - 8-bit, 256 colors
# 2 - 16-bit, 65536 colors
CompatColors=0
# 0 - High DPI scaling override disabled
# 1 - Application
# 2 - System
# 3 - System Enhanced
CompatHighDPI=0
# 1 - Use current system environment variables without any change
# 2 - Merge the following environment variables with the system variables
# 3 - Use only the following environment variables (ignore the system variables)
EnvironmentVariablesMode=1
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D5 03 00 00 4B 04 00 00 A2 08 00 00 FC 07 00 00
[EnvironmentVariables]
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 78 03 00 00 FC 02 00 00 45 08 00 00 AD 06 00 00
# Number of environment variables to merge - only for EnvironmentVariablesMode 2, 3
Lines=0
# Merge the following environment variables, one by one on each line
Line1=
Line2=
Line3=
Line4=
Line5=
Line6=
Line7=
Line8=
Line9=

View File

@ -0,0 +1,167 @@
[General]
# 0 - Show Advanced Run window
# 1 - Skip Advanced Run window
AutoRun=1
#
# 1 - Run .EXE File
# 2 - ShellExecute - Open the specified file, folder or URL with the default program
# 3 - Command Prompt - Execute command or batch file of Windows Command Prompt (.BAT, .CMD)
# 4 - PowerShell Command - Execute the specified PowerShell command
# 5 - PowerShell Script File - Run the specified PowerShell script (.PS1)
RunMode=3
# open, edit, explore, print - only for RunMode 2
ShellExecuteAction=open
# Program to Run - only for RunMode 1. For RunMode 2, 3, 4, 5 use CommandLine
EXEFilename=
# Command-line arguments, file to ShellExecute, Command Prompt / PowerShell file to run or Command Prompt / PowerShell command string to execute
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandLine=.\steam_misc\tools\bat\lobby_connect.bat
# Start Directory - make sure any paths in CommandLine are relative to the start directory
StartDirectory=.\
# AdvancedRun process will wait in the background until the process executed by AdvancedRun is terminated, 0 - disabled, 1 -enabled
WaitProcess=1
# Process Priority Class:
# 64 - low, 32 - normal, 128 - high, 256 - realtime, 16384 - below normal, 32768 - above normal
PriorityClass=32
# Command Window Mode - only for RunMode 3, 4, 5
# 1 - Leave window opened after executing commands (same as 'CMD /K'), 2 - Close window after executing commands (same as 'CMD /C') - only for RunMode 3, 4, 5
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandWindowMode=2
# Main window state
# 0 - hidden, 1 - normal, 2 - minimized, 3 - maximized
WindowState=0
# Main window position
UseWindowPosition=0
WindowPosition=20,20
# Main window size
UseWindowSize=0
WindowSize=640,400
#
# 1 - Current User - Allow UAC Elevation
# 2 - Current User - Without UAC Elevation
# 3 - Administrator (Force UAC Elevation)
# 4 - SYSTEM User
# 5 - User of the selected process
# 6 - Child of the selected process (Using code injection)
# 7 - Specified username and password
# 8 - TrustedInstaller
# 9 - Another logged-in user
# 10 - Network Service
# 11 - Local Service
RunAs=1
# Selected process name - only for RunAs 5, 6
RunAsProcessName=
# Specified username - only for RunAs 7, 9 (password can't be set in this .CFG file, so it's better to run with /RunAsUserName "username" /RunAsPassword "password" parameters instead)
RunAsUserName=
# Specified domain - only for RunAs 7
RunAsDomain=
#
# Run on remote computer with temporary Windows service, 0 - disabled, 1 - enabled
RunFromService=0
# Remote computer name - only for RunFromService 1
ComputerName=
#
# Use search path to find the program location if the full path is not specified, 0 - disabled, 1 - enabled
UseSearchPath=0
# Parse the environment variables inside the command-line string before passing it to the program
ParseVarCommandLine=0
#
# Use process affinity mask, 0 - disabled, 1 - enabled
UseAffinityMask=0
# Set process affinity mask (space-delimited list) - e.g. '0 1 2 3' process runs only on first 4 cores
AffinityMask=0 1
#
# 0 - Compatibility mode disabled
# 1 - Windows 95
# 2 - Windows 98
# 3 - Windows NT 4.0 SP5
# 4 - Windows 2000
# 5 - Windows XP SP2
# 6 - Windows XP SP3
# 7 - Server 2003 SP1
# 8 - Server 2008 SP1
# 9 - Vista
# 10 - Vista SP1
# 11 - Vista SP2
# 12 - Windows 7
# 13 - Windows 8
OSCompatMode=0
# Use 1 to disable visual themes
CompatDisableVisualThemes=0
# Use 1 to disable desktop composition
CompatDisableDesktopComp=0
# Use 1 to run in 640 x 480 resolution
Compat640480=0
# Use 1 to disable full screen optimizations
CompatDisableFullScreenOpt=0
# 0 - Reduced colors disabled
# 1 - 8-bit, 256 colors
# 2 - 16-bit, 65536 colors
CompatColors=0
# 0 - High DPI scaling override disabled
# 1 - Application
# 2 - System
# 3 - System Enhanced
CompatHighDPI=0
# 1 - Use current system environment variables without any change
# 2 - Merge the following environment variables with the system variables
# 3 - Use only the following environment variables (ignore the system variables)
EnvironmentVariablesMode=1
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D5 03 00 00 4B 04 00 00 A2 08 00 00 FC 07 00 00
[EnvironmentVariables]
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 78 03 00 00 FC 02 00 00 45 08 00 00 AD 06 00 00
# Number of environment variables to merge - only for EnvironmentVariablesMode 2, 3
Lines=0
# Merge the following environment variables, one by one on each line
Line1=
Line2=
Line3=
Line4=
Line5=
Line6=
Line7=
Line8=
Line9=

View File

@ -0,0 +1,125 @@
7-Zip Extra
~~~~~~~~~~~
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (C) 1999-2024 Igor Pavlov.
7-Zip Copyright (C) 1999-2024 Igor Pavlov.
The licenses for files are:
- 7za.exe:
- The "GNU LGPL" as main license for most of the code
- The "BSD 3-clause License" for some code
- The "BSD 2-clause License" for some code
- All other files: the "GNU LGPL".
Redistributions in binary form must reproduce related license information from this file.
Note:
You can use 7-Zip Extra on any computer, including a computer in a commercial
organization. You don't need to register or pay for 7-Zip.
It is allowed to digitally sign DLL and EXE files included into this package
with arbitrary signatures of third parties.
GNU LGPL information
--------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You can receive a copy of the GNU Lesser General Public License from
http://www.gnu.org/
BSD 3-clause License in 7-Zip code
----------------------------------
The "BSD 3-clause License" is used for the following code in 7za.exe
- ZSTD data decompression.
that code was developed using original zstd decoder code as reference code.
The original zstd decoder code was developed by Facebook Inc,
that also uses the "BSD 3-clause License".
Copyright (c) Facebook, Inc. All rights reserved.
Copyright (c) 2023-2024 Igor Pavlov.
Text of the "BSD 3-clause License"
----------------------------------
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
BSD 2-clause License in 7-Zip code
----------------------------------
The "BSD 2-clause License" is used for the XXH64 code in 7za.exe.
XXH64 code in 7-Zip was derived from the original XXH64 code developed by Yann Collet.
Copyright (c) 2012-2021 Yann Collet.
Copyright (c) 2023-2024 Igor Pavlov.
Text of the "BSD 2-clause License"
----------------------------------
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---

View File

@ -0,0 +1,58 @@
Software License
AutoIt
Author : Jonathan Bennett and the AutoIt Team
WWW : https://www.autoitscript.com/site/autoit/
Email : support at autoitscript dot com
________________________________________________________
END-USER LICENSE AGREEMENT FOR THIS SOFTWARE
This End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and the mentioned author of this Software for the software product identified above, which includes computer software and may include associated media, printed materials, and "online" or electronic documentation ("SOFTWARE PRODUCT"). By installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. If you do not agree to the terms of this EULA, do not install or use the SOFTWARE PRODUCT.
SOFTWARE PRODUCT LICENSE
The SOFTWARE PRODUCT is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not sold.
The definition of SOFTWARE PRODUCT does not includes any files generated by the SOFTWARE PRODUCT, such as compiled script files in the form of standalone executables.
1. GRANT OF LICENSE
This EULA grants you the following rights:
Installation and Use. You may install and use an unlimited number of copies of the SOFTWARE PRODUCT.
Reproduction and Distribution. You may reproduce and distribute an unlimited number of copies of the SOFTWARE PRODUCT either in whole or in part; each copy should include all copyright and trademark notices, and shall be accompanied by a copy of this EULA. Copies of the SOFTWARE PRODUCT may be distributed as a standalone product or included with your own product.
Commercial Use. You may use the SOFTWARE PRODUCT for commercial purposes. You may sell for profit and freely distribute scripts and/or compiled scripts that were created with the SOFTWARE PRODUCT.
Reverse engineering. You may not reverse engineer or disassemble the SOFTWARE PRODUCT.
2. COPYRIGHT
All title and copyrights in and to the SOFTWARE PRODUCT (including but not limited to any images, photographs, animations, video, audio, music, text, and "applets" incorporated into the SOFTWARE PRODUCT), the accompanying printed materials, and any copies of the SOFTWARE PRODUCT are owned by the Author of this Software. The SOFTWARE PRODUCT is protected by copyright laws and international treaty provisions. Therefore, you must treat the SOFTWARE PRODUCT like any other copyrighted material.
MISCELLANEOUS
If you acquired this product in the United Kingdom, this EULA is governed by the laws of the United Kingdom. If this product was acquired outside the United Kingdom, then local law may apply.
Should you have any questions concerning this EULA, or if you desire to contact the author of this Software for any reason, please contact him/her at the email address mentioned at the top of this EULA.
LIMITED WARRANTY
1. NO WARRANTIES
The Author of this Software expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation is provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or non-infringement. The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you.
2. NO LIABILITY FOR DAMAGES
In no event shall the author of this Software be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if the Author of this Software has been advised of the possibility of such damages. Because some states/jurisdictions do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you.

View File

@ -0,0 +1,184 @@
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile_type=a3x
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <File.au3>
#include <Array.au3>
; ARC_NAME
$arc_extra_acw = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "ARC_NAME", "extra_acw", "extra_acw.zip")
$ach_watcher_arc = @ScriptDir & "\steam_misc\extra_acw\" & $arc_extra_acw
$ach_watcher_dst = @AppDataDir & "\Achievement Watcher"
If FileExists($ach_watcher_arc) Then
$gse_saves = IniRead(@ScriptDir & "\steam_settings\configs.user.ini", "user::saves", "saves_folder_name", "GSE Saves")
$local_save = IniRead(@ScriptDir & "\steam_settings\configs.user.ini", "user::saves", "local_save_path", "")
$local_save = StringReplace($local_save, "./", "")
$local_save = StringReplace($local_save, ".\", "")
ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & $ach_watcher_arc & '" -o"' & $ach_watcher_dst & '" -aoa', "", "", @SW_HIDE)
If $local_save <> "" Then
$userdir_line1 = ' {'
$userdir_line2 = ' "path": "' & StringReplace(@ScriptDir & "\" & $gse_saves, "\", "\\") & '",'
$userdir_line3 = ' "notify": true'
$userdir_line4 = ' }'
$file = @AppDataDir & "\Achievement Watcher\cfg\userdir.db"
$temp = @AppDataDir & "\Achievement Watcher\cfg\userdir_temp.db"
If Not FileExists($file) Then
;FileCopy(@ScriptDir & "\steam_settings\ach\cfg\userdir.db", $file, 1)
FileWriteLine($file, "[")
FileWriteLine($file, "]")
If FileExists($temp) Then FileDelete($temp)
Local $aLines
_FileReadToArray($file, $aLines)
Local $lastline = _ArrayPop($aLines)
_FileWriteFromArray($temp, $aLines)
FileWriteLine($temp, $userdir_line1)
FileWriteLine($temp, $userdir_line2)
FileWriteLine($temp, $userdir_line3)
FileWriteLine($temp, $userdir_line4)
FileWriteLine($temp, $lastline)
_ReplaceStringInFile($temp, $aLines[0] & @CRLF, "")
FileMove($temp, $file, 1)
Else
Local $aLines, $hMatch
_FileReadToArray($file, $aLines)
For $i = 1 To $aLines[0]
If StringInStr($aLines[$i], $userdir_line2) Then $hMatch = 1
Next
If $hMatch == 1 Then
If FileExists($temp) Then FileDelete($temp)
Else
If FileExists($temp) Then FileDelete($temp)
;Local $aLines
;_FileReadToArray($file, $aLines)
Local $lastline = _ArrayPop($aLines)
_FileWriteFromArray($temp, $aLines)
FileWriteLine($temp, $userdir_line1)
FileWriteLine($temp, $userdir_line2)
FileWriteLine($temp, $userdir_line3)
FileWriteLine($temp, $userdir_line4)
FileWriteLine($temp, $lastline)
_ReplaceStringInFile($temp, $aLines[0] & @CRLF, "")
FileMove($temp, $file, 1)
EndIf
EndIf
_ReplaceStringInFile($file, " }" & @CRLF & " {", " }," & @CRLF & " {")
; ---
$userdir_line1 = ' {'
$userdir_line2 = ' "path": "' & StringReplace(@ScriptDir & "\" & $local_save, "\", "\\") & '",'
$userdir_line3 = ' "notify": true'
$userdir_line4 = ' }'
$file = @AppDataDir & "\Achievement Watcher\cfg\userdir.db"
$temp = @AppDataDir & "\Achievement Watcher\cfg\userdir_temp.db"
If Not FileExists($file) Then
;FileCopy(@ScriptDir & "\steam_settings\ach\cfg\userdir.db", $file, 1)
FileWriteLine($file, "[")
FileWriteLine($file, "]")
If FileExists($temp) Then FileDelete($temp)
Local $aLines
_FileReadToArray($file, $aLines)
Local $lastline = _ArrayPop($aLines)
_FileWriteFromArray($temp, $aLines)
FileWriteLine($temp, $userdir_line1)
FileWriteLine($temp, $userdir_line2)
FileWriteLine($temp, $userdir_line3)
FileWriteLine($temp, $userdir_line4)
FileWriteLine($temp, $lastline)
_ReplaceStringInFile($temp, $aLines[0] & @CRLF, "")
FileMove($temp, $file, 1)
Else
Local $aLines, $hMatch
_FileReadToArray($file, $aLines)
For $i = 1 To $aLines[0]
If StringInStr($aLines[$i], $userdir_line2) Then $hMatch = 1
Next
If $hMatch == 1 Then
If FileExists($temp) Then FileDelete($temp)
Else
If FileExists($temp) Then FileDelete($temp)
;Local $aLines
;_FileReadToArray($file, $aLines)
Local $lastline = _ArrayPop($aLines)
_FileWriteFromArray($temp, $aLines)
FileWriteLine($temp, $userdir_line1)
FileWriteLine($temp, $userdir_line2)
FileWriteLine($temp, $userdir_line3)
FileWriteLine($temp, $userdir_line4)
FileWriteLine($temp, $lastline)
_ReplaceStringInFile($temp, $aLines[0] & @CRLF, "")
FileMove($temp, $file, 1)
EndIf
EndIf
_ReplaceStringInFile($file, " }" & @CRLF & " {", " }," & @CRLF & " {")
Else
$userdir_line1 = ' {'
$userdir_line2 = ' "path": "' & StringReplace(@AppDataDir & "\" & $gse_saves, "\", "\\") & '",'
$userdir_line3 = ' "notify": true'
$userdir_line4 = ' }'
$file = @AppDataDir & "\Achievement Watcher\cfg\userdir.db"
$temp = @AppDataDir & "\Achievement Watcher\cfg\userdir_temp.db"
If Not FileExists($file) Then
;FileCopy(@ScriptDir & "\steam_settings\ach\cfg\userdir.db", $file, 1)
FileWriteLine($file, "[")
FileWriteLine($file, "]")
If FileExists($temp) Then FileDelete($temp)
Local $aLines
_FileReadToArray($file, $aLines)
Local $lastline = _ArrayPop($aLines)
_FileWriteFromArray($temp, $aLines)
FileWriteLine($temp, $userdir_line1)
FileWriteLine($temp, $userdir_line2)
FileWriteLine($temp, $userdir_line3)
FileWriteLine($temp, $userdir_line4)
FileWriteLine($temp, $lastline)
_ReplaceStringInFile($temp, $aLines[0] & @CRLF, "")
FileMove($temp, $file, 1)
Else
Local $aLines, $hMatch
_FileReadToArray($file, $aLines)
For $i = 1 To $aLines[0]
If StringInStr($aLines[$i], $userdir_line2) Then $hMatch = 1
Next
If $hMatch == 1 Then
If FileExists($temp) Then FileDelete($temp)
Else
If FileExists($temp) Then FileDelete($temp)
;Local $aLines
;_FileReadToArray($file, $aLines)
Local $lastline = _ArrayPop($aLines)
_FileWriteFromArray($temp, $aLines)
FileWriteLine($temp, $userdir_line1)
FileWriteLine($temp, $userdir_line2)
FileWriteLine($temp, $userdir_line3)
FileWriteLine($temp, $userdir_line4)
FileWriteLine($temp, $lastline)
_ReplaceStringInFile($temp, $aLines[0] & @CRLF, "")
FileMove($temp, $file, 1)
EndIf
EndIf
_ReplaceStringInFile($file, " }" & @CRLF & " {", " }," & @CRLF & " {")
EndIf
EndIf

View File

@ -0,0 +1,3 @@
[ARC_NAME]
extra_acw = extra_acw.7z

View File

@ -0,0 +1,81 @@
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile_type=a3x
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; ARC_NAME
$arc_steam_api = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "ARC_NAME", "steam_api", "steam_api.7z")
$arc_steam_api64 = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "ARC_NAME", "steam_api64", "steam_api64.7z")
$arc_steamclient = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "ARC_NAME", "steamclient", "steamclient.7z")
$arc_steamclient64 = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "ARC_NAME", "steamclient64", "steamclient64.7z")
; DLL_PATH
$steam_api_release = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "DLL_PATH", "steam_api_release", "release\steam_api.dll")
$steam_api64_release = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "DLL_PATH", "steam_api64_release", "release\steam_api64.dll")
$steam_api_debug = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "DLL_PATH", "steam_api_debug", "debug\steam_api.dll")
$steam_api64_debug = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "DLL_PATH", "steam_api64_debug", "debug\steam_api64.dll")
$steamclient_release = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "DLL_PATH", "steamclient_release", "release\steamclient.dll")
$steamclient64_release = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "DLL_PATH", "steamclient64_release", "release\steamclient64.dll")
$steamclient_debug = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "DLL_PATH", "steamclient_debug", "debug\steamclient.dll")
$steamclient64_debug = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "DLL_PATH", "steamclient64_debug", "debug\steamclient64.dll")
If FileReadLine(@ScriptDir & "\steam_settings\emu_version.txt", 1) == "release" Then
If FileExists(@ScriptDir & "\" & $arc_steam_api) Then
$7za_exit = ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & @ScriptDir & "\" & $arc_steam_api & '" -o"' & @ScriptDir & "\steam_misc\" & StringTrimRight($arc_steam_api, 3) & '" -aoa', "", "", @SW_HIDE)
$steam_api_dst = StringTrimLeft($steam_api_release, StringInStr($steam_api_release, "\", 0, -1))
$steam_api_debug_src = StringReplace(@ScriptDir & "\steam_misc\" & StringTrimRight($arc_steam_api, 3) & "\" & $steam_api_debug, "\\", "\")
If FileExists($steam_api_dst) Then
FileMove($steam_api_debug_src, $steam_api_dst, 1)
EndIf
DirRemove(@ScriptDir & "\steam_misc\" & StringTrimRight($arc_steam_api, 3), 1)
$hFileOpen = FileOpen(@ScriptDir & "\steam_settings\emu_version.txt", 2+8)
FileWrite($hFileOpen, "debug" & @CRLF & @CRLF & "you are currently using the 'debug' version of the emulator" & @CRLF & "run 'gse_debug_switch.exe' if you want to use the 'release' version")
FileClose($hFileOpen)
EndIf
If FileExists(@ScriptDir & "\" & $arc_steamclient) Then
$7za_exit = ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & @ScriptDir & "\" & $arc_steamclient & '" -o"' & @ScriptDir & "\steam_misc\" & StringTrimRight($arc_steamclient, 3) & '" -aoa', "", "", @SW_HIDE)
$steamclient_dst = StringTrimLeft($steamclient_release, StringInStr($steamclient_release, "\", 0, -1))
$steamclient_debug_src = StringReplace(@ScriptDir & "\steam_misc\" & StringTrimRight($arc_steamclient, 3) & "\" & $steamclient_debug, "\\", "\")
If FileExists($steamclient_dst) Then
FileMove($steamclient_debug_src, $steamclient_dst, 1)
EndIf
DirRemove(@ScriptDir & "\steam_misc\" & StringTrimRight($arc_steamclient, 3), 1)
$hFileOpen = FileOpen(@ScriptDir & "\steam_settings\emu_version.txt", 2+8)
FileWrite($hFileOpen, "debug" & @CRLF & @CRLF & "you are currently using the 'debug' version of the emulator" & @CRLF & "run 'gse_debug_switch.exe' if you want to use the 'release' version")
FileClose($hFileOpen)
EndIf
ElseIf FileReadLine(@ScriptDir & "\steam_settings\emu_version.txt", 1) == "debug" Then
If FileExists(@ScriptDir & "\" & $arc_steam_api) Then
$7za_exit = ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & @ScriptDir & "\" & $arc_steam_api & '" -o"' & @ScriptDir & "\steam_misc\" & StringTrimRight($arc_steam_api, 3) & '" -aoa', "", "", @SW_HIDE)
$steam_api_dst = StringTrimLeft($steam_api_debug, StringInStr($steam_api_debug, "\", 0, -1))
$steam_api_release_src = StringReplace(@ScriptDir & "\steam_misc\" & StringTrimRight($arc_steam_api, 3) & "\" & $steam_api_release, "\\", "\")
If FileExists($steam_api_dst) Then
FileMove($steam_api_release_src, $steam_api_dst, 1)
EndIf
DirRemove(@ScriptDir & "\steam_misc\" & StringTrimRight($arc_steam_api, 3), 1)
$hFileOpen = FileOpen(@ScriptDir & "\steam_settings\emu_version.txt", 2+8)
FileWrite($hFileOpen, "release" & @CRLF & @CRLF & "you are currently using the 'release' version of the emulator" & @CRLF & "run 'gse_debug_switch.exe' if you want to use the 'debug' version")
FileClose($hFileOpen)
EndIf
If FileExists(@ScriptDir & "\" & $arc_steamclient) Then
$7za_exit = ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & @ScriptDir & "\" & $arc_steamclient & '" -o"' & @ScriptDir & "\steam_misc\" & StringTrimRight($arc_steamclient, 3) & '" -aoa', "", "", @SW_HIDE)
$steamclient_dst = StringTrimLeft($steamclient_debug, StringInStr($steamclient_debug, "\", 0, -1))
$steamclient_release_src = StringReplace(@ScriptDir & "\steam_misc\" & StringTrimRight($arc_steamclient, 3) & "\" & $steamclient_release, "\\", "\")
If FileExists($steamclient_dst) Then
FileMove($steamclient_release_src, $steamclient_dst, 1)
EndIf
DirRemove(@ScriptDir & "\steam_misc\" & StringTrimRight($arc_steamclient, 3), 1)
$hFileOpen = FileOpen(@ScriptDir & "\steam_settings\emu_version.txt", 2+8)
FileWrite($hFileOpen, "release" & @CRLF & @CRLF & "you are currently using the 'release' version of the emulator" & @CRLF & "run 'gse_debug_switch.exe' if you want to use the 'debug' version")
FileClose($hFileOpen)
EndIf
EndIf

View File

@ -0,0 +1,22 @@
[ARC_NAME]
steam_api = steam_api.7z
steam_api64 = steam_api64.7z
steamclient = steamclient.7z
steamclient64 = steamclient64.7z
[DLL_PATH]
steam_api_release = release\steam_api.dll
steam_api64_release = release\steam_api64.dll
steam_api_debug = debug\steam_api.dll
steam_api64_debug = debug\steam_api64.dll
steamclient_release = release\steamclient.dll
steamclient64_release = release\steamclient64.dll
steamclient_debug = debug\steamclient.dll
steamclient64_debug = debug\steamclient64.dll

View File

@ -0,0 +1,200 @@
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile_type=a3x
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <File.au3>
; ARC_NAME
$arc_generate_interfaces = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "ARC_NAME", "generate_interfaces", "generate_interfaces.7z")
; EXE_PATH
$generate_interfaces_release = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "EXE_PATH", "generate_interfaces_release", "generate_interfaces.exe")
$generate_interfaces64_release = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "EXE_PATH", "generate_interfaces64_release", "generate_interfaces64.exe")
$generate_interfaces_7z = @ScriptDir & '\steam_misc\tools\generate_interfaces\' & $arc_generate_interfaces
$generate_interfaces_dst = @ScriptDir & '\steam_misc\tools\generate_interfaces'
$generate_interfaces_exe = ''
Switch @OSArch
Case 'X64'
$generate_interfaces_exe = StringTrimLeft($generate_interfaces64_release, StringInStr($generate_interfaces64_release, "\", 0, -1)) ; generate_interfaces64.exe
If Not FileExists(@ScriptDir & '\steam_misc\tools\generate_interfaces\' & StringTrimLeft($generate_interfaces64_release, StringInStr($generate_interfaces64_release, "\", 0, -1))) Then
ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & $generate_interfaces_7z & '" -o"' & $generate_interfaces_dst & '" -aoa', "", "", @SW_HIDE)
EndIf
Case 'X86'
$generate_interfaces_exe = StringTrimLeft($generate_interfaces_release, StringInStr($generate_interfaces_release, "\", 0, -1)) ; generate_interfaces.exe
If Not FileExists(@ScriptDir & '\steam_misc\tools\generate_interfaces\' & StringTrimLeft($generate_interfaces_release, StringInStr($generate_interfaces_release, "\", 0, -1))) Then
ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & $generate_interfaces_7z & '" -o"' & $generate_interfaces_dst & '" -aoa', "", "", @SW_HIDE)
EndIf
Case Else
$generate_interfaces_exe = StringTrimLeft($generate_interfaces64_release, StringInStr($generate_interfaces64_release, "\", 0, -1)) ; generate_interfaces64.exe
If Not FileExists(@ScriptDir & '\steam_misc\tools\generate_interfaces\' & StringTrimLeft($generate_interfaces64_release, StringInStr($generate_interfaces64_release, "\", 0, -1))) Then
ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & $generate_interfaces_7z & '" -o"' & $generate_interfaces_dst & '" -aoa', "", "", @SW_HIDE)
EndIf
EndSwitch
If Not FileExists(@ScriptDir & '\steam_api.dll') Then FileDelete(@ScriptDir & '\steam_misc\tools\generate_interfaces\' & StringTrimLeft($generate_interfaces_release, StringInStr($generate_interfaces_release, "\", 0, -1)))
If Not FileExists(@ScriptDir & '\steam_api64.dll') Then FileDelete(@ScriptDir & '\steam_misc\tools\generate_interfaces\' & StringTrimLeft($generate_interfaces64_release, StringInStr($generate_interfaces64_release, "\", 0, -1)))
Switch @OSArch
Case 'X64'
If Not FileExists(@ScriptDir & '\steam_misc\tools\generate_interfaces\' & StringTrimLeft($generate_interfaces64_release, StringInStr($generate_interfaces64_release, "\", 0, -1))) Then
$generate_interfaces_exe = StringTrimLeft($generate_interfaces_release, StringInStr($generate_interfaces_release, "\", 0, -1))
EndIf
Case 'X86'
If Not FileExists(@ScriptDir & '\steam_misc\tools\generate_interfaces\' & StringTrimLeft($generate_interfaces_release, StringInStr($generate_interfaces_release, "\", 0, -1))) Then
$generate_interfaces_exe = StringTrimLeft($generate_interfaces64_release, StringInStr($generate_interfaces64_release, "\", 0, -1))
EndIf
Case Else
If Not FileExists(@ScriptDir & '\steam_misc\tools\generate_interfaces\' & StringTrimLeft($generate_interfaces64_release, StringInStr($generate_interfaces64_release, "\", 0, -1))) Then
$generate_interfaces_exe = StringTrimLeft($generate_interfaces_release, StringInStr($generate_interfaces_release, "\", 0, -1))
EndIf
EndSwitch
If FileExists(@ScriptDir & '\valve_api.dll') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\valve_api.dll.bak' & '"', @ScriptDir, @SW_HIDE)
EndIf
If FileExists(@ScriptDir & '\steam_api.dll.bak') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api.dll.bak' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api.dll.org') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api.dll.org' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api.bak') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api.bak' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api.org') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api.org' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api_orig.dll') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api_orig.dll' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api_legit.dll') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api_legit.dll' & '"', @ScriptDir, @SW_HIDE)
#ElseIf FileExists(@ScriptDir & '\steam_api.dll') Then
#RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api.dll' & '"', @ScriptDir, @SW_HIDE)
EndIf
If FileExists(@ScriptDir & '\valve_api64.dll') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\valve_api64.dll.bak' & '"', @ScriptDir, @SW_HIDE)
EndIf
If FileExists(@ScriptDir & '\steam_api64.dll.bak') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api64.dll.bak' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api64.dll.org') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api64.dll.org' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api64.bak') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api64.bak' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api64.org') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api64.org' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api64_orig.dll') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe &' ' & '"' & @ScriptDir & '\steam_api64_orig.dll' & '"', @ScriptDir, @SW_HIDE)
ElseIf FileExists(@ScriptDir & '\steam_api64_legit.dll') Then
RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe &' ' & '"' & @ScriptDir & '\steam_api64_legit.dll' & '"', @ScriptDir, @SW_HIDE)
#ElseIf FileExists(@ScriptDir & '\steam_api64.dll') Then
#RunWait($generate_interfaces_dst & '\' & $generate_interfaces_exe & ' ' & '"' & @ScriptDir & '\steam_api64.dll' & '"', @ScriptDir, @SW_HIDE)
EndIf
FileMove(@ScriptDir & '\steam_interfaces.txt', @ScriptDir & '\steam_settings\steam_interfaces.txt', 9)
FileCopy(@ScriptDir & '\steam_settings\steam_interfaces.txt', @ScriptDir & '\steam_settings\steam_interfaces.ini', 9)
$hFile=FileOpen(@ScriptDir & '\steam_settings\steam_interfaces.ini',0)
$sOld=FileRead($hFile)
FileClose($hFile)
$hFile=FileOpen(@ScriptDir & '\steam_settings\steam_interfaces.ini',2)
$sNew='[steam_interfaces]' & @CRLF & $sOld
FileWrite($hFile,$sNew)
FileClose($hFile)
$interfaces_ini = @ScriptDir & '\steam_settings\steam_interfaces.ini'
$codex_ini = @ScriptDir & '\steam_misc\extra_cdx\steam_emu.ini'
If FileExists($codex_ini) Then
_ReplaceStringInFile($interfaces_ini, 'STEAMAPPLIST_', 'SteamAppList=STEAMAPPLIST_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMAPPS_', 'SteamApps=STEAMAPPS_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMAPPTICKET_', 'SteamAppTicket=STEAMAPPTICKET_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamClient', 'SteamClient=SteamClient', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamController', 'SteamController=SteamController', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamFriends', 'SteamFriends=SteamFriends', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamGameCoordinator', 'SteamGameCoordinator=SteamGameCoordinator', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamGameServerStats', 'Steam_Game_Server_Stats=Steam_Game_Server_Stats', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamGameServer', 'SteamGameServer=SteamGameServer', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'Steam_Game_Server_Stats', 'SteamGameServerStats', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamGameStats', 'SteamGameStats=SteamGameStats', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMHTMLSURFACE_', 'SteamHTMLSurface=STEAMHTMLSURFACE_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMHTTP_', 'SteamHTTP=STEAMHTTP_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamInput', 'SteamInput=SteamInput', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMINVENTORY_', 'SteamInventory=STEAMINVENTORY_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamMasterServerUpdater', 'SteamMasterServerUpdater=SteamMasterServerUpdater', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamMatchGameSearch', 'SteamMatchGameSearch=SteamMatchGameSearch', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamMatchMakingServers', 'Steam_Match_Making_Servers=Steam_Match_Making_Servers', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamMatchMaking', 'SteamMatchMaking=SteamMatchMaking', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'Steam_Match_Making_Servers', 'SteamMatchMakingServers', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMMUSIC_', 'SteamMusic=STEAMMUSIC_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMMUSICREMOTE_', 'SteamMusicRemote=STEAMMUSICREMOTE_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamNetworkingMessages', 'Steam_Networking_Messages=Steam_Networking_Messages', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamNetworkingSocketsSerialized', 'Steam_Networking_Sockets_Serialized=Steam_Networking_Sockets_Serialized', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamNetworkingSockets', 'Steam_Networking_Sockets=Steam_Networking_Sockets', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamNetworkingUtils', 'Steam_Networking_Utils=Steam_Networking_Utils', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamNetworking', 'SteamNetworking=SteamNetworking', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'Steam_Networking_Messages', 'SteamNetworkingMessages', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'Steam_Networking_Sockets_Serialized', 'SteamNetworkingSocketsSerialized', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'Steam_Networking_Sockets', 'SteamNetworkingSockets', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'Steam_Networking_Utils', 'SteamNetworkingUtils', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMPARENTALSETTINGS_', 'SteamParentalSettings=STEAMPARENTALSETTINGS_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamParties', 'SteamParties=SteamParties', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMREMOTEPLAY_', 'SteamRemotePlay=STEAMREMOTEPLAY_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMREMOTESTORAGE_', 'SteamRemoteStorage=STEAMREMOTESTORAGE_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMSCREENSHOTS_', 'SteamScreenshots=STEAMSCREENSHOTS_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMTIMELINE_', 'SteamTimeline=STEAMTIMELINE_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMTV_', 'SteamTV=STEAMTV_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMUGC_', 'SteamUGC=STEAMUGC_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMUNIFIEDMESSAGES_', 'SteamUnifiedMessages=STEAMUNIFIEDMESSAGES_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMUSERSTATS_', 'Steam_User_Stats=STEAMUSERSTATS_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamUser', 'SteamUser=SteamUser', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'Steam_User_Stats', 'SteamUserStats', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'SteamUtils', 'SteamUtils=SteamUtils', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMVIDEO_', 'SteamVideo=STEAMVIDEO_', 1, 1)
IniWrite($codex_ini, 'Interfaces', 'SteamAppList', IniRead($interfaces_ini, 'steam_interfaces', 'SteamAppList', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamApps', IniRead($interfaces_ini, 'steam_interfaces', 'SteamApps', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamAppTicket', IniRead($interfaces_ini, 'steam_interfaces', 'SteamAppTicket', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamClient', IniRead($interfaces_ini, 'steam_interfaces', 'SteamClient', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamController', IniRead($interfaces_ini, 'steam_interfaces', 'SteamController', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamFriends', IniRead($interfaces_ini, 'steam_interfaces', 'SteamFriends', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamGameCoordinator', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameCoordinator', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamGameServerStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameServerStats', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamGameServer', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameServer', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamGameStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameStats', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamHTMLSurface', IniRead($interfaces_ini, 'steam_interfaces', 'SteamHTMLSurface', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamHTTP', IniRead($interfaces_ini, 'steam_interfaces', 'SteamHTTP', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamInput', IniRead($interfaces_ini, 'steam_interfaces', 'SteamInput', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamInventory', IniRead($interfaces_ini, 'steam_interfaces', 'SteamInventory', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMasterServerUpdater', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMasterServerUpdater', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMatchGameSearch', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchGameSearch', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMatchMakingServers', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchMakingServers', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMatchMaking', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchMaking', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMusic', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMusic', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMusicRemote', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMusicRemote', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworkingMessages', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingMessages', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworkingSocketsSerialized', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingSocketsSerialized', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworkingSockets', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingSockets', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworkingUtils', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingUtils', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworking', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworking', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamParentalSettings', IniRead($interfaces_ini, 'steam_interfaces', 'SteamParentalSettings', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamParties', IniRead($interfaces_ini, 'steam_interfaces', 'SteamParties', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamRemotePlay', IniRead($interfaces_ini, 'steam_interfaces', 'SteamRemotePlay', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamRemoteStorage', IniRead($interfaces_ini, 'steam_interfaces', 'SteamRemoteStorage', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamScreenshots', IniRead($interfaces_ini, 'steam_interfaces', 'SteamScreenshots', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamTimeline', IniRead($interfaces_ini, 'steam_interfaces', 'SteamTimeline', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamTV', IniRead($interfaces_ini, 'steam_interfaces', 'SteamTV', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUGC', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUGC', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUnifiedMessages', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUnifiedMessages', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUserStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUserStats', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUser', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUser', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUtils', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUtils', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamVideo', IniRead($interfaces_ini, 'steam_interfaces', 'SteamVideo', ''))
EndIf
FileDelete($interfaces_ini)

View File

@ -0,0 +1,9 @@
[ARC_NAME]
generate_interfaces = generate_interfaces.7z
[EXE_PATH]
generate_interfaces_release = generate_interfaces.exe
generate_interfaces64_release = generate_interfaces64.exe

View File

@ -0,0 +1,57 @@
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile_type=a3x
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <File.au3>
; ARC_NAME
$arc_lobby_connect = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "ARC_NAME", "lobby_connect", "lobby_connect.7z")
; EXE_PATH
$lobby_connect_release = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "EXE_PATH", "lobby_connect_release", "lobby_connect.exe")
$lobby_connect64_release = IniRead(@ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini", "EXE_PATH", "lobby_connect64_release", "lobby_connect64.exe")
$lobby_connect_7z = @ScriptDir & '\steam_misc\tools\lobby_connect\' & $arc_lobby_connect
$lobby_connect_dst = @ScriptDir & '\steam_misc\tools\lobby_connect'
$lobby_connect_exe = ''
Switch @OSArch
Case 'X64'
$lobby_connect_exe = StringTrimLeft($lobby_connect64_release, StringInStr($lobby_connect64_release, "\", 0, -1)) ; lobby_connect64.exe
If Not FileExists(@ScriptDir & '\steam_misc\tools\lobby_connect\' & StringTrimLeft($lobby_connect64_release, StringInStr($lobby_connect64_release, "\", 0, -1))) Then
ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & $lobby_connect_7z & '" -o"' & $lobby_connect_dst & '" -aoa', "", "", @SW_HIDE)
EndIf
Case 'X86'
$lobby_connect_exe = StringTrimLeft($lobby_connect_release, StringInStr($lobby_connect_release, "\", 0, -1)) ; lobby_connect.exe
If Not FileExists(@ScriptDir & '\steam_misc\tools\lobby_connect\' & StringTrimLeft($lobby_connect_release, StringInStr($lobby_connect_release, "\", 0, -1))) Then
ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & $lobby_connect_7z & '" -o"' & $lobby_connect_dst & '" -aoa', "", "", @SW_HIDE)
EndIf
Case Else
$lobby_connect_exe = StringTrimLeft($lobby_connect64_release, StringInStr($lobby_connect64_release, "\", 0, -1)) ; lobby_connect64.exe
If Not FileExists(@ScriptDir & '\steam_misc\tools\lobby_connect\' & StringTrimLeft($lobby_connect64_release, StringInStr($lobby_connect64_release, "\", 0, -1))) Then
ShellExecuteWait(@ScriptDir & "\steam_misc\tools\7za\7za.exe", 'x "' & $lobby_connect_7z & '" -o"' & $lobby_connect_dst & '" -aoa', "", "", @SW_HIDE)
EndIf
EndSwitch
If Not FileExists(@ScriptDir & '\steam_api.dll') Then FileDelete(@ScriptDir & '\steam_misc\tools\lobby_connect\' & StringTrimLeft($lobby_connect_release, StringInStr($lobby_connect_release, "\", 0, -1)))
If Not FileExists(@ScriptDir & '\steam_api64.dll') Then FileDelete(@ScriptDir & '\steam_misc\tools\lobby_connect\' & StringTrimLeft($lobby_connect64_release, StringInStr($lobby_connect64_release, "\", 0, -1)))
Switch @OSArch
Case 'X64'
If Not FileExists(@ScriptDir & '\steam_misc\tools\lobby_connect\' & StringTrimLeft($lobby_connect64_release, StringInStr($lobby_connect64_release, "\", 0, -1))) Then
$lobby_connect_exe = StringTrimLeft($lobby_connect_release, StringInStr($lobby_connect_release, "\", 0, -1))
EndIf
Case 'X86'
If Not FileExists(@ScriptDir & '\steam_misc\tools\lobby_connect\' & StringTrimLeft($lobby_connect_release, StringInStr($lobby_connect_release, "\", 0, -1))) Then
$lobby_connect_exe = StringTrimLeft($lobby_connect64_release, StringInStr($lobby_connect64_release, "\", 0, -1))
EndIf
Case Else
If Not FileExists(@ScriptDir & '\steam_misc\tools\lobby_connect\' & StringTrimLeft($lobby_connect64_release, StringInStr($lobby_connect64_release, "\", 0, -1))) Then
$lobby_connect_exe = StringTrimLeft($lobby_connect_release, StringInStr($lobby_connect_release, "\", 0, -1))
EndIf
EndSwitch
RunWait($lobby_connect_dst & '\' & $lobby_connect_exe, @ScriptDir, @SW_SHOW)

View File

@ -0,0 +1,9 @@
[ARC_NAME]
generate_interfaces = lobby_connect.7z
[EXE_PATH]
lobby_connect_release = lobby_connect.exe
lobby_connect64_release = lobby_connect64.exe

View File

@ -0,0 +1,8 @@
@echo off
copy .\steam_misc\tools\au3\scripts\acw_helper.a3x .\
copy .\steam_misc\tools\au3\scripts\acw_helper.ini .\
ren .\acw_helper.a3x gse_acw_helper.a3x
ren .\acw_helper.ini gse_acw_helper.ini
.\steam_misc\tools\au3\au3.exe /AutoIt3ExecuteScript .\gse_acw_helper.a3x
del .\gse_acw_helper.a3x
del .\gse_acw_helper.ini

View File

@ -0,0 +1,8 @@
@echo off
copy .\steam_misc\tools\au3\scripts\debug_switch.a3x .\
copy .\steam_misc\tools\au3\scripts\debug_switch.ini .\
ren .\debug_switch.a3x gse_debug_switch.a3x
ren .\debug_switch.ini gse_debug_switch.ini
.\steam_misc\tools\au3\au3.exe /AutoIt3ExecuteScript ".\gse_debug_switch.a3x"
del .\gse_debug_switch.a3x
del .\gse_debug_switch.ini

View File

@ -0,0 +1,8 @@
@echo off
copy .\steam_misc\tools\au3\scripts\generate_interfaces.a3x .\
copy .\steam_misc\tools\au3\scripts\generate_interfaces.ini .\
ren .\generate_interfaces.a3x gse_generate_interfaces.a3x
ren .\generate_interfaces.ini gse_generate_interfaces.ini
.\steam_misc\tools\au3\au3.exe /AutoIt3ExecuteScript .\gse_generate_interfaces.a3x
del .\gse_generate_interfaces.a3x
del .\gse_generate_interfaces.ini

View File

@ -0,0 +1,8 @@
@echo off
copy .\steam_misc\tools\au3\scripts\lobby_connect.a3x .\
copy .\steam_misc\tools\au3\scripts\lobby_connect.ini .\
ren .\lobby_connect.a3x gse_lobby_connect.a3x
ren .\lobby_connect.ini gse_lobby_connect.ini
.\steam_misc\tools\au3\au3.exe /AutoIt3ExecuteScript .\gse_lobby_connect.a3x
del .\gse_lobby_connect.a3x
del .\gse_lobby_connect.ini

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,26 @@
# ################################################################################ #
# you do not have to specify everything, pick and choose the options you need only #
# ################################################################################ #
[app::general]
# by default the emu will report a 'non-beta' branch when the game calls 'Steam_Apps::GetCurrentBetaName()'
# if 1, makes the game/app think we're playing on a beta branch
is_beta_branch=0
# the name of the current branch - this must also exist in 'branches.json'
# otherwise it'll be ignored and the default 'public' branch will be used
branch_name=public
[app::dlcs]
# report all DLCs as unlocked; some games check for 'hidden' DLCs, hence this should be set to 1 in that case
# however, other games detect emus by querying for a fake/bad DLC, hence this should be set to 0 in that case
unlock_all=0
# format: ID=name
# 1234=DLCNAME
# 56789=This is another example DLC name
[app::paths]
# format: ID=path
# 556760=../DLCRoot0
# 1234=./folder_where_steam_api_is
# 3456=../folder_one_level_above_where_steam_api_is
# 5678=../../folder_two_levels_above_where_steam_api_is

View File

@ -0,0 +1,80 @@
# ################################################################################ #
# you do not have to specify everything, pick and choose the options you need only #
# ################################################################################ #
[main::general]
# generate new app auth ticket
new_app_ticket=1
# generate/embed GC token inside new app ticket
gc_token=1
# pretend the app is running on a steam deck
steam_deck=0
# enable avatar functionality
enable_account_avatar=0
# prevent Steam_User_Stats::FindLeaderboard() from always succeeding and creating the unknown leaderboard
# default=0, not recommended to change it
disable_leaderboards_create_unknown=0
# by default, the emu will only save/update stats defined in 'stats.txt', unknown stats requested or updated by the game will be rejected
# set this to 1 to allow unknown stats
allow_unknown_stats=0
# if 0, whenever a game updates a stat which is tied to an achievement progress, the emu will save that stat progress immediately
# some games will update the stat very frequently (with lower & higher values) resulting in a spam of disk writes or overlay notifications
# set this to 1 to save stat progress only on higher progress value, thus avoiding spam of disk writes or overlay notifications
# this has no impact on the stat itself, only the achievement progress of a stat tied to an achievement progress
# also, this has no impact on the functions which directly change stats, achievements, or achievements progress
save_only_higher_stat_achievement_progress=1
# synchronize user stats/achievements with game servers as soon as possible instead of caching them until the next call to `Steam_RunCallbacks()`
# default=0, not recommended to change it
immediate_gameserver_stats=0
# use the proper type of the server list (internet, friends, etc...) when requested by the game
# otherwise, the emu will always return the type 'LAN server'
# default=0, not recommended to change it
matchmaking_server_list_actual_type=0
# grab the server details for match making using an actual server query
# default=0, not recommended to change it
matchmaking_server_details_via_source_query=0
# very basic crash logger/printer
# this is intended to debug some annoying scenarios, and best used with the debug build of the emu
crash_printer_location=./EMU_CRASHES.txt
[main::connectivity]
# prevent hooking OS networking APIs and allow any external requests
# only used by the experimental builds on Windows
disable_lan_only=1
# disable all steam networking interface functionality - this won't prevent games/apps from making external requests
# networking related functionality like lobbies or those that launch a server in the background will not work
disable_networking=0
# change the UDP/TCP port the emulator listens on, you should probably not change this because everyone needs to use the same port or you won't find yourselves on the network
listen_port=47584
# pretend steam is running in offline mode; some games that connect to online servers might only work if the steam emu behaves like steam is in offline mode
offline=0
# prevent sharing stats and achievements with any game server, also disables the interface ISteamGameServerStats
disable_sharing_stats_with_gameserver=0
# do not send server details to the server browser, only works for game servers
disable_source_query=0
# enable sharing leaderboards scores with people playing the same game on the same network
share_leaderboards_over_network=0
# prevent lobby creation in steam matchmaking interface
disable_lobby_creation=0
# attempt to download external HTTP(S) requests made via Steam_HTTP::SendHTTPRequest() inside "steam_settings/http/"
# make sure to:
# * set disable_lan_only=1
# * set disable_networking=0
# this will **not** work if the app is using native/OS web APIs
download_steamhttp_requests=1
############################################
# mostly workarounds for specific problems #
############################################
[main::misc]
# force SetAchievement() to always return true
achievements_bypass=0
# force the function Steam_HTTP::SendHTTPRequest() to always succeed
force_steamhttp_success=0
# env var SteamOverlayGameId breaks Steam Input when the game is added to Steam as a non-steam game
disable_steamoverlaygameid_env_var=1
# add many Steam apps to the list of owned DLCs and the emu's list of installed app IDs, useful for many Source-based games
# https://developer.valvesoftware.com/wiki/Steam_Application_IDs
# https://developer.valvesoftware.com/wiki/Dedicated_Servers_List
enable_steam_preowned_ids=0

View File

@ -0,0 +1,112 @@
# #
# USE AT YOUR OWN RISK :: This feature might cause crashes or other problems #
# #
# ################################################################################ #
# you do not have to specify everything, pick and choose the options you need only #
# ################################################################################ #
[overlay::general]
# enable the experimental overlay, might cause crashes
enable_experimental_overlay=1
# amount of time to wait before attempting to detect and hook the renderer (DirectX, OpenGL, Vulkan, etc...)
# default=0
hook_delay_sec=0
# timeout for the renderer detector
# default=15
renderer_detector_timeout_sec=15
# disable the achievements notifications
disable_achievement_notification=0
# disable friends invitations and messages notifications
disable_friend_notification=0
# disable showing notifications for achievements progress
disable_achievement_progress=0
# disable any warning in the overlay
disable_warning_any=0
# disable the bad app ID warning in the overlay
disable_warning_bad_appid=0
# disable the local_save warning in the overlay
disable_warning_local_save=0
[overlay::appearance]
# load custom TrueType font from an absolute or relative path
# relative paths will be looked up inside the local folder 'steam_settings/fonts' first,
# if not found, it will be looked up inside the global folder 'GSE Settings/settings/fonts'
#Font_Override=Roboto-Medium.ttf
# global font size - for built-in font, multiple of 16 is recommended, e.g. 16, 32, etc
Font_Size=16.0
# achievement icon size
Icon_Size=64.0
# spacing between characters
Font_Glyph_Extra_Spacing_x=1.0
Font_Glyph_Extra_Spacing_y=0.0
# background for all types of notifications
Notification_R=0.12
Notification_G=0.14
Notification_B=0.21
Notification_A=1.0
# notifications corners roundness
Notification_Rounding=10.0
# horizontal (x) and vertical (y) margins for the notifications
Notification_Margin_x=5.0
Notification_Margin_y=5.0
# duration of notification animation in seconds - set to 0 to disable
Notification_Animation=0.35
# duration of achievement progress indication
Notification_Duration_Progress=6.0
# duration of achievement unlocked
Notification_Duration_Achievement=6.0
# duration of friend invitation
Notification_Duration_Invitation=8.0
# duration of chat message
Notification_Duration_Chat=4.0
# format for the achievement unlock date/time, limited to 79 characters
# if the output formatted string exceeded this limit, the built-in format will be used
# look for the format here: https://en.cppreference.com/w/cpp/chrono/c/strftime
Achievement_Unlock_Datetime_Format=%Y/%m/%d - %H:%M:%S
# main background when you press shift+tab
Background_R=0.12
Background_G=0.11
Background_B=0.11
Background_A=0.55
Element_R=0.30
Element_G=0.32
Element_B=0.40
Element_A=1.0
ElementHovered_R=0.278
ElementHovered_G=0.393
ElementHovered_B=0.602
ElementHovered_A=1.0
ElementActive_R=-1.0
ElementActive_G=-1.0
ElementActive_B=-1.0
ElementActive_A=-1.0
# ############################# #
# available options:
# top_left
# top_center
# top_right
# bot_left
# bot_center
# bot_right
# position of achievements
PosAchievement=bot_right
# position of invitations
PosInvitation=top_right
# position of chat messages
PosChatMsg=top_center
# ############################# #

View File

@ -0,0 +1,26 @@
# ################################################################################ #
# you do not have to specify everything, pick and choose the options you need only #
# ################################################################################ #
[user::general]
# user account name
account_name=goldberg
# Steam64 format
account_steamid=76561197960287930
# the language reported to the app/game
# look for the column 'API language code' here: https://partner.steamgames.com/doc/store/localization/languages
# default=english
language=english
# report a country IP if the game queries it
# ISO 3166-1-alpha-2 format, use this link to get the 'Alpha-2' country code: https://www.iban.com/country-codes
# default=US
ip_country=US
[user::saves]
# when this is set, it will force the emu to use the specified location instead of the default global location
# path could be absolute, or relative to the location of the .dll/.so, leading and trailing whitespaces are trimmed
# when this option is used, the global settings folder is completely ignored, allowing a full portable behavior
#local_save_path=GSE Saves
# name of the default global folder used to store save data, leading and trailing whitespaces are trimmed
# default=GSE Saves
saves_folder_name=GSE Saves

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,4 @@
release
you are currently using the 'release' version of the emulator
use 'gse_debug_switch.exe' if you want to use the 'debug' version

View File

@ -0,0 +1,6 @@
@echo off
pip install -U steam[client]
pip install pyinstaller
pip install requests
pip install certifi
pip install configobj

View File

@ -0,0 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
python -W ignore::DeprecationWarning generate_emu_config.py -img -scr -vids_low -vids_max -scx -cdx -acw -clr -anon %arg%

View File

@ -0,0 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
python -W ignore::DeprecationWarning generate_emu_config.py -img -scr -vids_low -vids_max -scx -cdx -acw -clr %arg%

View File

@ -0,0 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
python -W ignore::DeprecationWarning generate_emu_config.py -cdx -acw -clr %arg%

View File

@ -1,5 +1,6 @@
#controller vdf script by mr_goldberg
#generates controller config from a vdf
import vdf
import sys
import os
@ -65,7 +66,7 @@ def add_input_bindings(group, bindings, force_binding=None, keymap=keymap_digita
else:
bindings[action_name] = [binding]
else:
print(f"[X] missing keymap for {i}")
print(f"[X] ____ missing keymap for {i}")
return bindings
@ -128,7 +129,7 @@ def generate_controller_config(controller_vdf, config_dir):
bindings = add_input_bindings(group, bindings, binding)
else:
print("unhandled trigger mode", group["mode"])
print("[X] ____ unhandled trigger mode", group["mode"])
if s[0].lower() in ["joystick", "right_joystick", "dpad"]:
group = groups_byid[number]
@ -144,7 +145,7 @@ def generate_controller_config(controller_vdf, config_dir):
elif s[0].lower() == "dpad":
binding = "DPAD"
else:
print("could not handle", s[0])
print("[X] ____ could not handle", s[0])
if action_name in bindings:
if binding not in bindings[action_name] and (binding + "=joystick_move") not in bindings[action_name]:
bindings[action_name].insert(0, binding)
@ -168,7 +169,7 @@ def generate_controller_config(controller_vdf, config_dir):
if s[0].lower() != "dpad":
print("no pad", s[0])
else:
print("unhandled joy mode", group["mode"])
print("[X] ____ unhandled joy mode", group["mode"])
all_bindings[name] = bindings
@ -200,14 +201,14 @@ if __name__ == '__main__':
for vdf_file in sys.argv[1:]:
try:
print(f"parsing controller file '{vdf_file}'")
print(f"[ ] parsing controller file '{vdf_file}'")
t = ''
with open(vdf_file, 'rb') as f:
t = f.read().decode('utf-8')
if t:
filename = os.path.basename(vdf_file)
outdir = os.path.join(f"{filename}_config", "steam_settings", "controller")
print(f"output dir: '{outdir}'")
print(f"[ ] __ output dir: '{outdir}'")
generate_controller_config(t, outdir)
else:
print("[X] couldn't load file", file=sys.stderr)

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