Поле антиэкспроприации

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Deutsch (de)Français (fr)Русский (ru)Translate (Translate)
"Обратите внимание на поле раскалённых частиц на выходе."
- Диктор Portal 2

Поле антиэкспроприации или Испаритель - это специальное энергетическое поле в Portal 2(en), которое сбрасывает установленные пушкой порталы и разрушает объекты, которые коснулись его. Через него нельзя устанавливать порталы.

Используйте поле антиэкспроприации, чтобы у игрока не было возможности установить портал в области, ограждённой полем, либо пронести через поле объекты.

В Portal испаритель состоит из двух моделей - невидимого trigger_portal_cleanser с текстурой trigger и из излучателя системы частиц (info_particle_system).

В Portal 2 испаритель состоит из энтити (trigger_portal_cleanser) и пары моделей (fizzler.mdl). У браша, используемого для триггера, должна быть установлена текстура NODRAW(en), кроме двух сторон, имеющих текстуру поля антиэкспроприации.

Экземпляр

Как для большинства тестовых элементов Portal, для поля антиэкспроприации также есть свои экземпляры(en). Они статичны, имеют размер лишь 128x128 единиц и предназначены для работы в сочетании с лифтом(en), и поэтому сферы их применения очень ограничены. Есть три варианта оформления: чёрный и белый повреждённые и чёрный чистый.

  • instances/gameplay/fizzler_black_clean_128x128.vmf
  • instances/gameplay/fizzler_black_dirty_128x128.vmf
  • instances/gameplay/fizzler_white_dirty_128x128.vmf

Создание вручную

Данное руководство будет понятно даже новичку, не знающему Hammer Hammer.

Шаг 1

Создайте prop_dynamic и (для данного руководства) используйте модель "models/props/fizzler.mdl". Есть и другие модели испарителей (со словом "fizzler") для карт в стиле старой лаборатории или для моделей с поддержкой динамического "открытия-закрытия":

  • models/props/fizzler.mdl
  • models/props/fizzler_dynamic.mdl
  • models/props_underground/underground_fizzler.mdl
  • models/props_underground/underground_fizzler_wall.mdl

Это основная четвёрка моделей, есть и другие, более или менее детализированные.

Шаг 2

Обратите внимание, как браши окружают модель, чтобы она не была врезана в стену.

Теперь разместите по модели с каждой стороны области, через которую в обоих направлениях предметы будут испепеляться. Модель излучателя поля, как вы могли заметить, утоплена в стену, чтобы при необходимости воспроизвести анимацию закрытия; даже если используется статическая модель, гнездо всё равно присутствует.

Note.pngПримечание:Не размещайте стену поперёк или позади поля, так как это выглядит неестественно.

Итак, создадим три браша, окружающие излучатель поля сзади, по бокам и часть спереди (обратите внимание, что боковые браши будут также входить с переднюю сторону), не забудьте связать эти браши с func_detail.

Создадим два браша размером 32x8 единиц и 128 единиц в высоту и разместим их с каждой стороны модели излучателя. Убедитесь, что каждая панель крепления излучателя посажена на браше, как показано на иллюстрации. Добавьте ещё один браш за моделью для герметизации (если там уже есть другая стена, делать этого не нужно). Покройте эти браши текстурой соответствующей стены, даже внутренние части; покройте текстурой "nodraw" только те части, которые не будут видны.

Шаг 3

Создайте браш с текстурой "nodraw" (tools/toolsnodraw), идущий от одной модели излучателя к другой. Это будет область антиэкспроприации, испепеляющая предметы. Она должна быть единицу толщиной и 128 единиц в высоту. Свяжите браш (нажатием Ctrl+T) с энтити "trigger_portal_clenser". Задайте параметр "Visible?" на "Yes" и нажмите кнопку "Применить".

Note.pngПримечание:Вы можете попробовать разместить её точно в центре модели, но центр модели имеет толщину 2 единицы.

Не забудьте на вкладке флажков включить "Physics Objects", чтобы при касании растворялись не только порталы, но и такие предметы, как кубы(en) и турели.

