Skip to content

Hotfix Support

This document describes how to enable ini patching via a combination of Unreal’s HotfixManager system and RallyHere’s OnlineSubsystemHotfix and KV’s system, including how to setup and test the system.

Enabling the HotFix OnlineSubsystem

We use an online subsystem to interface with the Engine’s HotfixManager, which uses an OnlineSubsystem’s CloudFileInterface to read files. This subsystem is called OnlineSubsystemHotfix.

To enabling using this system with the HotfixManager, the following needs to be added to the *Engine.ini set of configuration files (likely DefaultEngine.ini)

[/Script/Hotfix.OnlineHotfixManager]
OSSName = Hotfix

If the HotfixManager’s configured OnlineSubsystem is “Hotfix” (our custom OnlineSubsystemHotfix), hotfixes can be processed. By default, this requires calling TriggerHotfixProcessing() on the Config Subsystem. However, hotfix data can be configured to be automatically applied via the following:

[/Script/RallyHereIntegration.RH_ConfigSubsystem]
bAutomaticallyApplyHotfixData=true

NOTE: In SDK 15.0, this value was moved to:

[/Script/RallyHereIntegration.RH_IntegrationSettings]
bAutomaticallyApplyHotfixData=true

Finally, the system must be enabled from the Developer API / Developer Portal via setting KVs. This is done by setting the following KV: hotfix.enable = true

If the above is set, then any other value starting with hotfix. is treated as a hotfix snippet and processed.

Hotfix Snippets

Hotfix snippets are JSON objects that are reprocessed client side into Unreal INI format and applied on top of the INI stack.

We provide a helper python script that will take Unreal INI format files and create the JSON format objects, it is available at OnlineSubsystemHotfix/Resources/UnrealConfigToJson.py

Once the helper has been run on a file or set of files, take the output JSON and create a KV starting with hotfix.. A generic naming system is fine (ex: hotfix.hotfixjson) or a per-snippet name can be useful (ex: hotfix.XPMultiplier).

NOTE: Hotfix snippets are not applied in a specific order.

Testing

The Config Subsystem has a test value to use when testing the hotfix system called bHotfixTestValue which is displayed on the configuration tool of the debug page. By default this value is false, and the goal of the test is to turn it to true.

NOTE: in SDK 15.0, this value was moved to the Integration Settings object, but the Config Subsystem still has a getter called GetHotfixTestValue() to use to retrieve it.

To test the value, set the following KV in the Developer Portal. This source INI file this snippet was generated from is located DefaultRallyHereIntegration.ini located in OnlineSubsystemHotfix/Resources as of SDK 15 hotfix.gameconfigoverridedebug = {"DefaultRallyHereIntegration.ini": {"/Script/RallyHereIntegration.RH_ConfigSubsystem": {"bHotfixTestValue": "true"}, "/Script/RallyHereIntegration.RH_IntegrationSettings": {"bHotfixTestValue": "true"}}}

Once the value is set and has had a chance to propgate, you can use the Rally Here Debug Tool to verify the value has been updated. The Config window will display the value at the top of the KV list.

If hotfix data is not applied automatically, the Apply Hotfix button can be used to trigger hotfix processing to test the value.