Ru/Disc Room: Difference between revisions
m (obsolete language category) |
|||
(19 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{lang|title=Комната с диском (Portal 2)|Disc Room}} | ||
|title=Комната с диском (Portal 2) | |||
| | [[File:Insert disk.jpg|thumb|right|350px|"Иногда испытания должны проходить за пределами лаборатории."<br>- '''ГЛэДОС''']] | ||
}} | |||
[[ | |||
{{portal2}} '''Комната с диском''' - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом. | {{portal2}} '''Комната с диском''' - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом. | ||
== Источник дисков == | == Источник дисков == | ||
'''Источник дисков''' - устройство, создающее диски. Оно восстанавливает копию диска, если он был утерян или растворён. Обычно оно находится рядом с '''получателем диска''' в конце последней камеры серии кооперативного режима. Однако, помещать его там совершенно не обязательно; если поместить источник в начале камеры, могут получиться интересные головоломки, главной задачей которых станет не потерять диск. | '''Источник дисков''' - устройство, создающее диски. Оно восстанавливает копию диска, если он был утерян или растворён. Обычно оно находится рядом с '''получателем диска''' в конце последней камеры серии кооперативного режима. Однако, помещать его там совершенно не обязательно; если поместить источник в начале камеры, могут получиться интересные головоломки, главной задачей которых станет не потерять диск. | ||
=== Шаг 1 - настройка === | === Шаг 1 - настройка === | ||
[[ | [[File:Disk emitter1.jpg|350px|thumb|right|Привязка к [[Basic Construction#Сетка|сетке]]: 2]] | ||
Создайте | Создайте {{L|prop_static}} и выберите для неё модель <code>models/props_gameplay/laser_disc_player.mdl</code> и поместите её где-нибудь в комнате. Отсюда игроки будут брать диск. | ||
Теперь создайте диск, это энтити | Теперь создайте диск, это энтити {{L|prop_dynamic_override}}. Настройте её {{L|Hammer Object Properties Dialog|свойства}} так: | ||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 25: | Line 23: | ||
Поместите диск внутри модели устройства, как показано на иллюстрации справа. | Поместите диск внутри модели устройства, как показано на иллюстрации справа. | ||
Теперь создайте браш размером 8x20x1 с текстурой <code>tools/toolsinvisible</code>. Поместите его сверху модели диска, снова, как на иллюстрации справа. Преобразуйте браш в энтити (нажатием {{key|Ctrl|T}}) и сделайте её | Теперь создайте браш размером 8x20x1 с текстурой <code>tools/toolsinvisible</code>. Поместите его сверху модели диска, снова, как на иллюстрации справа. Преобразуйте браш в энтити (нажатием {{key|Ctrl|T}}) и сделайте её {{L|func_door}}. И задайте её свойства следующим образом: | ||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 41: | Line 39: | ||
| Move Direction || 0 0 0 | | Move Direction || 0 0 0 | ||
|} | |} | ||
{{Note | {{Note|Свойство Move Direction нужно задать на {{L|QAngle|Pitch Yaw Roll}}, указанные в <code>laser_disc_player.mdl</code>.}} | ||
Создайте ещё одну энтити, | Создайте ещё одну энтити, {{L|prop_physics_override}}, она будет диском, переносимым игроками. Нажмите {{Key|Shift}} и перетащите ''start_disc'' так, чтобы диск находился вне устройства, и чтобы только его 'край' касался щели устройства. Измените "Class" на prop_physics_override и назовите "disc". | ||
=== Шаг 2 - воссоздание диска === | === Шаг 2 - воссоздание диска === | ||
Создадим шаблон, по которому диск будет восстановлен в случае его утери игроками. | Создадим шаблон, по которому диск будет восстановлен в случае его утери игроками. | ||
{{Note | {{Note|Этот шаг не является обязательным условием работы источника дисков, перейдите к шагу 3, если в вашей карте диск нигде не потеряется.}} | ||
Создайте | Создайте {{L|point_template}} со следующими свойствами: | ||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 69: | Line 67: | ||
=== Шаг 3 - система выходов === | === Шаг 3 - система выходов === | ||
[[ | [[File:Disk emitter2.jpg|350px|thumb|right|Теперь включено всё.<br>Привязка к [[Basic Construction#Сетка|сетке]]: 8]] | ||
После создания всех энтитей нужно заставить источник работать, осталось подключить действия энтитей для создания диска; свяжем несколько | После создания всех энтитей нужно заставить источник работать, осталось подключить действия энтитей для создания диска; свяжем несколько {{L|Inputs_and_Outputs|входов и выходов}}! | ||
<br>Сначала создайте | <br>Сначала создайте {{L|logic_auto}} со следующим выходом: | ||
:{| 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 77: | Line 75: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnMapSpawn || template_disk_spawn || ForceSpawn || || 0.00 || No | ||
|} | |} | ||
{{ | {{tip|Эта энтити будет использоваться в дальнейшем, не забудьте про неё.}} | ||
В свойствах '''spawner_door''' откройте вкладку '[[Inputs and Outputs | В свойствах '''spawner_door''' откройте вкладку '[[Inputs and Outputs#Output'ы|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 87: | Line 85: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnFullyOpen || start_disc || ClearParent || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnFullyOpen || start_disc || TurnOff || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnFullyOpen || template_disc || ForceSpawn || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnFullyOpen || start_disc || Kill || || 0.10 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnFullyOpen || spawner_door || Kill || || 0.10 || No | ||
|} | |} | ||
Line 105: | Line 103: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnEntitySpawned || spawner_door || Open || || 0.00 || No | ||
|} | |} | ||
Line 114: | Line 112: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || template_disk_spawn || ForceSpawn || || 0.00 || No | ||
|} | |} | ||
{{ | {{tip|Как правило, рекомендуется, чтобы уничтожаемая энтити сообщала диску, чтобы он вызвал выход. Например, когда диск растворяется {{L|Emancipation Grid|полем антиэкспроприации}}, он вызывает выход OnDissolve. Поэтому проверьте, чтобы не было других физических объектов, которые можно растворить полем.}} | ||
Теперь источник должен работать и поставлять новые диски при утере имеющегося. Однако, это лишь треть процесса создания работающей комнаты с диском. | Теперь источник должен работать и поставлять новые диски при утере имеющегося. Однако, это лишь треть процесса создания работающей комнаты с диском. | ||
== Получатель диска == | == Получатель диска == | ||
'''Получатель диска''' (или '''проигрыватель диска''') - устройство, для которого предназначается диск; при вставке диска в получатель проигрывается видео с информацией, которую искала ГЛэДОС. | |||
=== Шаг 1 - | === Шаг 1 - установка === | ||
[[ | [[File:Disk loader1.jpg|350px|thumb|right|Привязка к [[Basic Construction#Сетка|сетке]]: 2]] | ||
Поместите prop_static в комнату и выберите модель <code>models/props_gameplay/laser_disc_player.mdl</code>. Здесь, в конце уровня, игроки вставят диск. | |||
Когда игрок помещает диск возле приёмника, диск, который игрок носил ранее, будет удалён, и загрузится другой, невидимый диск. Мы сделаем именно так, чтобы лучше контролировать, как диск войдет в приёмник, и чтобы просто избежать многих проблем. Потребуется ещё одна '''prop_dynamic_override''', она будет загружена в устройство, будучи прикреплённой к func_door. | |||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 140: | Line 138: | ||
| Name || hidden_disc | | Name || hidden_disc | ||
|} | |} | ||
Диск нужно разместить так, как показано на иллюстрации справа. | |||
Теперь создайте браш func_door с текстурой <code>tools/toolsinvisible</code>. Поместите его сверху на модель диска как на иллюстрации справа. Добавьте следующие свойства: | |||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 158: | Line 156: | ||
| Move Direction || 0 180 0 | | Move Direction || 0 180 0 | ||
|} | |} | ||
{{Note| | {{Note|Свойство Move Direction нужно задать на Pitch Yaw Roll, противоположные тем, что были заданы для laser_disc_player.mdl.}} | ||
{{Note| | {{Note|Длина браша func_door зависит от того, насколько вы хотите, чтобы диск ушёл внутрь; радиус диска - 25 единиц, исходите из этого. На иллюстрации выше браш имеет длину 26 единиц, что позволяет всему диску уйти внутрь.}} | ||
=== Шаг 2 - | === Шаг 2 - загрузка === | ||
На первом шаге создавались видимые энтити получателя, в этом шаге - невидимые энтити. | |||
<br> | <br>Первая - браш {{L|trigger_once}}, а вторая - {{L|filter_activator_name}}. И добавьте следующие свойства: | ||
1. | 1. В '''trigger_once''': | ||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 173: | Line 171: | ||
| Filter Name || disc_filter | | Filter Name || disc_filter | ||
|} | |} | ||
Установите флаг '''Physics Objects'''. | |||
2. | 2. В '''filter_activator_name''': | ||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 184: | Line 182: | ||
|} | |} | ||
=== Шаг 3 - | === Шаг 3 - система выходов === | ||
Чтобы всё взаимодействовало, используем систему входов/выходов. Помните ту logic_auto, что мы использовали ранее? В её свойствах откройте вкладку "Outputs" и добавьте следующие свойства: | |||
:{| 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 192: | Line 190: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnMapSpawn || hidden_disc || TurnOff || || 0.00 || No | ||
|} | |} | ||
Добавьте следующий вход в trigger_once: | |||
:{| 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 201: | Line 199: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnStartTouch || hidden_disc || TurnOn || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io13.png]] || OnStartTouch || !activator || Kill || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnStartTouch || loader_door || Open || || 0.00 || No | ||
|} | |} | ||
{{Note| | {{Note|{{L|Hammer}} может выделить команду !activator как ошибочную. Игнорируйте ошибку, в игре всё работает нормально.}} | ||
Добавьте один выход в энтити loader_door: | |||
:{| 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 215: | Line 213: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io12.png]] || OnFullyOpen || disc_loaded_relay || Trigger || || 0.00 || No | ||
|} | |} | ||
{{Note| | {{Note|Мы пока ещё не создали энтити disc_loaded_relay, поэтому в данный момент этот выход будет показываться как ошибочный.}} | ||
Теперь получатель должен работать и принимать вставляемый диск. До завершения создания комнаты с диском ещё далеко. | |||
== Проецирование видеоролика == | == Проецирование видеоролика == | ||
[[ | [[File:Coop bts blueprints.jpg|thumb|right|300px|В этой части начинается магия.]] | ||
'''Проецируемый ролик''' - это показ фильма, включающий взрыв роботов в конце. | |||
=== Шаг 1 - настройка видеоролика === | === Шаг 1 - настройка видеоролика === | ||
Создайте prop_static с моделью <code>projector_screen.mdl</code> (Легче найти, введя "projector" в поле фильтрации моделей). В её нижнем левом углу поместите {{L|vgui_movie_display}} со следующими свойствами: | |||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 245: | Line 243: | ||
|} | |} | ||
Снова откройте свойства logic_auto и добавьте следующие выходы: | |||
:{| 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 251: | Line 249: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnMapSpawn || insert_disc_movie || Enable || || 0.00 || No | ||
|} | |} | ||
Создайте ещё одну энтити vgui_movie_display в том же самом месте, что и предыдущая (Просто протащите уже созданную с нажатой {{key|shift}} в сторону, а затем верните на место). Единственным отличием будет имя и видео, отображаемое ей: | |||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 274: | Line 272: | ||
=== Шаг 2 - поднимаем железный занавес === | === Шаг 2 - поднимаем железный занавес === | ||
[[ | [[File:Projector Screen.jpg|thumb|right|300px|Примерно так всё это должно выглядеть.]] | ||
Помните ту энтити '''disc_loaded_relay''', которую мы использовали, ещё не создав? Теперь пришла и её очередь. Сперва создайте {{L|logic_relay}} и назовите её disc_loaded_relay. Откройте вкладку "Outputs" и добавьте следующие свойства: | |||
:{| 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 281: | Line 279: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || insert_disc_movie || Disable || || 2.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || aperture_movie || Enable || || 2.00 || No | ||
|} | |} | ||
Создайте {{L|ambient_generic}} с этими свойствами: | |||
::{| class=standard-table | ::{| class=standard-table | ||
Line 296: | Line 294: | ||
|} | |} | ||
И добавьте в disc_loaded_relay ещё один выход: | |||
:{| 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 302: | Line 300: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || disc_windup_sound || PlaySound || || 0.00 || No | ||
|} | |} | ||
И наконец-таки всё должно работать! | |||
== Завершение == | == Завершение == | ||
* | * Добавьте экземпляр и в качестве VMF Filename укажите <code>coop_lighting_ents.vmf</code>. Отсюда вы можете выбрать варианты тумана в вашей карте (его плотность, цвет и т.д.). Однако, в этом экземпляре более важны четыре {{L|env_global}}, каждая может разрешать или запрещать использование сигнального и указывающего устройства роботов. При загрузке диска должна активироваться '''logic_relay''' с четыремя выходами: | ||
:{| 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 315: | Line 312: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || @global_no_taunting_blue || TurnOn || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || @global_no_pinging_blue || TurnOn || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || @global_no_taunting_orange || TurnOn || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || @global_no_pinging_orange || TurnOn || || 0.00 || No | ||
|} | |} | ||
* | * Создайте {{L|trigger_hurt}} со значением Damage равным 10000. Эта энтити должна охватывать всю комнату, но не забудьте выключить её. В подходящий момент, например, когда ГЛэДОС говорит последнюю фразу, активируйте браш trigger_hurt, чтобы роботы взорвались. | ||
* | * Поместите в комнату {{L|point_clientcommand}} со следующими настройками: | ||
::{| class=standard-table | ::{| class=standard-table | ||
! Свойство || Значение | ! Свойство || Значение | ||
Line 332: | Line 329: | ||
|} | |} | ||
Добавьте в trigger_hurt этот выход: | |||
:{| border=1 cellpadding="2" cellspacing="1" | :{| border=1 cellpadding="2" cellspacing="1" | ||
Line 339: | Line 336: | ||
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnHurt || levelchange || command || changelevel {распределитель или следующая камера} || 0.00 || No | ||
|} | |} | ||
* | * Поместите статическую модель лицом к экрану с моделью <code>models/props_underground/projector.mdl</code>. В проекторе создайте три {{L|point_spotlight}} в соответствующих местах. | ||
* | * Обычно в комнатах с диском имеется доска (<code>models/props_office/whiteboard_coop.mdl</code>) с требованием не вставлять диск. Для соответствия картам Valve рекомендуется создать и её. Есть 6 различных вариантов. | ||
{{ACategory|Portal 2 Level Design}} | |||
{{ACategory|Portal 2 Tutorials}} |
Latest revision as of 03:44, 22 August 2024
Комната с диском - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом.
Источник дисков
Источник дисков - устройство, создающее диски. Оно восстанавливает копию диска, если он был утерян или растворён. Обычно оно находится рядом с получателем диска в конце последней камеры серии кооперативного режима. Однако, помещать его там совершенно не обязательно; если поместить источник в начале камеры, могут получиться интересные головоломки, главной задачей которых станет не потерять диск.
Шаг 1 - настройка

Создайте prop_static и выберите для неё модель models/props_gameplay/laser_disc_player.mdl
и поместите её где-нибудь в комнате. Отсюда игроки будут брать диск.
Теперь создайте диск, это энтити prop_dynamic_override . Настройте её свойства так:
Свойство Значение Name start_disc Parent spawner_door World Model laser_disc.mdl Disable Shadows Yes
Поместите диск внутри модели устройства, как показано на иллюстрации справа.
Теперь создайте браш размером 8x20x1 с текстурой tools/toolsinvisible
. Поместите его сверху модели диска, снова, как на иллюстрации справа. Преобразуйте браш в энтити (нажатием Ctrl+T) и сделайте её func_door . И задайте её свойства следующим образом:
Свойство Значение Name spawner_door Speed 26 Start Sound World.LaserDiskLoad Delay Before Reset (-1 stay) -1 Loop Moving Sound Yes Move Direction 0 0 0

laser_disc_player.mdl
.Создайте ещё одну энтити, prop_physics_override , она будет диском, переносимым игроками. Нажмите ⇧ Shift и перетащите start_disc так, чтобы диск находился вне устройства, и чтобы только его 'край' касался щели устройства. Измените "Class" на prop_physics_override и назовите "disc".
Шаг 2 - воссоздание диска
Создадим шаблон, по которому диск будет восстановлен в случае его утери игроками.

Создайте point_template со следующими свойствами:
Свойство Значение Name template_disc_spawn Template 1 start_disc Template 2 spawner_door
Создайте ещё одну point_template с этими свойствами:
Свойство Значение Name template_disc Template 1 disc
Шаг 3 - система выходов
После создания всех энтитей нужно заставить источник работать, осталось подключить действия энтитей для создания диска; свяжем несколько входов и выходов !
Сначала создайте logic_auto со следующим выходом:
My Output > Target Entity Target Input Parameter Delay Only Once OnMapSpawn template_disk_spawn ForceSpawn 0.00 No

В свойствах spawner_door откройте вкладку 'Output' и добавьте следующие свойства:
Теперь добавьте выход в template_disc_spawn:
My Output > Target Entity Target Input Parameter Delay Only Once OnEntitySpawned spawner_door Open 0.00 No
Энтити, определяющая, когда диск теряется или уничтожается, должна иметь следующий выход:
My Output > Target Entity Target Input Parameter Delay Only Once OnTrigger template_disk_spawn ForceSpawn 0.00 No

Теперь источник должен работать и поставлять новые диски при утере имеющегося. Однако, это лишь треть процесса создания работающей комнаты с диском.
Получатель диска
Получатель диска (или проигрыватель диска) - устройство, для которого предназначается диск; при вставке диска в получатель проигрывается видео с информацией, которую искала ГЛэДОС.
Шаг 1 - установка

Поместите prop_static в комнату и выберите модель models/props_gameplay/laser_disc_player.mdl
. Здесь, в конце уровня, игроки вставят диск.
Когда игрок помещает диск возле приёмника, диск, который игрок носил ранее, будет удалён, и загрузится другой, невидимый диск. Мы сделаем именно так, чтобы лучше контролировать, как диск войдет в приёмник, и чтобы просто избежать многих проблем. Потребуется ещё одна prop_dynamic_override, она будет загружена в устройство, будучи прикреплённой к func_door.
Свойство Значение Parent loader_door Disable Shadows Yes World Model laser_disc.mdl Name hidden_disc
Диск нужно разместить так, как показано на иллюстрации справа.
Теперь создайте браш func_door с текстурой tools/toolsinvisible
. Поместите его сверху на модель диска как на иллюстрации справа. Добавьте следующие свойства:
Свойство Значение Name loader_door Speed 8 Start Sound World.LaserDiskLoad Delay Before Reset (-1 stay) -1 Loop Moving Sound Yes Move Direction 0 180 0


Шаг 2 - загрузка
На первом шаге создавались видимые энтити получателя, в этом шаге - невидимые энтити.
Первая - браш trigger_once , а вторая - filter_activator_name . И добавьте следующие свойства:
1. В trigger_once:
Свойство Значение Name Filter Name disc_filter
Установите флаг Physics Objects.
2. В filter_activator_name:
Свойство Значение Name disc_filter Filter Name disc
Шаг 3 - система выходов
Чтобы всё взаимодействовало, используем систему входов/выходов. Помните ту logic_auto, что мы использовали ранее? В её свойствах откройте вкладку "Outputs" и добавьте следующие свойства:
My Output > Target Entity Target Input Parameter Delay Only Once OnMapSpawn hidden_disc TurnOff 0.00 No
Добавьте следующий вход в trigger_once:
My Output > Target Entity Target Input Parameter Delay Only Once OnStartTouch hidden_disc TurnOn 0.00 No OnStartTouch !activator Kill 0.00 No OnStartTouch loader_door Open 0.00 No

Добавьте один выход в энтити loader_door:
My Output > Target Entity Target Input Parameter Delay Only Once OnFullyOpen disc_loaded_relay Trigger 0.00 No

Теперь получатель должен работать и принимать вставляемый диск. До завершения создания комнаты с диском ещё далеко.
Проецирование видеоролика
Проецируемый ролик - это показ фильма, включающий взрыв роботов в конце.
Шаг 1 - настройка видеоролика
Создайте prop_static с моделью projector_screen.mdl
(Легче найти, введя "projector" в поле фильтрации моделей). В её нижнем левом углу поместите vgui_movie_display со следующими свойствами:
Свойство Значение Name insert_disc_movie Movie Filename media/insert_disk.bik Loop Movie Yes Stretch to Fill Yes Force precache Yes Panel width 156 Panel height 112
Снова откройте свойства logic_auto и добавьте следующие выходы:
My Output > Target Entity Target Input Parameter Delay Only Once OnMapSpawn insert_disc_movie Enable 0.00 No
Создайте ещё одну энтити vgui_movie_display в том же самом месте, что и предыдущая (Просто протащите уже созданную с нажатой ⇧ Shift в сторону, а затем верните на место). Единственным отличием будет имя и видео, отображаемое ей:
Свойство Значение Name aperture_movie Movie Filename media/coop_bts_blueprints.bik Loop Movie Yes Stretch to Fill Yes Force precache Yes Panel width 156 Panel height 112
Шаг 2 - поднимаем железный занавес
Помните ту энтити disc_loaded_relay, которую мы использовали, ещё не создав? Теперь пришла и её очередь. Сперва создайте logic_relay и назовите её disc_loaded_relay. Откройте вкладку "Outputs" и добавьте следующие свойства:
My Output > Target Entity Target Input Parameter Delay Only Once OnTrigger insert_disc_movie Disable 2.00 No OnTrigger aperture_movie Enable 2.00 No
Создайте ambient_generic с этими свойствами:
Свойство Значение Name disc_windup_sound Sound Name World.LaserDiskPowerUp
И добавьте в disc_loaded_relay ещё один выход:
My Output > Target Entity Target Input Parameter Delay Only Once OnTrigger disc_windup_sound PlaySound 0.00 No
И наконец-таки всё должно работать!
Завершение
- Добавьте экземпляр и в качестве VMF Filename укажите
coop_lighting_ents.vmf
. Отсюда вы можете выбрать варианты тумана в вашей карте (его плотность, цвет и т.д.). Однако, в этом экземпляре более важны четыре env_global , каждая может разрешать или запрещать использование сигнального и указывающего устройства роботов. При загрузке диска должна активироваться logic_relay с четыремя выходами:
- Создайте trigger_hurt со значением Damage равным 10000. Эта энтити должна охватывать всю комнату, но не забудьте выключить её. В подходящий момент, например, когда ГЛэДОС говорит последнюю фразу, активируйте браш trigger_hurt, чтобы роботы взорвались.
- Поместите в комнату point_clientcommand со следующими настройками:
Свойство Значение Name levelchange
Добавьте в trigger_hurt этот выход:
My Output > Target Entity Target Input Parameter Delay Only Once OnHurt levelchange command changelevel {распределитель или следующая камера} 0.00 No
- Поместите статическую модель лицом к экрану с моделью
models/props_underground/projector.mdl
. В проекторе создайте три point_spotlight в соответствующих местах. - Обычно в комнатах с диском имеется доска (
models/props_office/whiteboard_coop.mdl
) с требованием не вставлять диск. Для соответствия картам Valve рекомендуется создать и её. Есть 6 различных вариантов.