Отправляет email-рассылки с помощью сервиса Sendsay

KirovLUG: пользователи Linux в Вятке

Чтиво: офис и дом, часть 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 другие. Эти параметры
можно будет потом поменять интерактивно в сеансе игры.

Все. Можно наслаждаться...

Ответить   Mon, 13 Sep 2004 17:12:29 +0400 (#228043)