Table des matières

Shogo: Mobile Armor Division

Install the game

To install the required util :

# apt-get install patchelf

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

# mount /dev/cdrom /media/cdrom
$ cd /media/cdrom
$ linux32 ./setup.data/bin/Linux/x86/setup

Register the game

The file client is “encrypted” (I didn't spend time on this, maybe it's trivial to bypass, maybe not) ; and we need to combine the provided tool with our cdkey to get a usable binary.

The hard part in today's world is to get the required libraries to run that tool. We need GTK1.2 compiled for i386.

After that it's easy:

./registergui client

Hack hack hack

Patch the binaries to use (system provided) SDL1.2 instead of the bundled SDL1.1

patchelf --replace-needed libSDL-1.1.so.0 libSDL-1.2.so.0 cdaudio.dll
patchelf --replace-needed libSDL-1.1.so.0 libSDL-1.2.so.0 client
patchelf --replace-needed libSDL-1.1.so.0 libSDL-1.2.so.0 shogolauncher
rm libsmpeg-0.4.so.0 libfreetype.so.6 libSDL-1.1.so.0

Bypass the anti-copy protection:

mkdir custom files
truncate -s 207618048 files/data.tgz

Replace the startup script

Replace the provided startup script shogo with this one:

#!/bin/sh
export SHOGODIR="$PWD"
export SHOGO_MOVIEPATH="$PWD/Movies"
export SHOGO_CDROM="$PWD"

if ! test -d ~/.hyperion ; then
    echo Creating directory ~/.hyperion
    mkdir ~/.hyperion
fi

if ! test -d ~/.hyperion/Shogo ; then
    echo Creating directory ~/.hyperion/Shogo
    mkdir ~/.hyperion/Shogo
fi

if ! test -e ~/.hyperion/Shogo/autoexec.cfg ; then
    echo Creating default autoexec.cfg file
    echo '"MaxFPS" "30"' > ~/.hyperion/Shogo/autoexec.cfg
    cat $SHOGODIR/autoexec.cfg >> ~/.hyperion/Shogo/autoexec.cfg
fi

if ! test -e ~/.hyperion/Shogo/ShogoLauncher.ini ; then
    echo Creating default settings file
    cp $SHOGODIR/ShogoLauncher.ini ~/.hyperion/Shogo
fi

if ! test -d ~/.hyperion/Shogo/Save ; then
    echo "Creating Save directory"
    mkdir ~/.hyperion/Shogo/Save
fi

cd $SHOGODIR

if ! test -e $SHOGO_CDROM/files/data.tgz ; then
    ./messagebox "  Please mount the Shogo CD-ROM  " "OK"
    exit
fi

cmdline=`./shogolauncher --inidir ~/.hyperion/Shogo --shogodir $SHOGODIR $@`

if test -z "$cmdline" ; then
    exit
fi

export MESA_EXTENSION_MAX_YEAR=2002
export _ _GL_ExtensionStringVersion=17700

eval "$cmdline"

unset LD_PRELOAD
unset _ _GL_ExtensionStringVersion
unset MESA_EXTENSION_MAX_YEAR

rm >/dev/null -f /tmp/*.dll /tmp/*.lto

Prevent a game crash

./client: symbol lookup error: ./client: undefined symbol: set_new_handler__FPFv_v

This is due to a change in libgcc that broke some binaries that where compiled with gcc 2.95 in an unusual way (like compiling C++ code with gcc instead of g++).

Option a

You can use a little shim that add back functions required by a bunch of old games like this one.

LD_PRELOAD="/path/to/lokishim.so" shogo

Option b

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

LD_PRELOAD="./libstdc++-3-libc6.2-2-2.10.0.so" shogo