Working Ladders:es

From Valve Developer Community
Jump to: navigation, search
English


Introducción

En todos los juegos Source (excepto Team Fortress 2, que no tiene escaleras de mano) una escalera de mano en el juego consiste en un prop o brush (que a partir de aquí llamaremos "modelo") que el jugador percibe como escalera, y la entidad / modelo invisible que la hace escalable. Esto da la ilusión de que el jugador está subiendo la escalera, pero en realidad está trepando por la entidad de la escalera que está justo en frente.

Prop / Modelo de escalera

Para crear la escalera visible, puedes o crear un prop_static con el modelo de una escalera (como models/props_c17\metalladder001.mdl) o crear un escalera basada en un modelo usando un simple modelo con textura de escalera. (como metal/metalladder001a).

Sistema de escalado

El sistema de escalado depende del juego Source para el que esté diseñada la escalera. Las escaleras en Half-Life 2 y Half-Life 2: Deathmatch están creadas de manera un poco diferente que en los juegos antiguos para proporcionar un mejor control, mientras que las escaleras en Counter-Strike: Source y Day of Defeat: Source están implementadas practicamente igual que en los juegos anitiguos. Para saber como crear escaleras en Counter Strike: Source y Day Of Defeat: Source, mira debajo.

Entidades para escaleras en Half Life 2 / DM

Para crear una escalera debes definir el espacio en el que el jugador podrá moverse por la escaera . Esto puede hacerse de dos maneras: Usando la entidad func_useableladder, o usando la antigua entidad func_ladderendpoint (que solo está ligeramente descrita debajo para entender las escaleras de los mapas antiguos.).

La entidad func_useableladder puede separarse en dos sub entidades: una al principio y otra al final (Ver Fig. 1a). Sus posiciones pueden ser escritas en el espacio de "keyvalue", o más típicamente el espacio de la escalera puede definirse usando la herramienta de escalera virtual (virtual ladder tool), arrastrando el circulo del centro que es visible cuando la entidad es seleccionada (See Fig. 1b). Usando esta herramienta puedes definir el principio y el final de la escalera en las posiciones apropiadas en la vista 2D. El principio y el final de la escalera son de una orientación y un largo arbitrarios (Ver Fig. 1c). Simplemente pon el final donde quieras y el jugador se moverá entre esos dos puntos cuando esté en la escalera.

Fig. 1a - Puntos de escalera (usando dos func_ladderendpoints)
Fig. 1b - Cambiando la orientación
Fig. 1c - Puntos finales de escalera

Cuando pongas los puntos finales, asegurate de que los pones unas cuantas unidades lejos de el modelo visible de la escalera (o cualquier otro modelo) porque si cualquiera de las cuatro esquinas del espacio de la escalera esta tocando un mdelo, esto hará esa parte de la escalera no "trepable".

La ahora obsoleta entidad func_ladderendpoint solo consiste de un punto final. Un modelo de escalera es creado uniendo dos func_ladderendpoints juntos usando sus propiedades. Un espacio de escalera es creado entre dos func_ladderendpoints llamando uno de los puntos finales y teniendo el otro punto final con el nombre en su Otro valor. (No es necesario para el segundo punto final.)

Puntos de desmonte

Fig. 2 - Puntos de desmonte

Junto al espacio de movimiento, tambien puedes poner puntos de desmonte de la escalera (Ver Fig. 2) para permitir mas controlados y faciles desmontes. Esos puntos son marcados usando la entidad info_ladder_dismount. Cuando este cerca y mirando uno de esos puntos, el jugador puede pulsar su tecla de usar para desmontar a la posición del marcador (normalmente cuando las escaleras pasan por más de dos pisos). Si llega a uno de los puntos finales de la escalera, puede simplemente salir de la escalera pulsando la tecla de caminar adelante. Puedes usar multiples marcadores info_ladder_dismount para cada punto de desmonte para dar mas direcciones a la salida de la escalera.

Para evitar posibles confusiones entre escaleras cercanas usando diferentes marcadores de desmomnte, cada entidad each info_ladder_dismount tiene un valor llamado LadderName (nombre de escalera) El cual puede ser usado para contener el nombre de la escalera a la que pertenece.

Como el espacio de la escalera, el punto de desmonte no debe tener obstrucciones y permitir al jugador estar en su posición sin geometría que lo detenga..

