Translations of this page:

This is an old revision of the document!
—-

3. Primera visita al mundo real de WME

Ya hemos conocido las herramientas de wme y hemos estudiado lo básico sobre la programación(scripting). Ahora es momento de ver como se aplica todo esto al diseño del juego. Antes de empezar vamos a explicar un poco los tipos de ficheros que utiliza wme(es estrictamente necesario usar este tipo de nomenclatura para los ficheros).

*.script → Son ficheros que contienen el código del programa.

*.inc → Son ficheros que se podrán incluir en los ficheros .script con la clausula #include.

Normalmente estos ficheros tienen cientos de lineas de código, que de otra forma tendríamos que escribir cada vez que las necesitáramos. El primer ejemplo de esto, es el fichero “data\scripts\base.inc”. Este fichero se incluye prácticamente en todos los scripts. El contenido de estos ficheros es el mismo que los .script, con la particularidad que podremos incluirlos en otros ficheros.

*.scene → Son ficheros que incluyen la información de las escenas definidas en el editor de escenas. Es posible crear este fichero a mano, pero es mas recomendable usar el editor de escenas, te facilitarás el trabajo.

*.sprite → son ficheros donde se almacena la información de los sprites, como vimos en el primer capitulo, los sprites eran por decirlo de algún modo, una especie de animaciones, que se creaban con el editor de sprites. También es posible crear estos ficheros a mano pero es más engorroso.

*.actor → Son ficheros donde se definen los actores, y las animaciones de estos.

*.entity → En estos ficheros se definen las entidades.

*.font → Son ficheros donde se definen las fuentes que vamos a usar en el juego, admite de dos tipos, tipo mapas de bits y tipos true type.

*.windows → Son ficheros donde se definen las interfaces del juego, por ejemplo: menús, paneles, etc.

*.image → Son ficheros que almacenan imágenes, con la capacidad de crear repetición(mosaicos), estos ficheros son muy útiles para inventarios.

*.button → Son ficheros que definen como son los botones, por ejemplo los botones de los menús.

Recomendación: Lo mejor es coger cada uno de estos archivos de la demo incluida en wme, e investigarlos, y exprimirlos, para aprender a conocerlos. Quizá cuando acabe con la traducción, haga unos tutoriales explicando mas a fondo estos ficheros.

Aparte de estos tipos de ficheros, wme presenta unos archivos especiales, a los que es posible cambiar sus nombres, pero estos son los nombres que se crean por defecto:

default.game y startup.setting → Son creados por el administrador de proyectos y almacenados en la carpeta principal del proyecto, en ellos se almacenan las características del juego, y las opciones iniciales.

String.tab → Se almacena también en la carpeta principal del proyecto, y contiene las tablas de cadenas de caracteres para los distintos idiomas. Por si queremos tener un juego en varios idiomas.

items.items → Contiene la declaración de los objetos del inventario que se usarán a lo largo del juego. Se almacena en la carpeta “data\items”.

responses.def → En este fichero se almacena como se ve la ventana de dialogo en las conversaciones de los personajes. Se almacena en “data\interface”.

inventory.def → En este fichero se define el aspecto de la caja del inventario de nuestros personajes. Se guarda en “data\interface”.

Como comente antes, os recomiendo que vayáis explorando estos ficheros, y os familiaricéis con ellos.

Pero dejemos esto de lado, y empecemos con la cosa mas simple – el ajuste de la escena. Si exploramos el contenido de alguna escena ya creada en el explorador del administrador de proyectos, veremos que todas las escenas contienen un fichero .scene, y una carpeta llamada scr que contiene un fichero llamado scene_init.script

Nota: en los ejemplos que vienen con wintermute hay mas ficheros, pero en esencia, una escena con lo mas básico tiene esos dos ficheros.

Bien pues internamente, wme lee el fichero de escena (.scene), y prepara todo tal y como esta definido en el fichero de escena, posteriormente carga todos los ficheros .scripts que participan en la escena, y automáticamente ejecuta el fichero llamado scene_init.script. Este fichero lo que hacer es ejecutar todas las acciones necesarias cuando se carga la escena, por ejemplo:

