Software/ThirdParty/Guides/Epic/UnrealTournament4

From RCS Wiki
Jump to: navigation, search

Unreal Tournament 4 for OpenPOWER

Introduction

Unreal Tournament 4 on Talos II

Unreal Tournament 4 (UT4) is a fast-paced first person shooter (FPS) video game. If / when released, it would be the 9th release in the Unreal Tournament series of games, built on a top of the line, modern game engine. Epic Games (Epic) originally reached out to the game development community that was working on an unofficial next version of Unreal Tournament, and offered access to source code, etc. along with being able to guide development of the next official Unreal Tournament game with some restrictions. This allowed unprecedented access to both the Unreal Engine 4 source and the raw assets that go into a modern title of this class, enabling both the Raptor ports to POWER and community creation of additional content outside of the mutator / mapping systems.

Unfortunately Epic has largely stopped work on Unreal Tournament 4 to focus on FortNite, a wholly commercial game with no source code available to anyone outside of Epic. As a result, the last official Unreal Tournament 4 builds date from 2017, on Engine 4.15. Engine 4.15 does not work correctly on Linux with modern GPUs, it will appear to compile and run but only shows a black screen due to what is very likely some internal shader problems.

Fortunately, the community has stepped up and started upgrading the game to the latest 4.20 engine. This breaks online matchfinding and related global server functionality -- because Epic apparently has no interest in upgrading the official builds, the global server is stuck on Engine 4.15 which is not compatible with Engine 4.20 clients. The single player and LAN server functionality remains intact, however.

System Requirements

At least 32GB of RAM is essential, with 128GB or more recommended. Asset cook and linking / debug symbol extraction consume a tremendous amount of RAM; systems with 32GB must also have a swapfile configured to handle peak memory demand. 400GB of free disk space is also required, with the compiled engine, game, and assets alone sitting at nearly 350GB.

With the engine upgraded to 4.20, UT4 makes a great test case for Vulkan support on Linux and on OpenPOWER. The rendering backend can be selected at runtime for both the editor and the game via the -opengl or -vulkan flags. Both default to OpenGL at this time.

Getting Started

First, obtain a working build of the Unreal Engine using the instructions provided here:

Software/ThirdParty/Guides/Epic/UnrealEngine

Once you are able to successfully launch the editor (UE4Editor) from your Engine source tree, you can proceed.

Downloading Source

Grab the ue4_20_1_update_ppc64le branch of the Engine 4.20 update fork. This comes with the Engine subdirectory set up with a symlink to ../UnrealEngine/Engine; place the downloaded UT4 sources alongside the previously built UnrealEngine source tree to activate the symbolic link.

git clone --single-branch -b ue4_20_1_update_ppc64le https://github.com/kb9vqf/UnrealTournament.git

Since this 4.20 engine upgrade is very much a work in process, the Plugins directory is temporarily broken. Remove it entirely:

rm -rf UnrealTournament/Plugins

Also for 4.20, as a temporary workaround for an assert at the main menu, edit Engine/Source/Runtime/SlateCore/Public/Brushes/SlateDynamicImageBrush.h and remove the ensureMsgf(false, TEXT(...)) statement at line 119.

If you intend to package the game, another temporary workaround for 4.20 needs to be applied since the Vulkan shaders won't cleanly compile. In Engine/Source/Developer/VulkanShaderFormat/Private/VulkanBackend.cpp, remove the default: and check(0) statements at lines 2039/2040.

Building

Set up environment

export TARGET_ARCH=powerpc64le-unknown-linux-gnu
export UE4_ROOT_DIR=$PWD

Initialize Project

Download dependencies and generate project files:

./Setup.sh
./GenerateProjectFiles.sh

Copy repaired assets over existing assets (UE 4.20 fixes):

