LUA para wherigos
1. Introducción
En esta serie de tutoriales se da por hecho que si los estás leyendo es porque ya sabes programar Wherigos usando Urwigo, y quieres aprender a programar en LUA para mejorar tus cartuchos. Si no sabes programar Wherigos con Urwigo te recomiendo los estupendos tutoriales de MiTesoro (manual de Urwigo, Tutorial 1, Tutorial 2) y manupor3 (presentación de Urwigo, acciones y expresiones). Cuando lo domines, podrás empezar estas pequeñas lecciones de LUA.
A la izquierda se encuentra el botón para navegar entre los distintos Temas. Cada tema tiene un videotutorial, una explicación teórica escrita, imágenes explicativas, algunos ejemplos en foto, y enlaces para descargar archivos .urwigo para trastear.
Videotutorial
Próximamente...
Qué es LUA y por qué usarlo
LUA es el lenguaje de programación en el que están escritos los cartuchos de wherigo. Como todos los lenguajes de programación, para usarlo hay que tener nociones de programación, conocer la sintaxis del lenguaje, conocer sus funciones, peculiaridades, etc. Esto puede ser algo "poco amigable", o "poco visual". Por ello, hay opciones con entorno gráfico para hacer el proceso de creación de cartuchos más asequible.
Urwigo es un entorno gráfico para generar cartuchos de Wherigo con más facilidad que escribiéndolos directamente con LUA. Pero... el desarrollador de Urwigo no implementó todas las funciones LUA en el entorno gráfico de Urwigo, por lo que para usarlas no nos queda otra que usar LUA "a pelo".
Algunas cosas que son soportadas en Wherigo pero que no están en la interfaz gráfica de Urwigo son: las variables tipo array, el OriginalPoint de una zona (que es el centro geométrico de la misma), la reciprocidad de los commands con target, etc.
Por ejemplo, imaginemos que tenemos un input. Sus propiedades son el nombre, la imagen, la pregunta, si es de tipo text/number/choice, y las posibles respuestas (si es de tipo choice). Ahora imaginemos que queremos cambiar la pregunta del input a mitad del cartucho. Se podría hacer un Set con el siguiente esquema: . Esto se puede hacer porque en Urwigo está la cajita de "Question" para poder arrastrarla a un Set. Pero si se quisiera cambiar las choices de un input... no hay "cajita" de choices. Por lo que si se quiere cambiar los choices a mitad de un cartucho, se ha de usar sí o sí LUA.
En esta serie de tutoriales vamos a usar LUA en combinación con Urwigo, complementándolo.

Como no hay cajita de la propiedad "Choices", no se puede definir con un Set. Sólo queda usar LUA.
El identificador
Lo primero que tenemos que saber para empezar a trabajar con LUA es que no se usa el nombre, si no el identificador. Se puede definir el identificador de cualquier objeto desde la pestaña General dentro de Properties. El identificador ha de cumplir una serie de requisitos para ser válido:
- Ha de ser único.
- No puede incluir espacios.
- No puede empezar con un número.
- No se aceptan los acentos ni caracteres extraños.
- No se aceptan los guiones (-) pero sí los guiones bajos (_)
- Distingue entre mayúsculas y minúsculas.

Aquí es donde se define el identificador. Por defecto está en blanco y se asigna uno automático. Si se quiere usar LUA hay que definirlos bien. Fíjate en que no se ha puesto ningún espacio.
Cómo usar LUA en el cartucho
Una vez que tenemos identificado el objeto en cuestión, podemos usarlo con LUA. Básicamente hay tres formas de usar LUA dentro de un cartucho:
- LUA USER CODE: Es una "cajita" de Urwigo que cuelga de Actions, por lo que se puede arrastrar dentro de los esquemas de árbol de Urwigo. Representa un código completo, por ejemplo un Set, If/Else, etc. Es totalmente equivalente.
- LUA USER EXPRESSION: Es una "cajita" de Urwigo que cuelga de Expressions, por lo que se puede arrastrar dentro "de un igual" en esquemas de árbol de Urwigo. Es decir, se puede usar como un Value, Numeric operation, Answer, etc.
- LUA USER FUNCTIONS: Es una pestaña entera que se puede abrir desde el menú View, en la que se puede escribir funciones personales, que luego pueden ser llamadas en cualquier momento con una caja LUA user code, o a través de una LUA user expression. Habrá un tutorial completo sobre las LUA user functions.

La secuencia de la izquierda es equivalente a la "cajita" de la derecha. En algunos casos, como en If/Elses muy grandes, es mucho más cómodo y rápido escribirlo que arrastrar decenas de cajitas.

El "Set" de la izquierda es totalmente equivalente al de la derecha.

La función MULTIPLICAR puede ser llamada en cualquier momento. Por ejemplo, aquí se ha usado para mandar un mensaje en el que ponga el resultado de variable1*variable2.
Algunos ejemplos...
Para este ejemplo (puedes descargarlo desde aquí) he querido usar un If/Else, aunque en esta serie de tutoriales todavía no se ha explicado cómo es un If/Else en LUA.
Tenemos un cartucho en el que posees una espada. En determinados momentos del cartucho (me imagino al matar monstruos o lo que sea) la espada sube de nivel, siendo más potente. He programado dos funciones totalmente equivalentes, una con cajitas de Urwigo y otra en LUA:

La función "Función subir nivel" incrementa en 1 el nivel de la espada, le cambia la descripción, el icono y la imagen.

La función "subirNivel()" hace exactamente lo mismo, pero escrita en LUA user functions.
Para este ejemplo he puesto un command en el item Espada que permite subir el nivel. Un input pregunta si se desea usar para ello la función "de cajitas" o la de LUA:

Este input permite elegir si se desea ejecutar la función de cajitas o la de LUA. Así demostramos que ambas hacen exactamente lo mismo.