|
“Создание сценариев”.
Для создания сценариев (aka скриптов) в Half-Life существуют две энтити: scripted_sequence и scripted_sentence. Первая отвечает за движения, выполняемые монстром/персонажем, будь то ходьба, бег, нажатие кнопки, тряска атомата с кока-колой, или почесывание подбородка. Вторая служит для того, чтобы монстр произнес какую-то фразу. При этом его голова повернется в сторону слушателя, и рот будет открываться в соответствии с амплитудой звука.
scripted_sequence
Основные параметры настраиваются следующим образом:
Name - имя, используемое для активации сценария. Активатором, как и везде, может быть любая энтитя, включая самого монстра.
Angle - сторона, куда повернется лицом монстр, когда доберется до нужной точки.
Target - энтитя, которая активируется после завершения этого сценария, т.е., после того, как монстр доберется до точки и проделает необходимую анимацию. Обычно этой энтитей бывает другой scripted_sequence для этого же монстра, или кнопка, на которую он нажал.
Delay before trigger - задержка между завершением анимации и срабатыванием target-энтити.
Kill Target - энтитя, которая будет удалена с карты после завершения сценария (часто сюда ставят имя этого-же монстра, если нужно сделать так, чтобы тот зашел за угол и исчез).
Target Monster - имя того самого монстра, который выполняет скрипт. Это может быть также имя класса (например, moster_scientist) - в таком случае scripted_sequence выберет любого монстра этого класса в пределах радиуса, задаваемого в поле Search Radius.
Action Animation - имя анимации, которую монстр проделает, когда доберется до расположения этого scripted_sequence. Если вам нужно, чтобы монстр просто подошел куда-то без дополнительной анимации, то оставьте это поле пустым.
Idle Animation - имя зацикленной анимации, которую монстр будет выполнять до тех пор, пока scripted_sequence не активируется. Например, падение ученого в шахте лифта - пока вы не добрались до верху, он будет дергаться, а при прохождении игроком триггера, он выполнит анимацию падения. Или поедающий труп зомби, подскакивающий при виде игрока. Если вам нужно, чтобы монстр всегда выполнял Idlе-анимацию (как сидящий с кружкой кофе профессор в самом начале), то оставьте поля Name и Action animation пустыми.
Search Raduis - если в поле Target Monster задан класс монстра, то монстр будет выбираться внутри радиуса, задаваемом в этом поле. Также это применяется для создания ученых и барней, который надо подвести к кнопке или сканеру, чтобы они их активировали - поле Name оставляется пустым, в поле Target Monster указывается класс монстра (ученый или барни), здесь указывается радиус, и устанавливается некое значение поля Repeat Rate ms (например, 10).
Repeat Rate ms - поиск монстра в радиусе, задаваемом выше, производится с указываемой в этом поле частотой в миллисекундах.
Move to position - определяет способ передвижения монстра на пути к позиции.
No - монстр не пойдет к scripted_sequence, а выполнит анимацию там, где стоит.
Walk - подойдет, и затем выполнит анимацию.
Run - подбежит, и выполнит анимацию.
Instantaneous - он телепортируется в место scripted_sequence и выполнит анимацию (это хорошая альтернатива монстермейкеру, если монстры должны иметь какие-то настройки, типа имени и т.д.).
No, Turn o Face - то же, что и No, правда перед анимацией он повернется в направлении, указываемом в angle.
Теперь её флаги:
Repeatable - поставьте, если сценарий нужно активировать много раз (например, ходящие ученые между компами в начале игры).
Leave corpse - если в конце анимации монстр умирает (например, падение), то с этим флагом труп не исчезнет.
No interruptions - если в момент проигрывания сценария игрок попытается повести монстра за собой или выстрелить в него, то скрипт не прервется.
Override AI - обычно сценарии игнорируются, если монстр в состоянии боя. Но этот флаг заставляет монстра выполнить сценарий независимо от того, чем тот занимается.
No script move - после проигрывания анимации монстр сместится обратно туда, где он был в ее начале.
Чтобы задать анимацию, вам необходимо знать ее имя. Для этого возьмите PakExplorer и из pak0.pak/models извлеките нужную вам модель. Просматривается она с помощью Model Viewer. Внимание - некоторые модели, например, ученые или барни, состоят из нескольких mdl-файлов (barney.mdl, barney01.mdl, barneyt.mdl), если вы не извлекаете их все, то при открытии главного файла Model Viewer'ом возникнет ошибка.
Примечание: с определенных пор Model Viewer научился открывать модели прямо из pak-файлов.
Есть одна небольшая хитрость - если есть две scripted_sequence с одинаковыми именами, и действующие на разных монстров, то поведение монстров будет синхронизировано следующим образом - тот из монстров, кто раньше подошел к своей scripted_sequence, не будет сразу выполнять анимацию, а подождет, пока другой тоже не достигнет своей точки, и потом они вместе выполнят свои анимации. Пример этого можно увидеть прямо перед реактором, когда ученые одновременно включают сканеры. Если один из монстров прервал выполнение сценария, то и другой прервет тоже.
Отдельный вопрос, имеющий косвенное отношение к сценариям - сидящие в креслах ученые. Для этого используется энтитя monster_sitting_scientist. Теоретически, располагать ее можно на любой высоте от сиденья (желательно где-то на высоте около ста пикселей), она все-равно опустится до нужного уровня, главное проследите, чтобы под ней и на некотором расстоянии от нее (~4 единиц) было только седалище, а не ручки или спинка, иначе игра неправильно определит высоту и ученый окажется либо слишком высоко, либо слишком низко.
При передвижении монстра в нужную точку он всегда пытается использовать сетку из нодов, даже если движение вызвано сценарием.
Ноды - это своеобразные узловые точки путей, наподобие тех, по которым бегают боты в многопользовательском режиме. Ставить их довольно просто - выбираете энтитю info_node и кидаете.
Высота над полом может быть любая, игра их все-равно опустит их до его уровня самостоятельно. Параметров никаких не нужно, игра, опять же, сама просчитает, какой узел из какого виден (появится надпись при загрузке карты - "Node graph is out of date. Rebuilding...") и сохранит в папочку nodes. Ставьте их в основном на перекрестках и углах. Не делайте расстояние между ними слишком большим и не наваливайте их в кучу. Около дверей ставьте под два нода - с одной стороны, и с другой. Если будет проблема с лестницами, то сделайте ступеньки пониже (8-12 пикс.) и на каждой поставьте по такому узлу, хотя это не всегда обязательно.
scripted_sentence
Местоположение энтити не имеет значения. Настраивается схожим образом с предыдущей:
Name - имя для активации.
Target - имя энтити, которая сработает после завершения фразы. Это часто используют для активации ответной реплики другого монстра.
Sentence Name - имя звукового события, т.е., описание звукового файла для фразы. Важно - в начале надо поставить восклицательный знак и писать имя события заглавными буквами.
Speaker Type - имя монстра, который произносит фразу.
Sentence Time - время звучания. Скорее всего, служит показателем, как долго объект будет смотреть на слушающего.
Lishtener Type - имя слушающего монстра, к которому этот, обращаясь с репликой, повернет голову. Как правило, тот тоже повернется, слушая реплику. Если реплика обращена к игроку, то напишите здесь player.
Если слушатель будет слишком далеко, то реплика не прозвучит.
Как и в случае со scripted_sequence, нам надо знать специальное имя звукового события. Это не совсем то же, что и имя wav-файла, а, скорее, их группа. Опять лезем в pak0.pak и в папке sound находим файл sentences.txt, внутренности которого имеют примерно такой вид:
SC_IDLE0 scientist/ipredictedthis
SC_IDLE1 scientist/containfail
SC_IDLE2 scientist/chaostheory
Сначала заглавными буквами идет имя самого звукового события, которое мы подставим в scripted_sentence, а потом, через пробел, список wav'ок без расширения, которые по очереди проиграются в этом событии. В данном примере их только по одному, но в звуковых событиях десантников вы увидите их массовое использование. Учтите, что для каждого монстра существует своя группа событий - для ученых их имена начинаются на SC, для барни - на BA, для десов - HG, и так далее...
Если вы будете добавлять свои речи, не забудьте их также прописать по аналогии в этом файле, который приложите к своему моду.
Вот вроде и все, удачных и интересных вам скриптов!
BUzer
|
|
|
Всего: 59
Гостей: 59
Невидимок: 0
Пользователей: 0
|
TRUP@C,
Papa,
Flash,
Slux,
kit400,
MSteam,
TwisteR,
XaeroX,
ForestGirl,
Skaarj,
Дядя Миша,
sqwosh,
Mpak,
Sadi,
FiEctro
|
|
|