INTRODUCCIÓN:
El Valve Hammer
Editor era antes conocido con el nombre de Worldcraft. Este es el
editor original desarrollado por Valve (empresa creadora del Half-Life).
Este editor se caracteriza por ser muy práctico, fácil
e intuitivo para aprender. Más adelante en el tutorial te vamos
a enseñar paso a paso como utilizar todas las herramientas,
técnicas, efectos, etc., que brinda el engine de Half-Life
(de ahora en adelante HL).
Si recién
te inicias en esto del mapping para HL te recomendamos que tengas
en mente algunos puntos importantes. Para empezar te recomendamos
que te bajes la última versión del editor. La versión
de 2.1 del Worldcraft que viene en el CD de HL sirve perfectamente,
pero tiene bugs que fueron arreglados y probablemente te ahorres problemas
a la hora de mappear.
Otra cosa importante
que cabe destacar es la limitación del engine en cuestión.
El HL tiene un motor gráfico (engine) muy limitado, así
que las ideas para tus mapas las tenés que hacer pensando en
el engine en si y no en el lugar que querés mappear.
Para que se entienda
mejor: No pienses en mapas extremadamente detallados.
1)
CONFIGURACIÓN Y PUESTA A PUNTO:
La configuración
del VHE no es algo difícil, pero tampoco es algo muy entretenido.
Solo toma unos minutos y sin esto no podemos empezar a mappear.
Vamos a empezar;
una vez instalado el programa lo corremos y nos encontramos con esta
1ra ventana:

En
este mensaje aparece la primera vez que ejecutamos el VHE y nos informa
que el mismo no posee configuración alguna y nos ofrece una
ayuda incluida en el programa.
A esta ventana
vamos a decirle que no queremos ayuda ya que nosotros estamos para
ayudarte.
Lo próximo
que vemos es esta ventana con varias solapas:
.jpg)
En
la solapa General vemos varias configuraciones, algunas son muy comunes.
Nosotros vamos a enfocarnos en la opción Undo Levels. Esto
indica la cantidad de veces que se pueden Deshacer las cosas que hayamos
hecho en el mapa. Si tenés una buena PC, con bastante memoria
te recomendamos que dejes ese valor en 50, por otro lado, si tenés
una PC un poco vieja te recomendamos que pongas como valor 10 o 5.
El resto de las opciones las dejamos como están.
Ahora nos dirigimos a la solapa Game Configurations, allí veremos
esta ventana:
.jpg)
Esta
es una de las partes más importantes. Lo primero que vamos
a hacer es crear un set de configuración para la modificación
del HL que vamos a usar. Para ello hacemos clic en el botón
Edit y veremos lo siguiente:
.jpg)
Luego
hacemos clic en Add para agregar la configuración. Nos va a
aparecer una ventana en donde nos pide el Game's Name (Nombre del
juego), ahí escribimos HL. Este nombre es relativo, es solo
para nosotros y no afecta en nada la configuración del juego.
Pero podríamos usarlo cómodamente para distinguir las
distintos modificaciones (de ahora en adelante mods) del HL, por ejemplo,
si estuviésemos configurando el Counter-Strike utilizaríamos
ese nombre para identificar el set de configuraciones.
Una vez que terminamos de agregar la configuración Half-Life
hacemos clic en Close y volvemos a la pantalla anterior. Vamos a ver
que ahora tenemos en la lista de Configurations el juego que recién
creamos.
Vamos a pasar al casillero de Game Data files. Acá es donde
se diferencian realmente los mods. Cada mod tiene un set de entidades,
las entidades son las propiedades que puede tener un mapa. Estas entidades
se almacenan en un archivo con extensión .FGD. Para cada mod
que mappemos vamos a necesitar este archivo.
En nuestra sección de utilidades tenemos preparado un Pack
de FGDs el cual tiene las últimas versiones de los mods más
conocidos.
Una vez que tenemos estos archivos hacemos clic en Add y seleccionamos
el .FGD correspondiente al HL. Una vez hecho esto vamos a ver que
el VHE agregó una ruta al archivo solicitado y además,
lleno automáticamente los campos de:
Texture
Format: WAD3 (Half-Life / TFC), esto indica el tipo
de texturas que utiliza el HL, el cual vamos a detallar más
adelante.
Map
Type: Half-Life / TFC, esto indica el tipo de mod
que soporta ese .FGD. En este caso, se puede utilizar perfectamente
para hacer un mapa de HL y/o Team Fortress Classic (TFC).
Default
PointEntity Class: Esta es la lista de entidades que
se pueden agregar solas sin estar asignadas a ningún otro objeto
(sólidos = brushes).
Default
SolidEntity Class: Por otro lado, esta es la lista
de entidades que si o si tienen que estar asignadas a sólidos.
El resto de los
casilleros los dejamos como están, solo son útiles si
usamos el mismo VHE para compilar los mapas (más adelante explicaremos
que es la compilación).
Ahora pasamos
a la solapa de Textures y nos vamos a encontrar con lo siguiente:
.jpg)
Aquí
es donde vamos a agregar las texturas. Pero primero vamos a explicar
que son las texturas. Las texturas son imágenes en 2D las cuales
son aplicadas a las caras los sólidos que vamos a crear cuando
mappemos. Las texturas se almacenan en archivos WAD.
Volviendo
a la ventana en cuestión, hacemos clic en Add WAD y buscamos
la carpeta del HL. Ahí buscamos una sub-carpeta de nombre Valve,
ahí encontramos algunos wads, de los cuales solo vamos a utilizar
halflife.wad. Ya estamos listos para empezar a mappear, pero antes
nos queda un tema que explicarte: La compilación.
Esto es algo imprescindible para la creación de mapas. Para
empezar vamos a decirte que hay un pack de herramientas llamadas Zoner
Half-Life Tools (de ahora en adelante ZHLT). Estas traen varios archivos
ejecutables, los cuales solo vamos a usar los siguientes: hlbsp.exe,
hlcsg.exe, hlvis.exe, hlrad.exe.
Cada una de estas es un paso de compilación en donde, tomando
el mapa que creamos, le agrega las luces, sombras, sonidos, texturas,
etc., y convierte el archivo final en .BSP. Más adelante te
vamos a explicar cuando y como compilar tu mapa.
2) EL ENTORNO VHE:
Ahora vamos a
ver el entorno donde vamos a trabajar, y todas las emocionantes cosas
que tiene el VHE para ayudarte a crear mapas.
Una vez cerrada
la ventana de configuraciones vas a ver una pantalla vacía
como esta:
.jpg)
Los
recuadros grises son los botones de la barra de herramientas que se
van a habilitar cuando creemos un mapa nuevo u abramos uno existente.
Ahora hace click en el menú File -> New
.jpg)
Cada
uno de esos recuadros negros son los tipos de vista: en la esquina
izquierda superior tenemos la vista en 3D que puede ser ajustada por
líneas (3D wireframe), sólidos rellenos (3D flat), y
sólidos texturados (3D textured), después arriba a la
derecha tenemos la vista TOP en donde veremos todo desde arriba, en
la parte inferior a la izquierda tenemos la vista FRONT (frente) de
nuestro mapa, y a la derecha tenemos la vista SIDE (desde un costado).
Vos podes ajustar cada uno de los cuadros a gusto, nosotros preferimos
dejarlos en el modo que esta y utilizamos en el modo 3D la vista de
texturas.
Nosotros vamos a crear los sólidos y agregaremos entidades
en los recuadros de: TOP, FRONT y SIDE, según nos sea más
cómodo, ya que todos son vistas diferentes de lo mismo.
Pero antes de empezar creando nuestro mapa, vamos a ver un poco que
tenemos en la barra de herramientas:
.jpg) |
Selection Tool [Shit+S]
Esta
opción sirve para seleccionar objetosEste botón
lo vamos a utilizar para seleccionar objetos en cualquiera de
los 4 espacios que tenemos. Al seleccionarlos aparecen 8 puntos
alrededor del sólido en donde podemos agrandarlo o achicarlo
según la necesidad, al segundo clic sobre el objeto seleccionado
aparecen 4 círculos que nos dejan rotar el sólido,
y al tercer clic tenemos la posibilidad de deformar el objeto.
|
.jpg) |
Magnify [Shit+G]
Esta opción sirve para hacer zoom.Esta opción
es muy fácil de usar, sirve para acercar o alejar cualquiera
de los 4 cuadros de trabajo. Con el clic izquierdo se acerca
y con el derecho se aleja. Aunque es más fácil
si tenés un mouse con rueda de scroll, ya que realiza
la misma tarea.
|
.jpg) |
Camera [Shit+C]
Esta opción sirve como cámara para navegar en
la vista 3D.Esta es la opción de cámara, con
ella nos podemos mover en todas direcciones en el cuadro de
vistas en 3D. Una sugerencia, presionando la letra Z podemos
navegar la vista en 3D como si estuviéramos en el juego.
|
.jpg) |
Entity Tool [Shit+E]
Esta opción sirve para aplicar entidades.Este simple
iconito sirve para aplicar entidades, para agregarlas seleccionen
esta opción y hagan click, en la vista 3D, en alguna
pared cercana a donde la quieren, y después muevanla
en cualquiera de las vistas 2D a donde la quieran.Recordá
que también se pueden agregar entidades a los sólidos,
pero no se realiza con esta opción, eso te lo vamos
a explicar más adelante.
|
.jpg) |
Block Tool [Shit+B]
Esta opción sirve para crear sólidos.Esta es
la opción principal, sin ella no podrías ir
muy lejos, sirve para crear los sólidos, para que te
des una idea los sólidos son bloques, de diferentes
formas y tamaños, que sirven para hacer las paredes,
pisos, techos, cielo, ventanas, todo lo que existe en el mapa
al fin y al cabo. Podés cambiar el tipo de sólido,
abajo a la derecha en la pantalla hay dos menús de,
uno dice primitives, y otro dice Object. Donde dice Object
figuran todos los tipos de sólidos que hay para poder
crear: Cubos, triángulos, cilindros, conos, o arcos.Con
esta herramienta también poder crear los famosos Prefabs
(Los prefabs son objetos prediseñados por otras personas
para facilitarnos el trabajo, en nuestra sección de
prefabs vas a encontrar varios para bajar y también
algunos links).Volviendo al tema anterior, en el VHE vienen
muchos Prefabs, solo tenés que abrir el menú
de Primitives y seleccionar cualquiera de los que figuran.
|
|
.jpg)
|
Toggle Texture Aplication [Shit+A]
Esta opción sirve para aplicar texturas a los sólidos
cara por cara.Esta aplicación es muy especial, ya que
es la que le da vida a los sólidos. Mediante esta vas
a poder aplicar texturas correctamente, para ello contamos
con un montón de opciones las cuales listamos acá
abajo:
Scale
x/y: Podes cambiar la escala de la textura
así como achatarla o estirarla.
Shift
x/y:
Esta opción te permite ubicar una textura con respecto
a X e Y.
Rotation:
Te sirve para rotar una textura.
Justify:
Hay 6 botones para jugar acá: L (Izquierda),
R (Derecha), Fit (Se adapta a la cara), T (Arriba), B (Abajo),
C (Centro).
Treat
as One: Cuando seleccionas muchas caras esta
opción te permite que se las tomen como una sola cara.
Aling
World to Face: Estas opciones son un poco
difíciles de explicar, World sirve para ubicar texturas
basándose en el mapa completo, y Face sirve para ubicar
texturas basándose en la cara del sólido.
Texture
Group: Sirve para seleccionar o todos los
wads, o cada uno por separado.
Current
Texture: Muestra el nombre de la textura que
tenemos seleccionada en ese momento.
Hide
Mask: Sirve para ocultar la selección
roja que aparece al seleccionar algo.
Apply:
Sirve para aplicar todos los cambios que hicimos.
Browse:
Sirve para buscar en los archivos wads las texturas.
Replace:
Seleccionando esta opción el programa va a tomar la
textura seleccionada y la va a reemplazar con la textura que
elijamos, pero también va a cambiar todas las texturas
con el mismo nombre en el resto del mapa.
|
.jpg) |
Apply Current Texture
Esta opción sirve para aplicar texturas en todas las
caras de un sólido a la vez.Esta opción sirve
para aplicar texturas también, pero tiene una cosa
en particular, para aplicarlas de este modo tenés que
seleccionar un sólido y al hacer click en este botón
se van a aplicar las texturas de todas las caras a la vez,
siguiendo la textura que tenemos seleccionada.
|
.jpg) |
Apply Decals [Shit+D]
Esta opción sirve para aplicar decals.Este botoncito
te da la posibilidad de que apliques los famosos Decals.Los
Decals son texturas que están superpuestas a las texturas,
una de las más famosas es el bomb target, en el gráfico
que indica donde hay que poner la bomba..., los tiros en las
paredes son también Decals, las grietas, etc.
|
.jpg) |
Clipping Tool [Shit+X]
Esta opción sirve para cortar objetos.Este botón
sirve para cortar a gusto los sólidos. Para usarla
tenés que seleccionar el sólido primero, luego
apretar este botón.Ahora que lo tenés listo
para cortar simplemente has 2 veces click en puntos diferentes
y vas a ver que te aparecen 2 círculos unidos por una
línea blanca, esta línea es por donde vamos
a cortar al objeto, así que movela a gusto para cortar
el sólido.Vas a ver que una parte del sólido
queda con líneas entrecortadas rojas y la otra con
líneas gruesas blancas, bueno, la parte de líneas
blancas es la que va a quedar, lo demás va a desaparecer.
|
.jpg) |
Vertex Tool [Shit+V] Esta opción sirve
para modificar un sólido moviendo sus puntas.Con esta
herramienta podes mover los vértices de un sólido
a gusto para formar objetos complejos.Al hacer click van a
aparecer los vértices y aristas del objeto, que podes
mover a gusto.
|
.jpg) |
Path Tool [Shit+P]
Esta opción sirve para crear rutas/caminos de los personajes
del juego.Esta herramienta es muy especial y dudo que lleguemos
a usarla. Sirve para marcar el camino que van a seguir los
personajes en el modo single player (un solo jugador) del
HL. Para utilizarla, tenés que mantener la tecla SHIT
presionada y vas haciendo click marcando el camino que van
a seguir los personajes.Esta opción es muy avanzada
y hay que tener altos conocimientos sobre mapping y aplicación
de AI (inteligencia artificial) para poder utilizarla.
|
3)
LA 1º HABITACIÓN:
Lo primero que
vamos a hacer es crear un mapa nuevo. Para ello nos dirigimos a File
-> New.
Antes de crear
la habitación lo normal es seleccionar una textura general,
ya que la que esta seleccionada por defecto (AAATrigger) es la que
se suele usar para las entidades (como detectores de aperturas de
puertas, escaleras, etc.), de todas formas podes cambiar en cualquier
momento las texturas de la habitación con la herramienta de
texturas.
En el cuadro
de dialogo Textures, hace click en el botón Browse. Así
se abre el explorador de texturas. Una vez en el explorador de texturas,
en la parte de abajo en el cuadro Filter, escribí por ejemplo
WALL (pared). El filtro de textura reduce la lista de texturas a únicamente
las que contengan la cadena de texto que escribimos en su nombre.
Seguramente vas a ver unas cuantas texturas, selecciona la que mas
te guste.
Una aclaración:
No es necesario usar el filtro si no quieres, simplemente úsalo
cuando sepas o tengas una idea de lo que buscas.
Ahora, para hacer
las paredes, como dijimos en el tutorial anterior, vamos a utilizar
la herramienta Block. Para que sea más fácil cambiar
el tamaño de los sólidos vamos a achicar el tamaño
de la grilla.
Para
achicar o agrandar el tamaño de la grilla utiliza estos
dos Botones de la barra de herramientas: |
|
La
Barra de Estado:
.jpg)
1-
Este casillero nos informa si es un sólido y número
de caras tiene, por el contrario, si hubiésemos convertido
el bloque en una entidad, en ese espacio nos informaría que
entidad habíamos usado.
2-
Este casillero posee una @ a su izquierda y este nos informa las coordenadas
de cada sólido en el mapa.
3-
Este casillero tiene 3 valores: xx w, xx l, xx h. Estos indican las
unidades de ancho, profundidad y alto (en su respectivo orden).
4-
Este casillero nos provee información sobre el zoom que estamos
usando.
5-
Este casillero nos informa sobre el tamaño de grilla en el
cual estamos trabajando.
Armando
las Paredes, pisos y Techos:
Ahora,
para empezar a construir la habitación, vamos a utilizar la
herramienta Block, vamos a ir a la vista TOP y vamos a crear un rectángulo
de 32w 256l 256h unidades.
Una vez creado, vamos a ubicarlo a la izquierda del eje Y (Línea
verde azulada vertical). Si hicimos este paso bien nos va a quedar
algo así:
.jpg)
Repitiendo el paso anterior, vamos a crear 3 sólidos mas formando
4 paredes. El resultado lo podemos ver en la siguiente imagen:
.jpg)
Siempre es bueno alinear a la cuadricula nuestro mapa, es decir, siempre
que podamos, hay que basar nuestras habitaciones siguiendo las de
los ejes X e Y o grises claras. Solo si es necesario deberíamos
a achicar la cuadricula al máximo. Lo recomendable siempre
es trabajar con una grilla de 16 unidades.
Alineando los sólidos a la cuadricula, nos ayuda fácilmente
a ubicar las texturas sin necesidad de configurar su tamaño
o posición.
Ahora que tenemos las paredes, vamos a crear el techo y el piso. De
la misma manera que hicimos antes con las paredes vamos a crear un
sólido de 256w 256l 32h unidades en medio de las cuatro paredes
en la vista TOP.
Con el sólido seleccionado nos dirigimos a la vista SIDE y
lo movemos verticalmente hasta los bordes inferiores de las paredes,
y quedaría algo así:
.jpg)
Ya tenemos el piso, ahora vamos a crear el techo. Para ello, en lugar
de crear un sólido nuevo, te vamos a enseñar un atajo
que te va a facilitar un poco el trabajo. Posiciónate en la
vista SIDE y con la tecla SHIFT presionada has click en el sólido
del piso y arrástralo hasta los bordes superiores de las paredes.
.jpg)
Aplicación de Texturas:
Vamos a darle un poco de estilo al cuarto, para empezar vamos a cambiar
las texturas del piso. Para ello vamos al explorador de texturas y
en el filtro ponemos FLR y elegimos un piso que nos guste. Una vez
que lo tenemos seleccionado, vamos a la vista 3D y presionando la
letra Z vamos a navegar al interior de nuestra habitación.
Volvemos a presionar la tecla Z para desactivar el navegador y seleccionamos
el sólido del piso.
Con el sólido y la textura deseada seleccionada hacemos click
en la herramienta Apply Current Texture. Al usar esta opción,
todas las caras del sólido en cuestión se van a cambiar
por la textura que elegimos. El resultado seria más o menos
así:
.jpg)
Volvemos
a navegar la vista 3D, para visualizar el techo. Nuevamente vamos
al explorador de texturas, y en el filtro ingresamos el criterio CEI,
esto nos muestra varios tipos de cielos razos. Elegimos uno que mas
nos guste y lo seleccionamos.
Seleccionamos el sólido del techo y volvemos a utilizar la
herramienta Apply Current Texture. Finalmente ya tenemos las paredes,
piso y techo bien definidos.
Definiendo el punto de partida:
Pero esto no termina acá. Todo nivel para jugarlo necesita
un punto de salida para el jugador. Esto se hace colocando una entidad
info_player_start en el mapa.
Para hacer esto, vamos a utilizar la herramienta Entity. Una vez seleccionada,
nos dirigimos al menú de la derecha y abajo de todo veremos
la opción de Objects. Ahí debajo hay un menú
desplegable en el cual figuran todas las entidades que no requieren
ningún sólido para funcionar. Nosotros vamos a utilizar
la entidad info_player_start, así que la buscamos en la lista
y la seleccionamos.
Ahora nos vamos a la vista 3D y hacemos click en el sólido
del piso (siempre con la herramienta Entity seleccionada).
Si se fijan bien, el programa nos agregó un cubo verde claro
en medio del sólido del piso como se ve en la imagen:
.jpg)
Si nos fijamos bien, en las vistas SIDE y FRONT vemos que mitad del
info_player_start esta dentro del mapa y la otra mitad fuera. Esto
no debe quedar así por dos motivos.
El primer motivo y algo que tenés que aprender antes de empezar
a mappear es que todas las entidades que estén del lado negro,
es decir, fuera del mapa van a generar un error conocido con el nombre
de LEAK.
El mapa siempre tiene que estar sellado, y no se puede dejar ni una
sola unidad de espaciado. Todos los sólidos que dan al exterior
deben estar juntos si o si.
El segundo motivo es que el info_player_start esta pegado al piso.
Esto va a traer problemas cuando compilemos ya que cuando el jugador
haga el worldspawn (ingrese al mapa) va a quedar trabado ya que tiene
sus pies pegados al piso.
Para solucionar este tema, vamos a mover la entidad hacia arriba,
de modo tal que quede a unas 3-6 unidades por sobre el piso. De esta
manera nos aseguramos que no haya trabas cuando el jugador ingrese
al mapa.
La
iluminación:
Si compilamos el mapa así como está vamos a ver todo
oscuro. Lo que nos queda por hacer es agregar luz. Para ello, vamos
a agregar una entidad Light. Nuevamente usamos la herramienta Entity,
volvemos al menú Objects y en este caso elegimos la entidad
Light.
Acto siguiente agregamos la entidad (por ejemplo) a una de las paredes
y la movemos al centro del cuarto utilizando las vistas 2D.
Esta iluminación es solo una base, en los próximos tutoriales
vamos a detallar más este tema.
4) PUERTAS:
Siguiendo
con el mapa del tutorial anterior, vamos a crear una puerta. Para
más comodidad mové las entidades info_player_start y
light a un costado, pero solo para sacar las screens, no hace falta
que vos los muevas en tu mapa.
Lo primero es crear el agujero en la pared del tamaño de una
puerta, el tamaño predeterminado de una puerta es de 64 x 16
x 96 unidades, claro que esto depende en realidad de lo que uno quiera.
Dividiendo la Pared:
Teniendo la habitación anterior
iluminada y todo, vamos a dividir una de las paredes en tres partes
para insertar la puerta. Para ello vamos a utilizar la herramienta
Clipping Tool.
Seleccionamos la pared que nos interesa, hacemos doble click en la
herramienta Clipping Tool y trazamos una línea como muestra
la imagen:
.jpg)
Luego presionamos ENTER y el sólido se va a haber cortado.
Si por alguna razón un pedazo del sólido desapareció
es que usamos mal la herramienta. La herramienta Clipping Tool tiene
3 posiciones, las 2 primeras hacen que el lado izquierdo o derecho
desaparezca luego de hacer un corte, y la 3er posición deja
los los pedazos de sólido sin eliminarlos.
Si hicimos esto bien nos tiene que haber quedado como la imagen inferior,
y como paso siguiente vamos a trazar nuevamente una línea también
como se ve en la imagen:
.jpg)
Nuevamente presionamos enter y vamos a ver que la pared se dividió
en tres sólidos. Ahora vamos a cambiar un poco el tamaño
para que el hueco de la puerta no nos quede tan grande. Las dos paredes
de las puntas tienen que ser de 96 x 64 x 256 unidades y la del medio
64 x 64 x 256 unidades. El resultado es el siguiente:
.jpg)
Lo que vamos a hacer ahora es crear el lugar para colocar la puerta.
Vamos a achicar el sólido del medio, para eso lo seleccionamos
y en la vista SIDE o FRONT (depende que pared hayamos cortado) vamos
a reducirlo a un cubo de 64 x 64 x 160 unidades como se ve en la siguiente
imagen:
.jpg)
Creando
la Puerta:
Ahora vamos a crear la puerta que va a ir en ese espacio. Para que
tenga aspecto de puerta vamos a ir al Explorador de Texturas y en
el filtro vamos a poner c1a0b_dr4b, seleccionamos esa textura y pasamos
a crear el sólido de la puerta. Creamos uno que tenga 64 x
16 x 96 unidades y lo colocamos de manera que encaje con el agujero
de las mismas proporciones como se ve en la imagen inferior:
.jpg)
Alineando las Texturas:
Bueno, al menos ocupamos el espacio, pero eso no parece una puerta.
Para ello vamos a tener que alinear la textura. Utilizando la herramienta
Texture Aplication [Shift+A] vamos a hacer click en la cara del sólido
de la puerta que se ve en la screen anterior. En la ventana de aplicación
de texturas presionamos el botón Fit y vemos como se corrigió
la textura, también podemos hacer lo mismo con la cara contraria
y lograremos el mismo efecto.
Nuevamente, esto no termina acá. Lo único que tenemos
es el sólido de la puerta, pero no se va a comportar como tal
hasta que le asignemos la entidad correspondiente.
Definiendo la Puerta:
Lo primero que vamos a hacer es seleccionar la puerta y presionamos
[Crtl+T]. Ese es el cuadro de diálogo de las entidades asignadas
a sólidos, es decir, que van junto con un sólido. En
el menú desplegable buscamos la entidad func_door.
.jpg)
Generalmente con los parámetros por defecto la puerta ya funciona,
pero se puede personalizar a gusto manejando sus propiedades, que
son las siguientes:
Speed:
es la velocidad a la que se abre/cierra la puerta. El valor por defecto
es 100.
Move Sound: selecciona
de la lista el sonido que emite la puerta cuando se abre.
Stop Sound: selecciona
de la lista el sonido que emite la puerta cuando se termina de cerrar.
Delay before Close:
es el tiempo que tarda la puerta en cerrarse. El valor por defecto
es 4 (se mide en segundos) y para que la puerta se quede abierta pone
el valor es -1.
Lip: Las puertas de
este tipo suben, bajan o van de un lado a otro desde su base hasta
su punta. Para que se vea más claramente, la puerta se mete
por completo dentro de la pared. Asignándole un valor a este
casillero va a dejar un borde. Recomiendo que usen valores del 1-3.
Damage inflicted when blocked:
sirve para hacerle daño a quien se ubique en su trayectoria,
Se debe poner la cantidad de daño que le hace al jugador.
Locked Sound: sonido
que emite la puerta si esta trabada o si es trabada.
Unlocked Sound: sonido
que emite la puerta si esta destrabada o si es destrabada.
Yaw:
esta última propiedad define el ángulo en que la puerta
se va a mover. Por defecto la puerta se mueve a la derecha, pero si
cambiamos el ángulo esta se mueve en cualquier posición
que elijamos.
Para concluir,
tendríamos que cerrar el mapa, para que no haya agujeros que
den al exterior. Para ello vamos a tener que cubrir con un sólido
el hueco que hay en el piso. Además de esto, hay que cubrir
el hueco que queda detrás de la puerta, ya que la puerta es
una entidad y no impide que el interior esté expuesto al exterior.
Si hicimos esto bien nos va a quedar algo así:
.jpg)
5) ESCALERAS:
Hacer escaleras es una de las cosas más fáciles de hacer,
es un procedimiento rápido y sencillo. El tipo de escaleras
que vamos a diseñar son las verticales, así que para
empezar te aconsejamos que uses el explorador de texturas y busques
la textura ladder1.
.jpg)
El tamaño estándar de las escaleras de este tipo es
de 32 x 4 x (la altura que vos quieras) unidades. Para obtener el
resultado como en la imagen vamos a crear un sólido de 32 x
4 x 128 unidades, siempre con la textura ladder1 seleccionada.
.jpg)
Utilizando
las herramientas de alineación de texturas que aprendimos en
tutoriales anteriores, vamos a alinearla correctamente para que se
vea como en la imagen.
Para que la escalera se vea más real, podemos cambiar la textura
de sus laterales. Seleccionamos las caras y buscamos la textura generic99c
(siempre y cuando la textura de la escalera sea roja, sino podemos
probar con otro color) la aplicamos y quizá no noten mucha
diferencia en la ventana del VHE, pero cuando estén en el juego
si se va a notar.
Algo interesante que remarcar es que si en las propiedades de texturas
dejamos la escala en 1.00 y la alineación en 0.00, y además
el sólido está alineado a la cuadricula como se muestra
en la imagen, la textura va a estar alineada perfectamente y no hay
necesidad de re-alinearla.
Esto se aplica a todas las texturas con los tamaños: 16, 32,
64, 128, 256, 512 (pixeles a lo ancho o a lo largo) y dependiendo
del tamaño de sólido. Por eso te aconsejamos que siempre
trates de alinear los sólidos a la cuadricula, eso te va a
ahorrar mucho trabajo.
Si dejamos esto así, el color azul se va a ver negro en el
juego. Para hacer que sea transparente, vamos a convertir ese sólido
con la entidad func_wall. Para ello presionamos [Ctrl+T] y en la lista
de entidades seleccionamos la antes mencionada.
Una vez hecho esto vamos a cambiar algunas de las propiedades. En
Render Mode vamos a elegir el valor Solid, y en Fx Ammount vamos a
introducir el valor 255.
Con esto la escalera ya está lista, pero solo visualmente.
Ahora tenemos que agregarle una sentencia que le diga al juego que
se puede subir por esa escalera.
Para
ello, vamos a crear un sólido idéntico al anterior,
con la textura aaatrigger y vamos a posicionarlo junto al mismo. Para
una vista más clara echale un vistazo a la imagen aquí
debajo:
.jpg)
Lo
único que nos falta es asignarle la entidad que funcionara
como escalera al sólido que creamos recientemente. Para ello
repetimos el paso anterior con [Ctrl+T], pero esta vez en el menú
elegimos la entidad func_ladder. Y eso es todo.
6) INTERRUPTORES:
Un interruptor tiene varias utilidades, pero todas se resumen a una
básica: activar y/o desactivar ciertas acciones, como encender
una luz, o abrir una puerta. En este tutorial te vamos a enseñar
a utilizar un botón para cerrar una puerta.
Utilizando la habitación que creamos en el tutorial de puertas
vamos a convertirla para que pueda ser abierta o cerrada mediante
un botón.
En el engine de HL las texturas botones se representan como:
+0nombre (Textura apagada)
+Anombre (Textura encendida)
Aunque podemos
utilizar cualquier textura y el botón va a funcionar, lo ideal
para que parezca más realista, es utilizar las texturas con
las características arriba mencionadas.
A un lado de
la puerta vamos a crear un sólido de unas 16 x 2 x 24 unidades
y vamos a decorarlo con la textura +0~lab1_gad3. En la imagen podemos
tener una vista más clara del botón y su posición
con respecto al info_player_start y a la puerta:
.jpg)
Lo
que vamos a hacer ahora es convertir el sólido del botón
a la entidad, presionando [Ctrl+T] y seleccionando la entidad func_button.
Ahora vamos configurar el botón y la puerta para que cuando
activemos el botón se abra la puerta. Para esto vamos a abrir
las propiedades del botón.
.jpg)
Lo primero que vamos a hacer es ir a la solapa Flags y vamos a tildar
la opción Don't Move. Eso va a evitar que el botón se
desplace a un costado cuando lo presionemos.
Lo segundo que vamos a hacer es volver a la solapa Class Info y ubicamos
la propiedad Target o Targetted Object (dependiendo que versión
del FGD tengamos) e introducimos en el casillero la palabra puerta.
Ahora vamos a la ventana de propiedades de la puerta y en la propiedad
Name ingresamos nuevamente la palabra puerta. Sin salir de la ventana
de propiedades de la entidad func_door vamos a la solapa Flags y tildamos
el casillero que dice Toggle.
Ahora vamos con las explicaciones. El casillero Target / Targetted
Object le indica al botón que tiene que desactivar o activar
cualquier entidad que tenga el nombre que pusimos, en nuestro caso,
va a activar o desactivar todas las entidades que tengan por nombre
la palabra puerta.
En las propiedades del func_door está más que claro
por que pusimos en Name la palabra puerta. Por otro lado, la opción
Toggle en la solapa flags le está diciendo a la puerta que
no se abra cuando alguien pasa por ella, sino que espere a que alguna
sentencia (en este caso el botón) la abra o la cierre.
7) ASCENSORES:
Lo primero que vamos a hacer es construir el ascensor. En este tutorial
hemos creado una habitación especial, donde hay una planta
baja y un 1er piso.
.jpg)
En nuestro caso pusimos la plataforma al ras del piso en la planta
baja, ya que nosotros queremos que el primer viaje del ascensor sea
hacia arriba, de otro modo, el ascensor estaría en el primer
piso si quisiéramos que baje.
Tengan en cuenta que el ascensor está compuesto por la plataforma
y por la columna que lo eleva:
.jpg)
Moviéndolo:
Los ascensores se pueden activar de dos maneras: por proximidad o
mediante la acción de un botón.
Accionado por proximidad:
Seleccionamos el ascensor y la columna, y transformarlos en entidad
func_plat. En sus propiedades, y seleccionamos la opción Travel
altitude (can be negative), esta es la distancia que nuestro ascensor
va a subir o a bajar. Este valor se haya expresado en unidades y para
nuestro ascensor vamos a escoger el valor 128 (unidades), ya que esa
es la diferencia de altura entre la planta baja y el 1er piso. En
caso de que quisiéramos que baje solo nos queda por agregar
un valor negativo de las unidades.
Accionado por botones:
Es similar a lo anterior, pero en las propiedades de la entidad func_plat,
tenemos que introducir un nombre en el campo Name, por ejemplo ascensor.
Ahora vamos a la solapa Flags y activamos la opción Toggle
o Triggerable (Activable por medio de botones. El nombre varía
según que versión del FGD tengamos).
Ahora tenemos
que crear el botón que servirá para moverlo de una posición
a otra y configuramos a nuestro gusto las propiedades del func_button.
Empezamos con Delay before reset (wait) (es el tiempo que tarda el
botón en volver a ser usable) e ingresamos el valor 2; Delay
before trigger (delay) (es el tiempo que pasa desde que pulsamos el
botón hasta que se activa el evento, el ascensor en este caso),
también usamos el valor 2. Ahora en la solapa de Flags activamos
Don't move (el botón cambia del estado inactivo al activo cuando
es usado sin moverse). Cada vez que sea usado va a activar los eventos,
como mover el ascensor.
Lo último
que nos queda por hacer es duplicar el botón y situarlo en
la planta alta. En el mapa ejemplo vas a encontrar el ascensor activable
mediante el botón.
8)
CIELOS:
Hacer el cielo
de un mapa es realmente fácil y simple. Para hacer los lugares
al aire libre tenés que imaginarte que son habitaciones, como
las que vinimos haciendo hasta recién, pero que en el techo,
en lugar de tener una textura de techo, tiene la textura sky.
Con la siguiente
imagen vamos a aclarar un poco las cosas:
.jpg)
Lo único que hay que hacer es cerrar la "habitación"
con la textura sky y ya está.
Cuando
corramos el juego, la textura sky va a ser reemplazada por el cielo.
Ahora lo que vamos a hacer es definir que cielo vamos a querer que
aparezca. Para ello vamos al menú Map -> Map Propierties,
y nos deberíamos encontrar con la siguiente ventana:
.jpg)
En
el casillero de enviroment map (cl_skyname) vamos a introducir el
nombre de algún cielo existente, por ejemplo: trainyard. Los
cielos se encuentran en la carpeta C:\Sierra\Half-Life\valve\gfx\env\.
Como podemos ver los cielos están en formato .tga y si prestamos
atención hay 6 archivos que corresponden a cada tipo de cielo:
nombre_de_cielobk.tga
nombre_de_cielodn.tga
nombre_de_cieloft.tga
nombre_de_cielolf.tga
nombre_de_cielort.tga
nombre_de_cieloup.tga
|
Cada una de esas
6 imágenes pertenece a una cara de un cubo el cual forma el
cielo (Back, Down, Front, Left, Right, Up)
Volviendo al VHE,
en el casillero enviroment map (cl_skyname) vamos a ingresar solamente
el nombre_de_cielo. Cerramos la ventana y lo único que nos
queda por hacer es darle luz al mapa.
Agregando
el Sol:
Como en el tutorial
de la 1er habitación, si no agregamos alguna entidad que genere
luz, el mapa va a estar a oscuras. En este caso, en lugar de usar
la entidad light, vamos a utilizar la entidad light_enviroment.
Esta entidad
se coloca una sola vez por mapa y va a emitir luz cada vez que haya
una textura sky.
Seleccionamos
la herramienta Entity Tool [Shift+T] y en el menú desplegable
de Objects (abajo a la derecha) seleccionamos la entidad light_enviroment
y la agregamos al mapa.
No importa la
ubicación de la entidad, ya que el tipo de luz y dirección
de la misma se configura desde su ventana de propiedades.
Dentro de la
ventana de propiedades vamos a la propiedad Pitch, esta indica el
ángulo de inclinación de los rayos del sol. Por defecto
los rayos del sol en HL son desde arriba hacia abajo, por ende, para
que parezca real vamos a tener que ingresar un valor negativo. En
nuestro caso, vamos a utilizar el valor -60.
Ahora solamente
nos queda configurar el ángulo en que los rayos van a caer
sobre nuestro mapa, y eso lo hacemos con la opción Yaw o Angle
(según la versión del VHE que uses), en nuestro caso
vamos a dejarlo como está, esta opción es si queremos
algo en especial, sino déjenlo como está.
9)
HUMO, FUEGO Y VAPOR:
vapor
y Humo:
Antes que nada
tenes que tener claro donde querés el vapor en tu mapa. Nosotros
vamos a simular una tubería rota.
Para simular
el vapor vamos a usar varias entidades env_sprite (voy a usar 6 para
mi vapor) en fila, hacia donde quieras que vaya el vapor. Las colocamos
mas juntas cerca de la ruptura de la tubería y las vamos espaciando
mas según nos vamos alejando de ella. Por ahora solo crea una
sola entidad env_sprite, más adelante, cuando este todo listo
te vamos a pedir que dupliques las veces que quieras la entidad, así
con configurar una sola entidad, duplicándola, vamos a ahorrarnos
mucho tiempo y trabajo.
Vamos a configurar
las características básicas de la entidad env_sprite.
En sus propiedades ingresamos en el campo Render Mode el valor Additive.
Luego en la propiedad Sprite Name ingresamos sprites/smokepuff.spr
que es el siguiente sprite:
.gif)
Ahora si querés que se inicie automáticamente seguí
con el Paso 1, pero si lo que querés es que sea activable/desactivable
dirigite al Paso 2.
Paso 1:
Entra en las propiedades de la entidad env_sprite hacé click
en la solapa Flags activa la opción Start On.
Paso 2:
Dale a la entidad env_sprite un nombre en el campo Name dentro de
sus propiedades. Por ejemplo: vapor.
Ahora duplicamos (Presionamos la tecla Shift mientras arrastramos
la entidad) tantas entidades env_sprite como queramos y las ubicamos
como mas nos guste (El vapor, según las leyes de la física,
es mas liviano que el oxigeno y tiende a subir. Tené eso en
cuenta).
Para
darle realismo, modificamos en las propiedades la escala de cada env_sprite.
Empezamos por el que está mas pegado a la tubería, le
damos un valor, por ejemplo, de 0.3. Acordate que los valores son:
tamaño reducido (número menor que 1), tamaño
original (1) y aumentado (número mayor que 1). Empezando por
0.3 dale valores a los 6 env_sprite hasta el mas alejado, que va a
tener un valor de 1.
Para darle aún más realismo, también vamos a
cambiar los valores del campo Framerate de cada env_sprite. Asi evitamos
que la animación de cada uno sea igual que la de los demás,
consiguiendo unos movimientos aleatorios mas próximos a los
del auténtico vapor. Empezamos de nuevo por el que está
mas pegado a la tubería. Nosotros dimos a los env_sprite valores
de 10, 14, 18, 22, 26 y 30, pero podes ajustarlo a tu gusto, claro
está.
Para ir terminando los efectos visuales tenemos que modificar los
valores de transparencia de cada env_sprite, ya que cuanto mas alejado
esté de la tubería, mas transparente va a ser el vapor,
hasta que desaparezca. Entonces en el campo FX Amount ponemos un valor
bajo, como 80 al más cercano a la tubería (esto lo hace
transparente, podes elegir un numero entre 0 =invisible, y 255 = totalmente
opaco).
Vamos
a ir reduciendo el valor de los env_sprite. Para que te des una idea,
el último env_sprite tiene un valor de 15. O sea que los valores
de los env_sprite fueron desde 80 con el primero a 15 con el último.
Agregando Detalles:
Para que el realismo sea total, como siempre, vamos a poner una entidad
sonora: ambient_generic (vamos a explicar esta entidad más
adelante) y elegimos un sonido de vapor (dentro del PAK del Half-Life
tenemos el sonido ambience/steamjet1.wav).
Entonces
le damos las propiedades que queramos, como Start Silent (que comience
en silencio, por si luego lo vamos a activar con un botón o
sentencia) y Small Radius, esto nos indica que el radio de alcance
del sonido es chico, ya que la fuga de vapor es chica.
Por último nos queda cambiar la propiedad Name, ingresando
el nombre: vapor.
Esto es más o menos como va quedando:
.jpg)
También podemos hacer que el vapor dañe al jugador,
para ello vamos a crear un sólido con la textura aaatrigger,
lo ponemos alrededor del vapor y entonces lo transformamos [Ctrl+T]
en una entidad trigger_hurt. Configuramos sus propiedades: en el casillero
Name ponemos el mismo nombre que las entidades env_sprite, en nuestro
ejemplo habíamos usado el nombre: vapor. Damage ingresamos
la cantidad de daño que queremos que le haga al personaje cuando
se acerque, por ejemplo 5. Y para que el daño que cause sea
por quemadura, en el campo Damage Type seleccionamos Burn.
Ahora, si vamos a hacer que el vapor se pueda activar (lo que implica
que el daño también se active), tenemos que darle a
esta entidad (trigger_husrt) un valor de Start Off en sus Flags.
Interactuando con el Vapor:
Ahora hay varias posibilidades. Podemos hacer que el vapor esté
siempre ahí, que aparezca y desaparezca rápidamente,
o hacer que aparezca y desaparezca de forma progresiva:
Para que permanezca en su mismo estado, ponemos los env_sprite con
la propiedad de Start On, en la entidad ambient_generic desactivamos
la opción Start Silent, y en la entidad trigger_hurt desactivamos
la opción Start Off.
Para
hacer que aparezca y desaparezca rápidamente, dejamos las propiedades
como las vinimos configurando y nos aseguramos que todas las entidades
tengan el mismo Name: vapor. Para que cuando activemos el botón
se activen todas las entidades al mismo tiempo.
También
podemos usar además del botón, una entidad multi_manager
(capaz de manejar hasta 16 eventos) y activar cada entidad con un
retardo que estipulemos (en segundos). Entonces damos a cada env_sprite,
al ambient_generic y trigger_hurt nombres diferentes.
Ahora viene lo difícil: Entramos en las propiedades del multi_manager
y activamos el modo SmartEdit. Ahora vemos que tenemos un botón
de Add para añadir parámetros a la entidad multi_manager.
Lo presionamos y metemos en el campo Key el nombre de cada entidad,
y en Value el valor en segundos del retardo. Nosotros usamos un valor
mas pequeño para el env_sprite que está mas cerca de
la tubería que para el mas alejado. Quedan estos valores para
los env_sprite: 0.5, 0.75, 1, 1.25, 1.5 y 1.75.
Y
para la entidad ambient_generic y la trigger_hurt, le puse 0.5.
Ahora tenemos que darle un nombre al multi_manager para que pueda
ser activado con un botón como ya vimos en tutoriales anteriores,
o podemos crear un sólido con la textura aaatrigger y asignarle
la entidad trigger_multiple o trigger_once. (el primero repite su
accionar cada vez que un jugador lo atraviesa, el trigger_once realiza
su accionar solamente una vez que el jugador pasa). Su configuración
es muy parecida a la del botón, solo tenemos que ingresar el
nombre de la entidad multi_manager en el casillero Target.
Fuego:
Ahora para crear el fuego, vamos a simular una fogata, pero vos podés
ubicarlo donde más te plazca.
Empezamos poniendo una entidad env_sprite sobre los pedazos de madera
que vamos a quemar. En las propiedades, en Sprite Name escribimos
el nombre de algún sprite de fuego, en este caso vamos a usar
el sprites/flame.spr que es precisamente una llamarada.
Después en la propiedad Render mode elegimos la opción
Additive. En Render FX pone 150. Lo que sigue es arreglar la escala
y los demás valores que crean convenientes para su fuego. Nosotros
pusimos una escala de 0.5.
.jpg)
Calor:
Ahora vamos a hacer que al acercarnos nos queme (esto es similar a
la quemadura creada por el vapor).
Para que el fuego cause daño a quien se acerque, vamos a crear
un sólido con la textura aaatrigger, lo ponemos alrededor del
fuego y entonces lo transformamos en una entidad trigger_hurt. Configuramos
sus propiedades: en Damage ponemos la cantidad de daño que
queremos que le haga al personaje cuando se acerque, por ejemplo 5.
Y para que el daño que cause sea por quemadura, en el campo
Damage Type seleccionamos Burn.
Detalles:
Bueno, para que quede la ilusión del fuego completa, haría
falta añadirle sonido y luz. Esto es muy sencillo, agregamos
un ambient_generic y utilizamos algún sonido de llamarada dentro
del .PAK de HL y para complementar el sonido, agregamos una entidad
light y en la propiedad Appearance elegimos alguna de estas: Candel
A, Candle B o Candle C.
10)
LÍQUIDOS:
Antes que nada vamos a aclarar que hay 3 tipos de líquidos:
estáticos, animados y realistas.
Líquidos estáticos:
Este es el mas fácil de crear. Sólo necesitas una textura
que comience por el carácter de exclamación ! (como
!waterblue, !lavax, !toxicgrn1, !radio, etc.).
Ahora haces un sólido con ella y ya tenes tu fluido listo para
servir.
Lo único malo de hacerlo de este modo es que no puedes hacer
que el fluido tenga movimiento superficial (oleaje), ni transparencia.
Liquido animado:
Este es el modo mas extendido de crear líquidos, porque podemos
hacer que tenga oleaje, que sea transparente y que se pueda mover
(hacer que suba o baje)
Se hace en un principio como antes: seleccionamos una textura de liquido,
creamos un sólido con la textura elegida y lo transformamos
[Ctrl+T] en una entidad func_water.
Entramos en sus propiedades y las configuramos como más nos
guste. Antes de nada estableceremos los valores de Render Mode en
Texture, y FX Amount en, por ejemplo, 150.
Ahora vamos a las 2 últimas propiedades. En la penúltima
propiedad, llamada Contents pondremos Water (agua), ya que si elegimos
Slime (cieno) o Lava vamos a morir al instante. Ahora, si queremos
oleaje, nos vamos a la última opción llamada Wave Height
(altura del oleaje) y le ponemos la altura que queramos, les recomiendo
nos sobrepasar un valor de 5 por que las olas son enormes y no se
ven nada reales.
Nota: Para hacer que
dañe al jugador, crea un sólido con la textura aaatrigger
del mismo tamaño que el sólido del agua y conviértelo
en una entidad trigger_hurt. Entonces establecemos sus propiedades
a gusto, por ejemplo en Damage (daño) ponemos un valor de 10
(acordate que si pones 100 te mata en un segundo) y en Damage Type
(tipo de daño) ponemos Chemical (químico).
Liquido realista:
La idea es hacer una zona con líquidos que tengan la capacidad
de desplazar al jugador, como si lo llevara la corriente...
Primero comenzamos por la textura, que ya no va a poder ser como las
otras, sino que va a tener que ser una con scroll (movimiento) como
por ejemplo scrolltoxic. Hacemos un sólido con ella, que va
a ser nuestro líquido. Entonces en vez de hacerlo func_water
como antes, lo hacemos func_conveyor (cinta transportadora)
Entonces entramos en sus propiedades y ponemos en Conveyor Speed (velocidad
de transporte/arrastre) un valor de 20.
También, muy importante, tenemos que establecer el ángulo
que va a ser hacia donde nos arrastre el agua (para editar el ángulo,
entra a propiedades, mira arriba a la derecha). Desde la vista TOP
vemos el ángulo que queremos, como quiero que me lleve hacia
la derecha, pongo 0º. Acordate de también ponerle el mismo
valor al ángulo de la textura, para que quede realista. Si
querés que te lleve hacia la izquierda pone 180°, arriba
(según la vista TOP) 90° y abajo (según la vista
TOP) 270°, pero si querés que te levante o te baje al lado
del circulo negro tenés un botón que si lo presionas
se abre un menú que donde están las opciones "up"
(arriba) y "down" (abajo).
Después vamos a la solapa Flags y seleccionamos las dos opciones,
No Push y Not Solid.
Ahora hacemos un sólido exactamente con el mismo tamaño
del de antes, pero esta vez si va a ser func_water. Entonces entramos
a sus propiedades y la hacemos invisible, porque solo queremos de
ella sus propiedades de líquido, nada mas. Para hacer esto,
vamos como siempre, dentro de sus propiedades, a Render Mode y le
damos el valor de Texture, y en FX Amount ponemos 0.
Para finalizar hacemos otro sólido con una entidad asignada,
pero esta vez será trigger_push. Lo situamos exactamente como
los otros dos, para que coincidan los tres. Entramos en sus propiedades
y establecemos el valor de la velocidad de empuje.
11) VIDRIOS:
En este tutorial te vamos a enseñar a crear varios tipos de
vidrios, tenemos los que se rompen, los polarizados de uno o ambos
lados y los que no se rompen.
Vidrios rompibles:
Estos son los básicos. Simplemente crea un sólido con
una textura de vidrio (todas las texturas de vidrio contienen la palabra
glass en su nombre así que ya sabes como filtrarlos con el
VHE). Después de que lo creamos lo convertimos en una entidad
func_breakable (Función Rompible) y entra en sus propiedades,
las que vamos a configurar a gusto, yo solo te digo para que sirve
cada cosa.
Target
on Break: Si querés que algo se active/desactive
cuando el vidrio sea roto pone el nombre del objeto que querés
activar/desactivar en este casillero..
Strenght: Esta es
la dureza del vidrio, lo normal para un vidrio no sobrepasa casi
nunca los 50 o como un extremo máximo 100, a menos que sea
un vidrio como el techo de una zona, en cuyo caso debería
ser un vidrio fuerte, ya que en la realidad un vidrio así
tendría que soportar mucho peso, de si mismo, como de factores
climáticos como lluvia, granizo, nieve, etc.
Material Type: Acá
pone si o si glass, para que cuando se rompa se vean pedazos de
vidrio y suene como un vidrio roto, ya que si elegís otro,
como metal, cuando rompas el vidrio van a salir pedazos de metal
en lugar de vidrio.
Gibs directions: Este
es un detalle que dirige el movimiento de los pedazos rotos. Si
elegís Random van a salir hacia cualquier lado cuando rompas
el vidrio, pero si pones Relative to Attack, el movimiento va a
ser relativo al ataque. Por ejemplo, si la bala ingreso por la cara
izquierda del vidrio, los pedazos van a salir eyectados de izquierda
a derecha. Obviamente, este último es el modo más
real y por lo tanto queda mejor, así que sugerimos uses Relative
to Attack en lugar de Random, salvo que quieras recrear una situación
especial.
Render Mode: Utilizamos
la opción Texture.
FX Amount: Esto define
la transparencia del vidrio, va de 0 a 255, 0 invisible y 255 opaco,
recomiendo para vidrios entre 75 y 180.
Ahora si entramos a la solapa Flags vamos a ver 3 características
que nos interesan: Only Trigger (solo puede ser roto mediante otra
entidad), Touch (se rompe cuando hacemos contacto con el vidrio,
supongo no lo he usado) y Pressure (se rompe por presión,
es decir, cuando algún objeto cae sobre el mismo, o cuando
caminamos sobre su superficie).
Vidrios no rompibles:
Hacer un vidrio no rompible es exactamente igual, pero con la entidad
func_wall y no tenés las siguientes propiedades: Target on
Break, Strenght, Material Type ni Gibs Directions. Esta entidad no
tiene Flags. Asi que las únicas propiedades que tenés
que modificar son Render Mode y FX Amount.
Vidrios polarizados de un solo lado:
Empecemos por tener creado un vidrio con la entidad func_wall común
y corriente, ahora abrimos la herramienta de Aplicación de
Texturas [Shift+A] y a una de las caras del vidrio le aplicamos la
textura {blue (ese color azul se vuelve transparente cuando utilizamos
una entidad y la configuramos correctamente).
.jpg)
.jpg)
Ahora vamos a crear un vidrio idéntico al anterior. Vamos a
utilizar una textura más oscura para el vidrio que va a ser
polarizado. Luego los juntamos perfectamente de modo tal que sus caras
azules estén pegadas completamente. En la screen debajo están
separadas pero solo para que vean como ubicamos los vidrios con respecto
a las texturas:
.jpg)
Pues bien, convertimos el vidrio polarizado en una entidad func_wall
y en sus propiedades Render Mode ponemos Texture y en FX Amount ponemos
180.
El vidrio que resta también lo convertimos a la entidad func_wall
pero en sus propiedad Render Mode ponemos Texture y en Fx Amount ponemos
70.
12) SONIDOS:
Antes que nada, vamos a elegir un sonido que nos guste y quede bien
para la parte que vamos ambientar. En nuestro tutorial, escogimos
el sonido Drips.wav que se encuentra en el pak0.pak del Half-Life,
exactamente en ambience/Drips.wav.
Ahora, para hacer que el sonido suene en nuestro mapa debemos agregar
una entidad, en este caso la misma es ambient_generic. De esta forma,
en la vista 3D vamos a ver el siguiente icono:
.jpg)
Ahora
vamos a configurar la entidad en cuestión, para ello, abrimos
sus propiedades, y vemos lo siguiente:
.jpg)
En
el casillero de Path/filename.wav of WAV ponemos, como dijimos antes,
ambience/Drips.wav y ya el sonido debería funcionar perfectamente
haciendo un loop (sonido que se repite) infinitamente.
Para
no quedarnos solo en los límites del sonido, te vamos a explicar
el resto de las entidades más importantes:
Volume (10 = Loudest):
Esta propiedad habla por si sola, y mediante esta, vamos a poder cambiar
el volumen del sonido.
Dynamic Presets: Esta
propiedad es muy interesante, ya que si tenemos un sonido de una voz,
cambiando esta propiedad, el HL va a aplicar filtros sobre el sonido
y lo va a simular la opción que hayamos elegido (Por ej: la
voz en off "robótica" de HL, se hace con esta opción).
Fade in time (0-100):
Esto mide el tiempo en segundos, del efecto Fade In (Comienzo del
sonido, subiendo el volumen).
Fade out time (0-100):
Esto mide el tiempo en segundos, pero en este caso, del efecto Fade
Out (Fin del sonido, bajando el volumen).
Las demás propiedades son todos efectos/filtros adicionales
para agregar a nuestro clip de audio. Por otro lado, la entidad ambient_generic
tiene los siguientes flags:
Play Everywhere: Tildando
esta opción, vas a lograr que el sonido se escuche en todo
el mapa.
Small / Medium / Large Radius:
Si no utilizamos la opción anterior, esta nos ayuda a establecer
el radio del sonido.
Start Silent: Tildando
esta opción, el sonido no se reproduce. Esto es ideal para
que el sonido sea activado por una sentencia (trigger o por un botón).
Is not Looped: Como
dijimos antes, un Loop hace que el sonido se repita infinitamente,
si tildamos esta opción, el sonido solo se va a reproducir
una sola vez.
13)
LLUVIA:
Lo primero que vamos a hacer es bajarte el sprite de lluvia y descomprímelo
en la carpeta valve/sprites. Lo siguiente que vamos a hacer es crear
un entorno en donde ubicar la lluvia. Como podemos ver en la imagen
de aquí abajo, vemos que las entidades están ubicadas
en un lugar a cielo abierto, por razones obvias:
.jpg)
Ahora vamos a crear un punto en donde va a empezar a moverse la gota
(inicio) y otro en donde va a finalizar (fin) este movimiento.
Vamos a ubicar una entidad info_Target en donde queremos que comience
el movimiento de la gota. Para hacer que luzca más real, nos
deberíamos situarlo cerca del cielo. Además vamos a
ubicar otra emtidad info_Target cerca al piso en donde va a terminar
el movimiento de la gota. Lo próximo que nos queda por hacer
es cambiar el nombre de estas entidades como describimos aquí
debajo:
info_target (inicial): gota1ini
info_target (final): gota1fin
Ahora estamos creando solo una gota, pero si querés hacer más
reemplaza el número 1 por cada gota que crees porej: gota2ini,
gota3ini; gota2fin, gota3fin.
Esto es un trabajo no muy agradable, aunque le dan un toque profesional
a tus mapas. La alternativa: RainMaker, un programa que genera estas
3 entidades automáticamente y nos ahorran mucho trabajo.
.jpg)
Ahora
que ya definimos los nombres de las gotas, vamos a crear la entidad
que define el sprite y el movimiento. Para ello vamos a crear una
entidad env_beam por cada gota (no importa donde los hayamos creado)
y cambiamos sus propiedades de la siguiente manera:
Start
Entity: gota#ini (donde # es el número correspondiente
a cada gota).
End
Entity: gota#fin (idem anterior).
Beam
Color (R G B): ponemos el valor 255 255 255, de
otra forma, las gotas serían invisibles.
Radius:
512.
Life
(seconds, 0=infinite): ponemos el valor 0.
Width
of Beam: esto define el ancho del sprite, nosotros
vamos a usar un valor de 20.
Sprite
Name: ponemos el nombre del sprite (*.spr) y la
carpeta. En este caso es sprite/rain.spr.
Texture
Scroll: esto define la velocidad de movimiento,
y es importante que pongamos un valor negativo; sino, la lluvia
va a dirigirse hacia arriba. Nosotros vamos a usar un valor de -20
o -30.
En la solapa Flags tildamos Start On (esto habilita la lluvia desde
que ingresamos al mapa), y finalmente Shade Start.
Ahora que ya tenés las 3 entidades que forman cada gota, podés
duplicarlas para ahorrar tiempo, pero ten mucho cuidado: no hay que
olvidar cambiar los nombres de cada entidad, en consecuencia, las
gotas van a caer en un mismo lugar y puede suceder otro tipo de error
desconocido.
Nota: Hay mods como
Spirit of Half-Life o la versión del Counter-Strike 1.6, las
cuales tienen entidades propias de lluvias ya programadas, es decir,
con solo agregar una sola entidad, ya tenemos lluvia en todo el mapa.
14)
OBJETOS DESTRUCTIBLES:
En este tutorial es muy sencillo y te vamos a enseñar como
crear sólidos que se destruyen cuando los disparamos se destruyen.
Vamos a empezar creando un sólido de 8 x 64 x 48 unidades con
la textura glassblue1 situándolo como si fuese una ventana
como se ve en la imagen:
.jpg)
Lo siguiente que vamos a hacer es convertir [Ctrl+T] ese sólido
a la entidad func_breakable. Esta entidad nos va a permitir romper
en pedazos cualquier sólido que deseemos, ya sea disparándole
o mediante una sentencia (trigger o un botón).
.jpg)
Ahora
vamos a conocer un poco las propiedades:
Target
on Break: Si necesitamos que cuando se destruya
el sólido, se active una secuencia, en este casillero ponemos
su nombre, en nuestro ejemplo dejamos este casillero vació.
Strengh:
Esta propiedad mide la dureza del sólido. Para nuestro ejemplo
lo vamos a dejar en 1.
Material
Type: Si desplegamos este menú vamos a ver
varias opciones. Cada una de esas categorías define los gibs
(astillas/pedazos) del objeto que rompamos. En nuestro caso, vamos
a dejar la opción por defecto: Glass.
Gibs
Direction: Esta propiedad define hacia que lado
van a salir despedidos los gibs. Te recomendamos usar la opción
Relative to Attack, ya que luce más realista, ya que toma
en cuenta el lado en que disparamos.
Delay
befor Fire: Este valor en segundos sirve en el caso
que necesitemos que el sólido se destruya luego de X cantidad
de segundos luego de disparado. Nosotros lo vamos a dejar en 0.
Gib
Model: Si no nos gusta ninguna de las categorías
de materiales de gibs, en este casillero podemos definir un modelo
propio.
Luego tenemos propiedades como Render Mode y Fx Amount, las cuales
ya vimos como funcionan y en este caso es exactamente igual.
Ahora, para concluir con la configuración de la entidad func_breakable
vamos a ver sus flags:
Only
Trigger: este flag nos sirve si queremos evitar
que el sólido se rompa al dispararse. En este caso, solo
se va a romper cuando alguna sentencia lo active por su nombre.
Touch:
tildando esta opción, vamos a poder romper el sólido
en cuestión con sólo pasar a través de el,
sin necesidad de dispararle.
Pressure:
con este flag tildado, el sólido se va a romper cuando algo
haga fuerza sobre el mismo. Por ejemplo: cuando pisamos el sólido,
o otro sólido ejerce presión sobre el.
Con esto concluimos el tutorial de objetos destructibles. En el mapa
de ejemplo incluimos un ejemplo con dos sólidos rompibles:
uno de vidrio y otro de metal. Las únicas diferencias radican
en 2 o 3 propiedades.
15)
HACER AUTOS:
Vehículos en el CS:
Lo primero es diseñar el vehículo, una vez hecho esto,
crea justo en el medio del vehículo un nuevo sólido
(un cubo por ejemplo), con la textura "Origin" (que para
sintetizar le voy a decir "cuborigin", y agrupalo con el
vehículo. Este sólido con al textura "Origin"
va a determinar el centro de gravedad del vehículo, lo que
va a hacer saber al Half-Life que ese sólido se puede mover
en todas las direcciones.
Motor:
Ahora hay que hacer el "motor" del vehículo. Para
esto, crea adelante del vehículo, y a la misma altura que el
cuborigin, dos entidades "path_tracks", alineadas de forma
que ambas coincidan en línea recta con el cuborigin. Entra
en las propiedades de un "path_track" y ponle de nombre,
por ejemplo, "parada1", y en "Next stop target"
pone "parada2". Abrí las propiedades de la otra entidad
y ponle de nombre "parada2", y en "Next stop target"
pone "parada1". Con esto, conseguís un loop, y así
engañas al mot