Installing Unreal Tournament on Linux
Introduction
Installing Unreal Tournament on Linux can at times seem like a black art. It really isn't so but you do have to understand what it is you have and what you want to do.This article will focus on the installation of the client or game software. That is for the case where you want to play the game on your Linux system. Installation of the dedicated server software is dealt with in a separate article.
The variables of an Unreal Tournament installation
Unreal Tournament media version
That I know about, there are at least 5 different versions of Unreal Tournament installation media:- Original retail release
These disks were the version of Unreal Tournament originally produced when the game was first released. There are two disks: A game install disk and a 2nd disk containing S3 high resolution textures.
Unreal Tournament GOTY (Game of the Year)
This version of the game was released late in 2000 and contained the original retail release (patched to V4.32), all of the Bonus Packs and some additional user-generated mods (e.g. Chaos UT). I believe that later pressings of this version were patched to the final game patch level (V4.36). None of the versions of UT GOTY that I have came with the second disk of high resolution textures.
Totally Unreal
I don't have any copies of this version of the game but the excellent Liandri Archives suggests that it essentially the same as the UT GOTY edition.
Unreal Anthology
The game is presented on a single DVD along with several other Unreal-series games. The game is essentially UT GOTY edition less the user-generated mods. Again, the high resolution textures are missing. The installer is quite different from the original installers and so installation from Unreal Anthology is somewhat different from that for the other versions
Various OEM versions
These were versons that were bundled with sound or graphics cards, e.g. Creative Labs V4.28. The Wndows version of UT has a special patch for these versions. I have no idea if it is possible to install one of these versions onto a Linux-based system other than by using WINE. Sorry.
Linux version
These instructions are based around recent versions of Linux. The examples will be drawn from RHEL-derived versions of Linux e.g. CentOS or Fedora.Older versions of Linux will offer better compatibility with the original Unreal Tournament installers but it will be more difficult to get suitable graphics drivers.
The examples will be taken from 32-bit and 64-bit systems. Unless otherwise noted, Unreal Tournament works equally well on 32-bit or 64-bit systems.
Installer version
The original Loki installers do not work on recent versions of Linux due to changes in bash. They are presented here for completeness.Installing with Unreal Anthology
TBDInstalling with the original retail release
TBDInstalling with the UT GOTY edition
TBDInstalling Bonus Packs
TBDInstalling S3 high-resolution textures
TBDInstalling with the UT GOTY edition
TBDCheating - Installing using WINE
Wine is an Open Source implementation of the Windows API on top of X, OpenGL, and Unix.The most common versions of Unreal Tournament are rated Platinum on the WINE Application Compatability Database which means that Unreal Tournament is an application that "installs and run flawlessly on an out-of-the-box Wine installation."
Good news!
If you have an OEM copy of UT e.g. the Creative Labs V4.28 version then you can install it using WINE and then patch it to V4.36 using the NODELTA patch available on the downloads page.
Do you have WINE installed?
First of all, it is necessary to check that you have WINE installed.On a Redhat or Redhat-derived system (e.g. CentOS or Fedora), this done by querying RPM. If WINE is installed, you should see a display similar to that shown below (version numbers might differ slightly.) Note that you do not need to be
root to query or to install UT under WINE.
[utuser@margrave07 ~]$ rpm -qa|grep -i wine
wine-jack-1.0-0.rc2.el5.rf
wine-nas-1.0-0.rc2.el5.rf
wine-1.0-0.rc2.el5.rf
wine-esd-1.0-0.rc2.el5.rf
wine-capi-1.0-0.rc2.el5.rf
wine-twain-1.0-0.rc2.el5.rf
wine-cms-1.0-0.rc2.el5.rf
wine-ldap-1.0-0.rc2.el5.rf
wine-core-1.0-0.rc2.el5.rf
[utuser@margrave07 ~]$ Installing WINE
On the system that I am using, I did not have WINE installed. For a (recent) Redhat-derived system, it is a simple matter to install WINE (yum install wine). Notice that it is only necessary to beroot to install WINE using the system package management application. Once WINE has been installed, you should drop back to a normal user account. The remainder of these instructions assume that the installation of UT is carried out from a non-privileged account.
[utuser@margrave07 ~]$ su -l root
Password:
[root@margrave07 ~]# rpm -qa|grep -i wine
[root@margrave07 ~]# yum install wine
Loading "changelog" plugin
Loading "protectbase" plugin
Loading "priorities" plugin
Loading "fedorakmod" plugin
Loading "installonlyn" plugin
Loading "kernel-module" plugin
Loading "fastestmirror" plugin
Setting up Install Process
Setting up repositories
extras 100% |=========================| 1.1 kB 00:00
rpmforge 100% |=========================| 1.1 kB 00:00
base 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 951 B 00:00
addons 100% |=========================| 951 B 00:00
adobe-linux-i386 100% |=========================| 951 B 00:00
Determining fastest mirrors
Reading repository metadata in from local files
210 packages excluded due to repository protections
0 packages excluded due to repository priority protections
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for wine to pack into transaction set.
wine-1.0-0.rc2.el5.rf.i38 100% |=========================| 2.5 kB 00:00
---> Package wine.i386 0:1.0-0.rc2.el5.rf set to be updated
--> Running transaction check
--> Processing Dependency: wine-nas = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-esd = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-twain = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-cms = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-ldap = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-core = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-capi = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-jack = 1.0-0.rc2.el5.rf for package: wine
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for wine-twain to pack into transaction set.
wine-twain-1.0-0.rc2.el5. 100% |=========================| 2.9 kB 00:00
---> Package wine-twain.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-jack to pack into transaction set.
wine-jack-1.0-0.rc2.el5.r 100% |=========================| 2.8 kB 00:00
---> Package wine-jack.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-esd to pack into transaction set.
wine-esd-1.0-0.rc2.el5.rf 100% |=========================| 2.9 kB 00:00
---> Package wine-esd.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-core to pack into transaction set.
wine-core-1.0-0.rc2.el5.r 100% |=========================| 82 kB 00:00
---> Package wine-core.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-cms to pack into transaction set.
wine-cms-1.0-0.rc2.el5.rf 100% |=========================| 2.9 kB 00:00
---> Package wine-cms.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-nas to pack into transaction set.
wine-nas-1.0-0.rc2.el5.rf 100% |=========================| 2.8 kB 00:00
---> Package wine-nas.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-capi to pack into transaction set.
wine-capi-1.0-0.rc2.el5.r 100% |=========================| 2.8 kB 00:00
---> Package wine-capi.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-ldap to pack into transaction set.
wine-ldap-1.0-0.rc2.el5.r 100% |=========================| 2.9 kB 00:00
---> Package wine-ldap.i386 0:1.0-0.rc2.el5.rf set to be updated
--> Running transaction check
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
wine i386 1.0-0.rc2.el5.rf rpmforge 3.0 k
Installing for dependencies:
wine-capi i386 1.0-0.rc2.el5.rf rpmforge 16 k
wine-cms i386 1.0-0.rc2.el5.rf rpmforge 66 k
wine-core i386 1.0-0.rc2.el5.rf rpmforge 35 M
wine-esd i386 1.0-0.rc2.el5.rf rpmforge 43 k
wine-jack i386 1.0-0.rc2.el5.rf rpmforge 13 k
wine-ldap i386 1.0-0.rc2.el5.rf rpmforge 252 k
wine-nas i386 1.0-0.rc2.el5.rf rpmforge 12 k
wine-twain i386 1.0-0.rc2.el5.rf rpmforge 23 k
Transaction Summary
=============================================================================
Install 9 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 35 M
Is this ok [y/N]: y
Downloading Packages:
(1/9): wine-twain-1.0-0.r 100% |=========================| 23 kB 00:00
(2/9): wine-jack-1.0-0.rc 100% |=========================| 13 kB 00:00
(3/9): wine-esd-1.0-0.rc2 100% |=========================| 43 kB 00:00
(4/9): wine-core-1.0-0.rc 100% |=========================| 35 MB 00:52
(5/9): wine-cms-1.0-0.rc2 100% |=========================| 66 kB 00:00
(6/9): wine-nas-1.0-0.rc2 100% |=========================| 12 kB 00:00
(7/9): wine-capi-1.0-0.rc 100% |=========================| 16 kB 00:00
(8/9): wine-1.0-0.rc2.el5 100% |=========================| 3.0 kB 00:00
(9/9): wine-ldap-1.0-0.rc 100% |=========================| 252 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: wine-core ######################### [1/9]
Installing: wine-twain ######################### [2/9]
Installing: wine-jack ######################### [3/9]
Installing: wine-esd ######################### [4/9]
Installing: wine-cms ######################### [5/9]
Installing: wine-nas ######################### [6/9]
Installing: wine-capi ######################### [7/9]
Installing: wine-ldap ######################### [8/9]
Installing: wine ######################### [9/9]
Installed: wine.i386 0:1.0-0.rc2.el5.rf
Dependency Installed: wine-capi.i386 0:1.0-0.rc2.el5.rf wine-cms.i386 0:1.0-0.rc2.el5.rf wine-core.i386 0:1.0-0.rc2.el5.rf wine-esd.i386 0:1.0-0.rc2.el5.rf wine-jack.i386 0:1.0-0.rc2.el5.rf wine-ldap.i386 0:1.0-0.rc2.el5.rf wine-nas.i386 0:1.0-0.rc2.el5.rf wine-twain.i386 0:1.0-0.rc2.el5.rf
Complete!
[root@margrave07 ~]#exit
Again, the exact versions of the packages might differ slightly depending on the Linux distributuion, software repository and the currently shipping version of WINE.
If you are using a non RPM-based system like Ubuntu, then something like
apt-get install wine run as root might work but I haven't tested that combination.
Installing UT
The sequence shown below is for an installation of an original retail version of UT. That installs UT at V4.00 and it will require patching to bring it up to V4.36.The sequence is
- Install UT V4.00
- Patch the installation to V4.36
- Install the Bonus Packs
- Patch again to V4.36 to ensure that everything is up to date.
The reason that the patch is applied twice is that the Bonus Packs will not install properly on a V4.00 installation.
Most of the pictures below show an installation using KDE. It is not a requirement to use KDE to install UT. KDE was used because that's what I use.
Before installing UT, I installed the latest (in my case) NVIDIA graphics drivers (see later). You should do that before attempting to install UT otherwise you will have to use the software rendering mode.
Put UT disc 1 into your CD/DVD drive.
The disk should automount on your desktop as so:

