опубликован

Разъяснение неясностей

Содержание:
Доброго всем времени суток, уважаемые господа. Поскольку на белом свете остались еще такие люди, которые не могут делать двери, лифты, и слово "func" у них вызывает нецензурную ассоциацию, я буду продолжать писать статьи где буду разъяснять неясности. Как вы поняли, сегодня я поведаю о функциях, а вернее о главных функциях (или можно сказать самых эффектных) и некоторых мелочах.

Функции или "func".

Что же мы называем функциями (только не пугаться, сорить терминами никто не собирается)? В редакторе Doom Edit это просто класс объектов и этого нам хватит. Функции помогают нам создавать такие прекрасные вещи как двери, лифты, землетрясения, телепорты, платформы (типа тех, что в Quake), делать котлеты... упс... извините, заговорился. Такс, приступим с самого начала...

Дверь [func_door]

Простая функция двери, все двери в думе скриллируют, тобиш, когда мы заходим в зону активации открытия двери, она плавно скроллирует в заданное направляение и скрывается на 90% (этот параметр можно изменить, см. [lip]) в стене, мы имеем в распоряжении следующие параметры для настройки поведения/внешнего вида двери:
  1. [time] - [время_в_секундах] = время, за которое открывается/закрывается дверь;
  2. [speed] - [цыфровое_знач] = скорость перемещения двери, с параметром [time] несовместим;
  3. [angle] - [знач_от_0_до_360] = угол открытия двери (рекомендуется использовать вместо [movedir]);
  4. [movedir] - [малые_знач] = направление открытия, не совместим с [angle];
  5. [model] - [назв_модели] = модель двери, находятся в папке [models/mapobjects/doors];
  6. [wait] - [время_в_секундах] = сколько времени ждать перед возвращением;
  7. [snd_СОСТОЯНИЕ] - [имя_звука] = имя звука, используемого в определенном состоянии двери;
  8. [triggerСОСТОЯНИЕ] - [имя_объекта] = какой объект нужно активировать в определенном состоянии двери;
  9. [triggersize] - [знач] = размер триггера активации открытия (тобиш, на сколько он простирается возле двери);
  10. [dmg] - [знач] = какое повреждение причинять во время блокировки двери;
  11. [start_open] - [знач_1_или_0] = респавнить дверь в открытом состоянии;
  12. [toggle] - [знач_1_или_0] = ждать в каждой позиции пока снова не подействует триггер;
  13. [crusher] - [знач_1_или_0] = дверь не реверсирует если заблокирована;
  14. [no_touch] - [знач_1_или_0] = некосаема, нужно затриггерить для открытия;
  15. [locked] - [знач_1_или_2] = параметр работает вместе с [no_touch], что делаем после триггера:
    1 - открывать;
    2 - дать двери статус 'открытая';
  16. [lip] - [знач] = какой участок двери останется видимым после завершения движения.
ПРИМЕЧАНИЕ: Дверь также может иметь GUI для управления, нужно просто выбрать модель с поддержкой GUI, и потом выставить в параметр "gui" имя файла GUI. Дополнительные опции по управлению с определенного GUI зависит лишь от GUI, ничего конкретно сказать не могу, для ознакомления с управлением дверью от GUI изучайте карты от ID. Пример двери можно скачать тут.

Лифт [func_elevator]

Это лифт, назвать его простой функцией сложно, поскольку нужно определенное количество мозга (и смекалки), для того чтоб сделать работоспособный лифт.
Как он делается? - Чтобы сделать лифт, нужно сначала создать "func_elevator", выставить параметр "model", выбрать GUI, выставить параметры GUI, сделать и забиндить двери, согласовать звуки со временем перемещения. В принцыпе все, но, это простой лифт, есть много опций для его настройки, но я перечислю лишь те, которые на мой взгляд самые необходимые (почти все, лишь некоторые опущены):
  1. [model] - [имя_модели] = название модели лифта [models/mapobjects/elevators];
  2. [move_time] - [время_сек] = время перемещения между этажами;
  3. [move_speed] - [точек/сек] = скорость перемещения между этажами, востребован при использовании loop звука - просто не нужно будет согласовывать движение со звуком;
  4. [*cel_time] - [время_сек] = время ускорения/притормаживания лифта;
  5. [innerdoorХ] - [имя_двери] = дверь, прикрепленная к лифту, если она одна, то параметр без значения Х, если две или более, то первая дверь без Х, следующая с Х (например, innerdoor1);
  6. [floorPos_Х] - [X Y Z] = положения пола, значение Х в параметре - номер этажа, собственно от того сколько мы выставим таких параметров и какой GUI мы выберем, будет зависеть сколько этажей;
  7. [floorDoor_X] - [имя_двери] = имя внешней двери, Х - на каком этаже;
  8. [floor] - [номер_этажа] = этаж, на котором изначально должен быть лифт;
  9. [pauseOnFloor] - [номер_этажа] = этаж, на котором сделать паузу перед открытием двери;
  10. [pauseTime] - [время_сек] = время паузы из предыдущего параметра;
  11. [snd_СОСТОЯНИЕ] - [имя_звука] = звук, который будет проигрываться в определенном состоянии лифта;
  12. [gui] - [назв_файла_gui] = GUI, используемый для управления лифтом, обычно можно два определить - первый параметром [gui], второй [gui1], первый - внутри лифта в виде дисплея управления, второй - подсветка вверху номера этажа или типа того (если не сможете найти нормальный файл GUI, то ищите в папке guis/doors/elevator*);
  13. [gui_parmX] - [знач] = параметр GUI (далее следуют описания параметров дефолтного двухэтажного GUI);
    а) [gui_parm2] - [1] = с этажа 1 на 2, или [2] = с 2 на 3;
    б) [gui_parm3] - имя верхнего этажа (можно мультистрочное через БЭКСЛЕШn);
    в) [gui_parm4] - имя нижнего этажа (можно мультистрочное через БЭКСЛЕШn);
    г) [gui_parm5] - цвет GUI. [0] - дефолтный, [1] - красный, [2] - желтый, [3] - голубой, [4] - зеленый цвет;
