I was never that much interested in Unreal Tournament 2003, compared to its 2004 counterpart, but some unique features of it make me want to go back to it every now and then. And since I switched to Linux as my primary OS, I thought it would be fairly nice to have UT2003 running natively here. If you're on the same boat, read on about how to make the installation and the game itself work properly on modern Linux!

Overall Linux is not too friendly to older programs, as it changes often. That is a disadvantage on one hand, and an advantage on the other - there is no legacy code slowing or encumbering the system, as opposed to The Other OS. However, GNU/Linux still allows for setting compatibility with older programs (GNU coreutils allow that, to be exact), and such settings are enough to convince the UT2003 installer to run properly. The game itself needs no such options, thankfully. I tried this with openSUSE 12.1 x86_64, so the steps necessary may vary slightly in other distributions and newer releases.

To start off the installation process, you need to have your 3 CDs handy - physically or as ISO images saved on the hard drive, as they are equivalent on Linux. I'm fairly certain there were no other releases of UT2003 like that, as it was discontinued (and mostly forgotten by Epic Games) shortly after its initial release. So, firstly you need to mount CD 3. Putting the mounted contents into /media seems to work well (not sure if the subdirectory name matters or not, as I used the names that the discs originally had anyway). Now copy the file called linux_installer.sh somewhere easy to access, like your home directory or the Documents directory. Then set it to be executable.

After that, unmount CD 3 and mount CD 1 instead. Open a bash shell and navigate to wherever you saved the installer script. Then you need to execute this command:

sudo _POSIX2_VERSION=199209 linux32 sh ./linux_installer.sh

I'll explain what it means. First of all, sudo gives you root privileges, which are needed to install any program in the first place. You can omit that if you started a root shell manually. Then the _POSIX2_VERSION statement defines the environment variable that allows for the compatibility with older POSIX standards - exactly what we need to get our old installer to work. The value 199209 works well, although I'd imagine that 200112 works just as well or perhaps even faster (the script was created after 2001 12, after all). Then the linux32 command is equivalent to the compatibility setting in The Other OS - it deceives the executed program into thinking that the environment you're attempting to install to is a i686 machine, and not an x86_64 one (otherwise the script would flip out at seeing an unknown architecture, and most likely use incorrect libraries). The sh command launches a new shell to execute the script in, and finally ./linux_installer.sh tells the shell what script to execute.

After that, you will enter the text-based installer. Proceed as prompted by the installer (you can read the readme to gawk at what was used back in the days - start of ALSA, no S3TC support in fglrx, oh boy!). Then you will be asked where to install the game. The default choice is /usr/local/bin/ut2003, but at least openSUSE uses /usr/share for program data, so I chose /usr/share/ut2003. The place to put binaries into is by default /usr/local/bin, and once again, openSUSE uses /usr/bin for that, so it's what I set. To see what the difference between /, /usr and /usr/local is, see the Filesystem Hierarchy Standard documents.

Then the installation will start. It will take a while depending on your disc or disk speed. After a while it will ask you to insert disc one, but in reality you need to mount CD 2. Same thing after it finishes copying from it, it will ask for disc two, but you need to mount CD 3. As for where to mount them, I mounted everything into /media with original names, and it automagically found them, so there shouldn't be any problems there.

After the installation is finished, you will be asked if you want to start the game. Decline, as you need to install a patch first. Get it from Loki Installers, and save it somewhere as convenient as the install script was. Then, in a similar vein as the installer, set it to be executable and run:

sudo linux32 sh ut2003_2225beta3-multilanguage.update.run

This time you don't need to set the POSIX version. If you installed the game correctly, the update should go smoothly pretty much without any questions.

Now that you installed and updated the game, you can start it by running ut2003 in the bash shell (or you can create a .desktop file to make it more graphical). It doesn't require any special commands this time - apparently UT2003 is smart enough to handle itself even up to this day. Note, however, that the game may not start if some of the libraries are missing. For instance, in my case I needed libstdc++.so.5, so I installed libstdc++33-32bit and it worked well afterwards. If you don't have other 32-bit programs or the 32-bit system itself, you'll have to install more libraries, but they should not be difficult to find in the repositories.

You started the game, but there is no sound. That's because the ancient OpenAL implementation that the game uses has zero awareness of new things like PulseAudio and only limited awareness of ALSA, and tries to use OSS instead. There is an easy workaround, thankfully. First, install OpenAL-Soft (openal-soft and libopenal1-soft-32bit on openSUSE). OpenAL-Soft is the new OpenAL implementation that has good awareness of both ALSA and PulseAudio. Now open a bash shell again, then navigate to wherever you installed the game into, then into the System subdirectory, then enter a root shell if necessary, and use the commands:

mv openal.so openal.so~
ln -s /usr/lib/libopenal.so.1 openal.so

The first command backs up the old library and the second command creates a symbolic link to the new OpenAL-Soft library, which then gets picked up by the game. Make sure that the libopenal.so.1 file is in the correct directory, though, as it is highly dependent on the distribution used.

And that's it, you should now hear the sounds and music correctly. Now all you need to do is tweak the ~/.ut2003/System/UT2003.ini to set your resolution (the graphical interface doesn't let you select up to 1920x1080, unfortunately, but you can do that manually by editing the INI), and you're good to go. Congratulations, you now have a fully working Unreal Tournament 2003 installation running on modern Linux!