Texturas animadas
En nuestros niveles disponemos de la posibilidad de poder asignar texturas animadas en cualquier parte del escenario,
de esta forma podremos dotar de más vida a nuestros niveles.
Estas animaciones podrán ser de dos tipos diferentes:
· Secuencias de diferentes imágenes que deberás diseñar y asignar usando el procedimiento 'Animar'.
· Efectos visuales que se generan dinámicamente, también llamados efectos '2D Shaders'. Para este tipo de textura animada dispones de
diferentes procedimientos dependiendo del efecto que quieras aplicar sobre la textura.
Las texturas animadas son en realidad modificaciones que se realizan sobre las texturas que ya existen en tu nivel. Por lo que es importante
saber el nombre de la textura que quieres animar en tu nivel antes de proceder a definir qué tipo de animación o efecto quieres crear usando
un fichero .PRC.
Ficheros .PRC:
Para realizar los cambios de las texturas de tu nivel por texturas animadas, debes crear un fichero con extensión .PRC que contendrá
diversos parámetros para sustituir las texturas indicadas por efecto animado deseado. Debe existir un fichero .PRC distinto por cada nivel al
que queramos aplicar texturas animadas.
Por ejemplo, si tenemos un nivel que se llama 'calle.bsp' debes crear un fichero llamado 'calle.prc' que contendrá la información
sobre todas las texturas animadas de ese nivel.
Estos ficheros .PRC deben estar en la misma carpeta que los niveles .BSP, es decir, en la carpeta 'levels'.
El contenido de los ficheros .PRC se trata de unas seríe de líneas texto que puedes editar con cualquier editor de textos tipo Notepad o similar.
Cada textura animada básicamente está definida por la cláusula wbm: o wbn:, el nombre de la textura que quieres
animar (que ya debe existir en el nivel), el nombre del procedimiento que quieres aplicar sobre la textura y finalmente una serie de parámetros entre
paréntesis. La sintaxis de estos parámetros depende de cada tipo de procedimiento.
Todo ello entre corchetes precedido de la palabra procedurals.
La sintaxis general sería así:
procedurals
{
[wbm: wbn:] textura Procedimiento(parámetros);
}
Usa wbm: si quieres que la textura animada se muestre cuando comience el nivel, de
lo contrario usa wbn:. Excepto en el procedimiento 'Animar' que ya dispone de su propio parámetro para tal fin.
Puedes incluir tantas líneas como texturas quieras animar en tu nivel. Todas ellas en el interior de los corchetes. Por ejemplo:
procedurals
{
wbm: roca Animar(cascada, 3, 0.1, 0, True);
wbm: brick Animar(plasma, 5, 0.5, 0, False);
wbn: floor67 BumpMap();
wbm: cloth07 ElectricFx(Fx_PalFire, Fx_EnergySpin, 1, 2);
}
Procedimientos disponibles:
Animar. Muestra secuencias de imágenes.
BumpMap. Efecto de relieve continuo.
Water. Efecto de gotas de agua.
Plasma. Efecto ondulante de plasma.
ElectricFx. Efectos de rayos eléctricos.
Fire. Efectos de fuego o humo.
Smoke. Efectos de fuego, fuego de cohetes, partículas, chispas, surtidores y otros efectos similares.
Particles. Genera dos fuentes de partículas para crear efectos de líquidos goteando, explosiones de partículas,
humo, magnetismo y gran variedad de vistosos efectos.
Procedimiento Animar
Sintaxis:
wbm: textura Animar(secuencia_bmp, número_de_imágenes, retardo, num_ciclos, activada);
textura:
Nombre de la textura aplicada en el nivel (usando World Editor) y que se desea sustituir por la secuencia animada.
secuencia_bmp:
Nombre de la secuencia de imágenes .bmp que sustituirá a la textura que
hemos indicado anteriormente. Esta secuencia de imágenes siempre ha de comenzar con '1' y ser progresiva (
Ejemplo: llave1.bmp, llave2.bmp, llave3.bmp, llave4.bmp, llave5.bmp, ...)
Todos los ficheros que componen la secuencia deben estar en la carpeta 'bmp \ texturas'.
Deben ser imágenes de la misma resolución que la textura que se quiere sustituir.
Los tamaños permitidos de estas imágenes pueden ser: 32x32, 64x64, 128x128 o 256x256.
Las imágenes han de ser de 256 colores (de 0 a 255), pero el color 255 (el último) no se debe utilizar en las
imágenes, de lo contrario se producirán extraños efectos en algunas zonas de la animación.
número_de_imágenes:
Número máximo de imágenes que componen la secuencia.
Indicar aquí el último número que hemos utilizado en la secuencia de imágenes .bmp que hemos creado.
retardo:
Tiempo en segundos entre cada imagen de la secuencia.
Variando este dato podremos presentar la animación más rápida o más lenta.
num_ciclos:
Número de veces que quieres que se repita la secuencia animada.
Usa el valor 0 para que se repita indefinidamente.
Cuando finalicen todos los ciclos, la textura que quedará fija será la última de la secuencia. Pero si quieres que esa última textura sea otra
diferente, sólo debes crear una textura .BMP con el mismo nombre de la secuencia pero con la numeración 0. Por ejemplo cascada0.bmp.
activada:
Poner 'True' si se desea que la textura animada comience a funcionar desde
el mismo instante que empiece el nivel, de lo contrario poner 'False'.
Durante el transcurso del juego podremos activar o desactivar texturas animadas utilizando los comandos
'TEA1' y 'TEA0'.
Ejemplo:
La idea es sustituir una textura que hayamos utilizado en la construcción de nuestro nivel, por una secuencia de texturas para que
de esta forma, durante el juego, se vean en la secuencia correcta para formar la animación.
Para mostrar el efecto de una cascada tenemos que crear los siguientes ficheros (cascada1.bmp,
cascada2.bmp y cascada3.bmp):
El contenido del fichero .PRC para el ejemplo anterior sería:
procedurals
{
wbm: roca Animar(cascada, 3, 0.1, 0, True);
}
En este ejemplo con este fichero 'calle.prc' estamos indicando que cuando estemos jugando al nivel 'calle.bsp' la textura
llamada 'roca' que utilizamos en World Editor como textura aplicada en alguna cara del nivel, la cambie por la
secuencia 'cascada', secuencia que la componen 3 imágenes, que se espere 0.1
segundos entre cada cambio de imagen, y con 'True' le indicamos que puede hacer todo eso desde el mismo
instante que comience el nivel.
El '0' es para que la secuencia se repita indefinidamente.
Texturas animadas con máscaras de transparencia:
También puedes usar texturas con transparencias si copias en la misma carpeta los ficheros Alpha de transparencia de cada uno de los cuadros
de la secuencia animada. Como siempre, los nombres de estos ficheros Alpha deben comenzar con a_ .
Por ejemplo:
Ficheros hotel1.bmp y hotel2.bmp
Y los ficheros Alpha a_hotel1.bmp y a_hotel2.bmp
Resultado final
Para el correcto funcionamiento de este tipo de texturas con transparencia es recomendable que las uses sobre bloques sin
grosor marcados como 'Sheet' en la sección 'Brush Attributes' y la cara de aplicación de la textura marcada como 'Transparent' en
la sección 'Face Attributes'.
Procedimiento BumpMap
Sintaxis:
textura:
Nombre de la textura aplicada en el nivel (usando World Editor) y que se desea sustituir por el efecto.
Ejemplo:
wbm: floor24 BumpMap();
Procedimiento Water
Sintaxis:
textura:
Nombre de la textura aplicada en el nivel (usando World Editor) y que se desea sustituir por el efecto.
Ejemplo:
wbm: waves18 Water();
Procedimiento Plasma
Sintaxis:
wbm: textura Plasma( movi_vel, expa_vel, transparencia, desplazamiento, [trig, paleta_colores] );
textura:
Nombre de la textura aplicada en el nivel (usando World Editor) y que se desea sustituir por el efecto.
movi_vel:
Velocidad del movimiento (Valores entre 0.01 y 0.6).
expa_vel:
Velocidad de expansión (Valores entre 2 y 25).
transparencia:
Transparencia (Se recomienda usar ' f ').
desplazamiento:
' f ' si se usa 'paleta_colores'
' t ' si no se usa 'paleta_colores'
paleta_colores:
Es opcional. Grupo de tres colores definidos cada una de ellos por componentes RGBA (Red, Green, Blue, Alpha) que determinan los colores
y transparencia del plasma.
Este efecto sólo funciona sobre texturas de un tamaño de 256 x 256.
Ejemplo 1:
Plasma multi-color sin usar la textura original con una paleta de colores.
wbm: cloth23 Plasma(0.01, 4, f, f, trig, 128,128,128,255, 5,1,5,0, 0,0,0,0 );
Ejemplo 2:
Plasma negro con transparencia sin usar la textura original con una paleta de colores:
wbm: cloth23 Plasma(0.01, 4, f, f, trig, 10,1,5,255, 128,128,128,255, 0,0.5,0,0 );
Ejemplo 3:
Plasma ondulando la textura original:
wbm: cloth23 Plasma(0.01, 4, f, t );
Procedimiento ElectricFx
Sintaxis:
wbm: textura ElectricFx(paleta_colores, tipo_rayo, x_pos, y_pos);
textura:
Nombre de la textura aplicada en el nivel (usando World Editor) y que se desea sustituir por el efecto.
paleta_colores:
Paleta de colores que se aplicará al efecto. Deber ser una de estas: Fx_PalSlime, Fx_PalFire, Fx_PalOrange o Fx_PalBlue
tipo_rayo:
Tipo de rayos que se mostrarán. Puede ser uno de estos: Fx_EnergySpin o Fx_Spark
x_pos y_pos:
Para ajustar la posición del efecto sobre la textura.
Este efecto sólo funciona sobre texturas de unos tamaños de 128 x 128 o 256 x 256.
Ejemplo 1:
wbm: cloth29 ElectricFx(Fx_PalFire, Fx_EnergySpin, 1, 2);
Ejemplo 2:
wbm: cloth29 ElectricFx(Fx_PalBlue, Fx_Spark, 1, 2);
Procedimiento Fire
Sintaxis:
wbm: textura Fire(fuego_bajo, bordes, R,G,B,A, VR,VG,VB,VA);
textura:
Nombre de la textura aplicada en el nivel (usando World Editor) y que se desea sustituir por el efecto.
fuego_bajo:
Usar ' T ' para un efecto de menos altura y más rápido. Usar ' F ' para un efecto con una altura normal.
bordes:
Usar ' pow ' para bordes de color normal. Usar 'pol' para bordes multi-color.
R,G,B,A:
Cuatro valores para definir el color del efecto.
R para el nivel de rojo (Valores de 100 a 800).
G para el nivel de verde (Valores de 100 a 800).
B para el nivel de azul (Valores de 100 a 800).
A para el nivel de transparencia (Valores de 100 a 800).
VR,VG,VB,VA:
Cuatro valores para definir las variaciones que realizará el efecto sobre el color definido mediante RGBA.
VR para variación del rojo (Valores de 0.0 a 1.0 ).
VG para variación del verde (Valores de 0.0 a 1.0 ).
VB para variación del azul (Valores de 0.0 a 1.0 ).
VA para variación de la transparencia (Valores de 0.0 a 1.0 ).
Este efecto funciona sobre texturas de unos tamaños de 64 x 64, 128 x 128 o 256 x 256.
Ejemplo 1:
Fuego de color naranja:
wbm: cloth26 Fire(F, pow, 230,230,255,500, 0.2,0.5,1.0,0.4);
Ejemplo 2:
Fuego rojo con bordes multi-color:
wbm: cloth26 Fire(F, pol, 230,230,255,500, 0.2,0.5,1.0,0.4);
Ejemplo 3:
Fuego amarillo con llamas más definidas:
wbm: cloth26 Fire(F, pow, 630,630,255,400, 0.2,0.5,1.0,0.2);
Ejemplo 4:
Humo:
wbm: cloth26 Fire(F, pow, 250,250,250,150, 0.2,0.2,0.2,0.1);
Procedimiento Smoke
Sintaxis:
wbm: textura Smoke(paleta_colores, número_partículas, x_pos, y_pos, z_pos, vx, vy, vz);
textura:
Nombre de la textura aplicada en el nivel (usando World Editor) y que se desea sustituir por el efecto.
paleta_colores:
Paleta de colores que se aplicará al efecto. Puede ser una de estas: Smoke_PalFire, Smoke_PalSlime, Smoke_PalOrange o Smoke_PalBlue
número_partículas:
Cantidad de partículas usadas para el efecto (Valores de 1 a 500).
x_pos, y_pos:
Para ajustar la posición del efecto sobre la textura.
z_pos:
Normalmente es 25.0
En algunos casos permite ajustar el tamaño del origen de las partículas (Valores de 1 a 40).
vx:
Variación de x_pos en el tiempo (Valores de 1 a 80).
Permite ajustar el tiempo de existencia de las partículas.
Si se usan valores altos como 40, se replican múltiples efectos.
vy:
Variación de y_pos en el tiempo (Valores de 1 a 180).
Usar el valor 5 para una dispersión lateral.
Usar el valor 180 para una dispersión más central.
vz:
Variación de z_pos en el tiempo (Valores de 1 a 40).
Normalmente es 1.0
Este efecto funciona sobre texturas de unos tamaños de 64 x 64, 128 x 128 o 256 x 256.
Ejemplo 1:
wbm: floor19 Smoke (Smoke_PalFire, 64, -25.0, 64.0, 25.0, 4.0, 5.0, 1.0);
Ejemplo 2:
wbm: floor25 Smoke (Smoke_PalSlime, 128, -25.0, 64.0, 25.0, 4.0, 5.0, 1.0);
Ejemplo 3:
wbm: floor27 Smoke (Smoke_PalBlue, 250, 6.0, 64.0, 25.0, 4.0, 180.0, 1.0);
Ejemplo 4:
wbm: floor19 Smoke (Smoke_PalOrange, 64, -25.0, 64.0, 25.0, 30.0, 5.0, 1.0);
Ejemplo 5:
wbm: floor19 Smoke (Smoke_PalSlime, 32, -25.0, 64.0, 25.0, 4.0, 160.0, 1.0);
Procedimiento Particles
Sintaxis:
wbm: textura Particles(
número_partículas, 1,
paleta_colores,
suavizado, radio_suavizado,
patrón_efecto,
hay_magnetismo [mag_x, mag_y, mag_z],
hay_atracción [fuerza, F, atr_x, atr_y, atr_z],
x_pos, y_pos, z_pos, x_vel, y_vel, z_vel, t_part, 0,
vx, vy, vz, vx_vel, vy_vel, vz_vel, v_t_part, 0, frec,
t_emision_part, zona_mov,
end
)
textura:
Nombre de la textura aplicada en el nivel (usando World Editor) y que se desea sustituir por el efecto.
número_partículas:
Cantidad de partículas usadas para el efecto. (Valores de 1 a 300)
paleta_colores:
Paleta de colores que se aplicará al efecto. Puede ser una de estas: opaquefire, fire, steam o oil
suavizado:
Nivel de suavizado del efecto (Valores de 0 a 8)
Normalmente 1
radio_suavizado:
Radio de suavizado del efecto (Valores de 0 a 8)
Normalmente 1
patrón_efecto:
Patrón de movimiento del efecto. Puede ser uno de estos: bounce, wrap o hard
hay_magnetismo:
Usar ' F ' para no aplicar fuerzas magnéticas.
Usar ' T ' para indicar a continuación tres datos (mag_x, mag_y, mag_z) que definen el magnetismo que se aplicará (Valores de 0 a 300)
hay_atracción:
Usar ' F ' para no aplicar fuerzas de atracción.
Usar ' T ' para indicar a continuación cinco datos (fuerza, F, atr_x, atr_y, atr_z) que definen la fuerza de atracción que se aplicará.
'fuerza' para indicar la cantidad de fuerza de atracción. Usa valores negativos para aplicar repulsión.
'atr_x, atr_y, atr_z' (Valores de 0 a 512)
x_pos, y_pos, z_pos:
Permite reposicionar y reorientar la dirección de las partículas (Valores de 0 a 512)
x_vel, y_vel, z_vel:
Esto permite definir la velocidad a la que se mueven las partículas (en pixeles por segundo) y sobre qué eje (Valores de 0 a 256)
t_part:
Permite ajustar el tiempo de vida de las partículas (Valores de 1 a 80)
vx, vy, vz:
Variación de x_pos, y_pos y z_pos en el tiempo (Valores de 0 a 180)
vx_vel, vy_vel, vz_vel:
Variación de x_vel, y_vel y z_vel en el tiempo (Valores de 0 a 80)
v_t_part:
Variación de 't_part' en el tiempo (Valores de 0 a 80)
frec:
Permite variar la frecuencia de aparición de las partículas (Valores de 0 a 256)
Normalmente con valor 0
t_emision_part:
Similar a 'frec'. Permite variar la frecuencia de aparición de las partículas (Valores de 0 a 30)
Normalmente con valor 0.01
zona_mov:
Permite limitar la zona de movimiento de las partículas.
Usa valores como: 0.00000, 0.00001, 0.0001 o 0.001
Este efecto funciona sobre texturas de unos tamaños de 64 x 64, 128 x 128 o 256 x 256.
Ejemplo 1:
wbm: cuadro_bola Particles ( 80, 1, fire, 1, 1, bounce, T, 0, 10, 0, F,
0.5,0.5,0.5, 0,0,0, 0.3, 0,
0,0,0, 0.3,0.2,0, 0.0, 0, 0,
0.01, 0.0000,
end)
Ejemplo 2:
wbm: cloth40 Particles (80, 1, steam, 2, 1, hard, F, F,
0.5, 0, 0.5, 0,0.05,0, 0.7, 0,
0,0,0, 0.03,0.02,0, 0.3, 0, 0,
0.02, 0.0,
end)
Ejemplo 3:
wbm: cuadro_bola Particles ( 110, 1, opaquefire, 1, 1, bounce, T, 0, 10, 0, T, 2, F, 0, 10, 0,
0.5,0.5,0.5, 0, 0,0, 0.3, 0,
0,0,0, 0.3,0.2,0, 0.0,0, 0,
0.01, 0.0000,
end)
Ejemplo 4:
wbm: cuadro_bola Particles ( 80, 1, oil, 1, 1, bounce, T, 10, 0, 0, F,
0.5,0.5,0.5, 0,0,0, 0.8, 0,
2,0,0, 0.9,0.2,0, 0.0, 0, 0,
0.01, 0.0000,
end)
Ejemplo 5:
wbm: cuadro_bola Particles ( 120, 1, fire, 1, 1, bounce, T, 0, 0, 8, F,
0.5,0.5,5.5, 0,0,0, 0.2, 0,
0,0,2, 7.9,0.2,0, 0.0, 0, 0,
0.01, 0.0000,
end)
Aplicación de los efectos ElectricFx, Fire, Smoke y Particles:
Para que estos efectos se muestren correctamente, debes aplicarlos sobre una textura de una cara transparente (activar 'Transparent' de
'Face Attributes' de Word Editor) con un valor de transparencia de 255 o menos ('Transparency Value' de 'Face Attributes' de Word Editor).
La transparencia del resto de las caras del 'brush' depende del efecto que quieras mostrar. Si quieres que se vean el resto de texturas del 'brush',
las caras deben estar con un valor de transparencia de 255, mientras que si lo que quieres es que no se vean deben estar con un valor de transparencia de 0.
¿ Para qué sirven todas estas texturas animadas ?:
- Fluidos más realistas (lava, agua, residuos, barro, cascadas, gotas).
- Presentar animaciones en pantallas y monitores.
- Crear habitaciones psicodélicas.
- Publicidad dinámica en paredes de calles o estadios.
- Letreros luminosos.
- Objetos del escenario con texturas cambiantes.
- Paredes vivientes tipo 'Silent Hill 3'.
- Portales inter-dimensionales que muestran formas ondulantes sólo cuando son atravesables por el jugador.
- Fuego y humo en restos de vehículos recien destruidos.
- Oráculo mágico con efectos de partículas cuando el jugador lo activa.
- Secuencias animadas que reproduzcan la rotura de cristales o lienzos.
- Secuencia animada que muestre la aparición de un 'graffiti' cuando el jugador lo dibuje.
Consulta los comandos 'TEA1',
'TEA0' y TEXTURA_ANIMADA_PRC para saber
como activar y desactivar texturas animadas durante el transcurso del juego.
Usa las propiedades de las caras donde apliques las texturas animadas ('Face Attributes' de Word Editor) para por ejemplo ajustar su
posición, tamaño, orientación o transparencia.