Компиляция
Автор: DigitalManiac
Компиляция - это процесс перевода карты из формата .map в формат .bsp.
Да-да, именно из формата .map, а не .rmf. .rmf формат используется
в Worldcraft
для того, чтобы сохранять дополнительную информацию о карте, которую .map
формат не поддерживает. Под "дополнителной информацией" подразумевается информация
о сгруппированых объектах, видимых и скрытых объектах, etc.
Надеюсь, вы уже скачали ZHTL-утилиты (Zoner Half-Life Tools)
из раздела "файлы". Теперь давайте разберемся что же
это такое:
ZHLT-утилиты представляют собой 4 программы для компиляции карты, которые
должны быть последовательно запущены из командной строки. Давайте рассмотрим
их:
hlcsg.exe - делает общие вычисления геометрии карты и
создает 4 файла оболочки для дальнейшей обработки с помощью hlbsp.exe.
hlbsp.exe - генерирует BSP-дерево карты и создает работоспособный
.bsp файл.
hlvis.exe - обрабатывает видимые данные карты, что приводит
к ускорению их отрисовки при игре.
hlrad.exe - обрабатывает свет на карте.
Запускать все четыре программы-компиляторы нужно в той последовательности,
в которой они представленны выше. Для быстрой компиляции можно запустить
только hlcsg.exe и hlbsp.exe, но в этом случае карта будет
тормозить и на ней не будет обработан свет (вся карта будет ярко и равномерно
освещена и без теней). Если ваша карта уже имеет довольно внушительные размеры,
то при быстрой компиляции кроме hlcsg.exe и hlbsp.exe лучше
компилировать ее и с hlvis.exe с параметром -fast, чтобы увеличить
скорость отрисовки карты в игре и не наблюдать на экране 3fps.
У каждой из четырех программ-компиляторов есть свои параметры, которые указываются
через командную строку. Они не являются обязательными, но все же ими следует
пользоваться, чтобы указать наилучшие параметры компиляции. К примеру, можно
для hlvis.exe можно указать параметр -full, чтобы запустить
полную и наилучшую обработку видимой информации на карте. Подробнее о параметрах
компиляторов можно узнать из следующего туториала - "Параметры ZHLT-компиляторов".
Все параметры компиляторов указываются через пробел, а после всех параметров
должен быть передан путь к .map файлу с картой. Если вы не указали компиляторам
ни одного параметра, то путь к .map файлу указывается через пробел, сразу-же
после имени компилятора. Пример: hlcsg.exe maps/mapname.map.
Теперь давайте рассмотрим оба способа компиляции: посредством Worldcraft
и с помощью .bat файла.
1.
Компиляция посредством Worldcraft
Для того чтобы откомпилировать карту через Wolrdcraft, нужно сначала открыть
вашу карту в редакторе, а затем нажать F9 или выбрать из меню File -> Run.
После этого перед вами появится окно Run Map:
Это окно простой компиляции. Не обращайте на него внимания, а сразу жмите
кнопку Expert и перед вами появится окно Run Map (Advanced) -
вот оно нам и нужно!
В этом окне по умолчанию указаны 8 строк с различными командами и переменными.
Все переменные начинаются с символа доллара ($). Значения переменных
Worldcraft вы указывали при настройке редактора, на вкладках Build Programs и Game
Configurations окна Options. Давайте рассмотрим все имеющиеся
переменные:
$exedir - путь к папке с игрой, указанный в поле Game
Executable Directory на вкладке Game Configurations.
$moddir - путь к папке мода, указанный в поле Mod Directory на
вкладке Game Configurations.
$gamedir - путь к папке valve/, указанный в поле Game
Directory на вкладке Game Configurations.
$path - путь к папке с картами, указанный в поле RMF
Directory на вкладке Game Configurations.
$game_exe - путь к hl.exe, указанный в поле Game executable на
вкладке Build Programs.
$csg_exe - путь к hlcsg.exe, указанный в поле CSG executable на
вкладке Build Programs.
$bsp_exe - путь к hlbsp.exe, указанный в поле BSP executable на
вкладке Build Programs.
$vis_exe - путь к hlvis.exe, указанный в поле VIS executable на
вкладке Build Programs.
$light_exe - путь к hlrad.exe, указанный в поле RAD
executable на вкладке Build Programs.
$bspdir - путь к папке, куда должен быть помещен .bsp
файл карты после компиляции (Build Programs -> Place compiled
maps...).
$file - имя карты.
$ext - расширение файла с картой.
Теперь давайте рассмотрим все 8 строк из окна компиляции, котрые являются
почти такими же, как и в .bat файле:
Change Directory $exedir
$csg_exe $path\$file
$bsp_exe $path\$file
$vis_exe $path\$file
$rad_exe $path\$file
Copy File $path\$file.bsp $bspdir\$file.bsp
Copy File $path\$file.pts $bspdir\$file.pts
$game_exe +map $file -game cstrike -dev -console +deathmatch 1
А вот что получится после замены всех переменных их значениями (для примера
я использовал свои значения переменных, так что у вас это будет выглядеть
немного иначе):
Change Directory E:\Counter-Strike
E:\!Mapping\Zhlt\hlcsg.exe E:\!Mapping\Maps\mapname
E:\!Mapping\Zhlt\hlbsp.exe E:\!Mapping\Maps\mapname
E:\!Mapping\Zhlt\hlvis.exe E:\!Mapping\Maps\mapname
E:\!Mapping\Zhlt\hlrad.exe E:\!Mapping\Maps\mapname
Copy File E:\!Mapping\Maps\mapname.bsp E:\Counter-Strike\cstrike\maps\mapname.bsp
Copy File E:\!Mapping\Maps\mapname.pts E:\Counter-Strike\cstrike\maps\mapname.pts
E:\Counter-Strike\hl.exe +map mapname -game cstrike -dev -console +deathmatch
1
Теперь давайте разберемся, что же делает каждая из этих строк:
1. Устанавливает в качестве текущего каталога E:\Counter-Strike.
2. Запускает hlcsg.exe и передает ему путь к файлу с картой.
3. Запускает hlbsp.exe и передает ему путь к файлу с картой.
4. Запускает hlvis.exe и передает ему путь к файлу с картой.
5. Запускает hlrad.exe и передает ему путь к файлу с картой.
6. Копирует .bsp файл карты из папки E:\!Mapping\Maps в папку E:\Counter-Strike\cstrike\maps
7. Копирует .pts файл карты из папки E:\!Mapping\Maps в папку E:\Counter-Strike\cstrike\maps
8. Запускает hl.exe с параметрами +map mapname -game cstrike -dev -console
+deathmatch 1
Вот так все просто! Сначала компилируется карта всеми четырьмя последовательно
запущенными программами-компиляторами, потом .bsp и .pts файлы копируются
в папку cstrike/maps/ и запускается игра.
Единственное, что может быть не совсем понятно - зачем нужен
.pts файл? А затем, что в нем содержится необходимая информация
для поиска ошибки "leak" на
карте (об этой и других ошибках компиляции будет рассказано в отдельном туториале).
Теперь давайте рассмотрим оставшиеся опции в окне компиляции Run Map (Advanced):
Run with visible objects only - если этот флаг отмечен,
то компилировать будут только видимые объекты, а все скрытые
проигнорируются.
Use Long filenames - разрешить использование длинных имен
файлов, не сокращая их до 8 символов, подобно MS-DOS.
Ensure file post-exist - контролировать успешность создания
файлов в процессе компиляции.
Use Process window - включить окно, в котором будет отображаться
процесс компиляции.
Теперь, после того как все настроено, смело жмите кнопку Go!
Описанный выше способ компиляции карты посредством Worldcraft является не
самым лучшим выбором, так как радактор загружает в память вашу карту, текстуры,
да и сам использует немало ресурсов. А компиляторам, как не трудно догадаться,
так же требуется огромное количество памяти, поэтому компиляция будет проходить
намного медленнее.
2.
Компиляция с помощью .bat файлов
Сразу стоит сказать, что данный способ компиляции самый быстрый, поскольку
не расходуются системные ресурсы на выполнение дополнительных программ.
.bat файл представляет собой текстовый файл, который содержит команды операционной
системы. При запуске .bat файла, операционная система анализирует и выполняет
каждую строку от начала до конца файла. Не выполняются только строки, начинающиеся
с rem - это комментарии.
Создайте с помощью текстового редактора (notepad) файл с расширением .bat,
например compile.bat. Далее, пишем следующие команды:
hlcsg.exe mapname.map
hlbsp.exe mapname.map
hlvis.exe mapname.map
hlrad.exe mapname.map
Ничего сложного. Мы как всегда последовательно запускаем в нужном порядке
четыре программы-компиляторы, передавая им путь к .map файлу карты. Стоит
заметить, что для корректной работы приведенного выше .bat файла необходимо
переместить все программы-компиляторы и .map файл карты в папку, где находится
.bat файл. А можно сделать проще - указать в .bat файле полные пути. Ниже
приводится пример такого .bat файла (перед использованием измените пути на
свои):
E:\!Mapping\Zhlt\hlcsg.exe E:\!Mapping\Maps\mapname.map
E:\!Mapping\Zhlt\hlbsp.exe E:\!Mapping\Maps\mapname.map
E:\!Mapping\Zhlt\hlvis.exe E:\!Mapping\Maps\mapname.map
E:\!Mapping\Zhlt\hlrad.exe E:\!Mapping\Maps\mapname.map
Теперь давайте создадим .bat файл для полной компиляции карты. Нам нужно
всего лишь добавить несколько параметров для компиляторов:
E:\!Mapping\Zhlt\hlcsg.exe E:\!Mapping\Maps\mapname.map
E:\!Mapping\Zhlt\hlbsp.exe E:\!Mapping\Maps\mapname.map
E:\!Mapping\Zhlt\hlvis.exe -full E:\!Mapping\Maps\mapname.map
E:\!Mapping\Zhlt\hlrad.exe -dscale 1 -extra E:\!Mapping\Maps\mapname.map
Можете в конце .bat файла дописать команду для копирования .bsp файла в директорию cstrike/maps/,
чтобы не копировать каждый раз вручную. Выглядит она так:
copy E:\!Mapping\Maps\mapname.bsp E:\Counter-Strike\cstrike\maps\mapname.bsp
Для большей гибкости .bat файлов, можно использовать переменные. Переменные
определяются с помощью команды set. Полный синтаксис команды set такой: set
имя_переменной=значение. Для использования значения переменной, просто
напишите имя переменной, заключенное в знаки процента (%). Ниже приведен
пример .bat файла, в котором в переменной mapname хранится имя карты,
и его не нужно каждый раз указывать, передавая программе-компилятору.
set mapname=mymap.map
E:\!Mapping\Zhlt\hlcsg.exe E:\!Mapping\Maps\%mapname%
E:\!Mapping\Zhlt\hlbsp.exe E:\!Mapping\Maps\%mapname%
E:\!Mapping\Zhlt\hlvis.exe -full E:\!Mapping\Maps\%mapname%
E:\!Mapping\Zhlt\hlrad.exe -dscale 1 -extra E:\!Mapping\Maps\%mapname%
Так же, в начало .bat файла советую добавить команду @echo off, для
того чтобы запретить вывод команды на экран перед ее выполнением.
Желательно создать себе два .bat файла. Один для полной компиляции, а другой
для быстрой. Для быстрой компиляции запустите компиляторы с такими параметрами:
@echo off set mapname=mymap.map
E:\!Mapping\Zhlt\hlcsg.exe E:\!Mapping\Maps\%mapname%
E:\!Mapping\Zhlt\hlbsp.exe E:\!Mapping\Maps\%mapname%
E:\!Mapping\Zhlt\hlvis.exe -fast E:\!Mapping\Maps\%mapname%
rem hlrad.exe можно пропустить, ведь протестировать карту можно и без обработки
на ней света.
И в завершение привожу пример своего .bat файла:
@echo off
rem Путь к каталогу с картами:
set MAPSPATH=E:\!Mapping\Maps
rem Путь к каталогу ZHLT:
set ZHLTPATH=E:\!Mapping\Zhlt
rem Путь к каталогу cstrike/maps:
set CSPATH=E:\Counter-strike\cstrike\maps
rem Имя карты:
set MAPNAME=mapname
rem Последовательный запуск всех программ-компиляторов
rem Если нужно - измените параметры компиляции:
%ZHLTPATH%\hlcsg.exe -nowadtextures -estimate %MAPSPATH%\%MAPNAME%
%ZHLTPATH%\hlbsp.exe -estimate %MAPSPATH%\%MAPNAME%
%ZHLTPATH%\hlvis.exe -full -estimate %MAPSPATH%\%MAPNAME%
%ZHLTPATH%\hlrad.exe -dscale 1 -extra -estimate %MAPSPATH%\%MAPNAME%
rem Копирование .bsp файла карты в каталог cstrike/maps
copy %MAPSPATH%\%MAPNAME%.bsp %CSPATH%\%MAPNAME%.bsp
rem После завершения компиляции выводим на экран сообщение 'COMPILE END':
echo COMPILE END
Все! Желаю всем быстрой и правильной компиляции!
ЗЫ. Не обращайте внимания на восклицательный знак в путях, приведенных для
примера. Просто у меня такое название папки.
|