Wintermute Engine is no longer actively developed.
The original sources are archived on GitHub: wintermute-engine and wmelite. The runtime is now integrated into ScummVM, which runs Wintermute games on current systems.
Hola.
Debido al gran interés que existe por hacer diálogos basados en iconos en WME, he decidido crear un sencillo objeto universal que puedas usar y adaptar a tus necesaidades.
Aquí tienes un ejemplo de cómo implementarlo rápidamente:
1. Crea el archivo scripts\dialogueObject.script con el siguiente contenido:
#include "scripts\base.inc" // Define las dimensiones de los iconos de tu diálogo var ICON_WIDTH = 57; var ICON_HEIGHT = 57; // script es el nombre donde manejarás las respuestas del ociono seleccionado por el jugador method initializeDialogue(script) { this.script = script; this.iconCount = 0; this.window = Game.LoadWindow("windows\dialogueWindow.window"); var tmpwin = this.window; tmpwin.Visible = true; tmpwin.AttachScript(script); } // Esto terminará el diálogo y liberará los recursos method endDialogue() { var tmpwindow = this.window; tmpwindow.DetachScript(this.script); tmpwindow.Close(); } // Esto añadirá un icono a la ventana de diálogo method insertIcon(name, sprite, hoversprite) { var tmpwin = this.window; var tmpButton = tmpwin.CreateButton(name); tmpButton.X = this.iconCount * ICON_WIDTH; tmpButton.SetImage(sprite); tmpButton.SetHoverImage(hoversprite); tmpButton.Visible = true; tmpButton.Interactive = true; tmpButton.ParentNotify = true; tmpButton.Disabled = false; tmpButton.PixelPerfect = false; tmpButton.Width = ICON_WIDTH; tmpButton.Height = ICON_HEIGHT; this[this.iconCount] = name; // Guardamos el nombre para borrar rápidamente la referencia más adelante this.iconCount = this.iconCount + 1; } // Esto elimina el icono (normalmente, después de agotar todos los temas) method removeIcon(name) { var tmpwin = this.window; var reorder = -1; // a salvo de llamadas sin sentido for (var a = 0; a<this.iconCount; a= a+1) if (this[a] == name) reorder = a; if (reorder == -1) return; tmpwin.DeleteButton(name); for (a = reorder; a<this.iconCount; a = a +1) { this[a] = this[a+1]; var button = tmpwin.GetControl(this[a+1]); button.X = a* ICON_WIDTH; } }
2. Crea un archivo llamado scripts\reactions.script
on "first" { Game.Msg("Haz algo después de la primera elección."); } on "second" { Game.Msg("Haz algo después de la segunda elección."); } on "third" { Game.Msg("Haz algo después de la tercera elección."); dlgObject.removeIcon("second"); }
3. Escribe en scripts\base.inc
global dlgObject;
y en scripts\game.script
dlgObject = new Object("scripts\dialogueObject.script");<code> Entonces, en tu escena de prueba introduce el siguiente código: <code script>dlgObject.initializeDialogue("scripts\reactions.script"); dlgObject.insertIcon("first","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png dlgObject.insertIcon("second","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png dlgObject.insertIcon("third","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png
El esqueleto básico ha sido completado. Después de que acabe el diálogo, llama a
dlgObject.endDialogue(); y probablemente tendrás que poner la variable set Game.Interactive a True (si anteriormente era False)
Espero que te ayude. ¡Los comentarios son bienvenidos!
