Ru/Indicator Lights (Portal 2): Difference between revisions
mNo edit summary |
m (obsolete language category) |
||
(24 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{lang|title=Индикаторные огни|Indicator Lights (Portal 2)}} | ||
|title = | [[File:Indiclights 2.png|right|96px]] | ||
| | '''Индикаторные огни''' - световые дорожки в тестовых камерах, указывающие на взаимосвязанные энтити, например, кнопка и раздатчик. | ||
В неактивном состоянии огни имеют синий цвет, в активном - оранжевый. | |||
[[File:Indiclights | |||
''' | |||
== | == Создание индикаторных огней == | ||
[[ | [[File:Indicator example1.jpg|300px|thumb|right|Размещённые индикаторные огни]] | ||
Данное руководство предполагает наличие базовых знаний {{L|Hammer}}. | |||
'''1)''' В своей карте создайте две энтити, которые будут взаимодействовать. Это могут быть как {{L|Button (Portal 2)#Напольные кнопки|сверхпрочная сверхударная сверхкнопка :)}}, открывающая выходную {{L|Test Door (Portal 2)|дверь}}, так и {{L|Button (Portal 2)#Кнопка-пьедестал|кнопка-пьедестал}}, которая запустит {{L|Diversity Vent|пневматическую трубу}}, из которой потечёт {{L|Gel_(Portal_2)|гель}}, давая игроку на один шаг приблизиться к решению. То, что произойдёт, решаете вы, но всегда следом за '''активируемой штукой''' помещайте энтити {{L|env_texturetoggle}} — это поможет нам сменить цвет индикаторных огней в дальнейшем, а также напомнит, где вы разместили энтити - карта станет более понятной. | |||
Выберите текстуру | |||
'''2)''' Выберите текстуру огней в браузере текстур, для данного руководства: "<code>signage/indicator_lights/indicator_lights_floor</code>" (легко находится, если ввести "indicator" в поле фильтра). | |||
A1. <code>signage/indicator_lights/indicator_lights_floor</code> | A1. <code>signage/indicator_lights/indicator_lights_floor</code> | ||
Line 20: | Line 16: | ||
<br>B1. <code>signage/indicator_lights/indicator_lights_corner_wall</code> | <br>B1. <code>signage/indicator_lights/indicator_lights_corner_wall</code> | ||
<br>B2. <code>signage/indicator_lights/indicator_lights_corner_floor</code> | <br>B2. <code>signage/indicator_lights/indicator_lights_corner_floor</code> | ||
{{Note | {{Note|Текстуры в каждой паре оверлеев функционально и внешне неразличимы; но при желании вы можете использовать оба оверлея.}} | ||
'''3)''' Выберите инструмент {{L|Hammer_Overlay_Tool|Overlay}} в Hammer, и разместите оверлеи огней там, где вам нужно. Функционально нет разницы, как они размещены, хотя между взаимодействующими энтитями желательно провести логичную линию, обычно это кратчайший путь между двумя энтитями; не забудьте, что в некоторых местах кратчайший путь идёт по стене. Кроме того, в целях согласованности с индикаторами в картах Valve, на сгибах световых дорожек (но не в переходах от пола к стене, например) в углу помещайте <code>signage/indicator_lights/indicator_lights_corner_wall</code>, также, как и в начале у активатора (но не активируемого объекта). | |||
Длина одной световой ленты - 4 кружка, но иногда вам может потребоваться другое их количество. К счастью, вы можете изменить свойства оверлея, чтобы удлинить его, а не использовать несколько оверлеев. Это можно сделать, отредактировав ключевое значение '''U Start''' или '''U End''' в окне свойств оверлея. Другой способ - растянуть оверлей 'физически' в одном из '''двухмерных видов''' — но сначала убедитесь, что флаг 'Texture Lock' снят. Помните, что индикаторные огни никогда не проходят между плиток! | |||
{{tip | {{tip|Вы можете вводить десятичные ключевые значения для длины лент. Это пригодится, если вам нужна лента из 5 кружков, например, для этого вам потребуется ввести значение 1.25 (каждый кружок имеет длину 0.25). Так что, если вам потребуется линия из 11 кружков, длина ленты должна равняться 2.75.}} | ||
4. Выберите размещённые вами оверлеи (ТОЛЬКО те пометки, которые вам нужны) и назовите их одинаково. В данном руководстве мы используем "indlights_1". Затем откройте свойства помещённой вами env_texturetoggle, и введите то же имя в поле Target Brush(es). Теперь назовите env_texturetoggle "texturetoggle_lights_01" | |||
5. Выберите энтити '''activator''' и откройте вкладку её выходов. В данном руководстве используется энтити простой кнопки, поэтому все выходные параметры в таблице будут соответствовать ей. Вам нужно только добавить следующие два входа к вашему активатору: | |||
:{| border=1 cellpadding="2" cellspacing="1" | :{| border=1 cellpadding="2" cellspacing="1" | ||
|- align=left style="background:#DCDCDC; color:black" | |- align=left style="background:#DCDCDC; color:black" | ||
Line 38: | Line 31: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnPressed || texturetoggle_lights_01 || SetTextureIndex || 1 || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnButtonReset || texturetoggle_lights_01 || SetTextureIndex || 0 || 0.00 || No | ||
|} | |} | ||
В общем, теперь по нажатии кнопки <code>texturetoggle_lights_01</code> изменит оверлеи, подключенные к ней, на их альтернативный "вариант", а именно на соответствующую оранжевую текстуру. После этого кнопка сбросит "вариант" на обычный синий цвет. | |||
Готово! Индикаторные огни должны работать! | |||
== | == Рамка с галочкой == | ||
[[ | [[File:Indicator checkbox placement.jpg|250px|right|thumb|Место, где будет помещена '''prop_indicator_panel'''.]] | ||
'''Рамка с галочкой''' - бинарный индикатор, то есть он может иметь только два состояния. Он указывает на текущее состояние энтити - синяя пометка 'X', если неактивна, и оранжевая галочка, когда активна. | |||
1. Создайте {{L|prop_static}} со следующими свойствами: | |||
::{| class=standard-table | ::{| class=standard-table | ||
! | ! Свойство || Значение | ||
|- | |- | ||
| World Model || models/props/sign_frame01/sign_frame01.mdl | | World Model || models/props/sign_frame01/sign_frame01.mdl | ||
|} | |} | ||
Поместите её в конце световой дорожки. | |||
2. В том же самом месте и с теми же "Pitch Yaw roll" поместите {{L|prop_indicator_panel}}. Лучше это сделать shift-перетаскиванием prop_static в то же место. | |||
{{Note|Вид '''prop_indicator_panel'''' не должен ввести вас в заблуждение; В игре она выглядит лишь как рамка с галочкой. Именно поэтому также необходима <code>models/props/sign_frame01/sign_frame01.mdl</code>.}} | |||
{{Note | |||
3. Заполните поля '''prop_indicator_panel'''' согласно вашему замыслу. Дайте энтити имя, и проверьте, что она связана с оверлеем, а ''не'' env_texturetoggle. | |||
::{| class=standard-table | ::{| class=standard-table | ||
! | ! Свойство || Значение | ||
|- | |- | ||
| Name || checkmark_indlights_1 | | Name || checkmark_indlights_1 | ||
Line 73: | Line 63: | ||
|} | |} | ||
{{Note | {{Note|Если вы хотите заполнить поле 'Indicator Lights' в свойствах prop_indicator_panel, то prop_indicator_panel будет работать как env_texturetoggle. Так что, когда она "включена" (Check) или "отключена" (Uncheck), она изменит "вариант" индикаторных огней, то есть путь, указанный к ним, соответственно.}} | ||
4. Добавьте к энтити активатора ещё два входа: | |||
:{| border=1 cellpadding="2" cellspacing="1" | :{| border=1 cellpadding="2" cellspacing="1" | ||
|- align=left style="background:#DCDCDC; color:black" | |- align=left style="background:#DCDCDC; color:black" | ||
Line 82: | Line 71: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnPressed || checkmark_indlights_1 || Check || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnButtonReset || checkmark_indlights_1 || Uncheck || || 0.00 || No | ||
|} | |} | ||
Теперь у вас есть и работающая рамка с галочкой, также не забудьте связать активатор с активируемой энтитей. | |||
== | == Таймер в рамке == | ||
'''Таймер в рамке''' действует практически так же, как рамка с галочкой: показывает активное состояние управляемой энтити. Однако, таймер показывает, что действие будет длиться ограниченное количество времени. Как правило, рекомендуется, чтобы активатор являлся простой {{L|Button (Portal 2)#Кнопка-пьедестал|кнопкой}}, поскольку при активации {{L|Button (Portal 2)#Напольные кнопки|напольной кнопкой}} игрок ожидает, что действие будет выполняться, пока напольная кнопка нажата. | |||
Перед добавлением таймера подумайте, ''действительно'' ли он вам нужен, и если это так, то на протяжении какого времени таймер должен быть активен? Не делайте задачу невыполнимой, вам лишь нужно добавить небольшое напряжение в головоломку. | |||
1. Снова, поместите prop_static со следующими свойствами: | |||
::{| class=standard-table | ::{| class=standard-table | ||
! | ! Свойство || Значение | ||
|- | |- | ||
| World Model || models/props/sign_frame01/sign_frame01.mdl | | World Model || models/props/sign_frame01/sign_frame01.mdl | ||
|} | |} | ||
Поместите её в конце световой дорожки. | |||
2. Поместите prop_indicator_panel в том же месте, что и <code>sign_frame01.mdl</code>. Теперь решите, сколько времени запускаемая энтити будет активна. В данном руководстве мы выберем 8 секунд, так что добавим следующие свойства: | |||
::{| class=standard-table | ::{| class=standard-table | ||
! | ! Свойство || Значение | ||
|- | |- | ||
| Name || checktime_indlights_1 | | Name || checktime_indlights_1 | ||
Line 119: | Line 106: | ||
| Indicator Lights || indlights_1 | | Indicator Lights || indlights_1 | ||
|} | |} | ||
{{Note | {{Note|Свойство Is checked показывает, будет ли панель сразу с галочкой. Так как вам нужен таймер, укажите 'No'.}} | ||
3. Добавьте кнопку со следующими свойствами: | |||
::{| class=standard-table | ::{| class=standard-table | ||
! Property Name || Value | ! Property Name || Value | ||
Line 134: | Line 120: | ||
| Prevent fast reset? || No | | Prevent fast reset? || No | ||
|} | |} | ||
Заданное в поле 'Delay Before Reset' время сообщит кнопке, сколько времени должен тикать таймер. Задание 'Prevent fast reset?' на значение 'No' позволит нажать кнопку ещё раз в ходе работы таймера. Это позволит игроку перезапустить таймер, чтобы успеть сделать нужные действия. | |||
{{ | {{tip|Также рекомендуется использовать поле 'Delay Before Reset', чтобы кнопку нельзя было нажать в то время, пока подключенная энтити ещё работает. Так, например, при получении {{L|Cube (Portal 2)|куба}} вы не сможете растворить куб прежде, чем закроется раздатчик.}} | ||
4. И последнее, что нужно сделать для работы таймера, добавить этот выход на вкладке Output: | |||
:{| border=1 cellpadding="2" cellspacing="1" | :{| border=1 cellpadding="2" cellspacing="1" | ||
|- align=left style="background:#DCDCDC; color:black" | |- align=left style="background:#DCDCDC; color:black" | ||
Line 144: | Line 129: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnPressed || checktime_indlights_1 || Start || || 0.00 || No | ||
|} | |} | ||
Таймер будет сбрасываться автоматически по истечении заданного времени. Однако, вы можете добавить команду 'Stop', чтобы остановить таймер в его текущем состоянии или чтобы отправить выход 'Reset' для сброса таймера вручную. | |||
== Индикаторные огни старой лаборатории == | |||
[[File:Indiclights neon 1.png|right|360px]] | |||
В браузере текстур выберите текстуру для огней (введите "neon" в фильтр). | |||
<br>Мы возьмём "<code>signage/indicator_lights/indicator_neon_straight</code>" | |||
{{Note|Оверлеи индикаторных огней из {{L|Underground (Portal 2)|старой лаборатории}} обычно представляют собой текстуру 64x64 с одной неоновой лентой.}} | |||
Как вы могли заметить, стандартный размер текстуры огней гораздо больше, чем должен быть. Чтобы это исправить, включите флаг 'Texture Lock', и в одном из '''двухмерных видов''' уменьшайте размер оверлея, пока он не станет размером 16x16. Теперь вернитесь к шагу 2 в создании индикаторной дорожки и триггеров. | |||
== Рамка с галочкой старой лаборатории == | |||
Создайте блок браша размером 32Wx2Lx32H с текстурой tools/toolsnodraw. Спереди поместите оверлей <code>signage/indicator_lights/indicator_neon_check</code>, стороны покройте текстурой <code>plastic/plastickwall004a_dirty</code>. Проверьте, что установлен флаг 'Texture Lock', и подгоните размер оверлея по брашу. Переместите браш в конец индикаторной дорожки. | |||
Преобразуйте браш в энтити func_brush и дайте ей то же имя, что было у ваших энтитей info_overlay. | |||
Теперь всё должно работать. | |||
=== Завершение === | |||
Чтобы добавить звук мерцающих неоновых огней, просто поместите {{L|ambient_generic}} на панель с галочкой со следующими свойствами: | |||
{{ | ::{| class=standard-table | ||
! Свойство || Значение | |||
[[ | |- | ||
| Name || <имя_индикаторных_огней>_sound | |||
|- | |||
| Sound Name || VFX.OGSignFlicker | |||
|} | |||
Проверьте, чтобы на вкладке флагов он НЕ был зациклен (looped)? и добавьте ещё один выход к активатору: | |||
:{| border=1 cellpadding="2" cellspacing="1" | |||
|- align=left style="background:#DCDCDC; color:black" | |||
! | |||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | |||
|- | |||
| [[File:Io11.png]] || OnPressed || <indicator_light_name>_sound || PlaySound || || 0.00 || No | |||
|} | |||
{{ACategory|Portal 2 Level Design}} |
Latest revision as of 03:50, 22 August 2024
Индикаторные огни - световые дорожки в тестовых камерах, указывающие на взаимосвязанные энтити, например, кнопка и раздатчик. В неактивном состоянии огни имеют синий цвет, в активном - оранжевый.
Создание индикаторных огней
Данное руководство предполагает наличие базовых знаний Hammer .
1) В своей карте создайте две энтити, которые будут взаимодействовать. Это могут быть как сверхпрочная сверхударная сверхкнопка :) , открывающая выходную дверь , так и кнопка-пьедестал , которая запустит пневматическую трубу , из которой потечёт гель , давая игроку на один шаг приблизиться к решению. То, что произойдёт, решаете вы, но всегда следом за активируемой штукой помещайте энтити env_texturetoggle — это поможет нам сменить цвет индикаторных огней в дальнейшем, а также напомнит, где вы разместили энтити - карта станет более понятной.
2) Выберите текстуру огней в браузере текстур, для данного руководства: "signage/indicator_lights/indicator_lights_floor
" (легко находится, если ввести "indicator" в поле фильтра).
A1. signage/indicator_lights/indicator_lights_floor
A2. signage/indicator_lights/indicator_lights_wall
B1. signage/indicator_lights/indicator_lights_corner_wall
B2. signage/indicator_lights/indicator_lights_corner_floor

3) Выберите инструмент Overlay в Hammer, и разместите оверлеи огней там, где вам нужно. Функционально нет разницы, как они размещены, хотя между взаимодействующими энтитями желательно провести логичную линию, обычно это кратчайший путь между двумя энтитями; не забудьте, что в некоторых местах кратчайший путь идёт по стене. Кроме того, в целях согласованности с индикаторами в картах Valve, на сгибах световых дорожек (но не в переходах от пола к стене, например) в углу помещайте signage/indicator_lights/indicator_lights_corner_wall
, также, как и в начале у активатора (но не активируемого объекта).
Длина одной световой ленты - 4 кружка, но иногда вам может потребоваться другое их количество. К счастью, вы можете изменить свойства оверлея, чтобы удлинить его, а не использовать несколько оверлеев. Это можно сделать, отредактировав ключевое значение U Start или U End в окне свойств оверлея. Другой способ - растянуть оверлей 'физически' в одном из двухмерных видов — но сначала убедитесь, что флаг 'Texture Lock' снят. Помните, что индикаторные огни никогда не проходят между плиток!

4. Выберите размещённые вами оверлеи (ТОЛЬКО те пометки, которые вам нужны) и назовите их одинаково. В данном руководстве мы используем "indlights_1". Затем откройте свойства помещённой вами env_texturetoggle, и введите то же имя в поле Target Brush(es). Теперь назовите env_texturetoggle "texturetoggle_lights_01"
5. Выберите энтити activator и откройте вкладку её выходов. В данном руководстве используется энтити простой кнопки, поэтому все выходные параметры в таблице будут соответствовать ей. Вам нужно только добавить следующие два входа к вашему активатору:
My Output > Target Entity Target Input Parameter Delay Only Once OnPressed texturetoggle_lights_01 SetTextureIndex 1 0.00 No OnButtonReset texturetoggle_lights_01 SetTextureIndex 0 0.00 No
В общем, теперь по нажатии кнопки texturetoggle_lights_01
изменит оверлеи, подключенные к ней, на их альтернативный "вариант", а именно на соответствующую оранжевую текстуру. После этого кнопка сбросит "вариант" на обычный синий цвет.
Готово! Индикаторные огни должны работать!
Рамка с галочкой
Рамка с галочкой - бинарный индикатор, то есть он может иметь только два состояния. Он указывает на текущее состояние энтити - синяя пометка 'X', если неактивна, и оранжевая галочка, когда активна.
1. Создайте prop_static со следующими свойствами:
Свойство Значение World Model models/props/sign_frame01/sign_frame01.mdl
Поместите её в конце световой дорожки.
2. В том же самом месте и с теми же "Pitch Yaw roll" поместите prop_indicator_panel . Лучше это сделать shift-перетаскиванием prop_static в то же место.

models/props/sign_frame01/sign_frame01.mdl
.3. Заполните поля prop_indicator_panel' согласно вашему замыслу. Дайте энтити имя, и проверьте, что она связана с оверлеем, а не env_texturetoggle.
Свойство Значение Name checkmark_indlights_1 Indicator Lights indlights_1

4. Добавьте к энтити активатора ещё два входа:
My Output > Target Entity Target Input Parameter Delay Only Once OnPressed checkmark_indlights_1 Check 0.00 No OnButtonReset checkmark_indlights_1 Uncheck 0.00 No
Теперь у вас есть и работающая рамка с галочкой, также не забудьте связать активатор с активируемой энтитей.
Таймер в рамке
Таймер в рамке действует практически так же, как рамка с галочкой: показывает активное состояние управляемой энтити. Однако, таймер показывает, что действие будет длиться ограниченное количество времени. Как правило, рекомендуется, чтобы активатор являлся простой кнопкой , поскольку при активации напольной кнопкой игрок ожидает, что действие будет выполняться, пока напольная кнопка нажата.
Перед добавлением таймера подумайте, действительно ли он вам нужен, и если это так, то на протяжении какого времени таймер должен быть активен? Не делайте задачу невыполнимой, вам лишь нужно добавить небольшое напряжение в головоломку.
1. Снова, поместите prop_static со следующими свойствами:
Свойство Значение World Model models/props/sign_frame01/sign_frame01.mdl
Поместите её в конце световой дорожки.
2. Поместите prop_indicator_panel в том же месте, что и sign_frame01.mdl
. Теперь решите, сколько времени запускаемая энтити будет активна. В данном руководстве мы выберем 8 секунд, так что добавим следующие свойства:
Свойство Значение Name checktime_indlights_1 Timer Duration 8 Start visible? Yes Is a timer Yes Is checked No Indicator Lights indlights_1

3. Добавьте кнопку со следующими свойствами:
Property Name Value Name button_01 Delay Before Reset 8 Play timer sound? Yes Prevent fast reset? No
Заданное в поле 'Delay Before Reset' время сообщит кнопке, сколько времени должен тикать таймер. Задание 'Prevent fast reset?' на значение 'No' позволит нажать кнопку ещё раз в ходе работы таймера. Это позволит игроку перезапустить таймер, чтобы успеть сделать нужные действия.

4. И последнее, что нужно сделать для работы таймера, добавить этот выход на вкладке Output:
My Output > Target Entity Target Input Parameter Delay Only Once OnPressed checktime_indlights_1 Start 0.00 No
Таймер будет сбрасываться автоматически по истечении заданного времени. Однако, вы можете добавить команду 'Stop', чтобы остановить таймер в его текущем состоянии или чтобы отправить выход 'Reset' для сброса таймера вручную.
Индикаторные огни старой лаборатории
В браузере текстур выберите текстуру для огней (введите "neon" в фильтр).
Мы возьмём "signage/indicator_lights/indicator_neon_straight
"

Как вы могли заметить, стандартный размер текстуры огней гораздо больше, чем должен быть. Чтобы это исправить, включите флаг 'Texture Lock', и в одном из двухмерных видов уменьшайте размер оверлея, пока он не станет размером 16x16. Теперь вернитесь к шагу 2 в создании индикаторной дорожки и триггеров.
Рамка с галочкой старой лаборатории
Создайте блок браша размером 32Wx2Lx32H с текстурой tools/toolsnodraw. Спереди поместите оверлей signage/indicator_lights/indicator_neon_check
, стороны покройте текстурой plastic/plastickwall004a_dirty
. Проверьте, что установлен флаг 'Texture Lock', и подгоните размер оверлея по брашу. Переместите браш в конец индикаторной дорожки.
Преобразуйте браш в энтити func_brush и дайте ей то же имя, что было у ваших энтитей info_overlay.
Теперь всё должно работать.
Завершение
Чтобы добавить звук мерцающих неоновых огней, просто поместите ambient_generic на панель с галочкой со следующими свойствами:
Свойство Значение Name <имя_индикаторных_огней>_sound Sound Name VFX.OGSignFlicker
Проверьте, чтобы на вкладке флагов он НЕ был зациклен (looped)? и добавьте ещё один выход к активатору: