This document lists sets of publicly available recommended engine changes, along with the reasons for the changes and their impact. Some engine changes for specific platforms may require private requests due to NDA restrictions.
Note that we tag our engine changes internally with surrounding //$$ BEGIN and //$$ END blocks. These are preserved here to ensure that our internal tests match the code presented here.
General Engine Changes
There are no generic engine changes recommended or required at this time
JSON Serialization
FJsonValue::Duplicate does not properly handle Null json values
The Engine’s Duplicate functionality does not properly handle null values. Instead of creating a value of the FJsonValueNull type, and returning a pointer to it, it instead returns a pointer to null.
This causes a duplicated Json Value to become invalid, as other functions assume all elements are valid and have a type.
To fix this, add the following case to the switch statement in FJsonValue::Duplicate:
Steam
The Engine’s OnlineSubsystemSteam is missing some key features, and is not set up to be extensible so that those features can be easily added. As such, while our OnlineSubsystemSteamV2 does add some missing features (such as Steam Inventory), some features are more easily added to the base engine directly.
FindSessionById Implementation
The OnlineSubsystemSteam implementation of FindSessionById trivially triggers its delegate with a failure.
This causes looking up Steam Sessions by their ID, preventing some workflows for joining or rejoining a Steam Session from functioning properly.
Note: this change embeds a helper object, to make it easier to communicate and drop into the engine. The helper can be moved out to match other similar implementations if you wish.
Replace the following in OnlineSessionInterfaceSteam.cpp:
With the following code (the original implementation is left commented out for reference):
Dedicated Server Staging
There is a bug in the engine’s staging code for dedicated server, that will not properly stage some of the server configuration files if they are in the project’s Platform directory. They will get loaded properly in both editor and cooked builds if the files are present, but do not get included in the staged build by default.
To fix this, add the following snippet marked with //$$ tags to CopyBuildToStagingDirectory.Automation.cs in the CreateStagingManifest function, within the if (SC.DedicatedServer) block. The function is long so some extra context is given in the below to help locate the correct location.