Добавлен , опубликован
Раздел:
1. История
Источник: redsys.ru
ICE предназначена для редактирования файлов формата *.BIN, а именно "iscript.bin". Данный файл лежит в папке "scripts".
Программа предназначена для составления скриптов (AI) для различных действий, тех или иных игровых элементов. Здесь не обойтись без детального рассмотрения анимаций, ведь, оперируя ими, вы и должны будете указывать порядок действий. Анимации юнитов, зданий и прочих элементов в StarCraft записаны в формате *.GRP. Каждый блок фреймов (frames) состоит из 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, то есть повторить всё заново).

Руководство по эксплуатации

Разделим интерфейс программы на два поля (верхнее и нижнее) и разберёмся с каждым по отдельности.

Верхнее поле

Main Headers:
Первое, что нас интересует, это закладка Main Headers.
Header: (в дальнейшем "заголовок") название игровой единицы, будь то юнит, здание, снаряд.
Под полем 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. В окне появится найденная анимация, которой принадлежит введённый идентификационный номер. Возможность поиска используется при создании скриптов для присоединения теней и иных объектов, например, пушки к танку или ракетной башни у missile turret.
Кликнув 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 (смотреть статью "Форматы в StarCraft") файл.
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 III (смотреть статью "Arsenal III").
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 - тень для самолётов, находящаяся значительно ниже юнита. Цифровые значения используются только для теней, анимацией которых является анимация самого юнита.
Вот такими тернистыми путями создаются юниты для StarCraft. Плюс ко всему нужно подготовить фреймы для анимирования, а это долгий процесс. Но с практикой приходит все... . Удачи.