===== 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; }