Si quieres que tu personaje al entrar a una escena que es muy oscura diga “oju! Que oscuro esta esto!”, pues esto deberemos definirlo en este fichero, así pues vamos a analizar y a comentar este fichero( scene_init.script ).

#include “scriptsbase.inc” 
 
//Ahora definimos las opciones iniciales de la escena 
 
actor.SkipTo(733,562); // Posicionamos al actor en un punto de la escena 
actor.Direction=DI_DOWN;// Hacemos que el actor mire hacia una direccion 
actor.Active=true;// Hacemos el actor visible dentro de la escena 
 
//Ahora definimos el estado de la escena 
 
global StateWarehouse;//Creamos esta variable para almacenar el estado actual de la escena 
 
//Comprobamos el estado de la variable que hemos creado, si no tiene valor, se lo agregamos 
if(StateWarehouse==null) 
{ 
	StateWarehouse.Visited=false; /* Creamos un atributo para la variable de estado  
                                        llamada Visited y le damos el valor falso, ya que  
                                        aun no hemos visitado la escena */ 
} 
 
if(!stateWarehouse.Visited) // Si no hemos visitado la escena 
{ 
	StateWarehouse.Visited=true; /* Le damos el valor true a escena, si entramos en ella 
                                         y nunca antes la habíamos visitado*/ 
//Esta es la primera entrada en la escena 
} 
//Aquí acaba el fichero scene_init.script

Quizás pienses que este script es una locura solo para comprobar si hemos visitado una escena o no, pero créeme, hay mas de lo que parece a simple vista. Este script que puede ofrecer muchas posibilidades, desde que el juego empieza, es necesario registrar las escenas que vamos visitando. Por ejemplo esas aventuras que cuando entras a una escena y explota un puente. El puente solo explota una vez, no cada vez que entremos, por eso es necesario y útil este script, y es recomendable entenderlo para poder diseñar aventuras bien construidas.

Bien cuando entendemos este script, en realidad lo que hace es algo muy simple.

Bueno como hay miles de métodos diferentes, he decidido coger el camino fácil y explicarlos conforme vayan saliendo.( palabras del creador original de la guía, con el tiempo quiero construir un pequeño manual de todos los métodos, atributos y eventos de los que nos provee wme).

Analicemos el script del ejemplo anterior linea por linea:

Ya sabemos que los objetos tienen sus métodos, que son llamados mediante:

nombre_objeto.nombre_metodo();

Nuestra linea a analizar es la siguiente:

actor.SkipTo(733, 562);

Pues bien, en esta linea llamamos al método skipTo() de nuestro objeto actor.

“actor” es una variable global de tipo Object que contiene a nuestro actor, y que es declarada en un script diferente. Ahora alguien se levantará y me dirá: he tu mentiroso, tu dijiste que había que definir cada variable global antes de usarla. Y yo le respondo, es verdad, esta ahí, pero no se ve, ya que va incluida en el fichero base.inc que incluimos en la primera linea. Veis la potencia del include? No tienes que declarar el actor en cada script, simplemente incluye este fichero al principio del script, y el programa se encargará del resto.

Bueno, volvamos a nuestro objeto actor y analicemos los métodos y atributos que hemos usado, y añadiremos dos mas realmente útiles:

Actor.SkipTo(x,y); → Establece al actor en una posición determinada de la pantalla. Asegúrese que esta posición esta dentro de la pantalla y ademas este dentro de una region activa.

actor.Direction= vista; → Es un atributo que establece la dirección hacia la que mira el actor, vista puede tener ocho valores posibles( DI_UP, DI_DOWN, DI_LEFT, DI_RIGHT, DI_UPRIGHT, DI_UPLEFT, DI_DOWNRIGHT, DI_DOWNLEFT )

actor.Active= true / false; → Este atributo es común a todos los nodos, hacen que estos estén activos o inactivos(visibles o invisibles).

actor.GoTo(x,y); → Este método hace que el actor camine a las coordenadas especificadas como parámetros.

actor.Talk(“texto”);→ el actor dice lo que se le pase por parámetro.

