Меня лефронт попросил ему скомпилить спрайт свиньи из дюк-нюкема для халфовской карты cs_duke, но поскольку у меня нет на это времени, я решил выложить вам полный тулкит с примерами, как это делается для ксаша и как это работает.
Собственно тулкит: www.hlfx.ru/xash/angled_sprite_toolkit.rar - 576 kb
Внутри архива содержится еще три:
xash_tools.rar - тот самый, утерянный xash tools, включает в себя extragen, spritegen, studiomdl, ximage, xwad. Я не буду подробно останавливаться на командах и параметрах данных утилит, поскольку всё это уже неоднократно обсосано, например здесь: http://www.hlfx.ru/forum/showthread...=&threadid=1619
Скажу только, что процесс создания монстров из дуума полностью автоматизирован (вам достаточно лишь сдекомпилить спрайты при помощи extragen, а затем скомпилить их в формат, понятный халфе, при помощи spritegen). Для спрайтов из дюка такой халявы нету, поэтому придется повозиться, расставляя спрайты в нужном порядке.
Вот приблизительное описание одного angled-кадра, для лучшего понимания происходящего.
C++ Source Code:
1
$angled
2
{
3
// frame 'a'
4
$resample 64 128
5
$load bossa2a8.bmp flip_x
6
$frame 0 0 42 71 0.1 21 71
7
$load bossa1.bmp
8
$frame 0 0 41 73 0.1 20 73
9
$load bossa2a8.bmp
10
$frame 0 0 42 71 0.1 21 71
11
$load bossa3a7.bmp
12
$frame 0 0 52 69 0.1 26 69
13
$load bossa4a6.bmp
14
$frame 0 0 45 67 0.1 22 67
15
$load bossa5.bmp
16
$frame 0 0 41 67 0.1 20 67
17
$load bossa4a6.bmp flip_x
18
$frame 0 0 45 67 0.1 22 67
19
$load bossa3a7.bmp flip_x
20
$frame 0 0 52 69 0.1 26 69
21
}
Итак, что мы здесь видим?
Команда resample выравнивает все кадры примерно к общему знаменателю (по умолчанию отключена глобальной командой $noreasample), но при сборке эту команду лучше закомментировать.
Далее, команда $load загружает нужную картинку. Обратите внимание - в том же дууме (да наверняка и в дюке) некоторые кадры используются два раза в целях экономии места, а сама картинка флипается по горизонтали. В ксашевском спрайтгене есть специальная команда flip_x специально для этих целей. Для любопытных сообщу, что команда flip_y также присутствует, но в данном случае она нам не понадобится.
теперь описание кадров для команды $frame.
первые четыре параметра, это rectangle картинки. Поскольку наши кадры являются законченными картинками, то туда следует прописывать "0 0 ширина высота". Параметр 0.1 относится к авто-анимации для групповых спрайтов и в данном случае роли не играет. Последние два параметра - это оригин КАДРА (не всего спрайта, а данного кадра), соответственно по ширине и высоте. Ширину всегда следует делить на два, а высоту указывать полную (оригин монстров находится в их ногах, как мы все помним).
Также архив содержит doom_boos_example.rar. Это набор картинок, для сборки одного из монстров doom. Данный набор и скрипт компиляции были получены при помощи extragen, и приложены на всякий случай, если у вас нету под рукой дуума, чтобы проделать тоже самое.
Из этого же скрипта ясно видно как анимация смерти превращается в обычные upright кадры. Словом, получается полноценный монстр из дуума.
Теперь самое интересное - поддержка всего этого добра на уровне ксаша. Я уже упоминал, что она там есть с незапамятных времен, просто лежит невостребованная. Теперь настало время увидеть её в действии:
распакуйте архив Xash Demo.rar в папку с ксашем и запустите demo.bat
Обратите внимание, что монстр берет освещение с уровня и от фонарика тоже, как и полагается всякому приличному монстру .
Монстров добрый дядя Кутузофф напишет (я надеюсь)
А я взаместо этого сделал в ксаше поддержку детальных текстур как в стим-версии. Скоро выложу на попробовать.