Комната с диском (Portal 2)
Комната с диском - последнее испытание в конце каждой серии тестов в кооперативном режиме. Она находится в части комплекса, которой ГЛэДОС управлять не может, и которая служила людям последним защитным рубежом от разрастающейся власти ГЛэДОС над комплексом.
Источник дисков
Источник дисков - устройство, создающее диски. Оно восстанавливает копию диска, если он был утерян или растворён. Обычно оно находится рядом с получателем диска в конце последней камеры серии кооперативного режима. Однако, помещать его там совершенно не обязательно; если поместить источник в начале камеры, могут получиться интересные головоломки, главной задачей которых станет не потерять диск.
Шаг 1 - настройка
![](/w/images/thumb/b/ba/Disk_emitter1.jpg/350px-Disk_emitter1.jpg)
Создайте 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
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
laser_disc_player.mdl
.Создайте ещё одну энтити, prop_physics_override , она будет диском, переносимым игроками. Нажмите ⇧ Shift и перетащите start_disc так, чтобы диск находился вне устройства, и чтобы только его 'край' касался щели устройства. Измените "Class" на prop_physics_override и назовите "disc".
Шаг 2 - воссоздание диска
Создадим шаблон, по которому диск будет восстановлен в случае его утери игроками.
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Создайте 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
![Tip.png](/w/images/thumb/4/45/Tip.png/9px-Tip.png)
В свойствах 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
![Tip.png](/w/images/thumb/4/45/Tip.png/9px-Tip.png)
Теперь источник должен работать и поставлять новые диски при утере имеющегося. Однако, это лишь треть процесса создания работающей комнаты с диском.
Получатель диска
Получатель диска (или проигрыватель диска) - устройство, для которого предназначается диск; при вставке диска в получатель проигрывается видео с информацией, которую искала ГЛэДОС.
Шаг 1 - установка
![](/w/images/thumb/f/f3/Disk_loader1.jpg/350px-Disk_loader1.jpg)
Поместите 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](/w/images/thumb/c/cc/Note.png/10px-Note.png)
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Шаг 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
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Добавьте один выход в энтити loader_door:
My Output > Target Entity Target Input Parameter Delay Only Once OnFullyOpen disc_loaded_relay Trigger 0.00 No
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Теперь получатель должен работать и принимать вставляемый диск. До завершения создания комнаты с диском ещё далеко.
Проецирование видеоролика
Проецируемый ролик - это показ фильма, включающий взрыв роботов в конце.
Шаг 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 различных вариантов.