Работающие лестницы
В большинстве игр на платформе
Source (за редким исключением Team Fortress 2 и Portal 2, где их нет) лестница состоит из объекта реквизита или элемента, которые игрок видит как лестницу, и невидимой системы объектов/элементов карты перед ней, которые фактически обеспечивают перемешение по ней. Это создает иллюзию перемещения по видимой лестнице, хотя на самом деле используется невидимая система объектов/элементов карты. Для создания видимой части лестницы можно использовать:
- объект prop_static с моделью лестницы (например,
models/props_c17/metalladder001.mdl) - элемент карты с текстурой лестницы (например,
metal/metalladder001a.
В разных играх Source необходимо использовать различные системы подъёма по лестницам. Лестницы в
Half-Life 2 и
Half-Life 2: Deathmatch работают немного по-другому, в отличие от старых игр, чтобы обеспечить удобное управление для создателей карт и игроков, в то время как лестницы в
Counter-Strike: Source,
Day of Defeat: Source и большинстве многопользовательских игр Source реализованы практически так же, как в старых играх
Half-Life и
Quake II.
Лестницы их точечных объектов
Создание лестницы
- Используются в:
Half-Life 2 series,
SiN Episodes,
Dark Messiah of Might and Magic
Чтобы создать лестницу необходимо определить объем, в котором персонаж игрока будет перемещаться в пространстве, находясь на лестнице. Этот объем можно задать с помощью объекта func_useableladder (также существует устаревший объёмный объект func_ladderendpoint, который может встречаться на старых картах).
Объект func_useableladder разделяется на два подобъекта: начальную и конечную точки (см. Рис. 1а). Их местоположение можно задавать как значением ключ-параметра, так и, более наглядным способом - перетаскивая центральную метку, показываемую при выборе объекта (см. Рис. 1б). Этот инструмент позволяет перемещать начальную и конечную точки лестницы в соответствующие местоположения в окне 2D-вида. Начальная и конечная точки могут быть произвольной ориентации и длины (см. Рис. 1в). Просто переместите точки туда, куда нужно, и персонаж игрока будет перемещаться между этими точками, находясь на лестнице.
Убедитесь, что конечные точки лестницы не касаются её видимого браша, и находятся на расстоянии в паре единиц от него (а таже любого другого браша или модели), иначе часть лестницы может не работать.
Точки схода
Кроме объема для перемещения, можно указать точки схода с лестницы (см. Рис. 2) для простоты управления сходом. Эти точки указываются с помощью объекта info_ladder_dismount. Находясь рядом с одним из этих объектов, игрок может нажать клавишу "Использовать", чтобы сойти к указанной этим объектом точке (обычно, когда лестницы соединяют более двух этажей). Если персонаж достиг одного из концов лестницы, он также может просто сойти с нее, двигаясь лицом в сторону обного из этих объектов. Можно использовать несколько объектов info_ladder_dismount для каждого места спуска, чтобы предоставить больше направления для схода с лестницы.
Чтобы избежать возможной путаницы разных точек схода между соседними лестницами, у объекта info_ladder_dismount есть ключ-параметр LadderName, который позволяет указать к какой лестнице он относится.
Как и в случае с лестницей, точки схода не должны пересекаться с элементами геометрии карты.
Испытания в игре
После того, как вы создали лестницу, то можете скомпилировать карту и протестировать её. Если хотите, то в игре можно увидеть объекты лестниц вместе с отладочной информацией, введя в терминале команду sv_showladders 1, а затем загрузив или перезагрузив нужную карту (введя restart).
Будут показаны все начальные и конечные точки лестниц (объекты func_useableladder и func_ladderendpoint), а также точки схода (объект info_ladder_dismount) (см. Рис. 3а), что поможет определить, правильно ли настроены эти объекты, пересекаются ли они с твёрдой геометрией или моделями лестниц (см. Рис. 3б), а также соединяются ли объекты func_ladderendpoint друг с другом.
Как лестница работает в игре
Самый безопасный способ зайти на лестницу в Half-life 2 – это подойти к её невидимому объёму перемещения, и в пределах досягаемости нажать клавишу "Использовать". Это автоматически переместит персонаж игрока на лестницу. (Если же попытаться зайти в объём перемещения лестницы, то с большей вероятностью можно промахнуться или упасть в проём.)
Чтобы сойти с лестницы, всегда можно спрыгнуть или нажать клавишу "Использовать". Если у лестницы есть info_ladder_dismounts, можно просто сойти в этих точках или заново вернуться на лестницу.
Объёмные лестницы
Лестницы из объёмных объектов
- Используются в:

Серия игр Left 4 Dead,
Counter-Strike: Source,
Day of Defeat: Source,
Garry's Mod,
Vampire: The Masquerade – Bloodlines,
The Ship: Murder Party,
Black Mesa,
Half-Life: Source,
Jabroni Brawl: Episode 3
Подобные лестницы используются в Half-Life 1, но они покрыты текстурой AAATRIGGER вместо tools/toolsinvisibleladder.
В непосредственной близости перед объектом/элементом карты, который представляет лестницу, создайте ещё один элемент карты, не соприкасающийся с исходным. Убедитесь, что ширина/высота элемента соответствует исходной лестнице. Примените к этому элементу служебную текстуру tools/toolsinvisibleladder и преобразуйте в объект (нажав Ctrl+T). В диалоге Object Properties (Свойства объекта) выберите func_ladder. Теперь перед объектом/элементом получилась поверхность, по которой можно перемещаться. В Counter-Strike: Source при нахождении на лестнице , точность стрельбы значительно снижается.
Ladders can also be dismounted sideways. For example, climbing a ladder that dismounts to the left side of the ladder prop, as opposed to climbing over the func_ladder brush.
Those ladders should have the ladder brush extend about 56 units above the floor it will dismount to, but not touch any roof above the ladder.
If the func_ladder does not reach high enough, you cannot dismount onto the floor and fall down instead. If the func_ladder comes too close to a roof, or any solid prop above, the AI will stick to that roof/prop, because AI always climbs to the very top of a ladder and won't think about when dismounting makes most sense.
- Any texture can be used on func_ladder; VBSP automatically assigns ladder contents to func_ladder brushes. Any faces that would normally be rendered will still be visible in-game. (for example,
ladders use the tools/toolsinvisible texture.) - Ladders that touch each other will be turned into one single ladder. If you need to block navigation on one ladder, it would block navigation on both ladders. Add gaps between ladders.
- Creating Infected only Ladders in the

Серия игр Left 4 Dead use the tools/climb_versus texture. Ladders that are accessible to both survivors/infected teams may simply use non-object brush based ladders. Смотрите также руководства о создании лестниц для серии Left 4 Dead.
Безобъектные лестницы из элементов карты
- Используются в:
INFRA,
Counter-Strike: Global Offensive - Также работают в:
Counter-Strike: Source,
Day of Defeat: Source,
Garry's Mod,
Half-Life: Source
This ladder type is set up and works in exactly the same way as object brush ladders, but it shouldn't be tied to a func_ladder entity, or it will make the ladder nonexistent in-game. To make it, create a brush in front of the object/brush you want to be climbable, as close as you can to it but without touching it.
Make sure that the face is the same width/height as the climbable object and then assign the material tools/toolsinvisibleladder to this brush. You now have a climbable face which is in front of the object/brush. No other setup is required for your ladder to work in game.
- Since tools/toolsinvisibleladder still cuts Visleaf, make sure to tie the ladder brush to a func_detail or other brush entity.
- Leave at least a unit gap between the ladder and any detail brushes to prevent it from eating brush faces.
- Any brush texture can be made climbable by adding the
%CompileLaddercompile parameter. - toolsinvisibleladder and any other %CompileLadder material will make the entire brush act like a ladder, even if it is only on a single face of the brush. Other faces of the brush will still show their textures in game.
- If only one side of the brush should be climbable, then the ladder $surfaceprop can be used instead (tested in
; may not work in all games. Some games also have a woodladder $surfaceprop for different climbing sounds). - In games where non-object brush based ladders work, models with collision meshes can be made climbable like ladders by using the
$contents "ladder"QC command.
Иной метод создания лестниц из элементов карты
Используется в:
Team Fortress 2,
Portal 2
Some Source games do not support the standard ladder entity; however, it is possible to fake a ladder by creating a very narrow staircase.
To start off, make a prop_static and set the world model to models/props_c17/metalladder002.mdl or similar. You can also make a ladder prop out of brushes or use a ladder texture on a single brush face.
Next, create a brush 16 units high using a clip texture. Use the clip brushes to make a stack of blocks, making sure each higher block is one unit "behind" the lower one. The players will climb these 16-unit-high brushes as stairs. To keep them from going too far out once you reach the bottom select the no clip blocks group them and then compress them as long as the top step sticks out past where the prop ends and each block still has a small lip it will work just fine. There you have it—a good-looking, climbable ladder.
Video Showing how to create it: TF2 mapping: Ladders in TF2
Метод с использованием VScript
Только для
Team Fortress 2: Полное воссоздание функциональности func_ladder доступно при помощи сценариев VScript.
Сначала скачайте это сценарий (нажмите правой кнопкой мыши и выберите Сохранить страницу) и поместите его в директорию tf/scripts/vscripts/.
Затем создайте объект func_ladder как обычно, а потом замените его на func_brush. В ключ-параметре Entity Scripts (Сценарии объекта) введите func_ladder.
Вот и всё. Лестница будет работать в игре как положено.
Оптимизация лестниц
Реквизит-объекты лестниц, как и все объекты prop_static, по умолчанию используют виртуальную физику VPhysics для обнаружения столкновений. Это обеспечивает точность физических взаимодействий, но в некоторых случаях это может быть нежелательно. В многопользовательских и сложных картах, использование виртуальной физики приводит к значительным затратам, и можно пожертвовать точностью физики, чтобы избежать задержек. Вот несколько хороших способов высвобождения затрат:
- Если это вертикальная лестница для
Half-Life 2 или
Half-Life 2: Deathmatch, то лучший способ зависит от необходимости простреливания лестницы. Если нет (например, лестница на стене), то просто измените значение ключ-параметра Collisions (Принцип столкновений) на Use Bounding Box (Размерный короб). Если да, то выберите значение "Not Solid (Нематериальный)" и поместите невидимый объём, покрытый барьерной текстурой (toolsclip), который будет отвечать за столкновения. - Если это наклонная лестница для
Half-Life 2 или
Half-Life 2: Deathmatch, то ограничивающий размерный короб не будет вращаться вместе с реквизит-объектом и будет препятствовать перемещению, в этом случае нужно сделать модель лестницы Not Solid (Нематериальной), и рядом с ней поместить невидимый повёрнутый объём, покрытый общей барьерной текстурой (toolsclip) или для барьером игрока (toolsplayerclip) (в зависимости от необходимости простреливания лестницы). Alternatively, if not using prop_static, you may turn off SmartEdit and set the prop's solid keyvalue to 3, which will cause it to use a properly-rotated version of the prop's bounding box. - Если это лестница для карт
Counter-Strike: Source или
Day of Defeat: Source, нужно изменить ключ-параметр Collisions (Принцип столкновений) на "Not Solid (Нематериальный)" и создать объёмный объект func_ladder охватывающий модель лестницы, вращая его по необходимости.
На многопользовательских картах лестницы нужно создавать так, чтобы персонаж игрока мог свободно перемещаться вдоль поверхности, которая служит лестницей. Объёмные лестницы, можно просто преобразовать в нематериальный объёмный объект func_brush, чтобы избежать временного "слияния" персонажа игрока с краем лестницы, а в случае реквизит-объектов лестниц, придётся отодвинуть их от стены, чтобы персонаж игрока правдоподобно располагался на лестнице. В этом случае, вероятно, лучше использовать два элемента карты с барьерной текстурой для игрока, сходящихся к сторонам модели лестницы, направляющих игрока к краю лестницы.
В ином случае, просто преобразуйте объём лестницы в объект func_detail, чтобы он не создавал дробные области видимости.
Примеры
HL2/HL2:DM
- ladder_simple – Заготовка с полностью рабочей лестницей.
Смотреть также
- func_useableladder
- func_ladderendpoint
- info_ladder_dismount
- func_ladder
- Brush ladders Tutorial on implementing Brush ladders for your Source Engine mod