Nota: Recordad siempre que wme hace distinción entre mayúsculas y minúsculas.

Bien, lo mejor es probar estos métodos en la practica,trabajemos sobre nuestro scene_init.script, luego si abrimos el proyecto con el que estábamos trabajando, en el capítulo 1.3. Editor de Escenas, si lo recordábamos, hablábamos de este fichero, y además incluso lo modificamos, pues ahora lo veremos mas a fondo.

Bien, para abrir este archivo, debíamos ir a data–> scenes → warehouse(que es el nombre con el que la guardábamos)–>scr, aquí podemos localizar nuestro fichero scene_init.script. A partir de ahora, cuando hable de este fichero, deberías saber localizarlo fácilmente. Cada escena dispone de su fichero scene_init.script.

Abre este fichero haciendo doble clic sobre el, y localiza la linea que dice:

actor.Active = true;

y añade estas lineas tras ella:

actor.GoTo(365,561);  
actor.Direction = DI_DOWN;  
actor.Talk("¡Que bonito almacén");

Ahora deberíamos tener este resultado en el fichero scene_init.script:

#include “scriptsbase.inc” 
 
//ahora definimos las opciones iniciales de la escena 
 
actor.SkipTo(733,562); // posicionamos al actor en un punto de la escena 
actor.Direction=DI_DOWN;// hacemos que el actor mire hacia una dirección 
actor.Active=true;// hacemos el actor visible dentro de la escena 
actor.GoTo(365,561);  
actor.Direction = DI_DOWN;  
actor.Talk("¡Que bonito almacén!"); 
 
//ahora definimos el estado de la escena 
 
global StateWarehouse;//creamos esta variable para almacenar el estado actual de la escena 
 
//comprobamos el estado de la variable que hemos creado, si no tiene valor, se lo agregamos 
if(StateWarehouse==null) 
{ 
	StateWarehouse.Visited=false; /* creamos un atributo para la variable de estado 
                                       llamada  Visited y le damos el valor falso, ya que aun  
                                       no hemos visitado la escena */ 
} 
 
if(!stateWarehouse.Visited) // si no hemos visitado la escena 
{ 
	StateWarehouse.Visited=true; /* le damos el valor true a escena, si entramos en ella,  
                                        ya que nunca antes la habíamos visitado*/ 
//esta es la primera entrada en la escena 
}

Salva el fichero y ejecuta el juego desde el administrador de proyectos. Antes de continuar, hablemos un poco de uno de los aspectos mas importantes a la hora de programar juegos en wme. Wme genera un fichero llamado wme.log y que guarda en la carpeta principal del proyecto. Este es un fichero donde se registran todos los errores que puedan tener los scripts, ademas de otras cosas.

Por ejemplo, si tienes un error en un script, el compilador mostrará un mensaje de error en la pantalla, pero en el fichero wme.log se genera una linea de error diciendo que script lo generó, y en que linea del script. Recomiendo que aprendas a controlar esto, porque te ahorrara muchísimo tiempo, date cuenta que si te dicen el archivo que genera el error y la linea en la que lo genera, solo tendrás que buscar esa linea, e investigar que paso.

Ok, sigamos adelante, si ejecutasteis el juego, al hacerlo pudisteis ver que nuestro personaje se situaba delante de las cajas, y decía la frase “¡Que bonito almacén!”, pues eso lo conseguimos con estas dos lineas:

actor.GoTo(365,561); // hace que el actor ande hacia las cajas 
 
actor.Talk("¡Que bonito almacen!"); //hace que el actor diga "¡Que bonito almacén!"

Bien hagamos algo para interactuar con la escena. Abre la escena warehouse en el editor de escenas, selecciona la entidad de región de la puerta, que habíamos creado en el capitulo 1.3, y presiona sobre el botón de scripts(1), y en la nueva ventana, pulsa sobre new script(2).

1

2

En la siguiente ventana, selecciona como plantilla(template) empty.script en la lista de la izquierda, y después presiona ok.


 
es/wmebook/ch3.1365520537.txt.gz · Last modified: 2013/04/09 17:15 by dongo
Recent changes RSS feed Creative Commons License Driven by DokuWiki