Для людей, уже работающих с ICE, не секрет, что это, наверное, самый тупой и корявый, но одновременно необходимый редактор ресурсов, без которого сложно создать полноценный мод или конверсию. Пока головы из Camelot System не выпустили более прогрессивную программу, мы обречены возиться с этой.
С чем работать?
ICE предназначена для редактирования файлов формата *.BIN, а именно "iscript.bin". Данный фаил лежит в папке "scripts" в архивах игры и его можно вытащить использую любой MPQ экстрактор.
Примечание: если у вас установлен только оригинальный StarCraft, то вынимать "iscript.bin" необходимо из "stardat.mpq", если же установлен BroodWar, то вскрывайте "broodat.mpq", а если вы устанавливали патч на игру, значит помимо этих стандартных mpq архивов, в директории появился некий "patch_rt.mpq", то работать необходимо именно с ним. Относитесь к этому серьёзно, так как не соблюдение столь примитивных правил редактирования может привести к возникновению ряда системных ошибок.
Зачем и как это работает?
Программа предназначена для составления скриптов (по-русски - сценариев) различных действий тех или иных игровых элементов. Здесь не обойтись без детального рассмотрения анимаций, ведь, оперируя ими, вы и должны будете указывать порядок действий. Анимации юнитов, зданий и прочих элементов в StarCraft записаны в формате *.GRP, но подробно останавливаться на их рассмотрении мы не будем, хотя желательно уделить время рассмотрении устройства аниманицй. Как правило, лучше один раз увидеть, чем сто раз услышать, так что советую скачать любой *.GRP просмотрщик и увидить концепцию системы анимирования своими глазами. Нужно знать, что каждый блок фреймов состоит из 17 картинок, которые отвечают за направление юнита (север, юго-восток и тд). В ICE именно такими блоками вам предстоит составлять сценарии.
Для приблизительного понимания системы работы скриптов, приведу пример. Вот скрипт, который проходит под номером "29933" и отвечает за передвижение Осадного Танка (в скобочках будет описываться действие фрагмента скрипта):
Play frame 0 (воспроизводится фрейм под номером 0)
Move graphic 4 unit forward (юнит передвигается на 4 клетки вперёд по выбранному направлению)
Wait 1 tricks (затормозить процесс анимирования на 1 единицу времени)
Play frame 17 (воспроизводится фрейм под номером 17)
Move graphic 4 unit forward (юнит передвигается на 4 клетки вперёд по выбранному направлению)
Wait 1 tricks (затормозить процесс анимирования на 1 единицу времени)
Play frame 34 (воспроизводится фрейм под номером 34)
Move graphic 4 unit forward (юнит передвигается на 4 клетки вперёд по выбранному направлению)
Wait 1 tricks (затормозить процесс анимирования на 1 единицу времени)
Go to offset 29933 (перейти к скрипту под номером
29933, то есть повторить всё заново)
Я думаю, что приблизительно структура работы скриптов стала понятна и можно перейти к детальному рассмотрению программы ICE.
Руководство по эксплуатации:
Разделим интерфейс программы на два поля (верхнее и нижнее) и разберёмся с каждым по отдельности.
Верхнее поле:
Main Headers:
Первое, что нас интересует, это закладка Main Headers на основной "рожи" окна программы.
Header: (в дальнейшем "заголовок") название игровой единицы, будь то юнит, здание, ракеты класса Halo, либо Червяк с огромной пастью, живущий на испепелённом Корхале.
Под полем Header находятся опции:
Create New Header: создать новый заголовок.
Delete Header: удалит заголовок (не советую удалять оригинальные игровые заголовки).
Rename Header: переименовать заголовок. Функция играет исключительно косметическое значение, но те кто, например, из Siega Tank сделали Devil Truck, могут, смеха ради, переименовать его и тут. За саму единицу отвечает идентификационный номер (ID Tag).
Кнопка Search by Header позволяет вам произвести поиск по идентификационному номеру (ID Tag), который у каждого заголовка индивидуальный.
GRP Preview:
Это просмотр анимационного файла *.GRP, принадлежащего выбранному заголовку.
В окошке Main GRP мы видим изображение анимации заголовка, кадры которой можно прокручивать от начала до конца, используя горизонтальный скрол. Вертикальный скрол предназначен для крупных анимаций (например, ядерный взрыв), не помещающихся в окно. Возможность просмотра анимации заголовка необходима для корректного составлении скриптов при создании, ведь наугад работать сложновато.
Окошко Secondary GRP используется для поиска анимаций. Введите номер анимации в поле, находящееся слева от окна Main GRP, выберите тип анимации (Image или Sprite) и кликайте кнопку Prev. В окне появится найденная анимация, которой принадлежит введённый идентификационный номер. Возможность поиска используется при создании скриптов для присоединения теней и иных объектов, например, пушки к танку.
Кликнув 2 раза на элементе скрипта, содержашего в строке sprites.dat или images.dat, вы получите отображение анимации в окне Secondary GRP, учитывая указанное значение.
WAV Preview:
Здесь осуществляется прослушивание звуковых файлов WAV (на них построена вся музыка и звуки в игре), принадлежащего выбранному заголовку.
В окне можно запечатлеть путь и название к звуковуму файлу.
Управление производится посредством кнопок, находяшихся справа от окошка (списка).
Play WAV - воспроизвести звук.
Remove WAV - убрать звук из списка.
Add WAV - добавить звук в список, учитывая введённый номер звука, справа от кнопки.
Кликнув 2 раза на элементе скрипта, содержашего в строке sfxdata.dat, вы получите отображение анимации в окне Secondary GRP, учитывая указанное значение.
Нижнее поле:
Header Info:
Замечу, что для каждого заголовка значения, содержащиеся на этой закладке, разные.
ID Tag: Идентификационный номер заголовка.
Offset: Основа сценария действий заголовка.
Entry Header:
Здесь можно установить уже готовые скрипты на определённые действия заголовка. Если вы создали юнит, который, например, по анимации движения совпадает с уже готовым, то просто скопируйте номер скрипта.
Type: допустимое количество действий для заголовка. Значение колеблется, так что оптимальное прийдёся искать на примере тех заголовков, на которые похож ваш редактируемый заголовок.
Далее идут допустимые действия заголовков:
Initial Animation - действия обькта при нахождении в состоянии покоя.
Death Animation - смерть обьека.
Initial Ground Animation - атака по земле.
Initial Air Animation - атака по воздуху.
Return to Idle from Ground Attack - возврашение к состоянию покоя после атаки по земле.
Return to Idle from Air Attack - возврашение к состоянию покоя после атаки по воздуху.
Walking Animation - перемещение обьекта.
Return to Idle from Walking - возврашение к состоянию покоя после перемешения.
Repeat Ground Attack - повторение атаки по земле (всегда идёт после действия Initial Ground Animation).
Repeat Air Attack - повторение атаки по воздуху (всегда идёт после действия Initial Air Animation).
Special Ability Animation - ряд специальных функций, улавливать которые вам прийдётся самостоятельно, а проще копировать похожие скрипты из других заголовков.
Unknown - та же история, что и с Special Ability Animation. Даже создатели этой программы не знают значения данных действий, куда уж нам.
Animations Scripts:
Самое сложное происходит здесь...
Панель инстументов содержит кнопочки:
New - начать новый элемент скрипта.
Delete - удалить фрагмент скрипта.
Copy - добавить в буфер обмена элемент скрипта.
Paste - вставить элемент скрипта из буфера обмена.
Cut - вырезать элемент скрипта.
Hex - сюда лучше не лазить.
Up - переместить элемент скрипта на шаг вверх.
Down - переместить элемент скрипта на шаг вниз.
Jump - переход к следующему скрипту (внизу каждого циклического скрипта должен быть Go to offset, позволяющий устанавливать цикличесую последовательность и прочую мудрёную чертовщину. Опять же, один неверный шаг и всё полетит к чёрту). Позволяет редактировать скрипты внутри скрипта, так сказать.
Back - наоборот, вернуться к наружнему скрипту.
Теперь разберёмся с табло справа от панели инструментов.
Goto Offset: введите номер скрипта, кликните на кнопку Goto и, пожалуйста, действие приняло значение выбранного скрипта. Работает и с внутренними скриптами (но не работает с некоторыми действиями).
Script Offset: скрипт, используемый этим действием на данный момент.
Op Offset: для каждого элемента скрипта это значение различное. Возможно, при помощи этого можно определить длину.
Элементы скриптов:
Здесь приведены лишь самые необходимые элементы, которые используются при создании скриптов.
Play Frame X - проиграть определённый фрагмент (фрейм) анимации с номером X.
Play Frame X according to teleset. May require a LOS file - проиграть определённый фрагмент (фрейм) анимации с номером X непосредственно на местности. Это относится к различным анимационным обьектам карты. Необходим совместимый LOS фаил.
Shift graphic position X vertical unit - сдвинуть анимацию по вертикали учитывая значение X. Используется для летающих юнитов, что бы создать иллюзию парящего объекта.
Wait X ticks - заморозить выполнение скрипта на X единиц времени.
Wait eather X or Y ticks (random) - заморозить выполнение скрипта на, хаотично выпадающий, промежуток от X до Y единиц времени. Используя эту функция мне, например, удалось сделать молнию, появляющуюся, как бы, в разных местах, в разное время.
Go to offset X - на этом промежутке осуществится переход к другому скрипту. Это позволяет сделать циклический скрипт, дублируя во внутреннем скрипте главный.
Place active overlay (images.dat) X at vertical offset Y - разместить активную анимацию (типа image) с идентификационным номером X, сместить по вертикали учитывая значение Y.
Place active underlay (images.dat) X at vertical offset Y - разместить активную тень объекта, которую сам объект будет скрывать (при наличие объекта в скрипте, а точнее предыдущего элемента) с идентификационным номером X, сместить по вертикали учитывая значение Y.
Place overlay (images.dat) X at vertical offset Y. May require a LOS file - разместить активную анимацию (типа image) с идентификационным номером X, сместить по вертикали учитывая значение Y. Необходим совместимый LOS фаил.
Place independent overlay (sprites.dat) X, over below this anim level, at vertical offset Y - разместить независимую анимацию (типа sprite) с идентификационным номером X, сместить по вертикали учитывая значение Y. Значение не точное, так как здесь имеет роль некий anim level, настраиваемый через Arsenal 3.
Place independent underlay (sprites.dat) X at vertical offset Y - разместить независимую тень обьека (типа sprite), которую сам обьект будет скрывать, с идентификационным номером X, сместить по вертикали учитывая значение Y.
Display overlay (sprites.dat) X with unknown var Y. May require a LOS file - лучше забейте на использование этого элемента. Порой, совершенно хаотично в моде появлялись какие то обьекты, после чего всё зависало. Моя теория заключается в том, что именно этот элемент виновник. Он содержит неизвестное значение, видимо в нём то и всё дело. Зависала игра, потому что небыло у этих элементов LOS файлов, как требует элемент скрипта.
Play sound (sfxdata.dat) X - воспроизвести звук под номером X.
Randomly play a sound (sfxdata.dat) between entires X and Y - воспроизвести хаотично звук под номером X или Y.
Attack with X (1 = Ground, else Air) - атаковать по земле, при X=1, либо атаковать по воздуху при X=2.
Attack with appropriate weapon - атаковать оружием, которое присвоено юниту, используя его установки.
Cast Spell - применить магию, которая присвоена юниту, используя его установки.
Use weapon (weapons.dat) X - использовать оружие с идентификационным номером X.
Move graphic X unit forward - юнит переместится, учитывая значение X. Для справки: Танк и Медик двигаются со скоростю 4; Мина-Паук бегает со скоростью - 16.
Begin unbreakable code section - обьект не может пошевелиться, хотя скрипт продолжает действовать.
End unbreakable code section - элемент Begin unbreakable code section дезактивируется.
Play specific frane X - показать какой-нибудь один фрейм, игнорируя систему построения анимации с 17-ю фреймами.
Замечания:
Существует только три рабочих значений смещения тени для настройки vertical offset. 0 - юнит использует тень из отдельного *.GRP файла. 1792 - тень находится немного ниже от расположения юнита (например, как у Probe или Vulture). 10752 - тень для самолётов, находящаяся значительно ниже юнита. Цифровые значения используются только для теней, анимацией которых является анимация самого юнита.
Вот и всё, буду надеяться, что это обучение хоть как то вам поможет.
GRP просмотрщики можно найти нашем файловом архиве.