SpecificActor
Esta entidad se utiliza para posicionar personajes secundarios estáticos o cualquier elemento 3D en el
escenario usando modelos 3D en formato .ACT.
Parámetros de esta entidad:
ActorFile
Introducir aquí el nombre del fichero .ACT que quieras situar como personaje en el escenario o
elemento 3D. Este fichero .ACT debe existir en la carpeta actors de Entidad 3D.
Si el archivo .ACT se encuentra en otra carpeta, debes indicar la ruta completa donde se encuentra el
archivo. Por ejemplo: armas\bate.act si quieres usar el archivo bate.act que se
encuentra en la carpeta armas.
Si utilizas el editor de niveles 'World Editor Pro', los nombres de los ficheros .act que indiques en este
parámetro 'ActorFile', ponlos con las extensión .ACT en mayúsculas (por ejemplo 'estatua.ACT') si quieres que
el modelo 3D de este fichero .act no aparezca en el editor para que el editor funcione más rápido, ya
que si indicas la extensión .act del fichero en minúsculas (por ejemplo 'estatua.act')
verás una representación del modelo 3D con una sola textura y si tienes muchas entidades 'SpecificActor' en
tu nivel, observarás que el editor se hace muy lento a la hora de modificar cualquier elemento.
Motion
Nombre de la animación que queremos que realice este personaje. Este nombre ha de ser uno
de los nombres de animación que contiene particularmente cada fichero .ACT. Usa la utilidad
'Actor View' para ver los nombres de animación del .ACT que te interese.
La animación que seleccionemos se realizará de forma continua mientras este personaje
esté en el escenario.
Usa los comandos MOTC y MOTI para cambiar esta animación durante el
transcurso de tu juego.
ASpeed
Variando este valor puedes regular la velocidad de la animación que hayas establecido en el parámetro 'Motion'.
Acepta tiempos numéricos con decimales.
0.5 para una velocidad lenta.
1 para una velocidad normal (la que tenga por defecto esta animación en el fichero .ACT).
2 para una velocidad rápida.
... pero puedes usar otros valores.
Rotate X
Con 'True' haremos que el modelo 3D realice una rotación continua sobre su eje X.
Rotate Y
Con 'True' haremos que el modelo 3D realice una rotación continua sobre su eje Y (vertical).
Rotate Z
Con 'True' haremos que el modelo 3D realice una rotación continua sobre su eje Z.
RSpeed
Variando este valor podremos regular la velocidad de rotación del modelo 3D en el caso que lo hayamos establecido
con Rotate X, Rotate Y o Rotate Z.
Acepta tiempos numéricos con decimales.
0.5 para una velocidad lenta.
1 para una velocidad normal.
2 para una velocidad rápida.
... pero puedes usar otros valores.
CommandsFile
Introduciremos el nombre del fichero de comandos .ini que contiene los comandos que deseamos procesar cuando
el jugador entre en la zona de influencia de esta entidad. Este fichero .ini debe existir en la carpeta
'Comandos' de Entidad 3D.
Consulta dentro de este fichero de comandos la variable del sistema EVENTO_NOM_SPECIF si
quieres saber el nombre de la entidad causante de este evento.
Repetir_comandos_zona
Consulta este parámetro en la entidad Door. El funcionamiento es el mismo.
CommandsFile2
Introduciremos el nombre del fichero de comandos .ini que contiene los comandos que deseamos procesar cuando un proyectil de una
de las armas del jugador impacte sobre este SpecificActor. Este fichero .ini debe existir en la carpeta 'Comandos' de Entidad 3D.
Para que funcione debes poner a 'True' el parámetro 'Bloqueo_Proyectiles'.
Puedes averiguar el tipo de proyectil que ha impactado si consultas la variable del
sistema PROYECTIL_IMPACTA_SPECIF.
También puedes consultar dentro de este fichero de comandos la variable del sistema EVENTO_NOM_SPECIF si
quieres saber el nombre de la entidad causante de este evento.
Boton_accion
Con valor 'True', los comandos contenidos en el fichero especificado en 'CommandsFile' se procesarán
si el jugador toca al personaje y al mismo tiempo pulsa el botón o tecla 'Acción'.
Con valor 'False', sólo será necesario que el jugador toque al personaje para
procesar los comandos que contiene el fichero .ini que hemos especificado en 'CommandsFile'.
Boton_Accion_indicador
Consulta este parámetro en la entidad Door. El funcionamiento es el mismo.
Origin
Son tres cifras (X Y Z) que determinan la posición de esta entidad en el escenario. Estos 3 datos
normalmente no se modifican aquí y se deja que se modifiquen según movemos esta entidad (con el ratón) desde 'World Editor'.
Orientation
Son tres cifras (X Y Z) que determinan la orientación que tendrá el objeto .ACT en el escenario.
Variando estos tres ángulos (con valores entre 0 y 365 grados) podremos hacer aparecer nuestro
objeto o personaje boca abajo, tumbado, ladeado, etc..
Si ponemos 0 0 0 el objeto se presentará en la orientación original del diseño de este objeto 3D.
Ejes X Y Z en Entidad 3D
Scale
Son tres cifras (escala en X(ancho), escala en Y(alto), escala en Z(largo)) separadas por un espacio.
Permiten agrandar o reducir el tamaño inicial de nuestro personaje. Si ponemos 1
aparecerá en el escenario en el tamaño inicial de diseño de este objeto 3D. Si ponemos 2 aparecerá
el doble de grande. Si ponemos 0.5 aparecerá a la mitad de su tamaño.
Visible
Con 'False' haremos que este objeto o personaje no aparezca en el escenario. Esto se utiliza en casos en que
nos pueda interesar definir la posición de un personaje con todas sus características y ficheros de comandos, pero
que al dar comienzo el juego aún no aparezca en el nivel ni tenga ningún tipo de influencia. Posteriormente,
durante el transcurso del juego, lo podremos hacer aparecer usando el comando VIS1.
Bloqueo_ver
Con valor 'True', nos aparecerá un rectángulo azul transparente que envolverá el objeto o personaje. Esta
zona azul es la zona de bloqueo para este 'actor' y representa el espacio que el jugador no podrá atravesar
mientras el 'actor' sea visible.
Tanto si este valor está como 'True' o como 'False', el jugador no podrá atravesar esta zona.
A continuación puedes ver un ejemplo de un tanque con este rectángulo azul activado:
Bloqueo_X Bloqueo_Y Bloqueo_Z
En estas tres cajas podemos especificar valores para variar la zona de bloqueo (visible si pones 'True' en Bloqueo_ver), con el objetivo
de modificar el tamaño que tiene esta zona por defecto.
Si utilizas valores positivos aumentarás de tamaño la zona, mientras que si utilizas valores negativos reducirás la zona.
Si usas esta entidad SpecificActor para unirla al personaje del jugador usando el
comando UNIR_SPECIF_JUGADOR, estos tres datos los debes usar para ajustar la posición
del SpecificActor unido al jugador.
Zona_influencia
Son tres cifras (X para el ancho, Y para el alto y Z para la profundidad) que determinan el tamaño de una caja imaginaria que envuelve al
modelo 3D de este SpecificActor, y que establece la zona de influencia de este elemento en el nivel sobre:
- Colisiones de Bots.
- Colisiones de disparos del jugador para lanzar ficheros de comandos.
- Colisiones del personaje del jugador para lanzar ficheros de comandos.
No confundir con la zona de bloqueo que hace retroceder al jugador si colisiona con este SpecificActor.
Normalmente la zona de influencia es ligeramente más grande que la zona de bloqueo para poder detectar algunos eventos que se producen muy cerca
de este SpecificActor sin que ello suponga frenar al jugador en su avance.
En la imagen de este reloj de pared se muestra la
Zona de bloqueo de color azul, mientras que
la
Zona de influencia se muestra de color rojo.
Estas dos zonas las puedes hacer visibles
si pones a 'True' el parámetro 'Bloqueo_ver'.
Brillo
Con un valor que puede variar entre 0 y 255 podemos dar más o menos brillo al modelo 3D .ACT que represente
este 'SpecificActor'.
Color
Permite seleccionar un color para cambiar el color general del modelo 3D .ACT que representa este 'SpecificActor'.
Para que funcione debe estar a 'True' el parámetro 'Colorear'.
Colorear
Con valor True se usará el color seleccionado en el parámetro 'Color' para
aplicar ese color al modelo 3D .ACT.
Puedes usar esta característica para situar en tu nivel diferentes variaciones de un mismo modoleo 3D .ACT
sin necesidad de usar distintos archivos .ACT.
Con valor False se mantendrán los colores originales del modelo 3D .ACT.
Luces_Dina_Max
Permite indicar el número máximo de luces dinámicas del nivel que afectarán al modelo 3D .ACT de esta entidad.
Admite valores de 0 a 9. El valor recomendado es de 3.
Por afectar, se entiende que dichas luces harán variar el color del modelo .ACT según el color de las luces dinámicas
que se encuentren cerca.
Recuerda que las luces dinámicas no sólo son las entidades DynamicLight de tu nivel
sino también otras luces como linternas, antorchas, disparos, etc..
El rendimiento de tu juego puede verse afectado cuanto mayor sea el valor de este parámetro para
modelos .ACT con muchos polígonos.
A continuación un ejemplo de una caja eléctrica definida con una entidad 'SpecificActor.
A la izquierda, esta entidad con 'Luces_Dina_Max' = 2, por lo que le afecta la luz del cohete y también le
podría afectar otra luz dinámica más.
A la derecha, con 'Luces_Dina_Max' = 0, por lo que no le afecta ninguna luz dinámica.
Luces_Stat_Max
Permite indicar el número máximo de luces estáticas del nivel que
afectarán al modelo 3D .ACT de esta entidad.
Admite valores de 0 a 9. El valor recomendado es de 3.
Al contrario que las luces dinámicas, las luces estáticas cercanas al modelo .ACT sólo hacen variar el color
del modelo al dar comienzo el nivel y no varía nunca más durante el juego aunque las luces estáticas tengan
propiedades de variación de intensidad según el valor del parámetro 'Style'.
Bloqueo
Con valor 'True', el jugador colisionará con este objeto o personaje.
Con valor 'False', el jugador atravesará este objeto o personaje.
Con 'False' nos deja la libertad de poder controlar las zonas de bloqueo de este objeto mediante bloques que
definamos en el escenario (en World Editor) en el mismo punto donde tengamos situado el 'SpecificActor'.
Para que estos bloques realicen la tarea de bloquear al jugador pero que al mismo tiempo no se vean, debemos
acceder a las propiedades de todas las caras de ese 'brush' (ventana 'Faces Attributes'), marcar 'Transparent' y finalmente
poner el valor 0 en 'Transparency Value'.
Bloqueo_Bots
Con valor 'True', los personajes Bot colisionarán con este objeto o personaje.
Con valor 'False', los personajes Bot atravesarán este objeto o personaje.
Bloqueo_Proyectiles
Con valor 'True', los proyectiles de las armas del jugador que impacten con este SpecificActor colisionarán con este objeto o personaje.
Con valor 'False', los proyectiles de las armas del jugador que impacten con este SpecificActor atravesarán este objeto o personaje.
Transparencia
De 0 a 255.
Nivel de transparencia del objeto o personaje.
255 opaco, 0 completamente transparente, 128 semi-transparente.
RenderSiNoVisible
Con valor 'False', si el modelo 3D .ACT no está dentro del campo de visión del jugador, el programa no realizará los cálculos necesarios para
visualizar este modelo. Esto permite aumentar el rendimiento del programa si usas muchas entidades 'SpecificActor'.
Intenta siempre poner este parámetro a 'False' si no causa algún efecto indeseado en tu juego.
Cuando pongas un 'SpecificActor' en tu nivel y en su interior situes un bloque 'brush' sólido ('Solid' en la sección 'Brush Attributes' de
World Editor) para que el jugador colisione con él, si pones 'False' en 'RenderSiNoVisible' nunca verás el modelo 3D. Para resolver esto debes
poner dichos bloques 'brush' como 'Clip' en Word Editor en lugar de 'Solid'.
Render_tras_solido
Se usa para aumentar el rendimiento general del nivel, aunque no es 100% fiable, ya que en ocasiones oculta completamente el modelo 3D .ACT
cuando realmente sólo está parcialmente oculto a la vista del jugador.
Es recomendable que uses esta opción con valor 'False' si en tu nivel existen muchas entidades 'SpecificActor' en una misma área y no te importa
mucho que algunos elementos se oculten a lo lejos sin que apenas se aprecien estos defectos.
Con valor 'False', no calcula los datos de visualización de este elemento si está detrás de un bloque 'brush' sólido del
nivel desde el punto de vista del jugador.
Con valor 'True', siempre calcula los datos de visualización.
Sombra
0, 1, 2 o 8.
Establece el tipo de sombra para este objeto.
Valor 0 sin sombra.
Valor 1 con sombra en círculo.
Valor 2 con sombra dinámica.
Valor 8 con sombra octogonal.
Si quieres ver ejemplos de estos tipos de sombras, consulta la sección de la entidad ConfigEnemigos.
Resaltar
Se usa para resaltar modelos 3D que capten la atención del jugador. Para que se acerque el jugador para por ejemplo intentar alguna acción
sobre ese elemento.
Esto se consigue con una variación constante del brillo de este elemento.
Con valor 'True', resalta este 'SpecificActor'.
Con valor 'False', no lo resalta.
Durante el juego puedes controlar el estado de este parámetro usando el comando CAMBIAR_PARAMETRO
Render_distancia_max
Permite establecer hasta qué distancia (respeto al jugador) el modelos 3D .ACT asociado a esta entidad se procesará.
Si la distancia entre el jugador y el modelo .ACT es superior a la establecida, el modelo .ACT no se procesará y desparecerá
de la vista del jugador.
De esta forma se puede aumentar el rendimiento general de los juegos sacrificando algo de calidad gráfica en el fondo de la escena.
Para probar esta característica usa por ejemplo el valor 1800.
Usa el valor 0 para no utilizar esta característica.
Usa un valor de distancia impar para que en lugar de hacer desaparecer por completo el modelo .ACT se procesen sólo la mitad de
sus polígonos. A bastante distancia del jugador no importará mucho si el modelo .ACT aparece incompleto ya que apenas se apreciará
con claridad desde lejos, pero el rendimiento de tu juego aumentará. Para probar esta característica usa por ejemplo el valor 1801.
Model
Permite seleccionar un modelo 'model' del nivel para asociarlo a esta entidad 'SpecificActor'.
El modelo 3D .ACT de la entidad quedará vinculado a ese 'model' por lo que la posición del .ACT variará
según la posición del 'model'.
Como estos 'model' pueden tener una ruta predefinida puedes usarlos para que el .ACT se desplace por el
nivel según la ruta del 'model'.
Estos modelos son los bloques o conjunto de bloques 'brush' que hayas definido como 'model' en
World Editor (pestaña 'models') en tu nivel.
Esta característica de vincular un 'model' a un 'SpecificActor' es ideal para dar un poco más de vida a estos
modelos 3D estáticos, por ejemplo para crear bandas de murciélagos, personajes secundarios, peces en el agua,
efectos visuales combinados con luces, unir objetos .ACT a puertas 'model' que se abren, etc..
Recuerda que estos bloques 'model' puedes hacerlos invisibles si quieres que el jugador sólo vea los movimientos de
los objetos 3D .ACT pero no los del bloque 'model' asociado.
Debes poner el parámetro 'RenderSiNoVisible' a 'True' si tienes problemas para visualizar el .ACT cuando se
desplaza por en nivel.
Puedes usar 'models' que no tengan desplazamiento pero sí rotación para que sólo orbite o rote el .ACT asociado
usando los parámetros AllowRotation o AllowOrbiting.
Si quieres unir el .ACT de un 'SpecificActor' a una puerta deberás poner a 'True' tanto AllowRotation como AllowOrbiting si
quieres que el .ACT acompañe al movimiento de apertura de la puerta y que rote al mismo tiempo.
Puedes asociar diferentes 'SpecificActor' a un mismo 'model' del nivel si quieres unir diversos objetos 3D
a un mismo bloque 'model' en movimiento o en rotación.
AllowRotation
Usa este parámetro sólo si has asociado un modelo en el parámetro 'Model'.
Con valor True, el modelo 3D .ACT rotará sobre sí mismo y sobre los mismos ejes que lo esté haciendo el modelo 'Model' asociado.
Este parámetro no realiza un desplazamiento del .ACT, eso lo hace según la posición del 'model' asociado (si se desplaza) o
bien con el parámetro AllowOrbiting a 'True'.
Con valor False se ignorará la rotación del 'model' para que no afecte a la rotación del modelo 3D .ACT.
AllowOrbiting
Usa este parámetro sólo si has asociado un modelo en el parámetro 'Model'.
Con valor True, si el modelo
'Model' asociado rota, el modelo 3D .ACT orbitará alrededor del modelo 'Model' asociado.
Este movimiento de orbitación es como la Luna (el .ACT del SpecificActor) alrededor de la Tierra (un 'model') produciendo
un desplazamiento de la Luna pero no una rotación sobre sí misma, eso lo haría si usas el parámetro AllowRotation.
Con valor False se ignorará la rotación del 'model' para que no afecte a la posición del modelo 3D .ACT.
Jugadores online disparando sobre una entidad
'SpecificActor' que representa un coche
Consulta la sección 'Personajes' para ver un ejemplo de como añadir una entidad de este tipo.
Personajes interactivos:
Si no queremos que nuestros personajes sean simples 'estatuas' que no se relacionan con el
jugador, tendremos que asociar la entidad 'SpecificActor' de nuestros personajes con algún
fichero de comandos .ini para que realicen ciertas acciones según las circunstancias.
Lo que pueden hacer estos personajes lo determinan los comandos disponibles en 'Entidad 3D',
desde decirle algo al jugador (mediante un texto), hasta darle algo al jugador o hacer sonar
un fichero de audio con alguna voz grabada.
A continuación, y a modo de ejemplo, vamos a crear un fichero .ini en la carpeta 'Comandos' y que estableceremos
como nombre de fichero .ini en 'CommandsFile' para una entidad de este tipo. El fichero en cuestión contendría lo siguiente:
IF COND llave_entregada=0
IF COND 5_dinero.act=1
ACCI DIAL vende_llave
ACCI QINV 5_dinero.act
ACCI PINV 4_llave.act
ACCI PONE llave_entregada=1
ELSE
ENDIF
ELSE
ACCI TEXT No tengo nada mas de tu interes
ENDIF
¿ Que hace todo esto ?. Lo que pretendemos hacer es que un personaje le venda una llave al jugador si este
lleva dinero en su inventario. Evidentemente, para este ejemplo necesitaríamos los objetos '5_dinero.act' (para
el dinero) y '4_llave.act' (para la llave). También vamos a preparar un par de respuestas por parte del personaje, una
para cuando le entregue la llave al jugador y otra para cuando el personaje le pida dinero al jugador a cambio de
la llave.
Estos diálogos han de estar en forma de ficheros en la carpeta 'Comandos' y con la extensión .dlg. Crearemos
el fichero 'vende_llave.dlg' conteniendo las líneas siguientes:
Gracias por tu dinero, te aseguro que lo has
empleado bien. Toma la llave del salon Rojo
y ten cuidado con los guardianes.
También crearemos el fichero 'dame_dinero.dlg' con lo siguiente:
Si estas buscando la llave del salon Rojo te
aseguro que no te saldra gratis. Aqui sin
dinero con conseguiras nada.
Ya estamos en condiciones de entender el grupo de comandos anterior.
Recordarte que estos comandos se procesarán sólo cuando el jugador intente tocar al personaje.
En primer lugar, decirte que utilizo la variable 'llave_entregada' (que me he inventado) para controlar
la entrega de la llave al jugador. De esta forma podré presentarle al jugador diversos mensajes en función
del valor de esta variable.
El primer 'IF', comprueba la condición 'llave_entregada=0', lo utilizo para, si no se cumple significará
que ya le hemos entregado la llave al jugador, pues le presentamos un mensaje rápido a través del comando
'ACCI TEXT' poniéndole 'No tengo nada mas de tu interes'. Este mensaje aparecerá en la parte superior de la
pantalla en azul y desaparecerá en pocos segundos. Como ves, para este mensaje no hemos creado un fichero .dlg ya
que opino que para un mensaje tan corto no era necesario.
Pero volvamos otra vez a la condición que estamos analizando pero esta vez supongamos que la condición
se cumple y la variable 'llave_entregada' vale 0 (que sería lo que valdría al comenzar el juego), pues entonces
aún comprobamos otra cosa más, ya que el jugador podría llevar el dinero o no. Si lo lleva la condición 'COND 5_dinero.act=1'
se cumplirá y por lo tanto se desencadenarán todos los comandos hasta el siguiente 'ELSE', comandos que hacen lo siguiente:
(pone en pantalla el diálogo que hemos preparado en el fichero 'vende_llave.dlg')
(quita el objeto '5_dinero.act' del inventario del jugador)
(pone el objeto '4_llave.act' en el inventario del jugador)
ACCI PONE llave_entregada=1
(pone la variable 'llave_entregada' a 1)
Finalmente si no se cumple la condición 'COND 5_dinero.act=1' es que el jugador no lleva el dinero y por
lo tanto no le damos nada y con el comando 'ACCI DIAL dame_dinero' le presentamos el diálogo que tenemos
preparado en el fichero 'dame_dinero.dlg'.
Ya te estarás haciendo una idea de la cantidad de posibilidades que tienes con estos ficheros de comandos .ini,
y no sólo en entidades 'SpecificActor' sino en todas las entidades de 'Entidad 3D' que soportan estos ficheros.
Si combinas adecuadamente comandos y condiciones dentro de otras condiciones, etc... podrás obtener gran
cantidad de complejas situaciones que podrán adaptarse a las necesidades del guión de tu juego. Al principio te puede
parecer un poco liado, pero con la práctica, si ordenadas bien los comandos y los escalonas correctamente para
no ver toda una cascada confusa de comandos, verás que ni de lejos tiene la complejidad que te supondría
realizar lo mismo programando en lenguajes de programación.
Usa el comando CAMBIAR_PARAMETRO para modificar algunos
parámetros de esta entidad durante el transcurso de tu juego.