Windows client build¶
Scope¶
This page is the operational authority for building, cooking, staging, and archiving the Tank Game Windows client. It covers project-facing build-machine work after an Unreal Engine change; the broader source migration, plugin compatibility work, and cross-platform findings belong in the UE AngelScript 5.8 upgrade.
Current build entry point¶
The Windows launcher is maintained in the separate build-utilities checkout:
T:\Repo\_Build\_BuildWindows.bat
Current UE 5.8-AS inputs are:
Project: T:\Repo\Tank Game 5.8\Metal_terra.uproject
Engine association: 5.8-AS
Engine root: T:\UE-AS-5.8-Installed\Windows
RunUAT: T:\UE-AS-5.8-Installed\Windows\Engine\Build\BatchFiles\RunUAT.bat
Target: Metal_terra
Platform: Win64
Configuration: Development
_BuildWindows.bat sets TANK_GAME_PROJECT_PATH and RUNUAT_PATH, then calls
create_windows_build.py by a path relative to the batch file. The Python
utility keeps matching fallback values for PROJECT_PATH and ENGINE_ROOT.
The explicit RUNUAT_PATH is important: a .uproject association alone does
not prevent a build script from launching an older AutomationTool.
UE 5.8 client-build changes¶
The 5.8 transition required these client-pipeline changes:
- Point the launcher and Python fallback at
Tank Game 5.8. - Point both
RUNUAT_PATHandENGINE_ROOTat the registered5.8-ASInstalled Build. - Keep the game and editor targets on the UE 5.8 settings documented in the general upgrade page:
DefaultBuildSettings = BuildSettingsVersion.V7;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_8;
- Remove obsolete
bUsesSteamfromMetal_terraEditor.Target.cs; UE 5.8 no longer uses it. - Disable
ModelContextProtocolin the productionMetal_terra.uprojectso an unattended cook does not start its development HTTP listener. It may remain enabled inMetal_terra.local.uprojectfor interactive editor work. - Copy
steam_api64.dllfrom the selected engine's Steamworks 1.64 payload, resolved relative toENGINE_ROOT, rather than from the old UE 5.6 Steamworks 1.57 directory.
The build must use Metal_terra.uproject. Do not switch it to the local project
descriptor merely to inherit a developer's editor-plugin configuration.
Checkpoints after the next engine change¶
1. Engine identity and registration¶
- [ ] Confirm the new engine root exists.
- [ ] Confirm
Engine\Build\BatchFiles\Build.batandRunUAT.batexist. - [ ] Update
EngineAssociationin the production.uproject. - [ ] Confirm the association is registered on the build machine.
- [ ] Confirm UAT logs identify the intended engine version and root.
Inspect custom engine registrations with:
reg query "HKCU\Software\Epic Games\Unreal Engine\Builds"
Do not change target enums to older values until the running UnrealBuildTool has been verified. During the 5.8 move, UE 5.6 UBT produced:
'BuildSettingsVersion' does not contain a definition for 'V7'
'EngineIncludeOrderVersion' does not contain a definition for 'Unreal5_8'
The target files were valid; the build launcher was using the wrong engine.
2. Build-utility paths¶
- [ ] Update
TANK_GAME_PROJECT_PATHin_BuildWindows.bat. - [ ] Update
RUNUAT_PATHin_BuildWindows.bat. - [ ] Update fallback
PROJECT_PATHincreate_windows_build.py. - [ ] Update fallback
ENGINE_ROOTincreate_windows_build.py. - [ ] Search build utilities for the old project and engine paths.
- [ ] Check engine-versioned dependencies, especially the Steamworks directory.
- [ ] Confirm
steam_api64.dllexists before packaging.
Search for the old checkout name, old engine root, PROJECT_PATH,
ENGINE_ROOT, RUNUAT_PATH, Steamv, and the previous UE_5.x name.
3. Client target rules¶
- [ ] Check
Source\Metal_terra.Target.cs. - [ ] Check
Source\Metal_terraEditor.Target.cs, because UAT loads the editor target to run the cook. - [ ] Use the new engine's recommended
DefaultBuildSettings. - [ ] Use the matching
EngineIncludeOrderVersion. - [ ] Remove target properties reported as obsolete.
Available values are defined by the selected engine in:
Engine\Source\Programs\UnrealBuildTool\Configuration\Rules\TargetRules.cs
Server target migration is covered by the general engine-upgrade documentation, not this client page.
4. Direct compile gate¶
Compile the client target before spending time on a full cook:
& "<ENGINE_ROOT>\Engine\Build\BatchFiles\Build.bat" `
Metal_terra Win64 Development `
"<PROJECT_ROOT>\Metal_terra.uproject" `
-WaitMutex -NoHotReloadFromIDE
- [ ] Target-rule C# compilation succeeds.
- [ ] UHT and C++ compilation succeed.
- [ ] Linking succeeds.
- [ ]
Binaries\Win64\Metal_terra.exeexists.
This gate separates target and code failures from cook, stage, pak, and archive failures.
5. Unattended-cook plugin audit¶
- [ ] Review newly enabled editor and developer plugins.
- [ ] Disable tools not required by the production project descriptor.
- [ ] Check for plugins that bind ports, open UI, require credentials, or call external services during commandlets.
- [ ] Keep machine-specific tooling in
Metal_terra.local.uprojectwhere practical.
A cook can process every package and print Done! but still fail because a
plugin logged one startup error. In the UE 5.8 migration,
ModelContextProtocol tried to bind 127.0.0.1:8000; the resulting
LogHttpListener error made UAT return Error_UnknownCookFailure after all
2,485 packages had been processed.
6. Full client packaging gate¶
The automation runs the equivalent of:
& "<ENGINE_ROOT>\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun `
"-project=<PROJECT_ROOT>\Metal_terra.uproject" `
-noP4 `
-platform=Win64 `
-clientconfig=Development `
-build -cook -stage -pak `
-patchpaddingalign=1048576 `
-blocksize=1048576 `
-archive `
"-archivedirectory=T:\Repo\_Build\_WindowsUATArchiveTemp" `
-nocompileeditor -prereqs -utf8output
- [ ] UAT reports the intended engine.
- [ ] Build succeeds.
- [ ] Cook finishes with zero errors.
- [ ] Stage, pak, prerequisites, and archive complete.
- [ ] The archive contains
Windows\Metal_terra.exe, or another Windows folder name recognized by the build utility. - [ ] The successful temporary package replaces
T:\Repo\_Build\Windows. - [ ] Packaged config, log-upload scripts, and
steam_api64.dllare present. - [ ] Launch the packaged executable for a client smoke test.
The temporary archive protects the previous working client package until UAT and post-build file generation succeed.
Failure diagnosis order¶
- Confirm the engine path and version near the start of the UAT log.
- Run the direct compile gate and fix target, UHT, C++, or link errors first.
- In a cook failure, inspect the final
Warning/Error Summaryand find the first real error; do not stop at the genericCook failedline. - Check editor/development plugin startup before assuming an asset caused the failure.
- Then investigate asset versions, invalid tags, Blueprint compile warnings, and load errors.
Log locations¶
AutomationTool log:
%APPDATA%\Unreal Engine\AutomationTool\Logs\<encoded-engine-path>\Log.txt
The same directory contains the copied Cook-<timestamp>.txt and per-target UBT
logs. Additional useful files are:
%LOCALAPPDATA%\UnrealBuildTool\Log.txt
<PROJECT_ROOT>\Saved\Logs\AutoSDKInfo.txt
Non-Windows SDK validation failures are not client blockers when Win64 is reported as valid. Existing asset, Wwise, StructUtils, gameplay-tag, and stress-test-map warnings remain cleanup work, but the client gate is controlled by actual errors and the UAT exit code.