Чтиво: офис и дом, часть 006
Установка и настройка игры UFO2000 под Linux (под X и/или SVGALib).
Когда-то давно мне очень нравилось играть в досовую игрушку UFO - за ней
было проведено немало человеко-часов. И я очень обрадовался когда уже
будучи увлеченный Linux'ом нашел разработку отечественный программистов,
видимо, тоже фанатов UFO - проект UFO2000. Итак, информация с
оффициального сайта проекта (ufo2k.lxnt.info):
-- first quoting UFO2000 - это ремейк тактической части игры 'X-COM: UFO Defense' с
открытым исходником. В нем пока нет глобуса и экономики, но тем не менее
успел понравиться большому количеству поклонников X-COM, мечтавших о -
поддержке сетевой игры.
А вот, что говорит файлик readme_ru.html, идущий с дистрибутивом:
-- first quoting UFO2000 - это пошаговая тактическая игра, в которой участвуют два
человека на одном или разных компьютерах. Каждый игрок экипирует оружием
свою группу солдат и выпускает ее на арену, застроенную домами, заросшую
деревьями и с прячущимся где-то тут же в зарослях отрядом врага (отрядом
оппонента - второго игрока). Поочередно игроки управляют каждый своей
группой солдат, исследуют территорию, выслеживают противника, вступают с
ним в бой. Цель - победить. Условия победы могут быть различными; пока
на момент текущей версии условие одно - выжить самому и уничтожить всех
не своих (чужих).
По виду игра похожа на "UFO: Enemy Unknown" ("UFO: Defence"). По виду и
по принципу ее тактической части - сражений.
Игра имеет две стадии: стадию планирования (подготовка солдат:
распределение между ними характеристик и оружия; выбор карты-арены и
указания на ней точек входов) и стадию, непосредственно, боя.
Компьютерного противника нет, игра ориентирована на живых противников -
игроков-людей.
В общем и целом проект можно назвать уже состоявшимся, т.е.
играбельность сейчас уже на достаточно высоком уровне. А если следить за
самыми последними новшествами в игре (из двелоперской версии), то можно
сказать об отличном сотрудничестве между разработчиками и
игроками-тестерами.
Вообщем, надеюсь у читателя уже сложилось общее мнение об этой игре
(если нет, то советую посетить вышеуказанный ресурс - почитать
документацию и посмотреть скриншоты), поэтому продолжу.
Официальную версию (на 13.09.2004) можно скачать:
для windows
http://ufo2000.lxnt.info/files/ufo2000-0.4.0.357.exe
для linux
http://ufo2000.lxnt.info/files/ufo2000-0.4.0.353.tar.gz
исходные коды:
http://ufo2000.lxnt.info/files/ufo2000-0.4.0.353-src.tar.bz2
Не могу сказать, чем обусловлено расхождение номеров версий для windows
и для linux.
Я же рекомендую пользоваться (играть и тестировать) девелоперскими
версиями (предназначенные для разработчиков и тестеров), которые можно
получить на данной странице:
http://ufo2k.lxnt.info/pmwiki/pmwiki.php/Main/DevelopmentVersion
Для игры нужны оригинальные "XCOM: UFO Enemy Unknown" и "XCOM: Terror
from the Deep" (большая часть графики и музыки берется из них), но можно
и просто скачать их демонстрационные версии с сайта MicroProse:
ftp://ftp.microprose.com/pub/mps-online/x-com/xcomdemo.zip
ftp://ftp.microprose.com/pub/mps-online/demos/terror.zip
Также необходимо проверить установлены ли в системе следующие
библиотеки:
Allegro library version (alleg.sourceforge.net)
Lua scripting language and library (www.lua.org)
Expat library (expat.sourceforge.net)
HawkNL network library (www.hawksoft.com/hawknl/)
а также для звукового оформления: DUMB и ogg-vorbis
В первой части статьи будет рассмотрена установка всех библиотек и самой
игры для использования их в консоли через SVGALib (не очень мощная
машинка - Pentium II 233MHz, X-ы не установлены), исключая установку и
настройку самой SVGALib (это было давно и мне трудно восстановить весь
ход установки по шагам, но если что - пишите). Можно, конечно, запускать
игру и через фреймбуфер - этим как и SVGALib управляет Allegro - связкой
framebuffer и Allegro не разбирался, поэтому оставляю на съедение другим
авторам.
Для начала установим из репозитария libvorbis и libogg с их "devel"
дополнениями.
$ yum install libvorbis\* libogg\*
Исходники других библиотек уже сложены в /root/src.
$ cd ~/src
Устанавливаем Allegro. Распаковка:
$ tar xvzf allegro-4.1.15.tar.gz
$ cd allegro-4.1.15
Посмотрим, есть ли конфигурационный скрипт, и какие параметры его
запуска доступны.
$ ls -1
$ ./configure --help | less
Вот эти строчки очень интересны:
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-x use the X Window System
Здорово! Т.е. для компиляции без поддержки X-ов мы запускаем скрипт
следующим образом:
$ ./configure --without-x
После конфигурирования интересно обратить внимание на следующие строки
Some drivers will be built as dynamic modules.
Enabled modules: svgalib fbcon vbeaf vga ossmidi artsdigi esddigi ossdigi
Disabled modules: dga2 jackdigi sgialdigi alsamidi alsadigi
Generated code: multithreaded, little endian, i386 asm, MMX, SSE
Generated libraries: shared release
Compiled programs: dynamically linked release
Ignoring compiler warnings.
Что ж, вроде все хорошо. Значит,
$ make
$ make install
И как советуют разработчики
$ make install-man
Кстати, в каталоге есть файл readme.txt - почитаем его:
$ less readme.txt
И, как сказано в нем в разделе Configuration, скопируем конфигурационный
файл, который необходим для использования библиотек Allegro в каталог
/etc/
$ cp allegro.cfg /etc/
Теперь отредактируем его:
$ mcedit /etc/allegro.cfg
Файл снабжен комментариями, прочитав которые я сделал вывод, что нужно
для начала заполнить в нем следующие строчки:
system = LNXC
gfx_card = SVGA
gfx_cardw = SVGA
Как бы теперь протестировать то, что все нормально собралось и работает,
иначе все следующие шаги не имеют смысла? Когда выводился листинг
директории, то там была директория examples:
$ cd examples
$ ls -1
Ага, есть исполняемые файлы (они, видимо, создались при компиляции
библиотек). Запустим последний:
$ ./exzbuf
Ничего не получается ругается, что не может найти какую-то X-вую
библиотеку. Хм... Зачем она ему - компилировали, то явно без поддержки
X-ов? Я долго мудрил с /etc/allegro.cfg (игрался с его содержимым,
создавал на него символьную ссылку в виде allegrorc, копировал в
~/.allegrorc и ./allegro.cfg) - ничего не помогало. Тогда я сделал
следующее:
$ cd ../
$ ./configure --help | less
Так, теперь обращаем внимание на следующие строки:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-asm=x enable the use of asm code default=yes
--enable-color8=x enable support for 8-bpp modes default=yes
--enable-color16=x enable support for 16-bpp modes default=yes
--enable-color24=x enable support for 24-bpp modes default=yes
--enable-color32=x enable support for 32-bpp modes default=yes
--enable-static=x build static libraries default=no
--enable-shared=x build shared libraries default=yes
Теперь попробуем собирать библиотеку со статической линковкой
$ ./configure --without-x --enable-static --disable-shared
Информация, выводимая после конфигурирования несколько изменилась:
Some drivers will be built as dynamic modules.
Enabled modules: svgalib fbcon vbeaf vga ossmidi artsdigi esddigi ossdigi
Disabled modules: dga2 jackdigi sgialdigi alsamidi alsadigi
Generated code: multithreaded, little endian, i386 asm, MMX, SSE
Generated libraries: static release
Compiled programs: statically linked release
Ignoring compiler warnings.
Опять
$ make
$ make install
$ cd expamples
$ ./exzbuf
Вот, теперь на экране вращаются кубики с отсечением невидимых граней
через алгоритм Z-буфера.
Что ж, все нормально, как будто бы... lua и expat были скачены в виде
RPM-пакета с исходными кодами. Необходимо собрать из них бинарные
пакеты:
$ cd ../../
$ rpmbuild --rebuild lua-5.0.2-1.dag.src.rpm
$ rpmbuild --rebuild expat-1.95.7-4.src.rpm
Сейчас, инсталлируем бинарные пакеты (еще должны быть и "devel" пакеты):
$ pushd /usr/src/asplinux/RPMS/i386
$ rpm -Uhv expat* lua*
$ popd
Настало время для сборки HawkNL:
$ tar xvzf HawkNL168src.tar.gz
$ cd hawknl1.68
$ ls -1
И тут сюрприз! Нет ни configure, ни makefile. Зато есть makefile.linux.
Ну что ж, есть два пути: поменять его имя и начать сборку
$ cp makefile.linux makefile
$ make
или начать сборку сразу:
$ make -f makefile.linux
Непосредственно, сама установка
$ make install
После установки в консоли осталось сообщение:
*************************************************
* Installed HawkNL. *
* Remember to run /sbin/ldconfig before using *
* the library, you may also want to check that *
* /usr/local/lib is included in /etc/ld.so.conf *
* You must be root to run ldconfig. *
*************************************************
Посмотрим, действительно, что в /etc/ld.so.conf?
$ mcedit /etc/ld.so.conf
Вот его содержимое:
begin /etc/ld.so.conf /usr/kerberos/lib
/usr/lib/mysql
/usr/local/lib
end /etc/ld.so.conf "/usr/local/lib" - присутствует. Значит, все ОК. Приступим к установке
DUMB:
$ cd ../
$ tar xvzf dumb-0.9.2-fixed.tar.gz
$ cd dumb
$ ls -1
$ make
Скрипт задает вопрос компилировать ли с поддержкой Allegro (Да) и
инсталляционный префикс для директорий, где будут располагаться файлы
библиотеки (оставим по умолчанию):
Would you like support for Allegro (Y/N)? Y
Please specify an installation prefix (default /usr/local).
Кстати, при следующей компиляции эти вопросы появляться не будут, но
если необходимо что-то переконфигурировать, то можно перед командой
"make" выполнить "make config".
Осталось установить библиотеку:
$ make install
Перед тем как перейти непосредственно к компиляции UFO2000 пересоздадим
кэш разделяемых (shared) библиотек, как было сказано после установки
HawkNL:
$ /sbin/ldconfig
Компиляция и настройка UFO2000. Забегу вперед и скажу, что программа не
имеет скрипта установки, а имеет только скрипт компиляции, поэтому,
чтобы запускать игру мог не только root-пользователь, будем производить
установку в директорию /opt
$ cd ../
$ cp ufo2000-0.4.1.448-src.tar.bz2 /opt/
$ cd opt
$ tar xvjf ufo2000-0.4.1.448-src.tar.bz2
$ cd ufo2000-0.4.1.448
$ ls -1
Просто README файлика нет, зато есть INSTALL
$ less INSTALL
в нем мало чего конкретного написано, поэтому почитаем еще и mikefile
$ less makefile
В самом начале есть интересные строчки, касающие опций компилирования
игры, а также указана команда для компиляции игрового сервера.
# Compiling ufo2000: make {debug=1} {xmingw=1} {dumbogg=1} #
# #
# Define xmingw=1 when compiling win32 binary with Mingw gcc crosscompiler #
# Define debug=1 when you want to build debug version of ufo2000 #
# #
# Just typing 'make' builds the release version of ufo2000 for *nix #
# (Linux, FreeBSD, ...) #
# #
# Type 'make server' to build ufo2000 server #
Итак, компиляция
$ make dumbogg=1
Теперь нужно скопировать в директорию XCOMDEMO распакованное содержимое
xcomdemo.zip, в TFTDDEMO - terror.zip, в XCOM я скопировал оригинальную
(криво русифицированную) версию первой UFO, в TFTD я ничего не
копировал, так как не нашел вторую UFO. Так же в каталог newmusic я
скопировал gmstory.ogg, а в каталог newmaps, все карты, которые нашел в
Инете.
Чтобы обычные пользователи могли играть необходимо проставить права на
чтение, запись в директорию /opt/ufo2000-0.4.1.448
$ chown -R a+r /opt/ufo2000-0.4.1.448
$ chown -R a+w /opt/ufo2000-0.4.1.448
Так как работа с SVGALib может происходить только от root-пользователя,
то для запуска игры от обычных пользователей можно пойти двумя путями:
первый SUID-бит на ufo2000:
$ chmod s+u /opt/ufo2000-0.4.1.448/ufo2000
второй организовать запуск через "sudo" - в файлик /etc/sudoers добавить
строчку (для каждого пользователя свою):
koal ALL = /opt/ufo2000-0.4.1.448/ufo2000
Теперь нужно отредактировать /etc/allegro.cfg и
/opt/ufo2000-0.4.1.448/ufo2000.ini. (время от времени запуская
/opt/ufo2000-0.4.1.448/ufo2000 для проверки результатов). После
некоторых экспериментов я остановился на следующих параметрах:
/etc/allegro.cfg - строчки в которых нужно поменять аргументы (у меня
оптическая PS/2 мышь с колесом):
system = LNXC
gfx_card = SVGA
gfx_cardw = SVGA
mouse = LIPS
num_buttons = 3
mouse_device = /dev/mouse
а для ufo2000.ini (описание этих и других опций можно найти в
readem_ru.html) - эти параметры устанавливают разрешение экрана 800x600:
screen_x_res = 800
screen_y_res = 600
Все. Hotseat (горячий стул) игру можно организовывать. На моей
слабенькой машинке играть можно, но слегка тормозит.
Дальше немного расскажу от том, как скомпилировать UFO2000 для игры в
X-ах. Собственно там почти все точно также, только Allegro я взял
стандартную:
$ yum install allegro\*
Конфигурационный файл ее (/etc/allegrorc) я не трогал.
Остальные библиотеки устанавливаются точно также. Сама UFO2000 тоже
никаких замечаний не вызывает. Только в ufo2000.ini следует обратить
внимание на следующие строки:
screen_x_res = 800
screen_y_res = 600
F_FULLSCREEN = 0
Последняя строчка указывает, что запускать игру нужно в оконном режиме.
Теперь и в X-ах можно играть в Hotseat. :)
Конечно, можно подсоединиться и к игровому серверу в интернете, а можно
создать свой и играть по локальной сети. Итак,
$ cd /opt/ufo2000-0.4.1.448
$ make server
Параметры сервера (например, порт к которому коннектятся клиенты), можно
поменять в файлике ufo2000-srv.conf
Запускаем сервер:
$ /opt/ufo2000-0.4.1.448/ufo2000-srv
Команда сама освобождает консоль. Теперь изменим конфигурационные
файлики клиентов ufo2000.ini.
[Server]
host = 192.168.1.254
login = first
password = first
autologin = 0
У другой машины, естественно, login и password другие. Эти параметры
можно будет потом поменять интерактивно в сеансе игры.
Все. Можно наслаждаться...