Table des matières

Tribes 2

Install & patch the game

To install the game, mount your CD & run the installer with linux32 from the util-linux package :

# mount /dev/cdrom /media/cdrom
$ linux32 bash /media/cdrom/setup.sh

Apply the last released patch :

$ linux32 bash rt2-1.54c-unified-x86.run

Adventures in the dark age of broken toolchain

$ ./tribes2.dynamic
Inconsistency detected by ld.so: dl-version.c: 204: _dl_check_map_versions: Assertion `needed != NULL' failed!

./tribes2.dynamic is a very old ELF binary, and unfortunately it is very broken by modern standards:

You can use patchelf to fix this:

patchelf --add-needed libdl.so.2 ./tribes2.dynamic

Adventures in "undefined symbol" land - Part 1

$ ./tribes2.dynamic
./tribes2.dynamic: symbol lookup error: ./tribes2.dynamic: undefined symbol: __ti9exception

The missing function can be found in a very old libstdc++ (from gcc-2.95), you can use libstdc++-3-libc6.2-2-2.10.0.so from https://www.improbability.net/loki/

Adventures in "undefined symbol" land - Part 2

Now that we have all the old libs required, you would think “OK let's run it!” and try:

LD_PRELOAD="./libstdc++-3-libc6.2-2-2.10.0.so" ./tribes2.dynamic
./tribes2.dynamic: symbol lookup error: ./tribes2.dynamic: undefined symbol: SDL_GetGamma

WTF ?

In very early iterations of SDL 1.2, SDL_GetGamma was briefly implemented as a real, physically exported function in libSDL-1.2.so.0. Later in the 1.2 lifecycle, the developers converted it into a macro wrapper for SDL_GetGammaRamp. sdl12-compat (the current SDL-1.2 that you are currently running) doesn't have this function.

The solution I choose is simple: I created another shim library.

Now we can start the game:

LD_PRELOAD="./libstdc++-3-libc6.2-2-2.10.0.so:./tribes2shim.so" ./tribes2.dynamic -nologin