Skip to content

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:

  1. Point the launcher and Python fallback at Tank Game 5.8.
  2. Point both RUNUAT_PATH and ENGINE_ROOT at the registered 5.8-AS Installed Build.
  3. 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;
  1. Remove obsolete bUsesSteam from Metal_terraEditor.Target.cs; UE 5.8 no longer uses it.
  2. Disable ModelContextProtocol in the production Metal_terra.uproject so an unattended cook does not start its development HTTP listener. It may remain enabled in Metal_terra.local.uproject for interactive editor work.
  3. Copy steam_api64.dll from the selected engine's Steamworks 1.64 payload, resolved relative to ENGINE_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.bat and RunUAT.bat exist.
  • [ ] Update EngineAssociation in 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_PATH in _BuildWindows.bat.
  • [ ] Update RUNUAT_PATH in _BuildWindows.bat.
  • [ ] Update fallback PROJECT_PATH in create_windows_build.py.
  • [ ] Update fallback ENGINE_ROOT in create_windows_build.py.
  • [ ] Search build utilities for the old project and engine paths.
  • [ ] Check engine-versioned dependencies, especially the Steamworks directory.
  • [ ] Confirm steam_api64.dll exists 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.exe exists.

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.uproject where 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.dll are 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

  1. Confirm the engine path and version near the start of the UAT log.
  2. Run the direct compile gate and fix target, UHT, C++, or link errors first.
  3. In a cook failure, inspect the final Warning/Error Summary and find the first real error; do not stop at the generic Cook failed line.
  4. Check editor/development plugin startup before assuming an asset caused the failure.
  5. 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.