Jugador disparando en el juego Secta en modo individual
En el modo de juego individual los comandos que uses en los ficheros de comandos .INI influyen sobre el único
jugador de la partida y también sobre el único nivel o escenario donde transcurre el juego. Es decir, que si usamos
el comando 'ACCI TEXT No has recogido la llave dorada' evidentemente ese mensaje aparecerá en la pantalla del
único jugador de la partida. O si usamos el comando 'ACCI SPECIF_POSICION SpecificActor2 ABS 200 255 -100' pues lo
que lograremos es que el modelo 3D de la entidad SpecificActor2 se posicione en las coordenadas (X:200 Y:255 Z:-100) del
nivel donde se encuentra el jugador.
Dos jugadores en el juego Online Ritual en modo online multijugador
Pues bien, en el modo de juego online multijugador, como es obvio, es un juego con múltiples
jugadores en múltiples escenarios. Si, efectivamente son escenarios idénticos para que todos los jugadores vean
lo mismo y el juego funcione perfectamente sincronizado, sin embargo, como podrás comprobar, en el modo de juego
online no sólo podremos influir independientemente sobre cada jugador, sino que también lo podremos hacer de
forma individual en cada uno de los escenarios de cada uno de los jugadores de la partida. Por supuesto también
podremos influir de manera global sobre todos los jugadores y todos los escenarios, todo dependerá del efecto
que busquemos en cada momento.
Por ejemplo, podremos hacer que ese comando TEXT actúe sobre un jugador, sobre varios o sobre todos. Y lo mismo
con el comando SPECIF_POSICION anterior. El grupo de jugadores sobre los que actúa un comando lo llamaremos 'Ámbito de actuación',
que se refiere a una selección de jugadores que nosotros podremos configurar según las necesidades de nuestro juego.
Ese ámbito lo podremos alterar a voluntad mediante comandos durante el procesamiento de los mismos, por lo que
no se tratará de algo estático predefinido, sino que podrá ser algo dinámico que usaremos en nuestros ficheros
de comandos dependiendo de las condiciones que nosotros establezcamos.
Jugador causante del evento:
Todos los comandos tienen un ámbito de actuación por defecto, por lo que si no especificamos nuestro propio
ámbito de actuación el comando actuará bajo su propio ámbito. No todos los comandos tienen el mismo ámbito por
defecto y no todos los comandos permiten el cambio de ese ámbito. Todo esto se indica en el manual en la
sección correspondiente de cada comando.
Jugadora abriendo una puerta. Es la causante del evento Abrir puerta
Hay comandos que actúan sólo sobre el jugador que ha activado un evento, es decir, el jugador que toca algo,
recoge algo, alcanza algo o alguien con su disparo, abre una puerta, etc.. aquí se relacionan todos los eventos
disponibles. Otros comandos actúan por defecto sobre todos los jugadores y otros sólo actúan sobre el jugador Servidor.
El jugador que activa un evento que lanza un fichero de comandos .INI lo llamaremos 'Jugador causante del evento'. Todos
los comandos que indiquen que su actuación por defecto es 'Sólo actúa sobre el jugador causante del evento'
significa que ese comando sólo afectará al jugador que ha activado el evento en cuestión. Ese es el ámbito de
actuación por defecto de ese comando, sobre un solo jugador (el jugador que activó el evento). Este ámbito es el más
común en los comandos y si quieres que funcione de esa manera no hace falta que cambies su ámbito de actuación.
Por ejemplo, supongamos que tienes un fichero de comandos .INI asociado al parámetro CommandsFile de una entidad
Door. En el interior de ese fichero usamos el comando 'ACCI TEXT No puedes abrir la puerta' de la misma manera
que lo usaríamos en el modo de juego individual. ¿ Qué tendríamos que hacer para que funcionase en el modo de juego online ? ... nada.
El mensaje de la imposibilidad de abrir la puerta sólo aparecerá en la pantalla del jugador que intenta abrir
la puerta.
Pero qué pasa si además quieres indicar a todos los jugadores de la partida que un jugador está intentando
abrir esa puerta. Pues el anterior 'ACCI TEXT' lo dejamos como está, ese comando ya nos interesa que funcione
con su ámbito de actuación por defecto, pero añadiremos un nuevo 'ACCI TEXT' pero con su ámbito cambiado para
que otro mensaje aparezca en las pantallas de todos los jugadores.
Cambiando el ámbito de actuación:
Para cambiar el ámbito de actuación de los comandos debemos usar el comando 'ESTABLECER_VALOR_SISTEMA destinatarios_comandos'. Este
comando nos permite indicar en el parámetro valor una serie de cláusulas que harán variar el ámbito de actuación de
todos los comandos que sigan a continuación y hasta que indiquemos el comando 'ACCI ESTABLECER_VALOR_SISTEMA destinatarios_comandos auto'.
Para el caso del ejemplo anterior usaríamos lo siguiente:
ACCI TEXT No puedes abrir la puerta
ACCI ESTABLECER_VALOR_SISTEMA destinatarios_comandos TODOS
ACCI TEXT Un jugador esta intentando abrir la puerta del templo
ACCI ESTABLECER_VALOR_SISTEMA destinatarios_comandos auto
Como ves, el primer ACCI TEXT está fuera del cambio del ámbito de actuación y el segundo ACCI TEXT está
encerrado entre las cláusulas TODO y auto al usar el comando ESTABLECER_VALOR_SISTEMA de esta manera. Puedes
encerrar todos los comandos que quieras para cambiar múltiples comandos de ámbito al mismo tiempo o puedes crear diferentes
cambios de ámbitos de actuación dentro de un mismo fichero .INI encerrando los comandos que te interesa
cambiar y dejando fuera los que te interese que funcionen con su ámbito por defecto.
No te preocupes si incluyes comandos que no soportan el cambio de ámbito dentro de algún cambio de
ámbito con múltiples comandos, unos con soporte de cambio o otros sin soporte, los comandos que no soporten el cambio
actuarán con su ámbito por defecto.
Otro ejemplo de cambio de ámbito de actuación para los comandos SPECIF_POSICION y VIS1
Si ya tienes experiencia con el lenguaje de comandos de Entidad 3D, llegado a este punto, ya te estarás dando
cuenta de la potencia que implica este modo de funcionamiento para juegos online. Piensa que el cambio de ámbito de
actuación soporta un jugador concreto, varios, todos, todos menos el causante del evento, todos los del equipo
del jugador causante del evento, sólo un personaje en concreto, dos personajes, etc.. las combinaciones pueden
ser tan complejas como lo exija tu juego.
La posibilidad de incluir y excluir jugadores en los ámbitos de actuación de grupos de comandos te
permite controlar cómo quieres que funcione tu juego online, qué cosas afectan a todos los jugadores y cuando, qué cosas
afectan sólo al jugador que realiza la acción, etc.. de ti depende usar esta potencia de forma ingeniosa y precisa para
ofrecer a los jugadores una experiencia online gratificante.
De todas formas ya verás que la mayoría de los comandos que uses en modo online no requerirán ningún
cambio de ámbito ya que el que tienen por defecto te servirá en la mayor parte de los casos.
Símbolos de ámbito de actuación:
A continuación se muestran los significados de los símbolos que indican el modo de funcionamiento de los
comandos en el modo de juego online y que encontrarás en el manual de referencia en cada uno de los apartados donde
se explica el funcionamiento de cada comando:
Indica que el comando sólo actuará sobre el jugador causante del evento.
Son comandos como TEXT, PINV, QINV, DSAL, QSAL, etc..
Indica que el comando actuará sobre todos los jugadores de la partida incluyendo el jugador causante del evento.
Son comandos como FX_EXPLOSION, SON1, ONLINE_FIN_PARTIDA, etc..
Indica que el comando, si bien no afecta directamente al jugador causante del evento, si que
será éste el único que percibirá la actuación del comando. Son algunos comandos que actúan sobre el escenario
como NIE1, TEXTURA_ANIMADA_PRC, TEA1, VIS1, etc..
Indica que el comando, si bien no
afecta directamente a ningún jugador, la actuación del comando la percibirán todos los jugadores de la partida.
Son algunos comandos que actúan sobre el escenario como PLATAFORMA_ANIM, BLOQUE_POSICION, COR1, LUZ1, etc..
Indica que el comando, si bien no afecta directamente al jugador Servidor, si que
actuará únicamente en la computadora que hace de Servidor en la partida online. Normalmente son comandos relacionados
con la gestión de variables o condiciones como PONE, PONA, OPE+, IF COND, DAME_POSICION_SPECIF, etc..
Indica que el comando permite el cambio de ámbito usando el comando 'ESTABLECER_VALOR_SISTEMA destinatarios_comandos'.
Son comandos como por ejemplo: TEXT, SONIDO_FX, POSICION_JUGADOR o NIE1.
Indica que el comando no permite el cambio de ámbito. Siempre actuará con su ámbito por defecto.
Normalmente son comandos que podrían llevar a confusión si se pudiera cambiar su ámbito, por ejemplo: QINVUSO, PONE, INPU o TEM1.
Ficheros de comandos en modo online:
Como ya te habrás imaginado, la implementación de la lógica de un videojuego en modo online multijugador es ligeramente
más complicada que en el modo individual, por eso no es recomendable que comiences a desarrollar un juego multijugador
online sin antes haberte familiarizado con el funcionamiento de los comandos y variables de Entidad 3D en el modo de juego
individual.
Tampoco es que el modo online sea mucho más difícil que el modo individual, de hecho los comandos usados son
los mismos en ambos modos, salvo algunos pocos no soportados en el modo online. En el modo individual estos comandos nunca es necesario indicar hacia qué jugadores
van destinados ni debemos comprobar si tal o cual jugador ha realizado tal tarea y otro jugador no.
Un fichero de comandos .INI editado en el entorno Notepad++
De todas formas todo depende del juego que quieras realizar. Si quieres que los personajes tengan características
diferentes y unos puedan hacer ciertas tareas y otros no, o unos influyan sobre otros personajes según los
objetos o hechizos que tengan, vas a necesitar exprimirte la mandarina para que todo funcione como quieres. El sistema
ya tiene un comportamiento automático por defecto muy preciso y adecuado para la mayoría de las acciones que
realizan los comandos pero para individualizar comportamientos no podemos pretender que el sistema nos lea el
pensamiento y actúe automáticamente como nosotros queremos, para eso deberemos indicárselo con precisión usando los eventos adecuados,
los comandos adecuados bajo los ámbitos de actuación requeridos y controlándolo todo con variables y condiciones
para no perder el control de lo que está pasando en nuestro juego y para que los jugadores tengan la mejor sensación
de inmersión en un escenario común que comparten con otros jugadores.
Red de juego con el jugador Servidor y 7 jugadores Clientes
Lo primero que debemos tener en cuenta es que todos los ficheros de comandos .INI se procesan ÚNICAMENTE en la
computadora del jugador que hace de Servidor. Si, así es, debe ser así para que todo esté precisamente centralizado en el Servidor, para
eso es un Servidor :). De hecho los jugadores Clientes podrían eliminar todos los ficheros de comandos .INI del
juego y ya verías que el juego seguiría funcionando perfectamente mientras esos ficheros existan, al menos, en la
computadora del jugador Servidor.
Esto también evita que los jugadores Clientes puedan manipular los ficheros de comandos para hacer trampas.
El hecho de que se procesen todos los ficheros de comandos en el Servidor, no quiere decir que todo lo que se procese vaya
destinado precisamente al jugador Servidor. Eso dependerá del ámbito de actuación de cada comando. Por ejemplo, debes
entender que si se procesa el comando ACCI DSAL 12 (que aumenta la salud del jugador) será porque estará dentro de un fichero de comandos .INI que has
indicado en algún parámetro de alguna entidad y eso se procesará porque se ha producido uno de los múltiples
eventos de los que dispone Entidad 3D. ¿ Y quién ha causado el evento ? ... Un jugador, aunque también podría ser un
Bot. Pero para el ejemplo supongamos que es un jugador de los cuatro que por ejemplo están en la partida. El sistema
ya sabe quien ha activado el evento y por lo tanto será a ese jugador y no a otro al que le aumente 12 puntos el nivel de salud,
aunque el comando se esté procesando en la computadora del jugador Servidor.
Variables generales y variables de cada jugador:
Es importante entender que todas las variables también están almacenadas ÚNICAMENTE en el Servidor, por lo que olvídate
si estás pensando en cómo controlas condiciones con variables en los jugadores Clientes, nada de eso, todo se
procesa en el lado del Servidor y es ahí donde se decide (según condiciones con variables) si el comando sólo afecta a un jugador, a varios, a todos .... o
a nadie en concreto ya que puede ser una simple carga de una variable. Por ejemplo, el comando 'ACCI PONE ZETA=923' no afecta a
nadie, simplemente es una variable general que queda almacenada en el Servidor para su uso normal como en el
modo de juego individual.
Pero ¿ cómo hacemos para crear variables que sean propiedad de cada jugador pero pudiéndolas controlar desde
el Servidor ?.
Jugador pisando, con su pie izquierdo, una entidad Command (en azul)
Puede que quieras controlar si un jugador ha realizado una tarea concreta o ha pasado por un lugar o ha
tocado algo y no quieres estar haciendo continuamente ocho comandos 'IF COND' interrogando alguna variable del
sistema que te informa del número de jugador que activa un evento y almacenar datos en ocho variables en
función del resultado de evaluar esas ocho condiciones.
Para hacer eso efectivamente vamos a necesitar esa variable del sistema que nos indicará qué número de jugador
es el causante de cualquiera de los eventos online. Esa variable se llama EVENTO_NUM_JUGADOR_ONLINE y la usaremos para
crear una variable diferente para cada jugador (hasta 8 si hay 8 jugadores).
Si, efectivamente habrá una variable diferente por cada jugador pero en el Servidor no vamos a necesitar
ocho comandos PONE ni ocho 'IF COND' para evaluar cada una de las variables sino que también volveremos a usar esa misma
variable en un solo 'IF COND'.
Supongamos que tenemos una entidad Command en el suelo (o piso) para que procese un fichero de comandos (llamémosle PISA.INI)
cada vez que un jugador pisa la zona de influencia de esa entidad. Lo que queremos hacer es anotar de
manera individual cada jugador que pisa esa zona para procesar en otro fichero de
comandos (llamémosle QUIENPISA.INI asociado a una entidad CommandModel) para controlar quién ha pisado ese punto y quién no
para entregarle el objeto (11) con 5 monedas de oro a cada uno de los jugadores que haya pisado la zona.
El fichero PISA.INI contendría esta única línea:
ACCI PONE ZONAPISA_%EVENTO_NUM_JUGADOR_ONLINE%=1
El fichero QUIENPISA.INI sería algo así:
ACCI PONI VALOR=ZONAPISA_%EVENTO_NUM_JUGADOR_ONLINE%
IF COND VALOR=1
ACCI PINV 11 5 Oro
ACCI PONE ZONAPISA_%EVENTO_NUM_JUGADOR_ONLINE%=0
ENDIF
... ¿ y si tenemos en nuestro juego diferentes personajes que no todos pueden hacer lo mismo ? Tenemos un mago, un elfo y un enano,
y queremos que en cierto punto del juego sólo el mago pueda adquirir un hechizo y aunque el resto de jugadores
lo intenten conseguir en el mismo punto, el sistema no se lo permita:
Pues eso aún es más sencillo de hacer. Para ello disponemos de la variable del sistema EVENTO_NUM_PERSONAJE_ONLINE.
Supongamos que el mago es el personaje número 3, el elfo el personaje número 4 y el enano el personaje número 7.
El fichero .INI del evento donde queremos controlar la entrega del hechizo (objeto número 14), contendría algo así:
IF COND EVENTO_NUM_PERSONAJE_ONLINE=3
ACCI PINV 14 1 Hechizo
ACCI TEXT Has conseguido el hechizo
ELSE
IF COND EVENTO_NUM_PERSONAJE_ONLINE=4
ACCI TEXT Como Elfo no puedes conseguir el hechizo
ENDIF
IF COND EVENTO_NUM_PERSONAJE_ONLINE=7
ACCI TEXT Donde se ha visto un enano usando hechizos
ENDIF
ENDIF
Jugadora número 1 con el personaje 14
En el modo de juego online es muy importante apoyarte en las variables del sistema para
poder diferenciar qué jugadores están intentando algo para saber cómo debe reaccionar tu juego en cada
momento.
Como ves, no es lo mismo el número de jugador que el número de personaje. El primero es un número que
depende del orden de entrada en la partida online y puede ser de 1 a 8, pero es muy útil como identificador
de un jugador (independiente de su número de personaje) para diversos procesos que queramos controlar. Fíjate
que en el ejemplo del fichero PISA.INI ni siquiera nos interesa saber el número de cada uno de los jugadores, sólo
lo usamos internamente para que el Servidor genere las variables necesarias de forma diferenciada para cada jugador.
Otra cosa es el número de personaje (de 1 a 15) que son los personajes que controla cada jugador y que el
propio jugador ha seleccionado al iniciar la partida.
Programando Scripts:
Programando
Tengo que reconocer que el lema de Entidad 3D no es del todo cierto. Eso de ... 'Crea tus propios juegos 3D sin programar' no
se ajusta mucho a la realidad en el caso que quieras realizar un videojuego con unos mecanismos muy elaborados, y más si
el juego es online. Al final deberás pensar cómo programar secuencias de comandos con condiciones y variables usando
el lenguaje de comandos de Entidad 3D para que todo funcione como exige el guión y el funcionamiento de tu videojuego.
Pero no te confundas, a diferencia de lenguajes como el C/C++, el lenguaje de comandos de Entidad 3D no es
un lenguaje para programadores, es un lenguaje para personas que no son programadoras de computadoras y quieren
dotar a sus juegos de una lógica similar a la usada por esos lenguajes para programadores, pero con instrucciones mucho más simples y sin
tener que saber qué es un array de punteros, un bucle anidado o una función recursiva.
Yo soy programador de C/C++ (Entidad 3D está escrito en ese lenguaje) y creo que es el mejor lenguaje de
programación para aplicaciones de alto rendimiento. Con el entorno y las librerías adecuadas te permite
hacer absolutamente de todo. Pero debemos entender que este lenguaje no está pensado para todo el mundo y muy
poca gente dispone del tiempo necesario para dominar este lenguaje para conseguir el nivel requerido para crear un
videojuego en 3D mínimamente decente.
Scripts visuales con cajas
Pero esto de programar en algún sistema de Scripts te lo encontrarás en todas la herramientas y motores 3D
que sirven para crear videojuegos. Aunque todas estas herramientas disponen de la posibilidad de realizar
juegos sin programar ni una sola línea de código (también Entidad 3D) cuando llega la hora de personalizar tu juego, no
hablo de texturas ni personajes 3D, sino de mecanismos muy concretos y con condiciones muy elaboradas con muchos
factores que evaluar, siempre tendrás que echar mano del sistema de Scripts de la herramienta. Si, algunas
herramientas disponen de un sistema visual de cajas que interconectas con cables para que las salidas de unas
cajas entren en las entradas de otras, pero francamente, para muchas personas ese sistema es más confuso que un
lenguaje de Script modular y bien estructurado.
El juego de ejemplo 'Online Ritual':
La presente distribución de Entidad 3D incluye un videojuego de ejemplo que usa el modo online multijugador con
comandos. También se incluye un manual del juego para que puedas conocer algunas características y mecanismos del juego.
Captura de pantalla del juego de ejemplo Online Ritual
El juego no es una demo ni un pequeño ejemplo del funcionamiento de Entidad 3D usando el modo de juego online
con comandos. Es un juego completo para jugar con tus amigos y para que te sirva de referencia para crear tus propios juegos online ya
que jugando podrás experimentar cómo responde el juego a ciertos eventos y también podrás ver cómo se han
realizado esos mecanismos examinando los ficheros de comandos del juego.
Ficheros de comandos del juego de ejemplo Online Ritual
Los ficheros de comandos de este juego los podrás encontrar en la carpeta 'comandos' de Entidad 3D, son todos los
ficheros .INI que comienzan con 'onrit_'. Abre estos ficheros (a ser posible con Notepad++) para ver los comandos
que usa el juego, con sus condiciones, sus variables y sobre todo los cambios de ámbito de actuación de comandos que
se realizan en eventos concretos del juego.
Estos ficheros hacen un uso avanzado de los comandos de Entidad 3D y a primera vista te puede parecer confuso y
difícil de entender, pero te aconsejo que te lo tomes con calma y vayas examinando estos ficheros al mismo tiempo que
consultas el propio manual de Entidad 3D cuando no entiendas un comando o una variable del sistema.
Todos los ficheros de comandos del juego Online Ritual incluyen muchos comentarios sobre qué es lo que
hace cada línea de comandos y también se explica qué evento lanza cada fichero de comandos y las tareas
principales que cubre cada fichero.
No juzgues todo el potencial online de Entidad 3D sólo por lo que veas o dejes de ver en el juego Online Ritual,
ese juego sólo usa una mínima parte de todas las características del modo de juego online multijugador usando comandos.
En Entidad 3D no existe una opción o botón para seleccionar el tipo de juego que quieres realizar. Si, está
muy preparado para juegos tipo FPS de disparos, pero de ti depende qué tipo de juego quieres desarrollar usando diferentes
tipos de cámaras (primera persona, tercera persona, superior, lateral, isométrica o fija), escenarios (cuevas, castillos, campos,
estaciones, laberintos..), objetos (hechizos, anillos, flores, antídotos..), armas (o sin armas), objetivos, efectos animados, personajes, Bots, etc... Todas
las herramientas para crear eso están ahí disponibles para hacer realidad el tipo de juego que tienes en mente.
No sólo de juegos tipo FPS vive el ser humano.
Consejos finales:
Antes de implementar el funcionamiento de tu videojuego, analiza muy bien qué es lo que quieres conseguir y cómo
afectará a los jugadores y a su entorno.
Debes conocer muy bien las características y limitaciones de los comandos y entidades para implementar
los mecanismos de tu videojuego.
Usa las variables del sistema en combinación con tus propias variables para controlar en todo momento lo que
sucede en el nivel y lo que están intentando hacer los jugadores.
Usa el modificador de ámbito de actuación de los comandos para redirigir la acción de los comandos que por defecto
no consiguen el resultado que estás buscando.
Utiliza de referencia los ficheros de comandos que usa el juego de ejemplo Online Ritual para entender cómo
y cuándo se debe usar el modificador de ámbito de actuación de los comandos.
Antes de probar tu videojuego en Internet con jugadores reales, realiza pruebas en una pequeña Red
de Área Local o en una sola computadora. Entidad 3D permite, en una sola computadora, tener
abiertas varias instancias de tu juego para que se conecten entre ellos simulando la red de juego de una
partida online.
Conclusión:
Pues hasta aquí la mayoría de información relacionada con el nuevo sistema de creación de videojuegos online
usando comandos que se ha implementado a partir de la versión 5.0 de Entidad 3D.
No intentes entenderlo todo en una tarde, tómate tu tiempo experimentando poco a poco con cada comando o
grupos de comandos cambiándoles el ámbito de actuación para que veas cómo funciona el nuevo sistema. Usa las
nuevas variables del sistema (sobre todo las de uso exclusivo para el modo de juego online), están ahí para asistirte
en numerosos eventos para que al consultarlas sepas qué ha pasado y tú decidas, mediante condiciones y comandos,
qué debes hacer en cada evento que se produce para que tu videojuego haga lo que tiene que hacer y
los jugadores se lleven una buena impresión de tu juego.
Sobre todo tres cosas: Imagina, experimenta y persevera. Piensa que ni siquiera yo, como creador del
sistema, conozco los límites reales de Entidad 3D ni he podido exprimir al máximo todo su potencial. En tus
manos está la posibilidad de hacerlo.
Anímate a crear y compartir tus propios mundos online.