Este comando de control se utiliza para procesar otros comandos bajo ciertas condiciones que podamos establecer durante el transcurso del juego.
Sintaxis:
IF COND
condición_o_condiciones
comandos_a_procesar_SI
ELSE
comandos_a_procesar_NO
ENDIF
condición_o_condiciones:
Condición o condiciones que se han de cumplir.
comandos_a_procesar_SI:
Líneas de comandos que se procesarán si la condición se ha cumplido.
comandos_a_procesar_NO:
Líneas de comandos que se procesarán si la condición no se ha cumplido.
Ejemplo 1:
Presentar un mensaje y activar un sonido si la variable 'acceso' vale 0, de lo contrario presentar un diálogo:
IF COND acceso=0
ACCI TEXT Acceso denegado
ACCI SONIDO_FX efecto.wav 85
ELSE
ACCI DIAL permitido.dlg
ENDIF
Ejemplo 2:
Hacer aparecer un personaje en el caso de que la variable 'fase' valga 2 y el jugador porte en su inventario el objeto
número 10 ('10_daga.act'):
IF COND fase=2 COND 10_daga.act=1
ACCI VIS1 vendedor.act
ENDIF
Fíjate que si el jugador lleva más de un objeto '10_daga.act' la condición no funcionará ya que estamos
preguntando si el jugador lleva 1 solo objeto de este tipo.
También podemos realizar el ejemplo anterior sin usar para nada el nombre del fichero .act para saber si
el jugador porta el objeto número 10. Para ello usaremos el
comando DAME_OBJETO_INVENTARIO para consultar la cantidad
de ese objeto que porta el jugador:
ACCI DAME_OBJETO_INVENTARIO 10,CANTOBJ
IF COND fase=2 COND CANTOBJ=1
ACCI VIS1 vendedor.act
ENDIF
Ejemplo 3:
Dar por finalizado el objetivo número 3 de la misión si el jugador
alcanza la posición donde hemos situado una entidad 'Command', ha rescatado a
un prisionero, lleva en su inventario de objetos la llave para salir (objeto por
ejemplo '6_llave.act') y ha recogido los 10 cristales de energía:
IF COND objetivo3=0 COND rescatado=1 COND 6_llave.act=1 COND cristales=%totalcristales%
ACCI OBJ1 3
ACCI TEXT Objetivo numero 3 cumplido
ACCI PONE objetivo3=1
ENDIF
Para que funcione con 10 cristales la variable totalcristales ha de
contener el valor 10.
Como ves este ejemplo, puedes usar variables en las
condiciones para comprobar valores que puedan contener esas variables, e
incluso comparar el contenido de una variable con el contenido de otra variable,
en este caso el nombre de la variable que pongas a la derecha del símbolo '=' debe estar
rodeada de símbolos %, ya que no son lo mismo estas dos condiciones:
IF COND cristales=%totalcristales%
IF COND cristales=totalcristales
Mientras la primera compara si el contenido de la variable 'cristales'
es igual al contenido de la variable 'totalcristales', la segunda compara si el
contenido de la variable 'cristales' es el texto totalcristales.
Ejemplo 4:
Quitar una vida al jugador si una clave de acceso que tiene que introducir
anteriormente (por ejemplo usando el comando 'INPU') no es la correcta. La
palabra correcta es 'FOXTROT':
IF COND clave_acceso!FOXTROT
ACCI TEXT Un rayo te matado, has perdido una vida
ACCI QVID
ELSE
ACCI TEXT Clave correcta
ENDIF
Como ves, el símbolo ! sirve para lo contrario que el símbolo =, en el
ejemplo anterior la condición se da cumplida si el contenido de la variable
'clave_acceso' es distinto del texto 'FOXTROT'.
Los únicos símbolos que puedes
utilizar en comparaciones son =, !, < y >, que en términos informáticos
significan respectivamente 'igual a', 'distinto de', 'menor que' y 'mayor que'.
Ejemplo 5:
Hacer desaparecer todas las piedras mágicas que el jugador lleve
en su inventario de objetos si al menos lleva 3 de estas piedras. Si lleva
ese mínimo de piedras, presentarle un mensaje informándole que ya tiene acceso
a una habitación y modificar alguna variable que usarás en una condición para
abrir la puerta de la habitación en otro punto del mapa.
Si el jugador anteriormente no ha activado un resorte, no comprobar nada de lo
de las piedras y avisarle de lo que pasa.
IF COND toco_resorte=1
IF COND accesoroja=0
IF COND 7_piedra.act>2
ACCI QTIN 7_piedra.act
ACCI PONE accesoroja=1
TEXT Ahora tienes acceso a la habitacion roja
ELSE
TEXT No tienes la tres piedras mágicas
ENDIF
ELSE
TEXT Dirigete a la habitacon roja
ENDIF
ELSE
ACCI TEXT No has tocado el resorte del trono
ENDIF
Ejemplo 6:
Tienes tres variables (var1, var2 y var3) que controlan tres eventos distintos del juego,
las tres tienen el valor inicial de 0 y cuando cualquier evento se ha completado se pone a 1
la variable correspondiente.
Comprobar si alguno de los eventos se ha completado, si es así presentar una
textura animada en el escenario que muestre al jugador un sencillo vídeo del
siguiente objetivo que debe cumplir.
Tengo que reconocer que para una persona que nunca ha utilizado variables ni
la lógica de las condiciones, aprender este tipo de sistema es un poco difícil, pero
si quieres dotar a tu juego de una lógica de funcionamiento particular y tan
compleja como quieras, es del todo imprescindible dominar mínimamente la
utilización de estos comandos y condiciones que deberás introducir en ficheros con
extensión .INI y asociar esos ficheros a distintas entidades que soportan este tipo de ficheros. En este
manual, en el apartado de cada entidad, se indica si esa entidad soporta
ficheros de comandos .INI y donde debes indicar el nombre del fichero para que
Entidad 3D lo procese durante el juego.
En cualquier sistema de creación de juegos que te permita cierta libertad a
la hora de establecer la trama de tu juego y que no te limite sólo a modificar cuatro datos
introducidos en unas bonitas cajas, deslizar vistosos controles para variar otros tantos
datos, o pulsar con el cómodo ratón sobre maravillosos y visuales botones, te encontrarás
con algún sistema de 'scripts' o algo similar a los comandos de Entidad 3D.
Te comento esto por si este tipo de uso de comandos te echa hacia atrás a la
hora de plantearte realizar un juego con algún sistema de creación de juegos.
Si bien
usando el propio Entidad 3D o algún otro 'Game Maker' efectivamente te permite realizar juegos sin
usar prácticamente ningún sistema de comandos, pronto observarás que si quieres
dotar a tu juego de un mecanismo particular siempre tendrás que enfrentarte, por
muy simple o complejo que sea, a algún tipo de sistema similar a la lógica de la
programación de computadoras.
Si observas detenidamente los ejemplos anteriores observarás que no
es tan difícil y a lo poco que te vayas dando cuenta de las combinaciones que
puedes realizar con variables, comandos y condiciones verás la potencia que
tienes en tus manos para controlar lo que sucede en tu juego.
Es verdad que este sistema de codificar comandos es muy similar a como se
realiza para un programa de computadora y siendo el lema de Entidad 3D la 'Creación
de juegos 3D sin programar' parece un poco engañoso, pero ni de lejos es tan complejo como
programar en cualquier lenguaje de programación, incluidos los lenguajes 'script',
tampoco será tan potente como esos lenguajes pero para tener un mínimo control
sobre lo que hace el jugador y lo que pasa en tu juego, este lenguaje de comandos de Entidad 3D
es más que suficiente en la mayoría de los casos, para por lo menos encontrar
una manera de realizar lo que tienes en mente usando de forma creativa
combinaciones de diversos comandos y entidades.
Para encontrar los comandos correctos, usados con las variables
correctas, las condiciones correctas, en el lugar correcto y en el momento correcto,
es necesario cierta habilidad mental y capacidad de abstracción del mecanismo de
funcionamiento que tienes en mente y que deberás traducir en comandos de Entidad 3D
que en muchos casos no hacen exactamente lo que quieres, y en ocasiones encontrar
una manera equivalente de hacerlo puede ser todo un desafío.
Esa habilidad mental de la que hablo te aseguro que no se nace con ella, pero
tampoco se aprende en dos días, se adquiere con la práctica, viendo ejemplos de
otras personas observando como han resuelto la situación que querían
realizar, entendiendo muy bien que es lo que hace cada comando, asumiendo las
limitaciones de Entidad 3D, teniendo mucho interés y sobre todo dedicándole
mucho mucho mucho tiempo.
Funcionamiento del comando en el modo de juego online
Es bastante recomendable que te acostumbres a realizar este tipo de escalonamientos (indentación) de líneas que ves en
los ejemplos cuando uses comandos 'IF COND ELSE ENDIF'
para que te resulte más fácil de entender que se procesa al cumplir la
condición, que se procesa si no se cumple o que condición está dentro de otra.
Detrás de los 'IF' puedes poner tantas condiciones 'COND' como quieras, pero
para que se procesen los comandos debajo del 'IF' tendrán que cumplirse todas
las condiciones.
Recuerda que los ficheros .INI debes ponerlos siempre en la carpeta 'comandos'
de Entidad 3D y que son simples ficheros de texto que puedes crear con cualquier
editor normal de textos tipo Notepad o similar.
Consulta la sección 'Abriendo puertas' para
ver ejemplos de como condicionar aperturas de puertas usando condiciones y comandos.