[Feature] Per-machine engine associations

For all Unreal Engine projects, the “uproject” file serves as a basis to associate a project with a particular engine version. When working together with a diverse team of different Windows and Mac machines, having the uproject file allow for a default engine association but allow a specific machine to override that default would be very desirable.

The reason for this is simple: the shipping build of UE4 editor (since 4.7) has rendering glitches (have been reported but never fixed) that occur on a Late 2013 Macbook Pro (nVidia GT 750m). The “fix” for this is to build UE4’s release build from source. Using UE4editor from source corrects all visual glitches and improves performance; however, this source-built version of UE4 is known from its UUID marker versus the shipping version number (i.e. 4.14). Allowing per-machine engine associations (to also include the major version number of UE4) to be stored in the uproject file would allow this particular use-case to work given multiple team members working together on a common project.

Existing format:

{
	"FileVersion": 3,
	"EngineAssociation": "4.14",
	"Category": "",
	"Description": ""
}

Please note the following format still imposes “4.14” as the version of the engine for the particular project (for binary project file compatibility). However, the new section allows the project launcher to be smarter as to the location of the engine to be used.

Proposed format:

{
	"FileVersion": 3,
	"EngineAssociation": "4.14",
	"Category": "",
	"Description": "",
    "EngineAssociationOverrides": [
        {
           "MachineUuid": "{123E4567-E89B-12D3-A456-426655440000}",
           "MachineUserName": "johndoe",
           "EngineAssociation": "{5817512F-4CA4-01C8-6207-6E81D4C025CB}"
        },
        {
           "MachineUuid": "{123E4567-E89B-12D3-A456-426655440000}",
           "MachineUserName": "janedoe",
           "EngineAssociation": "{2766BA84-6BBA-A23D-8541-62518778AB3B}"
        }
    ]
}

Another use-case has me currently debugging a UE4 project using the 4.14.3 source build of the engine. While the other developers are fine with using the standard shipping build, I’m using the source-built version for the purpose of inspecting low-level variables within the engine. A feature like this could certainly help the teams out there developing against UE4 for their projects.