Ru/Disc Room: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
m ({{Note}} instead of {{Note:ru}})
m (obsolete language category)
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{lang|title=Комната с диском (Portal 2)|Disc Room}}
{{lang|title=Комната с диском (Portal 2)|Disc Room}}


[[Image:Insert disk.jpg|thumb|right|350px|"Иногда испытания должны проходить за пределами лаборатории."<br>- '''ГЛэДОС''']]
[[File:Insert disk.jpg|thumb|right|350px|"Иногда испытания должны проходить за пределами лаборатории."<br>- '''ГЛэДОС''']]
{{portal2}} '''Комната с диском''' - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом.
{{portal2}} '''Комната с диском''' - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом.
== Источник дисков ==
== Источник дисков ==
'''Источник дисков''' - устройство, создающее диски. Оно восстанавливает копию диска, если он был утерян или растворён. Обычно оно находится рядом с '''получателем диска''' в конце последней камеры серии кооперативного режима. Однако, помещать его там совершенно не обязательно; если поместить источник в начале камеры, могут получиться интересные головоломки, главной задачей которых станет не потерять диск.  
'''Источник дисков''' - устройство, создающее диски. Оно восстанавливает копию диска, если он был утерян или растворён. Обычно оно находится рядом с '''получателем диска''' в конце последней камеры серии кооперативного режима. Однако, помещать его там совершенно не обязательно; если поместить источник в начале камеры, могут получиться интересные головоломки, главной задачей которых станет не потерять диск.  
=== Шаг 1 - настройка ===
=== Шаг 1 - настройка ===
[[Image:Disk emitter1.jpg|350px|thumb|right|Привязка к [[Basic Construction#Сетка|сетке]]: 2]]
[[File:Disk emitter1.jpg|350px|thumb|right|Привязка к [[Basic Construction#Сетка|сетке]]: 2]]
Создайте [[prop_static]] и выберите для неё модель <code>models/props_gameplay/laser_disc_player.mdl</code> и поместите её где-нибудь в комнате. Отсюда игроки будут брать диск.
Создайте {{L|prop_static}} и выберите для неё модель <code>models/props_gameplay/laser_disc_player.mdl</code> и поместите её где-нибудь в комнате. Отсюда игроки будут брать диск.


Теперь создайте диск, это энтити [[prop_dynamic_override]]. Настройте её [[Hammer Object Properties Dialog|свойства]] так:
Теперь создайте диск, это энтити {{L|prop_dynamic_override}}. Настройте её {{L|Hammer Object Properties Dialog|свойства}} так:
::{| class=standard-table
::{| class=standard-table
!  Свойство || Значение
!  Свойство || Значение
Line 23: Line 23:
Поместите диск внутри модели устройства, как показано на иллюстрации справа.
Поместите диск внутри модели устройства, как показано на иллюстрации справа.


Теперь создайте браш размером 8x20x1 с текстурой <code>tools/toolsinvisible</code>. Поместите его сверху модели диска, снова, как на иллюстрации справа. Преобразуйте браш в энтити (нажатием {{key|Ctrl|T}}) и сделайте её [[func_door]]. И задайте её свойства следующим образом:
Теперь создайте браш размером 8x20x1 с текстурой <code>tools/toolsinvisible</code>. Поместите его сверху модели диска, снова, как на иллюстрации справа. Преобразуйте браш в энтити (нажатием {{key|Ctrl|T}}) и сделайте её {{L|func_door}}. И задайте её свойства следующим образом:
::{| class=standard-table
::{| class=standard-table
!  Свойство || Значение
!  Свойство || Значение
Line 39: Line 39:
| Move Direction || 0 0 0
| Move Direction || 0 0 0
|}
|}
{{Note|Свойство Move Direction нужно задать на [[QAngle|Pitch Yaw Roll]], указанные в <code>laser_disc_player.mdl</code>.}}  
{{Note|Свойство Move Direction нужно задать на {{L|QAngle|Pitch Yaw Roll}}, указанные в <code>laser_disc_player.mdl</code>.}}  
Создайте ещё одну энтити, [[prop_physics_override]], она будет диском, переносимым игроками. Нажмите {{Key|Shift}} и перетащите ''start_disc'' так, чтобы диск находился вне устройства, и чтобы только его 'край' касался щели устройства. Измените "Class" на prop_physics_override и назовите "disc".
Создайте ещё одну энтити, {{L|prop_physics_override}}, она будет диском, переносимым игроками. Нажмите {{Key|Shift}} и перетащите ''start_disc'' так, чтобы диск находился вне устройства, и чтобы только его 'край' касался щели устройства. Измените "Class" на prop_physics_override и назовите "disc".


=== Шаг 2 - воссоздание диска ===
=== Шаг 2 - воссоздание диска ===
Line 46: Line 46:
{{Note|Этот шаг не является обязательным условием работы источника дисков, перейдите к шагу 3, если в вашей карте диск нигде не потеряется.}}
{{Note|Этот шаг не является обязательным условием работы источника дисков, перейдите к шагу 3, если в вашей карте диск нигде не потеряется.}}


Создайте [[point_template]] со следующими свойствами:  
Создайте {{L|point_template}} со следующими свойствами:  
::{| class=standard-table
::{| class=standard-table
!  Свойство || Значение
!  Свойство || Значение
Line 67: Line 67:


=== Шаг 3 - система выходов ===
=== Шаг 3 - система выходов ===
[[Image:Disk emitter2.jpg|350px|thumb|right|Теперь включено всё.<br>Привязка к [[Basic Construction#Сетка|сетке]]: 8]]
[[File:Disk emitter2.jpg|350px|thumb|right|Теперь включено всё.<br>Привязка к [[Basic Construction#Сетка|сетке]]: 8]]
После создания всех энтитей нужно заставить источник работать, осталось подключить действия энтитей для создания диска; свяжем несколько [[Inputs_and_Outputs|входов и выходов]]!
После создания всех энтитей нужно заставить источник работать, осталось подключить действия энтитей для создания диска; свяжем несколько {{L|Inputs_and_Outputs|входов и выходов}}!
<br>Сначала создайте [[logic_auto]] со следующим выходом:
<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 75: Line 75:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnMapSpawn || template_disk_spawn || ForceSpawn || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnMapSpawn || template_disk_spawn || ForceSpawn || &nbsp; || 0.00 || No
|}
|}
{{Tip:ru|Эта энтити будет использоваться в дальнейшем, не забудьте про неё.}}
{{tip|Эта энтити будет использоваться в дальнейшем, не забудьте про неё.}}


В свойствах '''spawner_door''' откройте вкладку '[[Inputs and Outputs#Output'ы|Output]]' и добавьте следующие свойства:
В свойствах '''spawner_door''' откройте вкладку '[[Inputs and Outputs#Output'ы|Output]]' и добавьте следующие свойства:
Line 85: Line 85:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnFullyOpen || start_disc || ClearParent || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnFullyOpen || start_disc || ClearParent || &nbsp; || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnFullyOpen || start_disc || TurnOff || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnFullyOpen || start_disc || TurnOff || &nbsp; || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnFullyOpen || template_disc || ForceSpawn || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnFullyOpen || template_disc || ForceSpawn || &nbsp; || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnFullyOpen || start_disc || Kill || &nbsp; || 0.10 || No
| [[File:Io11.png]] || OnFullyOpen || start_disc || Kill || &nbsp; || 0.10 || No
|-
|-
| [[Image:Io11.png]] || OnFullyOpen || spawner_door || Kill || &nbsp; || 0.10 || No
| [[File:Io11.png]] || OnFullyOpen || spawner_door || Kill || &nbsp; || 0.10 || No
|}
|}


Line 103: Line 103:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnEntitySpawned || spawner_door || Open || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnEntitySpawned || spawner_door || Open || &nbsp; || 0.00 || No
|}
|}


Line 112: Line 112:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnTrigger || template_disk_spawn || ForceSpawn || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnTrigger || template_disk_spawn || ForceSpawn || &nbsp; || 0.00 || No
|}
|}


{{Tip:ru|Как правило, рекомендуется, чтобы уничтожаемая энтити сообщала диску, чтобы он вызвал выход. Например, когда диск растворяется [[Emancipation Grid:ru|полем антиэкспроприации]], он вызывает выход OnDissolve. Поэтому проверьте, чтобы не было других физических объектов, которые можно растворить полем.}}
{{tip|Как правило, рекомендуется, чтобы уничтожаемая энтити сообщала диску, чтобы он вызвал выход. Например, когда диск растворяется {{L|Emancipation Grid|полем антиэкспроприации}}, он вызывает выход OnDissolve. Поэтому проверьте, чтобы не было других физических объектов, которые можно растворить полем.}}
Теперь источник должен работать и поставлять новые диски при утере имеющегося. Однако, это лишь треть процесса создания работающей комнаты с диском.
Теперь источник должен работать и поставлять новые диски при утере имеющегося. Однако, это лишь треть процесса создания работающей комнаты с диском.


Line 123: Line 123:


=== Шаг 1 - установка ===
=== Шаг 1 - установка ===
[[Image:Disk loader1.jpg|350px|thumb|right|Привязка к [[Basic Construction#Сетка|сетке]]: 2]]
[[File:Disk loader1.jpg|350px|thumb|right|Привязка к [[Basic Construction#Сетка|сетке]]: 2]]
Поместите prop_static в комнату и выберите модель <code>models/props_gameplay/laser_disc_player.mdl</code>. Здесь, в конце уровня, игроки вставят диск.  
Поместите prop_static в комнату и выберите модель <code>models/props_gameplay/laser_disc_player.mdl</code>. Здесь, в конце уровня, игроки вставят диск.  


Line 161: Line 161:
=== Шаг 2 - загрузка ===
=== Шаг 2 - загрузка ===
На первом шаге создавались видимые энтити получателя, в этом шаге - невидимые энтити.
На первом шаге создавались видимые энтити получателя, в этом шаге - невидимые энтити.
<br>Первая - браш [[trigger_once]], а вторая - [[filter_activator_name]]. И добавьте следующие свойства:
<br>Первая - браш {{L|trigger_once}}, а вторая - {{L|filter_activator_name}}. И добавьте следующие свойства:


1. В '''trigger_once''':  
1. В '''trigger_once''':  
Line 190: Line 190:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnMapSpawn || hidden_disc || TurnOff || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnMapSpawn || hidden_disc || TurnOff || &nbsp; || 0.00 || No
|}
|}


Line 199: Line 199:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnStartTouch || hidden_disc || TurnOn || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnStartTouch || hidden_disc || TurnOn || &nbsp; || 0.00 || No
|-
|-
| [[Image:Io13.png]] || OnStartTouch || !activator || Kill || &nbsp; || 0.00 || No
| [[File:Io13.png]] || OnStartTouch || !activator || Kill || &nbsp; || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnStartTouch || loader_door || Open || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnStartTouch || loader_door || Open || &nbsp; || 0.00 || No
|}
|}
{{Note|[[Hammer]] может выделить команду !activator как ошибочную. Игнорируйте ошибку, в игре всё работает нормально.}}
{{Note|{{L|Hammer}} может выделить команду !activator как ошибочную. Игнорируйте ошибку, в игре всё работает нормально.}}


Добавьте один выход в энтити loader_door:
Добавьте один выход в энтити loader_door:
Line 213: Line 213:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io12.png]] || OnFullyOpen || disc_loaded_relay || Trigger || &nbsp; || 0.00 || No
| [[File:Io12.png]] || OnFullyOpen || disc_loaded_relay || Trigger || &nbsp; || 0.00 || No
|}
|}
{{Note|Мы пока ещё не создали энтити disc_loaded_relay, поэтому в данный момент этот выход будет показываться как ошибочный.}}
{{Note|Мы пока ещё не создали энтити disc_loaded_relay, поэтому в данный момент этот выход будет показываться как ошибочный.}}
Line 220: Line 220:


== Проецирование видеоролика ==
== Проецирование видеоролика ==
[[Image:Coop bts blueprints.jpg|thumb|right|300px|В этой части начинается магия.]]
[[File:Coop bts blueprints.jpg|thumb|right|300px|В этой части начинается магия.]]
'''Проецируемый ролик''' - это показ фильма, включающий взрыв роботов в конце.
'''Проецируемый ролик''' - это показ фильма, включающий взрыв роботов в конце.


=== Шаг 1 - настройка видеоролика ===
=== Шаг 1 - настройка видеоролика ===
Создайте prop_static с моделью <code>projector_screen.mdl</code>  (Легче найти, введя "projector" в поле фильтрации моделей). В её нижнем левом углу поместите [[vgui_movie_display]] со следующими свойствами:
Создайте prop_static с моделью <code>projector_screen.mdl</code>  (Легче найти, введя "projector" в поле фильтрации моделей). В её нижнем левом углу поместите {{L|vgui_movie_display}} со следующими свойствами:
::{| class=standard-table
::{| class=standard-table
!  Свойство || Значение
!  Свойство || Значение
Line 249: Line 249:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnMapSpawn || insert_disc_movie || Enable || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnMapSpawn || insert_disc_movie || Enable || &nbsp; || 0.00 || No
|}
|}


Line 272: Line 272:


=== Шаг 2 - поднимаем железный занавес ===
=== Шаг 2 - поднимаем железный занавес ===
[[Image:Projector Screen.jpg|thumb|right|300px|Примерно так всё это должно выглядеть.]]
[[File:Projector Screen.jpg|thumb|right|300px|Примерно так всё это должно выглядеть.]]
Помните ту энтити '''disc_loaded_relay''', которую мы использовали, ещё не создав? Теперь пришла и её очередь. Сперва создайте [[logic_relay]] и назовите её disc_loaded_relay. Откройте вкладку "Outputs" и добавьте следующие свойства:
Помните ту энтити '''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 279: Line 279:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnTrigger || insert_disc_movie || Disable || &nbsp; || 2.00 || No
| [[File:Io11.png]] || OnTrigger || insert_disc_movie || Disable || &nbsp; || 2.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || aperture_movie || Enable || &nbsp; || 2.00 || No
| [[File:Io11.png]] || OnTrigger || aperture_movie || Enable || &nbsp; || 2.00 || No
|}
|}


Создайте [[ambient_generic]] с этими свойствами:
Создайте {{L|ambient_generic}} с этими свойствами:


::{| class=standard-table
::{| class=standard-table
Line 300: Line 300:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnTrigger || disc_windup_sound || PlaySound || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnTrigger || disc_windup_sound || PlaySound || &nbsp; || 0.00 || No
|}
|}


Line 306: Line 306:


== Завершение ==
== Завершение ==
* Добавьте экземпляр и в качестве VMF Filename укажите <code>coop_lighting_ents.vmf</code>. Отсюда вы можете выбрать варианты тумана в вашей карте (его плотность, цвет и т.д.). Однако, в этом экземпляре более важны четыре [[env_global]], каждая может разрешать или запрещать использование сигнального и указывающего устройства роботов. При загрузке диска должна активироваться '''logic_relay''' с четыремя выходами:
* Добавьте экземпляр и в качестве 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 312: Line 312:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnTrigger || @global_no_taunting_blue || TurnOn || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnTrigger || @global_no_taunting_blue || TurnOn || &nbsp; || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || @global_no_pinging_blue || TurnOn || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnTrigger || @global_no_pinging_blue || TurnOn || &nbsp; || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || @global_no_taunting_orange || TurnOn || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnTrigger || @global_no_taunting_orange || TurnOn || &nbsp; || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || @global_no_pinging_orange || TurnOn || &nbsp; || 0.00 || No
| [[File:Io11.png]] || OnTrigger || @global_no_pinging_orange || TurnOn || &nbsp; || 0.00 || No
|}
|}


* Создайте [[trigger_hurt]] со значением Damage равным 10000. Эта энтити должна охватывать всю комнату, но не забудьте выключить её. В подходящий момент, например, когда ГЛэДОС говорит последнюю фразу, активируйте браш trigger_hurt, чтобы роботы взорвались.
* Создайте {{L|trigger_hurt}} со значением Damage равным 10000. Эта энтити должна охватывать всю комнату, но не забудьте выключить её. В подходящий момент, например, когда ГЛэДОС говорит последнюю фразу, активируйте браш trigger_hurt, чтобы роботы взорвались.
* Поместите в комнату [[point_clientcommand]] со следующими настройками:
* Поместите в комнату {{L|point_clientcommand}} со следующими настройками:
::{| class=standard-table
::{| class=standard-table
!  Свойство || Значение
!  Свойство || Значение
Line 336: Line 336:
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
|-
| [[Image:Io11.png]] || OnHurt || levelchange || command || changelevel {распределитель или следующая камера} || 0.00 || No
| [[File:Io11.png]] || OnHurt || levelchange || command || changelevel {распределитель или следующая камера} || 0.00 || No
|}
|}


* Поместите статическую модель лицом к экрану с моделью <code>models/props_underground/projector.mdl</code>. В проекторе создайте три [[point_spotlight]] в соответствующих местах.
* Поместите статическую модель лицом к экрану с моделью <code>models/props_underground/projector.mdl</code>. В проекторе создайте три {{L|point_spotlight}} в соответствующих местах.
* Обычно в комнатах с диском имеется доска (<code>models/props_office/whiteboard_coop.mdl</code>) с требованием не вставлять диск. Для соответствия картам Valve рекомендуется создать и её. Есть 6 различных вариантов.
* Обычно в комнатах с диском имеется доска (<code>models/props_office/whiteboard_coop.mdl</code>) с требованием не вставлять диск. Для соответствия картам Valve рекомендуется создать и её. Есть 6 различных вариантов.


[[Category:Portal 2 Level Design:ru]]
{{ACategory|Portal 2 Level Design}}
[[Category:Portal 2 Tutorials:ru]]
{{ACategory|Portal 2 Tutorials}}

Latest revision as of 03:44, 22 August 2024

English (en)Русский (ru)Translate (Translate)
"Иногда испытания должны проходить за пределами лаборатории."
- ГЛэДОС

Portal 2 Комната с диском - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом.

Источник дисков

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

Шаг 1 - настройка

Привязка к сетке: 2

Создайте prop_static(en) и выберите для неё модель models/props_gameplay/laser_disc_player.mdl и поместите её где-нибудь в комнате. Отсюда игроки будут брать диск.

Теперь создайте диск, это энтити prop_dynamic_override(en). Настройте её свойства(en) так:

Свойство Значение
Name start_disc
Parent spawner_door
World Model laser_disc.mdl
Disable Shadows Yes

Поместите диск внутри модели устройства, как показано на иллюстрации справа.

Теперь создайте браш размером 8x20x1 с текстурой tools/toolsinvisible. Поместите его сверху модели диска, снова, как на иллюстрации справа. Преобразуйте браш в энтити (нажатием Ctrl+T) и сделайте её func_door(en). И задайте её свойства следующим образом:

Свойство Значение
Name spawner_door
Speed 26
Start Sound World.LaserDiskLoad
Delay Before Reset (-1 stay) -1
Loop Moving Sound Yes
Move Direction 0 0 0
Note.pngПримечание:Свойство Move Direction нужно задать на Pitch Yaw Roll(en), указанные в laser_disc_player.mdl.

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

Шаг 2 - воссоздание диска

Создадим шаблон, по которому диск будет восстановлен в случае его утери игроками.

Note.pngПримечание:Этот шаг не является обязательным условием работы источника дисков, перейдите к шагу 3, если в вашей карте диск нигде не потеряется.

Создайте point_template(en) со следующими свойствами:

Свойство Значение
Name template_disc_spawn
Template 1 start_disc
Template 2 spawner_door

Создайте ещё одну point_template с этими свойствами:

Свойство Значение
Name template_disc
Template 1 disc

Шаг 3 - система выходов

Теперь включено всё.
Привязка к сетке: 8

После создания всех энтитей нужно заставить источник работать, осталось подключить действия энтитей для создания диска; свяжем несколько входов и выходов(en)!
Сначала создайте logic_auto(en) со следующим выходом:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnMapSpawn template_disk_spawn ForceSpawn   0.00 No
Tip.pngСовет:Эта энтити будет использоваться в дальнейшем, не забудьте про неё.

В свойствах spawner_door откройте вкладку 'Output' и добавьте следующие свойства:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnFullyOpen start_disc ClearParent   0.00 No
Io11.png OnFullyOpen start_disc TurnOff   0.00 No
Io11.png OnFullyOpen template_disc ForceSpawn   0.00 No
Io11.png OnFullyOpen start_disc Kill   0.10 No
Io11.png OnFullyOpen spawner_door Kill   0.10 No


Теперь добавьте выход в template_disc_spawn:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnEntitySpawned spawner_door Open   0.00 No

Энтити, определяющая, когда диск теряется или уничтожается, должна иметь следующий выход:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger template_disk_spawn ForceSpawn   0.00 No
Tip.pngСовет:Как правило, рекомендуется, чтобы уничтожаемая энтити сообщала диску, чтобы он вызвал выход. Например, когда диск растворяется полем антиэкспроприации(en), он вызывает выход OnDissolve. Поэтому проверьте, чтобы не было других физических объектов, которые можно растворить полем.

Теперь источник должен работать и поставлять новые диски при утере имеющегося. Однако, это лишь треть процесса создания работающей комнаты с диском.

Получатель диска

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

Шаг 1 - установка

Привязка к сетке: 2

Поместите 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
Note.pngПримечание:Свойство Move Direction нужно задать на Pitch Yaw Roll, противоположные тем, что были заданы для laser_disc_player.mdl.
Note.pngПримечание:Длина браша func_door зависит от того, насколько вы хотите, чтобы диск ушёл внутрь; радиус диска - 25 единиц, исходите из этого. На иллюстрации выше браш имеет длину 26 единиц, что позволяет всему диску уйти внутрь.

Шаг 2 - загрузка

На первом шаге создавались видимые энтити получателя, в этом шаге - невидимые энтити.
Первая - браш trigger_once(en), а вторая - filter_activator_name(en). И добавьте следующие свойства:

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
Io11.png OnMapSpawn hidden_disc TurnOff   0.00 No

Добавьте следующий вход в trigger_once:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnStartTouch hidden_disc TurnOn   0.00 No
Io13.png OnStartTouch !activator Kill   0.00 No
Io11.png OnStartTouch loader_door Open   0.00 No
Note.pngПримечание:Hammer(en) может выделить команду !activator как ошибочную. Игнорируйте ошибку, в игре всё работает нормально.

Добавьте один выход в энтити loader_door:

My Output > Target Entity Target Input Parameter Delay Only Once
Io12.png OnFullyOpen disc_loaded_relay Trigger   0.00 No
Note.pngПримечание:Мы пока ещё не создали энтити disc_loaded_relay, поэтому в данный момент этот выход будет показываться как ошибочный.

Теперь получатель должен работать и принимать вставляемый диск. До завершения создания комнаты с диском ещё далеко.

Проецирование видеоролика

В этой части начинается магия.

Проецируемый ролик - это показ фильма, включающий взрыв роботов в конце.

Шаг 1 - настройка видеоролика

Создайте prop_static с моделью projector_screen.mdl (Легче найти, введя "projector" в поле фильтрации моделей). В её нижнем левом углу поместите vgui_movie_display(en) со следующими свойствами:

Свойство Значение
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
Io11.png 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(en) и назовите её disc_loaded_relay. Откройте вкладку "Outputs" и добавьте следующие свойства:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger insert_disc_movie Disable   2.00 No
Io11.png OnTrigger aperture_movie Enable   2.00 No

Создайте ambient_generic(en) с этими свойствами:

Свойство Значение
Name disc_windup_sound
Sound Name World.LaserDiskPowerUp

И добавьте в disc_loaded_relay ещё один выход:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger disc_windup_sound PlaySound   0.00 No

И наконец-таки всё должно работать!

Завершение

  • Добавьте экземпляр и в качестве VMF Filename укажите coop_lighting_ents.vmf. Отсюда вы можете выбрать варианты тумана в вашей карте (его плотность, цвет и т.д.). Однако, в этом экземпляре более важны четыре env_global(en), каждая может разрешать или запрещать использование сигнального и указывающего устройства роботов. При загрузке диска должна активироваться logic_relay с четыремя выходами:
My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger @global_no_taunting_blue TurnOn   0.00 No
Io11.png OnTrigger @global_no_pinging_blue TurnOn   0.00 No
Io11.png OnTrigger @global_no_taunting_orange TurnOn   0.00 No
Io11.png OnTrigger @global_no_pinging_orange TurnOn   0.00 No
  • Создайте trigger_hurt(en) со значением Damage равным 10000. Эта энтити должна охватывать всю комнату, но не забудьте выключить её. В подходящий момент, например, когда ГЛэДОС говорит последнюю фразу, активируйте браш trigger_hurt, чтобы роботы взорвались.
  • Поместите в комнату point_clientcommand(en) со следующими настройками:
Свойство Значение
Name levelchange

Добавьте в trigger_hurt этот выход:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnHurt levelchange command changelevel {распределитель или следующая камера} 0.00 No
  • Поместите статическую модель лицом к экрану с моделью models/props_underground/projector.mdl. В проекторе создайте три point_spotlight(en) в соответствующих местах.
  • Обычно в комнатах с диском имеется доска (models/props_office/whiteboard_coop.mdl) с требованием не вставлять диск. Для соответствия картам Valve рекомендуется создать и её. Есть 6 различных вариантов.