Ru/Disc Room: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
m (obsolete language category)
 
(12 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{otherlang2
{{lang|title=Комната с диском (Portal 2)|Disc Room}}
|title=Комната с диском (Portal 2)
 
|en=Disc Room
[[File:Insert disk.jpg|thumb|right|350px|"Иногда испытания должны проходить за пределами лаборатории."<br>- '''ГЛэДОС''']]
}}
[[Image:Insert disk.jpg|thumb|right|350px|"Иногда испытания должны проходить за пределами лаборатории."<br>- '''ГЛэДОС''']]
{{portal2}} '''Комната с диском''' - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом.
{{portal2}} '''Комната с диском''' - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом.
== Источник дисков ==
== Источник дисков ==
'''Источник дисков''' - устройство, создающее диски. Оно восстанавливает копию диска, если он был утерян или растворён. Обычно оно находится рядом с '''получателем диска''' в конце последней камеры серии кооперативного режима. Однако, помещать его там совершенно не обязательно; если поместить источник в начале камеры, могут получиться интересные головоломки, главной задачей которых станет не потерять диск.  
'''Источник дисков''' - устройство, создающее диски. Оно восстанавливает копию диска, если он был утерян или растворён. Обычно оно находится рядом с '''получателем диска''' в конце последней камеры серии кооперативного режима. Однако, помещать его там совершенно не обязательно; если поместить источник в начале камеры, могут получиться интересные головоломки, главной задачей которых станет не потерять диск.  
=== Шаг 1 - настройка ===
=== Шаг 1 - настройка ===
[[Image:Disk emitter1.jpg|350px|thumb|right|Привязка к [[Basic Construction:ru#Сетка|сетке]]: 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 25: 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 41: Line 39:
| Move Direction || 0 0 0
| Move Direction || 0 0 0
|}
|}
{{Note:ru|Свойство 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 - воссоздание диска ===
Создадим шаблон, по которому диск будет восстановлен в случае его утери игроками.
Создадим шаблон, по которому диск будет восстановлен в случае его утери игроками.
{{Note:ru|Этот шаг не является обязательным условием работы источника дисков, перейдите к шагу 3, если в вашей карте диск нигде не потеряется.}}
{{Note|Этот шаг не является обязательным условием работы источника дисков, перейдите к шагу 3, если в вашей карте диск нигде не потеряется.}}


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


=== Шаг 3 - система выходов ===
=== Шаг 3 - система выходов ===
[[Image:Disk emitter2.jpg|350px|thumb|right|Теперь включено всё.<br>Привязка к [[Basic Construction:ru#Сетка|сетке]]: 8]]
[[File:Disk emitter2.jpg|350px|thumb|right|Теперь включено всё.<br>Привязка к [[Basic Construction#Сетка|сетке]]: 8]]
После создания всех энтитей нужно заставить источник работать, осталось подключить действия энтитей для создания диска; свяжем несколько [[Inputs_and_Outputs:ru|входов и выходов]]!
После создания всех энтитей нужно заставить источник работать, осталось подключить действия энтитей для создания диска; свяжем несколько {{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 77: 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:ru#Output'ы|Output]]' и добавьте следующие свойства:
В свойствах '''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
|-
|-
| [[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 105: 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 114: 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 125: Line 123:


=== Шаг 1 - установка ===
=== Шаг 1 - установка ===
[[Image:Disk loader1.jpg|350px|thumb|right|Привязка к [[Basic Construction:ru#Сетка|сетке]]: 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 158: Line 156:
| Move Direction || 0 180 0
| Move Direction || 0 180 0
|}
|}
{{Note:ru|Свойство Move Direction нужно задать на Pitch Yaw Roll, противоположные тем, что были заданы для laser_disc_player.mdl.}}
{{Note|Свойство Move Direction нужно задать на Pitch Yaw Roll, противоположные тем, что были заданы для laser_disc_player.mdl.}}
{{Note:ru|Длина браша func_door зависит от того, насколько вы хотите, чтобы диск ушёл внутрь; радиус диска - 25 единиц, исходите из этого. На иллюстрации выше браш имеет длину 26 единиц, что позволяет всему диску уйти внутрь.}}
{{Note|Длина браша func_door зависит от того, насколько вы хотите, чтобы диск ушёл внутрь; радиус диска - 25 единиц, исходите из этого. На иллюстрации выше браш имеет длину 26 единиц, что позволяет всему диску уйти внутрь.}}


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


1. В '''trigger_once''':  
1. В '''trigger_once''':  
Line 192: 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 201: 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:ru|[[Hammer]] может выделить команду !activator как ошибочную. Игнорируйте ошибку, в игре всё работает нормально.}}
{{Note|{{L|Hammer}} может выделить команду !activator как ошибочную. Игнорируйте ошибку, в игре всё работает нормально.}}


Добавьте один выход в энтити loader_door:
Добавьте один выход в энтити loader_door:
Line 215: 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:ru|Мы пока ещё не создали энтити disc_loaded_relay, поэтому в данный момент этот выход будет показываться как ошибочный.}}
{{Note|Мы пока ещё не создали энтити disc_loaded_relay, поэтому в данный момент этот выход будет показываться как ошибочный.}}


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


== Проецирование видеоролика ==
== Проецирование видеоролика ==
[[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 251: 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 274: 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 281: 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 302: 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 308: Line 306:


== Завершение ==
== Завершение ==
* Add an instance and set its VMF Filename to <code>coop_lighting_ents.vmf</code>. You can choose from here what fog options your map will have (fog density, color, etc). More importantly, however, it has four [[env_global]]s in it, each can enable, disable the bots pinging and taunting ability. You should have a '''logic_relay''' that is triggered when the disc is loaded with four outputs:
* Добавьте экземпляр и в качестве 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 314: 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
|}
|}


* Place a [[trigger_hurt]] with the Damage keyvalue set to 10000. Make sure it covers the whole disc room and don't forget to disable it. At the appropriate moment, probably when GLaDOS is making her final statement, enable the trigger_hurt brush to make the bots explode.
* Создайте {{L|trigger_hurt}} со значением Damage равным 10000. Эта энтити должна охватывать всю комнату, но не забудьте выключить её. В подходящий момент, например, когда ГЛэДОС говорит последнюю фразу, активируйте браш trigger_hurt, чтобы роботы взорвались.
* Place a [[point_clientcommand]] in your room with the following settings:
* Поместите в комнату {{L|point_clientcommand}} со следующими настройками:
::{| class=standard-table
::{| class=standard-table
!  Свойство || Значение
!  Свойство || Значение
Line 331: Line 329:
|}
|}


To your trigger_hurt add this output:
Добавьте в trigger_hurt этот выход:


:{| border=1 cellpadding="2" cellspacing="1"
:{| border=1 cellpadding="2" cellspacing="1"
Line 338: 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 {hub or next chamber} || 0.00 || No
| [[File:Io11.png]] || OnHurt || levelchange || command || changelevel {распределитель или следующая камера} || 0.00 || No
|}
|}


* Place a static model facing your screen and set its model to <code>models/props_underground/projector.mdl</code>. On the projector place three [[point_spotlight]], you'll know where.
* Поместите статическую модель лицом к экрану с моделью <code>models/props_underground/projector.mdl</code>. В проекторе создайте три {{L|point_spotlight}} в соответствующих местах.
* Somewhere in the disc room there is usually a whiteboard (<code>models/props_office/whiteboard_coop.mdl</code>) claiming not to upload the disc. For consistency with Valve maps, I suggest placing one too. It comes with 6 different skins.
* Обычно в комнатах с диском имеется доска (<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 различных вариантов.