goto:    mapping Links    Tutorials


Mapping help Tutorials for Half-Life & Mods


Climbing:   slopes & ramps,   jumping,   stairs,   cliffs, downspouts, ladders & ropes..

Intro - There are a lot of tutorials that deal with ladders only, or stairs only. I am combining everything into the concept of climbing in different ways. I will not cover elevators, escalators/conveyor belts, teleporters, vehicles or tractor beams here.

Slopes & ramps:

The most basic way to climb is to use a slope or ramp. It is also good for a map, being easier to make, to compile and is low wpoly usually. Yet we can't always use it, because we want maps varied and kinda realistic, and sometimes slopes/ramps do not fit.
Things to take into consideration when making a slope/ramp are the angle of slope, slipperyness of the slope, and gravity. If the slope is too steep one cannot climb it, and if the server raises the gravity climbing may also be impossible. This leaves us mappers with 3 choices - give a second route that does not depend on the slope, make a very very shallow slope, or set the gravity on the slope in the map using a trigger_gravity. All three are good, but the secondary route should be there anyway to make the map more playable.

Now, if we want to use a trigger_gravity to lock in gravity around the slope, we should make a block covered with aaatrigger texture to cover the whole slope. It is ok if there is overlap. Tie the brush to trigger_gravity, if you did it right it should be invisible in the map. Now a player can always go up the slope, even if the server has set gravity higher than normal to begin with. Always test a slope to see if it is climbable.

The slippery slope: in real life slopes are often slippery, due to water, ice, oils, or if the slope is talus/made of gravel. The best way to simulate this is the use the combined func_friction and the trigger_push entity.
Like the trigger_gravity, the func_friction should be a aaatrigger brush that overlays the whole slope. You can set it to the slipperyness you desire. However, all around the slope, and also anywhere that can be jumped to from the slope should be covered with other func_ friction brushes that reset the player's friction back to normal, otherwise the player will be skating around the rest of the map....
Since the friction entity doesn't care where the player goes, the downward effect of gravity isn't really shown. For this it is best to use a 3rd entity aaatrigger brush, the trigger_push. Like the others, it should cover the whole slope/ramp and overlap does not matter. The angle property should be set to push downward (There is a little pulldown menu there for that.) with a force of 10-40. This should slow a player trying to "skate up" the slope, which is an oddity that func_friction allows.

Some ways to make the slope/ramp:

  • make a block brush, then clip it into a wedge shape. This method is ok, but be sure to check the .map version of the map afterward to see that the WC .rmf format to .map format didn't mess up. Quark users probably do not need to worry about that.

  • make a block brush, then vertex manipulate it into a wedge shape. This method is usually ok, but may result in a bad brush during compile. So again be sure to check the .map version of the map afterward to see that the WC .rmf format to .map format didn't mess up. Quark users probably do not need to worry about that.

  • make a wedge brush, then rotate it to fit. This is probably the best way, especially if you use snap-to-brush modes. It is almost bulletproof.
trigger_gravity
This lets you change the gravity that affects the player. The player will keep this gravity until another trigger_gravity entity changes it.
Properties: targetname, target, killtarget, netname, master, delay, message, gravity, sounds, style.
Flags: Monsters(hl), No Clients(hl), Pushables
USE: set the gravity between 0-1,
1 = normal.
Func_friction
This lets you change the friction that affects the player. The player will keep this friction until another func_friction entity changes it.
Properties: renderfx, rendermode, renderamt, rendercolor, modifier.
Flags: Appearflags.
USE: set the modifier property to between 0-100% of normal friction.
Do not forget to set renderfx to 0 so entity is invisible!
Also the players friction must be reset if less than 100% as the player exits the low friction area!
trigger_push
This is a trigger that acts as a local wind.
Properties: targetname, target, master, killtarget, delay, sounds, message, speed, style.
Flags: Once only, Start off, Pushables.
USE: set the ANGLE to the direction of push, or to Up/Down. (there is a pulldown menu for the up/down.)
set the speed to 0-2000, 100 stops sideways movement, 2000 is needed for upward, very little is needed for downward.


Jumping:

Jumping is really a form of giant stairs, jumping up from block to block, crate to crate, rock to rock. As with slopes, gravity setting is important. If the gravity is set too high, the players route by jumping is blocked. So again the choices are a second route (always good), very low blocks, or locking the player's gravity in around the blocks with a trigger_gravity brush - as I describe above.
Places to use jumping: crates/barrels in a warehouse/factory, junk at end of an alley, rocks at the bottom of a cliff and so on.


Stairs:

Stairs should be 4, 8 or 16 units high per tread. Stairs should always be made into func_wall for VIS compiling, because otherwise if left regular each step of the stair would be made into its own Vis leaf, which would add to Vis workload. Moreover a func_wall stair does not make other regular brushes like a wall fragment, which otherwise might happen.
To reduce the Wpoly counts made by stairs, it is good to make the treads into wedges or triangles. This reduces the wpoly count of the stair by 25%, if the back/side of a stair is seeable.
Indoor stairs are usually steeper, but outside stairs are often wide, low and flat. Quark users have an automatic stair maker which makes things easy, but less flexible.
Func_wall
This is used to make a brush rendered with special properties, or just the make a brush an entity.
Properties: targetname, globalname, renderfx, rendermode, renderamt, rendercolor, Light Flags, Light Origin.
Flags: Appearflags.
USE: for the stairs, just make it a func_wall and leave it at default rendermode normal.


Cliffs, downspouts, ladders & ropes:

Ladders, ropes, downspouts & cliffs are all related because they use the same entity, the func_ladder. A func_ladder is invisible and works together with another brush that is seen. Some examples:
  • a cliff face with a crack built in, or decaled on, would be what is seen; and the invisible, aaatrigger textured, brush entity func_ladder would be just in front of the crack. Player sees the crack and climbs up.

  • a house with a downspout brush going down the face, or a texture of a downspout on the building texture. The invisible aaatrigger textured brush entity func_ladder would be just in front of the downspout or wrapped around it. Player sees downspout and climbs up.

  • a brush tree trunk of a tree, and the invisible, aaatrigger textured, brush entity func_ladder would be wrapped around the trunk to let the player climb the tree. (Overlapp is ok.)

  • a ladder texture is placed over a func_illusionary or func_wall brush. (Set to solid mode and FX 255 to make the area between the rungs invisible). The invisible, aaatrigger textured, brush entity func_ladder would be just in front of the ladder rungs to climb. Player sees ladder rungs, climbs ladder.

  • Advanced Special Technique: in SOME mods of HL you can make other entitys into ladders without using the func_ladder entity. These entitys are usually func_illusionarys, func_water, & func_train. To do this, you have to turn off SMARTEDIT and enter the value SKIN -16. It will not always work, you have to test it - but if you are in a mod that is short of entitys, this may save you one or two.

  • a net texture is placed over a func_illusionary or func_wall brush. (Set to solid mode and FX 255 to make the area between the rungs invisible). The invisible, aaatrigger textured, brush entity func_ladder would be just in front of the net (or wrapped around both sides if free hanging) to climb. Player sees net, climbs.
Ropes are a bit different, because they swing. If you use a non-swinging rope, then the above method works fine. But if you want a swinging natural looking rope, it gets more complex. You will have to make an ORIGIN textured brush "pin", put it at the top of the rope at the point from which it swings. Then you have to select BOTH the origin brush and the rope brush and together tie them to a func_pendulum. Set the properties of the pendulum to a small sway, not too big. Finally put the invisible, aaatrigger textured, brush entity func_ladder just in front of the pendulum swing area, but trimmed to be narrower at the top than bottom.

Problems with func_ladder. If one uses more than one func ladder on an object, or anywhere a player can touch 2 ladders at once, the player may be thrown off at high speed sideways.

func_ladder
This invisible brush entity allows you to climb.
Properties:NONE.
Flags:NONE, (some mods have silent flag.)
USE: just make an aaatrigger textured brush, tie to this entity and you can climb where ever you put it.
Decal
This puts a decal texture on a wall/cliff.
Properties: targetname, texture.
Flags: NONE
USE: For a crack on a cliff textured seen brush part. Usually done with the Decal tool, not as an entity.
Func_illusionary
This makes a non-solid brush for a light or a fake wall.
Properties: skin, renderfx, rendermode, renderamt, rendercolor, Light Flags, Light Origin..
Flags: NONE
USE: For the ladder textured seen brush part, set rendermode to solid and renderfx to 255.
func_pendulum
This creates a brush that swings back and forth. You MUST have an origin brush (a brush that has the "origin" texture on all sides) as one of the brushes that makes up this entity. The CENTER of the origin brush will be used as the Center-Point of rotation. Note: There are BUGS with the func_pendulum - it doesn't work 100% correctly. (Info. in part from Harry Teasley at Valve)
Properties: targetname, renderfx, rendermode, renderamt, rendercolor, speed, dmg, distance, _minlight, angles, damp.
Flags: Starts open, Reverse direction, Don't link, Passable, One way, Toggle, X axis, Y axis, Use only, Appearflags.
USE: For a rope, set it to use the x or y axis flags, depending on which way the wall/cliff runs.
set dmg = 0, speed = 2-10 to set it swinging; experiment with distance.

some entity source information from Wavelength entity list by Hellbringer.


website copyright (c) January 2003 Tommy of Escondido