5. Copy the the example file `steam_settings.EXAMPLE\configs.EXAMPLE.ini` and paste it inside your own `steam_settings` folder, then rename it to `configs.ini`
`SAVE/Goldberg SteamEmu 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 `Goldberg SteamEmu Saves` to whatever you want per game, to do this modify `configs.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`.
*`account_name.txt`: edit this file to change your name
*`listen_port.txt`: edit this file if you want to 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
*`user_steam_id.txt` this is where your steam id is saved, you can change it, if your saves for a game are locked to a specific steam id see below for a way to change it on a per game basis, but it has to be valid
*`language.txt`: edit this to change the language the emulator will report to the game, default is `english`, it must be a valid steam language name or the game might have weird behaviour (list provided at the end of this readme)
* You can also create the file `configs.ini` and specify the most common options you usually set, you can use the provided example file `steam_settings.EXAMPLE\configs.EXAMPLE.ini` as a base. Note that you do not have to specify everything
Note that these are global so you won't have to change them for each game. For game unique stuff (stats and remote storage) a folder is created with the appid of the game.
If you want to change your steam_id on a per game basis, simply create a settings folder in the game unique directory (Full path: `C:\Users\<Your windows user name>\AppData\Roaming\Goldberg SteamEmu Saves\<appid>\settings`)
In that settings folder create a `user_steam_id.txt` file that contains the valid steam id that you want to use for that game only.
You can also make the emu ignore certain global settings by using a `force_account_name.txt`, `force_language.txt`, `force_listen_port.txt` or `force_steamid.txt` that you put in your `steam_settings\` folder.
See the `steam_settings.EXAMPLE` folder for an example.
If for some reason you want it to save in the game directory, you can create a file named `local_save.txt` right beside steam_api(64).dll (libsteam_api.so on linux) or inside your `steam_settings` folder.
The only thing that file should contain is the name of the save directory. This can be useful if you want to use different global settings like a different account name or steam id for a particular game.
Note that this save directory will be beside where the emu dll (or .so) is, which may not be the same as the game path.
**This will of course break all the networking functionality** so games that use networking related functionality like lobbies or those that launch a server in the background will not work.
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: `Goldberg SteamEmu 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.
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.
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.
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.
---
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.
It is recommended to use the command line tool `generate_emu_config` for that matter
---
## 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.
To do that, you can put a `leaderboards.txt` file in the `steam_settings` folder.
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`\):
To allow external downloads which will be stored in this `steam_settings\http` folder modify `configs.ini` and set `disable_lan_only=1`.
---
## Donwload Steam HTTP(S) requests:
You can make the emu attempt to download external http(s) requests madia via `Steam_HTTP::SendHTTPRequest()`, by modifying `configs.ini` and setting `download_steamhttp_requests=1`.
All the responses will be downloaded and saved locally inside: `steam_settings\http\`.
Make sure to change these options:
* set `disable_lan_only=1`
* set `disable_networking=0`
Note that this will **not** work if the app is using native/OS web APIs, also support for this feature is very basic and will fail in many cases.
You can use this feature, for eaxmple, to know which requests are made by the app.
It's up to you afterwards to specify the correct responses for these requests by changing the content of the files inside `steam_settings\http\`.
Check the example file in the `steam_settings` folder
---
## Force the API `Steam_HTTP::SendHTTPRequest()` to always succeed:
You can force the API `Steam_HTTP::SendHTTPRequest()` to always report success, by modifying `configs.ini` and setting `force_steamhttp_success=1`.
Check the example file in the `steam_settings` folder
Do not run more than one steam game with the **same appid** at the same time on the same computer with my emu or there might be network issues (dedicated servers should be fine though).
You can place a `.wav` file called `overlay_achievement_notification.wav` inside either the local `steam_settings/sounds` folder of the game, or inside `Goldberg SteamEmu 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 `Goldberg SteamEmu Settings/settings/sounds` folder, which will be played whenever a friend sends an invitation.
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.
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.
If you want to use the real steam glyphs instead of the free ones in the example directory copy them from: `<Steam Directory>\tenfoot\resource\images\library\controller\api` folder.
### Valid digital button names:
* DUP
* DDOWN
* DLEFT
* DRIGHT
* START
* BACK
* LSTICK
* RSTICK
* LBUMPER
* RBUMPER
* A
* B
* X
* Y
* DLTRIGGER (emulated buttons, the joy ones are used by games in menus for example. When the game wants to know if the trigger is pressed without the intensity)
* DRTRIGGER
* DLJOYUP
* DLJOYDOWN
* DLJOYLEFT
* DLJOYRIGHT
* DRJOYUP
* DRJOYDOWN
* DRJOYLEFT
* DRJOYRIGHT
### Valid analog names:
* LTRIGGER
* RTRIGGER
* LJOY
* RJOY
* DPAD
---
## Auth token (app ticket):
By default the emu will send the old token format for various APIs, like:
*`Steam_GameServer::GetAuthSessionTicket()`
*`Steam_User::GetAuthSessionTicket()`
*`Steam_User::GetAuthTicketForWebApi()`
You can make the emu generate new ticket data, and additionally the GC token.
## 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.ini` and setting `matchmaking_server_list_actual_type-1`.
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.ini`.
By default the emu will immediately start the renderer detector for the overlay, but you can give it some initial delay,
which allows some games to initialize properly, otherwise the detector may not detect the current renderer (DirectX, OpenGL, etc...) and the overlay will not work (example games: `Have a Nice Death`, and `Saints Row (2022)`).
After that initial delay, the emu will give the detector `15 seconds` as a timeout, after that time if the detector didn't return a valid result, it will fail. This avoids an infinite detection loop and a potential FPS drop on failure.
You can allow the emu to mutually share leaderboards scores with people playing the same game on the same network, by modifying `configs.ini` and setting `share_leaderboards_over_network=1`.
By default the emu will mutually share stats with game servers, you can disable this behavior by modifying `configs.ini` and setting `disable_sharing_stats_with_gameserver=1`, this also disables the interface `ISteamGameServerStats`.
Game servers and players will not immediately synchronize stats/achievements whey they're changed, they'll wait for the next call to `Steam_RunCallbacks()`.