===== Preguntas y respuestas =====
===== P: ¿Cómo configuro la primera escena del juego? =====
R: Busca la línea en data/scripts/game.script que comienza con Game.ChangeScene. Cambia esta línea para mostrar la escena correcta.
===== P: Mi escena funciona en Project Manager pero no una vez compilado ====
R: Probablemente sea un problema de rutas. Recuerda que debes usar rutas relativas en los paquetes. Si en la demo incluída en WME tienes un paquete llamado **data**, no incluyas **data** en la ruta de los archivos. Por ejemplo, usa la instrucción
Game.ChangeScene("scenes\room\room.scene");
y no
Game.ChangeScene("data\scenes\room\room.scene");
Otros problemas pueden ocurrir al mover escenas a carpetas anidadas. Tienes que comprobar el archivo de escena que has movido y, además de que la ruta sea correcta, asegurarte de que la variable **$EDITOR_PROJECT_ROOT_DIR$** apunte realmente al directorio raíz.
También es importante saber que todos tus efectos, música, etc. deben estar presentes en la carpeta del proyecto o no se incluirán en los paquetes compilados.
===== P: ¿Cómo desactivo el inventario en una escena? =====
R: Normalmente es suficiente con configurar Game.InventoryVisible = false; pero la demo de WME tiene un inventario móvil, entonces necesitaremos hacer algo más.
Ve a la siguiente línea en data/scripts/game_daemon.script:
if(Game.Interactive && Game.MouseY < 45 &&! Game.ResponsesVisible &&! WinMenu.Visible)
Game.InventoryVisible = true;
y cambialo por:
if(Game.Interactive && Game.MouseY < 45 &&! Game.ResponsesVisible &&! WinMenu.Visible && InventoryActive)
Game.InventoryVisible = true;
Añade la línea global InventoryActive en data/scripts/base.inc; y para finalizar inserta al principio de data/scripts/game.script la línea InventoryActive = true;
Desde ahora puedes activar/desactivar fácilmente el inventario con la variable InventoryActive en tus archivos scene_init.script.
===== P: ¿Cómo se ajustan las líneas de string.tab? =====
R: Sólo pon | en el sitio que quieras dividir el texto.
Ejemplo:
TXT000001[TAB]Hola, me gustaría hablar contigo sobre | algunacosarealmenteextrañaeincomprensible.
===== P: ¿Cómo funcionan los scripts con el texto de string.tab? =====
R: Si necesitas asignar un texto a una variable, tienes que llamar a la función Game.ExpandString().
Por ejemplo:
var txt = Game.ExpandString("/TXT000001/");
Game.Msg(txt);
===== P: ¿Cómo funcionan los archivos automáticos de diálogo? =====
R: WME tiene la capacidad de reproducir automáticamente archivos de sonido asociados a los códigos de string.tab. Aunque hay algunos detalles que debes evitar.
Primero, debes decirle a WME dónde están esos archivos (por defecto, se buscan en la carpeta speech).
Esto se hace de la siguiente manera:
Game.AddSpeechDir("Ciudad");
Tus archivos de sonido deben nombrarse igual que los códigos del archivo string.tab, por ejemplo, si tienes la siguiente línea:
CIUDAD0010001 Hola, ¡Me llamo Armitage!
tu archivo de sonido se llamará ciudad0010001.ogg
Lo último a tener en cuenta es que, si usas las propiedades avanzadas de Talk, debes indicar **null** como segundo parámetro. Por ejemplo, una línea compleja podría ser:
actor.Talk("/CIUDAD0010001/", null, 0, "", this.talign);
(donde this.talign es una variable que almacena el alineamiento del texto)
===== P: ¿Cómo se escriben caracteres especiales en las cadenas de texto de WME? =====
R: para escribir dobles comillas " usa los siguientes caracteres ~"
para escribir una nueva línea usa los siguientes caracteres ~n
actor.Talk("Hola, persona ~"rara~".~n¿Cómo te va?");
===== P: ¿Cómo funcionan los Arrays como clase miembro de un objeto propio? =====
R: Debido a la limitación de un nivel de la notación con puntos, necesitas un truco con una variable temporal. Aquí tienes un ejemplo:
file Arrayclass.script?
#include "scripts\base.inc"
this.Field = new Array(10);
method SetNumber(position,number)
{
var tmp = this.Field;
tmp[position] = number;
this.Field = tmp;
}