ПРИМЕЧАНИЕ: Рекомендую сделать внутри лифта следующие вещи и прибиндить их к модели лифта - свет, в местах, где нужна подсветка - браш с текстурой "sfx/flare", возможно прибить какую-то модель снизу, если мы не делаем внешнюю дверь. Пример лифта/анимации (это так, оффтоп слегка, но с подобными анимациями карта выглядит живенько) можно скачать тут

Землетрясение [func_earthquake]

Землетрясения собственной персоной. Создаем эту функцию, выставляем параметры, цепляем на триггер и как лупанет, что хоть прячься, а теперь о параметрах подробнее:
  1. [playerOriented] - [1_или_0] = откуда будет трясти, от положения объекта (0), или от положения игрока (1), тобиш близь места где будет триггер;
  2. [wait] - [знач_или_-1] = сколько ждать перед тем как жахнуть снова, [-1] - только раз;
  3. [randomDelay] - [знач_интенсивности] = разнообразие пауз;
  4. [triggered] - [1_или_0] = объект будет ждать триггера, перед тем как трухануть;
  5. [snd_quake] - [имя_звука] = определяет какой звук играть при землетрясении;

Телепорт [func_teleporter]

Ничего примечательного, триггерный телепорт, создаем объект, цепляем к триггеру и при активации триггера перемещаемся на позицию нашего объекта-телепорта. Вынужден сказать, что телепорт глючная штука, при паршивой сборке карты и неправильной компиляции может и не заработать.
  1. [angle] - [знач_угол] = направление к лицу;
  2. [wipe] - [имя_звука] = звук, который использовать при телепортировании;

Платформа [func_plat]

Летающая платформа, типа тех, что мы можем наблюдать в Quake. Нужно создать объект, выставить конечное положение и высоту, на которую платформа должна переместиться. Все просто.
  1. [height] - [точки] = высота, на которую поднимется платформа, по дефолту - высота модели;
  2. [model] - [имя_модели] = модель платформы;
  3. [lip] - [точки] = без камментов, такое же описание, что и у дверей;
  4. [speed] - [точек/сек] = скорость перемещения;
  5. [dmg] - [знач_поврежд] = какое повреждение давать при блокировке (может зажало);
  6. [no_touch] - [1_или_0] = работать только через триггер;
  7. [snd_СОСТОЯНИЕ] - [имя_звука] = какой звук издавать в определенном состоянии;
ПРИМЕЧАНИЕ: Координаты модели на карте и есть координаты конечной позиции, в изначальном состоянии уже на карте платформа будет находиться на тех же координатах, минус от Z параметра [height]. Пример платформы.
Вот собственно и перечень функций, которые могут показаться сложными для изучения методом тыка (кроме телепорта), остальные достаточно просты. Если вы хотите узнать больше информации о функциях, то могу порекомендовать следующее - зайдите в папку Doom3/base/def (или Doom3/base/pak000.pk4/def, если игра изначально сжата), откройте файл func.def в Блокноте (или в более приличном редакторе), и посмотрите список всех функций. Как ориентироваться в файле? Ответ прост, строки, на которые стоит обратить внимание:
entityDef func_НАЗВАНИЕ_ФУНКЦИИ {...тело_функции...} Тело функции, тобиш все, что в нее напичкано
"editor_usage" "ОПИСАНИЕ" Описание действия функции на англ. языке
"editor_var ПАРАМЕТР" Описание параметра функции на англ. языке
"ПАРАМЕТР" "ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ" Дефолтные значения

Как использовать эту информацию?


Во-первых, вы будете знать дефолт, и избегите повторения параметров,
во-вторых, узнаете описания и сможете их, например, если вы не знаете английского, скопировать и отправить в переводчик,
в-третьих, сможете также поменять дефолтные значения на те, которые будут удобны вам. На этом все. Спасибо за внимание.

Содержание