Probandolo en el juego

Cuando hayas creado tus escaleras, puedes compilar tu mapa y probarlas. Si quieres, puedes mostrar la información de la escalera dentro del juego como algo de información debug abriendo la consola y escribiendo sv_showladders 1 para activarlo, y después cargar o recargar el mapa (escribiendo restart) el mapa que quieres ver. Esto te mostrará el punto del comienzo y del final de la escalera (func_useableladder y func_ladderendpoint entities), y los puntos de desmonte (entidades info_ladder_dismount) (Ver Fig. 3a), y puede ayudarte a determinar si esas entidades están puestas correctamente, si la escalera se topa con geometría solida del mundo el nombre del modelo de la escalera (Ver Fig. 3b), y con las entidades func_ladderendpoint que las conectan.

Fig. 3a - Visión en el juego (sv_showladders 1)
Fig. 3b - Punto final en el suelo

Como funcionan las escaleras en el juego

La manera mas fácil de subir a una escalera en Half-life 2 es aproximarse al modelo de la escalera y sin tocarlo pulsar la tecla de usar. Esto te pondrá automáticamente en la escalera. (También puedes caminar hacia el modelo de la escalera, con un gran riesgo de fallar y caer por un agujero.)

Para bajarte de la escalera puedes o saltar, o pulsar la tecla de usar. Si la escalera tiene info_ladder_dismounts, también puedes simplemente ir al final de la escalera, y pulsar la tecla de usar mientras miras a un info_ladder_dismount y te permitirá salir de forma mas controlada de la escalera.

Escaleras para Counter Strike: Source y Day Of Defeat: Source

Crea otro modelo enfrente del objeto / modelo que quieres que sea escalable, tan cerca como puedas pero sin que lo toque. Asegúrate de que tiene las mismas medidas que el objeto escalable. Asígnale el material tools/toolsinvisibleladder al modelo y luego hazla entidad (CTRL+T). Selecciona func_ladder desde el dialogo de opciones de entidad. Ahora tienes un modelo escalable enfrente del modelo de la escalera

Fig. 4 - func_ladder con la textura tools/toolsinvisibleladder en frente de una escalera prop_static

Cuando estés en una escalera en CS:S tu precisión bajara notablemente.

Son similares a las escaleras de Half-Life 1, pero hay una textura AAATRIGGER en vez de la textura tools/toolsinvisibleladder.

Optimizando escaleras (aún sin traducir)

The ladder props, like every prop_static, default to using VPhysics for collision detection, which will provide more detailed physics collisions, but in some cases this might not be preferable. In multiplayer maps and very resource demanding maps using VPhysics props costs precious resources, and you might want to sacrifice good physics to avoid potential lag. Here are some good methods to minimize resource cost:

  • If the ladder is for HL2 or HL2:DM, and the ladder is straight, the best method depends on whether somebody is going to be able to shoot through the ladder. If they are not (like if the ladder is against a wall) you could simply change the Collisions keyvalue to Use Bounding Box. If they are, you could change the keyvalue to Not Solid and place an invisible Clip (toolsclip) to detect collision with it instead.
  • If you are creating a slanting ladder for HL2 or HL2:DM, a bounding box will not rotate with the prop, and will obstruct the climbing system, in which case you are better off making the ladder prop Not Solid and place an invisible, rotated Clip (toolsclip) or Player Clip (toolsplayerclip) textured brush alongside the ladder (depending on whether or not somebody is going to be able to shoot through it).
  • If the ladder is for a CS:S or DoD:S map, you could change the Collisions keyvalue to Not Solid and make the func_ladder brush cover the ladder prop, rotating it if necessary.

In multiplayer maps it's also an understood expectation to be able to move freely parallel to the surface that a ladder covers. When it comes to brush based ladders, you can get away with turning the ladder brush into a non-solid func_brush to avoid players getting temporarily "stuck" against the side of the ladder, but when it comes to prop ladders, they are often too protruding from the wall to make a player standing inside a ladder believable. In that case you are probably better off using two Player Clip textured wedges at the sides of the prop, guiding the player to the front of the prop.

If nothing else, you could turn a brush ladder into a func_detail to avoid unnecessary brush leafs.

Ejemplos

HL2/HL2:DM

CS:S/DoD:S

L4D2

Ver también