Шаг 4

Откройте Texture Application tool и выберите только переднюю и заднюю стороны поля, которые будут видимы. Нажмите "Browse" и фильтруйте в поиске "fizzler", выберите "effects/fizzler" и измените текстурную шкалу на 0.125 для обеих осей X и Y, затем нажмите "Применить".

У вас должен получиться работающее поле антиэкспроприации! Если дать ему имя, вы сможете открывать и закрывать его системой входов/выходов, в этом случае не забудьте выбрать другую модель "models/props/fizzler_dynamic.mdl" и добавить соответствующие анимации при открытии и закрытии.

Динамическое поле антиэкспроприации

В некоторых испытаниях поле играет роль тестового элемента, и его нужно включать/выключать и открывать/закрывать. В следующем руководстве вы научитесь создавать динамическое поле антиэкспроприации.

Шаг 1

1. Создайте две энтити prop_dynamic(en) со следующими настройками:

Имя свойства Значение
World Model models/props/fizzler_dynamic.mdl
Name fizzlers
HoldAnimation true
Collision Not Solid

2. Создайте блок trigger_portal_cleanser 128 единиц в высоту со следующими настройками:

Имя свойства Значение
Name fizzler_brush
Visible yes

Выберите следующие флаги:

  • Clients
  • NPCs
  • Physics Objects

3. Создайте энтити logic_relay со следующими настройками:

Имя свойства Значение
Name relay_fizzler_enable

и следующими выходами:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger fizzler_brush Enable <none> 0.00 No
Io11.png OnTrigger fizzlers SetAnimation open 0.00 No

4. Создайте энтити logic_relay со следующими настройками:

Имя свойства Значение
Name relay_fizzler_disable

и следующими выходами:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger fizzler_brush Disable <none> 0.00 No
Io11.png OnTrigger fizzlers SetAnimation close 0.00 No

Шаг 2

Для открытия и закрытия поля необходим триггер. В этом руководстве мы используем простую prop_floor_button. Когда игрок или куб нажмёт кнопку, поле будет отключено. При отпускании кнопки поле будет снова включено.

5. Создайте энтити prop_floor_button со следующими выходами:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed relay_fizzler_disable Trigger <none> 0.00 No
Io11.png OnUnPressed relay_fizzler_enable Trigger <none> 0.00 No

Получилось работающее динамическое поле антиэкспроприации! Мы можете поменять триггер на, например, prop_button, trigger_multiple и т.д.

Поля большого размера

Обратите внимание на свечение по краям устройства антиэкспроприации

Иногда требуется создать поле выше или длиннее 128 единиц, но так как модель излучателя поля имеет длину лишь 128 единиц, потребуется добавить еще два излучателя и браши к ним над имеющимися моделями. Для этого просто скопируйте созданное ранее и перетащите на 128 единиц выше, и повторяйте это столько, сколько вам нужно.
НЕ растягивайте браши на нужную вам высоту, так как требуется, чтобы при выстреле из портальной пушки светилась белым только одна секция поля; применяйте этот подход, так как он используется в официальных картах. Чтобы сделать поле более широким, потребуется разрезать браш на три части. Воспользуйтесь инструментом clipping tool (Ctrl+X) по бокам как можно ближе к моделям, и убедитесь, что обе стороны отрезанного остались (выделены белым). Оба новых браша должны быть 128 единиц в длину. Средний браш будет растягиваться между этими двумя - его длина не важна. Снова откройте Texture Application tool и залейте переднюю и задние стороны среднего браша текстурой "effects/fizzler_center", браш справа текстурой "effects/fizzler_l", браш слева - "effects/fizzler_r". Не забудьте выровнять текстуру по её соответствующей стороне!

Note.pngПримечание:Разница между "fizzler_l" и "fizzler_r" заключается в направлении свечения, излучаемого устройством, средняя часть такого не имеет.

Примечание

Warning.pngПредупреждение:НИКОГДА не включайте флаг "Everything" для trigger_portal_cleanser, особенно при использовании динамического излучателя, иначе ваши модели будут испепелены полем!