**** Предыстория ****
Однажды мне в руки попала русифицированная версия «Акварии» от 1С/Snowball, которой я весьма заинтересовался. Сама игра была достаточно привлекательна, а перевод субтитров и русская озвучка были очень качественными и приятными. По сравнению с ужасной неофициальной русификацией, которая встречалась мне раньше, эта была просто прекрасна.
В силу профессиональной специфики и личных предпочтений я использую в качестве десктопа Linux, и постоянно перезагружаться в Windows, чтобы поиграть часок-другой, мне совсем не улыбалось. Посему первое, что я сделал, это собрал клиент «Акварии» под Linux. К моему неприятному удивлению, ничего хорошего из этого не вышло, игра запустилась, но толком не работала - текста не было, половина игровой механики не функционировала. Обидевшись от такой несправедливости я сел разбираться, в чем засада.
Засада заключалась в нескольких моментах. Во-первых, родной клиент «Акварии» ни о каких символах, кроме ISO-Latin-1, ничего знать не знает. Посему клиент от 1С был доработан по части шрифтового движка, строковых и символьных операций, и прочих языковых моментов, чтобы поддерживать в ресурсах русский язык в кодировке CP-1251. Мне пришлось дописать все необходимые места в своей версии клиента до аналогичного функционала. Во-вторых, пришлось продублировать в коде английские имена объектов русскими, иначе не работали рецепты и еще кое-какие моменты. Ну а в-третьих, ребята из 1С провели, в некотором роде, обфускацию, применяя различные странные коэффициенты к параметрам ресурсов, вероятно, чтобы было неповадно эти ресурсы использовать с альтернативными сборками клиента. Коэффициенты пришлось вычислить и встроить в код.
В итоге у меня получился патч, который изменяет исходный код клиента «Акварии» до вида, позволяющего ему правильно работать с русскими ресурсами от версии 1С/Snowball. Ну а вследствие желания поделиться этим патчем и методологиями сборки с общественностью, я и пишу этот пост.
**** Подготовка ****
Сначала нужно добыть русские ресурсы от 1С. Можно установить игру в Windows, и скопировать получившийся каталог оттуда. А можно установить прямо в Linux с помощью wine, этот способ прекрасно работает :
mount /dev/sr0 /mnt/cdrom
cd /mnt/cdrom
wine setup.exe
hg clone http://hg.icculus.org/icculus/aquaria -r 633b2b55a667
cd aquaria
patch -p1 < ../ones_snowball_rus_cp1251.diff
**** Сборка нормального клиента под свой дистрибутив ****
Для сборки нам понадобятся следующие зависимости :
freetype-devel
lua-devel
libogg-devel
libvorbis-devel
SDL-devel
openal-soft-devel
tinyxml-devel
libpng-devel
zlib-devel
rm -rf ExternalLibs/AL
rm -rf ExternalLibs/freetype2
rm -rf ExternalLibs/glpng/png
rm -rf ExternalLibs/glpng/zlib
rm -rf ExternalLibs/iprof
rm -rf ExternalLibs/libogg-1.2.0
rm -rf ExternalLibs/libvorbis-1.3.1
rm -rf ExternalLibs/lua-5.1.4
rm -rf ExternalLibs/SDL12
rm -rf BBGE/GL
rm -rf BBGE/glext
rm -f ExternalLibs/tinyxml*
cmake CMakeLists.txt
make
strip aquaria-rus.cp1251
cp aquaria-rus.cp1251 /My/Aquaria/Installed/Dir/
cd /My/Aquaria/Installed/Dir/
./aquaria-rus.cp1251
**** Сборка клиента с встроенными библиотеками ****
Если нет возможности, или желания использовать devel-пакеты своего дистрибутива, то можно использовать библиотеки, идущие с клиентом. Для этого не надо стирать соответствующий каталог, а для cmake нужно указать встраивание. К примеру, для использования встроенных версий freetype и libpng, это будет выглядеть так :
Не стираем ExternalLibs/freetype2 !
Не стираем ExternalLibs/glpng/png !
cmake -DAQUARIA_INTERNAL_FREETYPE=TRUE -DAQUARIA_INTERNAL_PNG=TRUE CmakeLists.txt
make
AQUARIA_INTERNAL_FREETYPE
AQUARIA_INTERNAL_LUA
AQUARIA_INTERNAL_OGGVORBIS
AQUARIA_INTERNAL_TINYXML
AQUARIA_INTERNAL_PNG
AQUARIA_INTERNAL_ZLIB
**** Для тех, кому все вышеописанное - темный лес ****
Ну а для людей, далеких от репозиториев Mercurial, патчей и компиляции, я сделал универсальную бинарную сборку. Называется она aquaria-rus.cp1251_static.tar.bz2, и добывается по адресу http://files.mail.ru/0XSS4J. Эта сборка должна работать на любом дистрибутиве Linux с glibc >= 2.3.2 (это любой дистрибутив моложе 10 лет), и не требовать дополнительных зависимостей. Достаточно распаковать архив в папку с ресурсами и запустить обертку для клиента :
tar jxf aquaria-rus.cp1251_static.tar.bz2 -C /My/Aquaria/Installed/Dir/
cd /My/Aquaria/Installed/Dir/
./aquaria-rus.cp1251_static.exe
Вот и все. Захватывающего прохождения!