Run natively Unreal Tournament Game Of The Year (GOTY) on Debian system.
UT is not dead! The install process is a bit cumbersome but the game has been published more than 20 years ago! Please let me know how it went for you and if you have any tips, please share :)
And most important, have fun!
(Tested on Debian Bullseye 64bits)
- Two ISO physical discs (or ISOs) of Unreal Tournament GOTY (v436)
The game runs in 32bits, we need to install some minimal 32 bits packages in order to run install script and the game itself:
$ sudo dpkg --add-architecture i386
$ sudo apt update
$ sudo apt install libx11-6:i386 libxext6:i386 libc6:i386
Note: Package libc6:i386
may not be mandatory after all. In my case, the game run ok without it.
For the sound, I used to use another hackish method with padsp32 but recently tried Open Sound System (OSS) and it works great. Install it and start the proxy daemon:
$ sudo apt install osspd osspd-pulseaudio
$ sudo systemctl start osspd.service
Grab the Loki installer named ut-install-436-goty
somewhere (DuckDuckGo it if the link below is dead):
$ curl -O https://princessleia.com/tools/ut/ut-install-436-goty.run
NOTE: Another installer named ut-install-436-multilanguage-goty
exists but it has a GTK graphical install with obsolete dependencies... Boring and useless!
Once downloaded, uncompress the installer. We need to modify 2 shell scripts to fake our 64bits architecture.
$ sudo ./ut-install-436-goty.run --keep
$ cd ut-436-GOTY/
Edit both ./setup.sh
and ./setup.data/apply-patch.sh
and replace function named DetectARCH()
by this one:
DetectARCH()
{
echo "x86"
return 0
}
Save both files. We can now start the install process.
Launch installer script, answer yes (or simply hit ENTER) to all questions except the first one:
$ sudo ./setup.sh
----====== Unreal Tournament GOTY installation program ======----
You are running a x86 machine with libc5
Hit Control-C anytime to cancel this installation program.
Would you like to read the README file ? [Y/n] n
Please enter the installation path [/usr/local/games/ut]
Do you want to install symbolic links to a directory in your path? [Y/n]
Please enter the path in which to create the symbolic links [/usr/local/bin]
Install Binary Files? [Y/n/?]
Install OpenGL as default renderer? [Y/n]
Install Data Files? [Y/n]
Do you want to install desktop items? [Y/n]
Installing to /usr/local/games/ut
10945 MB available, 668 MB will be installed.
Continue install? [Y/n]
Installing ut binary ...
100% - /usr/local/games/ut/ut
Installing ucc binary ...
100% - /usr/local/games/ut/ucc
Installing Binary Files ...
...
Please mount the Disc One CDROM.
The script hangs until you mount 1st disc, spawn a new term and mount it:
$ sudo mount -o loop /path/to/ut-1.iso /media/cdrom0
Back to the installer, answer yes, it will copy a bunch of files and hangs again for 2d disc:
Choose Yes to retry, No to cancel [N/y] y
Installing Data Files ...
...
Please mount the Disc Two CDROM.
Choose Yes to retry, No to cancel [N/y]
Unmount the previous, mount the new one and answer yes:
$ sudo umount /media/cdrom0
$ sudo mount -o loop /path/to/ut-2.iso /media/cdrom
After copying the needed files it will finish by patching some others and decompressing all the maps found in /usr/local/games/ut/Maps/
. This can take a while.
stage 0: 0.073435 secs
stage 1: 0.044184 secs
stage 2: 0.087546 secs
stage 3: 0.032729 secs
stage 4: 0.091152 secs
Total: 0.329047 secs
Decompressed ../Maps/AS-Frigate.unr.uz -> AS-Frigate.unr
WARNING: Not using preference directory
stage 0: 0.052972 secs
stage 1: 0.030028 secs
stage 2: 0.063270 secs
stage 3: 0.022275 secs
stage 4: 0.059120 secs
Total: 0.227666 secs
Decompressed ../Maps/AS-Guardia.unr.uz -> AS-Guardia.unr
Finally answer no to the last question, we don't want to run the game as root:
Installation complete.
Would you like to launch the game now? [Y/n] n
Unmount the second disk:
$ sudo umount /media/cdrom0
Then start the game with your current user. It'll create your loki userdir and probably abort because of OpenGL:
$ ut
Creating preferences directory...
Creating directory /home/user/.loki/ut/
Creating directory /home/user/.loki/ut/System
...
binding libGL.so.1
appError called:
Could not load OpenGL library
Executing UObject::StaticShutdownAfterError
Executing USDLClient::ShutdownAfterError
Executing USDLViewport::ShutdownAfterError
USDLGLRenderDevice::ShutdownAfterError
Signal: SIGIOT [iot trap]
Aborting.
Exiting.
Name subsystem shut down
Edit the new config file located at ~/.loki/ut/System/UnrealTournament.ini
.
Set UT Engine to SDL instead of OpenGL. The graphics are quite decent with it. With OpenGL this will be probably better but you need additional dependencies and a lot of hassle to get things working correctly.
Check the package libsdl2-2.0-0
is installed on your system.
In section [Engine.Engine]
, change the render device to SDLSoftDrv.SDLSoftwareRenderDevice
:
[Engine.Engine]
GameRenderDevice=SDLSoftDrv.SDLSoftwareRenderDevice
WindowedRenderDevice=SDLSoftDrv.SDLSoftwareRenderDevice
RenderDevice=SDLSoftDrv.SDLSoftwareRenderDevice
On the same section, change the sound engine GenericAudioSubsystem
and to get a better sound experience, on the dedicated section [Audio.GenericAudioSubsystem]
set the surround mode to on:
[Engine.Engine]
AudioDevice=Audio.GenericAudioSubsystem
...
[Audio.GenericAudioSubsystem]
UseSurround=True
You can now run and enjoy the game:
$ ut
Here the key folders/files you need to know:
- System directory :
/usr/local/games/ut
- Default game settings:
/usr/local/games/ut/System/UnrealTournament.ini
- Default maps dir:
/usr/local/games/ut/Maps
- User directory :
~/.loki/ut
- User maps dir:
~/.loki/ut/Maps
- Game settings :
~/.loki/ut/System/UnrealTournament.ini
- Player settings (keybinds, player name):
~/.loki/ut/System/User.ini
- Log file:
~/.loki/ut/System/UnrealTournament.log
Change screen resolution in fullscreen mode (adapt with your spec)
[SDLDrv.SDLClient]
FullscreenViewportX=1280
FullscreenViewportY=1024
FullscreenColorBits=16
Increase the default value of allocated RAM
[Engine.GameEngine]
CacheSizeMegs=64
Fix crash on online map transition
[Engine.GameInfo]
bWorldLog=False
Bonus pack 1, 2 and 3 are already packaged in UT GOTY. Only bonus pack 4 is needed:
$ curl -O http://www.deepsky.com/~misaka/scripts/umodunpack.pl
$ curl -O http://downloads.unrealadmin.org/UnrealTournament/BonusPack/utbonuspack4.umod
$ chmod +x umodunpack.pl
$ sudo ./umodunpack.pl -u utbonuspack4.umod -b /usr/local/games/ut
or in your user dir
$ ./umodunpack.pl -u utbonuspack4.umod -b ~/.loki/ut
To play online, some maps require you install a DLC downloader named NPLoader:
$ curl -O http://utgl.unrealadmin.org/NPLoader/v16b/Linux.tar.gz
$ tar -zxvf Linux.tar.gz
$ rm -f Linux.tar.gz
$ sudo mv NPLoaderLL_v16b.* /usr/local/games/ut/System/
While looking at http://utgl.unrealadmin.org/NPLoader/, there are more recent versions. I did not yet tested them though.
Assuming you have a working installation, move ~/.loki
to ~/.local/share
or whatever your XDG_DATA_HOME is.
$ mv ~/.loki ~/.local/share
Then change default ut
startup script located in /usr/local/games/ut/ut
by this one:
#!/usr/bin/env sh
# Unreal Tournament startup script
LOKI_PATH="${XDG_DATA_HOME:-~/.local/share}"/.loki
mkdir -p "$LOKI_PATH" "$LOKI_PATH"/ut/System
UT_DATA_PATH=/usr/local/games/ut/System
# Let's boogie!
if [ -x "${UT_DATA_PATH}/ut-bin" ]; then
cd "${UT_DATA_PATH}/"
HOME="${XDG_DATA_HOME:-~/.local/share}" exec "./ut-bin" $* -log
fi
Apart some code refactoring, the main trick here is to fake our home folder location when starting the game.
- http://unrealadmin.org/
- http://faqs.lokigames.com/utfaq.html
- http://www.letsplayut.com/
- https://maximumhoyt.blogspot.com/2018/01/unreal-tournament-gotyut99-for-modern.html
- https://wiki.debian.org/Games/UT99
- https://ut99.org/viewtopic.php?f=6&t=373
- https://trent.utfs.org/wiki/Unreal_Tournament
- http://www.improbability.net/loki/
- http://toxiccode.com/ut/files.html
- https://help.ubuntu.com/community/Games/Native/UnrealTournament
- https://github.com/liflg/unreal.tournament_451-english_x86
- https://www.reddit.com/r/linux_gaming/comments/1rspaq/installing_unreal_tournament_steam_on_linux_guide/
- http://liandri.beyondunreal.com/Unreal_Tournament#Essential_Files
I minor suggestion, instead of
/usr/bin/padsp
, save the changes to a new/usr/bin/padsp-i386
?