cp -Rp UnrealTournament/UnrealTournament/Content_UE4_19_2_fix/RestrictedAssets/* UnrealTournament/UnrealTournament/Content/RestrictedAssets/

Build!

make CrashReportClient ShaderCompileWorker UnrealPak UnrealLightmass UnrealFrontend UE4Game UE4Editor UnrealTournament UnrealTournamentEditor UnrealTournamentServer

Test Editor (optional)

At this point the editor can be launched:

UE4Editor UnrealTournament

Initial shader compilation will take a long time, grab a cup of coffee, etc. 44-core Talos II systems with 256GB+ of RAM will cut this process down to more tolerable lengths of time.

Prepare Game for Local Launch

cp -Rp UnrealTournament/Binaries/Linux/*.modules Engine/Binaries/Linux/

Launch in Editor (cook assets on fly)

cd Engine/Binaries/Linux
./UE4Editor UnrealTournament -game

NOTE: Running in this mode can incur a significant performance penalty until the asset cook process is complete for the currently displayed content. Even when complete, the engine is still running in a debug mode with reduced performance. For full performance, use the packaged build instructions below and run the packaged game.

Package Game

NOTE: Epic's EULA prohibits redistribution of the built binaries; they reserve that right for themselves. With development apparently stalled that does make playing the game significantly harder; we recommend you contact Epic directly and mention that you want to see UT4 on UE 4.20 or higher and built for POWER, even if they just allow a community build to be released. We have no ability to ease this process, unfortunately.

To build a full package (e.g. if you're going to deploy to a smaller system or set up a LAN party):

Compile and Cook
./Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -nop4 -project=UnrealTournament/UnrealTournament.uproject -build -cook -compressed -iterate -allmaps -stage -archive -archivedirectory=/opt/UnrealTournament -package -LinuxNoEditor -clientconfig=Shipping -ue4exe=UE4Editor -noclean -pak -targetplatform=Linux -utf8output
Recook Only
./Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -nop4 -project=UnrealTournament/UnrealTournament.uproject -nocompile -cook -compressed -iterate -allmaps -stage -archive -archivedirectory=/opt/UnrealTournament -package -LinuxNoEditor -clientconfig=Shipping -ue4exe=UE4Editor -noclean -pak -targetplatform=Linux -utf8output

Fix Installation

# Packaging workarounds
mkdir -p /opt/UnrealTournament/Engine/Binaries/Linux/
cp -Rp UnrealTournament/Binaries/Linux/UnrealTournament-Linux-Shipping.modules /opt/UnrealTournament/LinuxNoEditor/Engine/Binaries/Linux/
cp -Rp UnrealTournament/UnrealTournament.uproject /opt/UnrealTournamentLinuxNoEditor/UnrealTournament
mkdir -p /opt/UnrealTournament/LinuxNoEditor/Engine/Content/
cp -Rp Engine/Content/Internationalization /opt/UnrealTournament/LinuxNoEditor/Engine/Content/
mkdir -p /opt/UnrealTournament/LinuxNoEditor/UnrealTournament/Config/
cp -Rp UnrealTournament/Config/DefaultEngine.ini /opt/UnrealTournament/LinuxNoEditor/UnrealTournament/Config/
cp -Rp UnrealTournament/Binaries/Linux/*-Linux-Shipping.so /opt/UnrealTournament/LinuxNoEditor/Engine/Binaries/Linux/

Known Issues

  • On Debian Buster with a 4.18 kernel and the Cognitive DMA patches, along with the MESA signed char patch installed from the Software/ThirdParty/Guides/Epic/UnrealEngine guide, Vulkan is not stable. The editor will load but some of the rendering is not correct, and mousing over the asset tree view will cause a crash inside the MESA Vulkan stack. The game itself loads to a black screen. None of these issues are present under OpenGL and are prime targets for MESA developer attention.
  • Due to the recent engine upgrade to 4.20, a few things are broken and are waiting for fixes. Notably, there is some degree of choppiness and stuttering after map load for around 45 seconds, it appears the game is errantly processing a navmesh in the background during this time. This is being tracked at https://github.com/sereau/UnrealTournament/issues/16 . For now, the recommended workaround is to allow the map to load, and simply pause the game for 45 seconds to allow the background processing to finish. This does not appear to be unique to POWER systems, but is a general bug introduced with the engine upgrade.

Closing Notes

Future of UT4

In general it appears unlikely that Epic will continue UT4 development, or that by the time they finally do the engine will be long obsolete. At least one person on the main UT4 forums has suggested a brand new "Open Tournament" project that doesn't use the existing UT4 assets but is built on the UE4 engine (which remains free for use by open source / free to play games). Such a rewrite would theoretically be able to be released, however it is unlikely that Epic would allow the use of the official UT4 names, places, etc. This however is less important than the overall look + feel combined with gameplay, it would be entirely possible to recreate the gameplay of UT99 / UT2004 with all new art built for the UE4 engine without using Epic reserved content (unlike, for example, Pokèmon, where the copyrighted / trademarked artwork is the core of the game). If anyone is interested in this possibility please reach out on the forums to try and get this going!