While the main feature of the Bootstrapper (wtsapi32.dll, dwmapi.dll, or version.dll) is to use a custom server with the game, it has other features as well.
The Bootstrapper's configuration is in OpenWF/Client Config.json relative to your game folder. It has the following fields:
fallback_language — If not empty, this language will be used when Warframe.x64.exe is invoked without a language command line argument.fallback_languageVO — If not empty, this voiceover language will be used when Warframe.x64.exe is invoked without a languageVO command line argument.fallback_graphicsDriver — If not empty, this graphics driver will be used when Warframe.x64.exe is invoked without a graphicsDriver command line argument.fallback_windowMode — If in range, this window mode will be used when Warframe.x64.exe is invoked without a fullscreen command line argument. 0 for windowed. 1 for fullscreen.fallback_cluster — The cluster to use when Warframe.x64.exe was double-clicked or the argument was simply omitted. Can be public, test, or dev — the latter two enable some more logging.server_host — The IP address to redirect game traffic to. It must be within your local network.http_port — The port to use for HTTP traffic. This should match the HTTP port configured on the server.https_port — The port to use for HTTPS traffic. This should match the HTTPS port configured on the server.autologin — Uses the provided credentials to automatically login on startup. If another instance is logged in on the same account, it will be forcefully logged out.autologin_emailautologin_password — The whirlpool hash of the password to use for autologin. You can simply enter your password and it will automatically be hashed and overwritten.high_damage_numbers_patch — If true, patches the game to display the exact number of damage that you dealt to fix -2147483648 showing up on high damage.simulacrum_blacklisted — If true, blacklisted enemies are shown in the Simulacrum. Defaults to false to match the game.simulacrum_whitelisted — If true, whitelisted enemies are shown in the Simulacrum. Defaults to true to match the game.pause_always_stops_timedisable_firewall_prompt — If true, prevents the game from showing "Please ensure that your firewall permits UDP ports 4950 & 4955" after login.ee_log_in_console — If true, writes everything that gets written to EE.log to the console as well.skip_mission_start_timer — If true, disables the 5 second wait before a mission starts.logout_on_request_failure — If false, the game will ignore HTTP request failures/timeouts instead of forcing a logout.fov_override — If not 0, overrides the game's FOV setting. You can use any value from 1 to 226.forced_profile_dir — An absolute path to a folder that will be used to read and write your game settings. Notably, this can be used to have the same settings regardless of username.auto_start_scripts — A list of scripts to automatically start.alternative_loading — Enables an alternative loading mode (Server.FastLoad) which also skips daily tribute and intro cutscenes when loading into a relay. However, this breaks some parts of The New War and possibly other missions.save_all_metadata — If true, implicitly creates an empty patch on every metadata read to make it available for get_effective_metadata requests. May degrade performance.write_all_metadata_reads_to_console — If true, writes all metadata reads to the console. May degrade performance.write_all_metadata_reads_to_ee_log — If true, writes all metadata reads to EE.log. May degrade performance.write_patched_metadata_reads_to_console — If true, writes patched metadata reads to the console. May degrade performance.write_patched_metadata_reads_to_ee_log — If true, writes patched metadata reads to EE.log. May degrade performance.client_http_port — Defines the port of the Bootstrapper's web interface (documented below). Should be kept 6155 unless you have a really good reason for being a snowflake.disable_overlay — Can be used to disable the overlay, e.g. used to show "OpenWF @ <server>" before login. Default is false on Windows but true on Linux due to poor emulation under Wine.While the game is running, you can visit http://localhost:6155/ to modify some of the above options, access additional features like teleportation, and use scripts.
This web interface uses the game's language or ?lang= query parameter to check for translations. The builtin translations are mirrored from https://onlyg.it/OpenWF/Translations. You can provide a OpenWF/webui-dict.cat.txt file to provide a custom work-in-progress translation.
Developers can also use the HTTP interface to interact with the Bootstrapper. In addition to commands (documented below), the following routes are available: /ping, /save_all_metadata, /write_all_metadata_reads_to_console, /write_all_metadata_reads_to_ee_log, /write_patched_metadata_reads_to_console, /write_patched_metadata_reads_to_ee_log, /pause_always_stops_time, /server_host, /status, /toggle_console, /scripts, /start_script, /start_script_inline, /autostart_scripts, /add_autostart_script, /remove_autostart_script, /apply_hotfix, /version, /game_version, /memory, /get_effective_metadata, /get_effective_metadata_as_json
The Bootstrapper adds the following command line arguments, which can be used to override their respective config fields: owfServerHost, owfServerHttpPort, owfServerHttpsPort, owfClientHttpPort
When connecting to a server, the Bootstrapper requests /custom/tunables.json. The resulting JSON object may provide the following fields:
prohibit_skip_mission_start_timer — If true, prohibits skip_mission_start_timer.prohibit_fov_override — If true, prohibits fov_override.prohibit_freecam — If true, prohibits freecam.prohibit_teleport — If true, prohibits teleport.prohibit_scripts — If true, prohibits the execution of user-defined scripts.disable_websocket — If true, the Bootstrapper will not attempt to establish a WebSocket connection to the server (documented below).motd — If given, this string may be shown on the overlay before login.token — If given, this string will be provided as a query parameter in the login request to indicate acknowledgement of the tunables.irc — If given, this string will be used as the IRC server address for pre-U17 versions.To aid in troubleshooting, the Bootstrapper assumes that a compatible server responds to this request with status code 200 and a valid JSON object, otherwise showing a warning popup.
buildLabel to indicate the client's buildLabel.clientMod parameter indicating the Bootstrapper's name and version. If Metadata Patches are in use, metadataPatchesInUse=1 is added as well.xpBasedLevelCapDisabled to indicate that the client has been patched to accept any PlayerLevel and doesn't need XPInfo to match.USER message is adjusted to contain nonce=... in the 'realname' field.And the other way around:
"\t") in which case the first one is the login response and the second one is tunables.Label Replacements are loaded by instantiating the OpenWF/Label Replacements.pluto script. You can modify this script but by default it loads replacements from OpenWF/Label Replacements.cat.txt. As implied by the extension, it uses the CaT format. Note that nested nodes are ignored.
Metadata Patches are loaded from .txt files in the OpenWF/Metadata Patches/ folder.
They are parsed line by line. If a line starts with /, a new patch for the given absolute path is started.
It is possible to have a single patch affect multiple paths by using ampersands. The start of a patch can also take up multiple lines if the ampersand is at the end of the line or the beginning of the next line.
For the remaining processing, leading and trailing spaces and tabs are ignored:
> also start a new patch but can be used at any indentation level.>, r|, ...) is added as a prefix to the effective metadata. This works to add top-level properties but also to replace them because the game resolves duplicates by ignoring subsequent entries.r| create replacements, e.g. r|A|Z replaces all instances of A with Z in affected metadata.s| create regex substitutions, e.g. s|(?m)^(.+)=1$|$1=0 would replace a value of 1 on any line with a 0, using the 'm' flag here so ^ and $ also match on line boundaries. See here for more information about the Regex engine.q| create query assignments, e.g. q|Upgrades.0.Value|123 sets the Value field of the first item in the Upgrades array to 123.If multiple patches affect the same absolute path, they are combined.
The Bootstrapper handles the client's content requests by consulting the OpenWF/Content/ folder, forwarding the request to the configured server in case a file is not found.
At minimum, the client will request /0/H.Cache.bin!D_---------------------w. The Bootstrapper has 3 modes for managing this file:
B.Cache.Windows.bin and H.Cache.bin) will be created to ensure your content is loaded. Otherwise,OpenWF/Content/0/UNMANAGED exists, it is assumed that OpenWF/Content/0/H.Cache.bin!D_---------------------w is correctly in place and no attempts to correct it will be made. Otherwise,OpenWF/Content/0/H.Cache.bin!D_---------------------w file that should require no extra content requests except for undoing content replacements.After login, the Bootstrapper will attempt to establish a WebSocket connection with ws://server_host:http_port/custom/ws. If the WebSocket upgrade succeeds, the Bootstrapper sends {"auth_game":{"accountId":...,"nonce":...}}. With this connection in place, the server can send {"sync_inventory":true} to trigger an inventory request, {"sync_world_state":true} to trigger a worldState request, and {"tunables":{...}} or {"tunables_delta":{...}} to update tunables.
The command API is a versatile way for developers to interact with the Bootstrapper. Commands are available via HTTP, WebSocket, and the scripting API. For example, to enable skip_mission_start_timer, one can use HTTP with /skip_mission_start_timer?true, WebSocket with send("skip_mission_start_timer?true") or scripting with owf_command("skip_mission_start_timer?true").
The following commands are available: logout, save_config, reload_hotkeys, reload_label_replacements, reload_metadata_patches, available_scripts, running_scripts, autostart_scripts, script_log, clear_script_log, stop_script, high_damage_numbers_patch, skip_mission_start_timer, simulacrum_blacklisted, simulacrum_whitelisted, alternative_loading, ee_log_in_console, fov_override, freecam, lockcam, gamecam, teleport, enable_pause_always_stops_time, disable_pause_always_stops_time, request_bgscript_broadcasts, download_latest_hotfix, check_for_updates
I hope this document was useful. If you have any feature requests or bug reports regarding the Bootstrapper, feel free to submit them at https://onlyg.it/OpenWF/Bootstrapper/issues.