A similar icon will appear if you are using Gnome. Right-click on the disk icon and select open. A Konquerer window should open showing you the content of the drive. If it does not then you will have to manually mount the disk and open the disk to look at the contents.
Once you have opened a view on the disk, select setup.exe and right-click with the mouse. Select
Open with and then Wine Windows Emulator as shown:That will cause the standard Windows-based UT installer to open as shown:
You should accept the default options and keep hitting next.
On the fourth screen, you should deselect the option to install DirectX as shown:
Select next and proceed to the installation confirmation screen as shown:
Select
Install and a screen like that shown below should appear. Now is a good time to go and make that cup of coffee that you promised yourself.When the installation has completed, you should see a display like that below:
Select
Finish and the window should close. The initial installation of Unreal Tournament is complete.
Patching UT
Unless you have a strange nostagia for the original release version of Unreal Tournament, there is no point in not patching the game. If you do not patch the game then you will be unable to join most servers.First of all, you will need the relevant patch. Just save it to your desktop. The examples shown below assume that is what has been done.
The examples shown below are for the standard patch. Behaviour for the OEM patch should be similar but I am unable to test that.
Right-click on utpatch436.exe and select
Open with and then Wine Windows Emulator as shown:That will cause the standard Windows-based UT installer to open as shown:
You should accept the default options and keep hitting next.
If you see the error shown below then one of two things has happened:-
- You have forgotten to put the UT install CD in the drive before applying the patch. Easy to fix!
- Or, for some reason the UT install CD is no longer mounted. This can happen if you are applying the patch in a later session and have logged-off since the original installation. Usually, if you open a window on the contents of the CD that should cause the CD to automount.
Once you have passed the CD check, it should be plain sailing. The following sequence of screens will appear:
Select
Finish to finish the install of the patch.
Installing the UT Bonus Packs
There are four bonus packs to enjoy. You'll find them on the Downloads page.For the purposes of this installation, I'll assume that you have downloaded them to the desktop of account that you are using to play UT.
Patching UT again
TBDConfiguring UT to run under WINE
TBDUpgrading OpenGL in WINE
TBDInstalling S3 high-resolution textures
TBDGraphics Drivers
TBDFixing the usual problems
UT is too fast/too slow/stutters
A common (almost certain) problem on modern machines is that UT will be too fast or too slow or suffer from intermittent stuttering.Reports vary about the effacy of the various solutions. All I can suggest is that you work your way through the options until the problem goes away. Solutions should be added together, not tried in isolation.
CPUSPEED
UT is not very good at understanding the processor speed of a modern processor.
This is solved by using a command line option to tell UT the clock speed of the processor. The value used should be the true clock frequency and not the marketing-speak CPU speed. For example, an x2AMD5200 processor will have a true clock speed of approximately 2.6GHz. The value of the command line parameter for that processor will be 2600. The value is obtained by multiplying the CPU clock frequency in GHz by 1000. For example:
| Clock frequency (GHz) | CPUSPEED= | |
| 2.0GHz | 2000 | |
| 2.4GHz | 2400 | |
| 0.9GHz (900MHz) | 900 |
In MS Windows, for the above example AMD5200 CPU (clock speed 2.6GHz), the CPU speed is set by adding
-CPUSPEED=2600
to the shortcut used to start UT.
Powersaving options
Speedstep (Intel) and Cool'n'Quiet options cause the CPU clock rate to vary according to the CPU load, temperature and power mode.These confuse UT and need to be disabled whilst playing UT. Typically, these options will be found in the BIOS and as part of utilities like KPowersave.
TBD - enabling and disabling. Using kernel options to disable power saving (acpi=off), power management daemons.
Processor affinity
In a multi-CPU system (i.e. most modern systems), UT can stutter as a result of the UT task being switched between CPU.The following discussion applies to 2.6 (and later) Linux kernels. Partly because older systems that would run 2.4 series kernels tend not to be multi-CPU (says the man who owns a 4-way Pentium Pro system) and partly because setting hard processor affinity is a 2.6 kernel feature (although, back-ported to some 2.4 kernels).
The Linux 2.6 series kernel does a pretty good job of trying to keep a task scheduled always on the same CPU (soft affinity). In order to avoid the stuttering associated with moving the UT task between CPUs, it may be necessary to enforce hard affinity. The easiest way to do that is to use
schedutils.
The manner in which
schedutils is installed seems to vary between distributions. In some, schedutils is a separately installable item, in others, it is installed as a dependency and not separately installed.
[root@margrave01 ~]# rpm -qa|grep -i schedutils
Looks like it needs to be installed!
[root@margrave01 ~]# yum -y install schedutils
livna | 2.1 kB 00:00
fedora | 2.1 kB 00:00
adobe-linux-i386 | 951 B 00:00
updates | 2.3 kB 00:00
Setting up Install Process
Parsing package install arguments
Requested dep: schedutils is provided by installed package
Nothing to do
OK...so it seems that it has been installed as part of something else...
[root@margrave01 ~]# yum whatprovides schedutils
util-linux-ng.x86_64 : A collection of basic system utilities
util-linux-ng.x86_64 : A collection of basic system utilities
util-linux-ng.x86_64 : A collection of basic system utilities
So, depending on your Linux distribution, you will need to either install
schedutils directly:
[root@margrave01 ~]# yum -y install schedutils
#apt-get install schedutils
or, install the containing package:
[root@margrave01 ~]# yum -y install util-linux-ng
The key component in
schedutils is the command taskset.
taskset can be used to set the processor affinity of an existing task or used to spawn a new task with a defined processor affinity.
There are two ways of using
taskset. The first is to set the PID of an existing UT instance that you have running and the second is to modify the UT invocation scripts to use taskset to launch UT.
To set the processor affinity of an existing task, it is necessary to find the Process IDentification (PID) of that task. That is done by executing,
# ps ax | grep TBD_String
The output will look similar to:
TBD
The PID of the UT task is the first number on the left of the output.
TBD - set existing affinity
TBD - modify UT start script to use taskset
TBD - using Windows Task Manager to set processor affinity.
Dual-core utilities
TBDFrame rate and VSync
A modern system can run UT with framerates far in excess of 200fps. That causes problems with the game running too fast with local play and irregular framerates with network play. Two options exist:- Enable VSync
[OpenGLDrv.OpenGLRenderDevice]
swapinterval=1 - Set the frame rate limit in the OpenGL driver - this option is only available when UT has been installed using Wine and the UTGLR driver.
[OpenGLDrv.OpenGLRenderDevice]
frameratelimit=150
Making the old installers work
TBDIf you have comments or questions, please contact me at IronMonkey. Thanks!