суббота, 9 января 2010 г.

Хитрости установки и запуска Unreal Tournament 2003

Попались мне сегодня на глаза диски со стареньким Unreal Tournament 2003 и я задумал в него погонять. Тем более, я давно слышал, что его портировали на линукс, так что он работает практически нативно. Действительно, на 3-м диске обнаружился установщик, который я немедленно попытался запустить. Разумеется, так просто ничего не заработало...

Сначала инсталлятор ругался на несовпадающую контрольную сумму и ещё что-то неведомое:

Copying to a temporary location...
Verifying archive integrity...tail: невозможно открыть `+266' для чтения: No such file or directory
Error in checksums: 753848275 is different from 3043856338

После допроса гугла с пристрастием выяснилось, что это какая-то несовместимость с устаревшим синтаксисом команд в скрипте установщика. Лечится оная гадость указыванием переменной _POSIX2_VERSION=199209 . После преодоления первой преграды на пути к вселенской радости я тут же наткнулся на следующую:

$ _POSIX2_VERSION=199209 ./linux_installer.sh
Copying to a temporary location...
Verifying archive integrity... All good.
Uncompressing Unreal Tournament 2003 for GNU/Linux 2107......................................................................
This installation doesn't support glibc-2.1 on Linux / x86_64
(tried to run setup)
Fatal error, no tech support email configured in this setup
The setup program seems to have failed on x86_64/glibc-2.1

Fatal error, no tech support email configured in this setup
The program returned an error code (1)

Ещё пять минут гугления обнаружили команду linux32. Ничего особенного она не делает, просто обманывает запускаемое приложение, говоря ему, что мы работаем в 32-битной системе. Ну и ещё пара полезных фокусов системного толка, подробнее можно прочитать в руководстве. В конечном итоге, установщик запустился командой _POSIX2_VERSION=199209 linux32 ./linux_installer.sh.

Однако облегчение было недолгим. Установленная игра не запускалась, выводя ошибку:

$ ./ut2003
fcntl: Operation not permitted
fcntl: Operation not permitted
Negative delta time!

Привычно пожав плечами, я снова обратился к гуглу. Здесь были обнаружены крупицы информации, из которых стало примерно ясно: ошибка вызвана тем, что следующий кадр просчитывается быстрее предыдущего. И возникает такая ошибка на мультипроцессорных системах. В принципе, неудивительно - игра старая, в то время многоядерные процессоры на домашних системах найти было почти невозможно. Пользователи Windows обходили эту ошибку включением режима совместимости с Windows 98.

В linux такой штуки, разумеется, нет. Зато есть полезная утилита schedtool, которая может ограничить выполнение любой программы только первым ядром процессора. Или только вторым. Или первым и четвёртым. Ну и много ещё чего, например, запускать программы в режиме реального времени и прочие мистические вещи.

Осталось только поправить в скрипте строку запуска таким вот образом: вместо

exec "./ut2003-bin" $*

вписываем

exec schedtool -a 0x1 -e "./ut2003-bin" $*

Можно наслаждаться игрой:


Комментариев нет:

Отправить комментарий