Glovepie
Qué es GlovePie
GlovePIE viene de Glove Programmable Input Emulator. no tiene por que ser usado por VR Gloves (Guantes de Realidad Virtual), pero originalmente empezó siendo para emular un joystick o teclado usando el "Essential Reality P5 Glove". Ahora soporta y emula sistemas de todo tipo, usando todo tipo de periféricos, incluyendo los productos de Polhemus, Intersense, Ascension, WorldViz, 5DT y eMagin. Tambien puede controlar salidas MIDI u OSC.
En la ventana de GlovePie escribes o cargas cualquier script. por ejemplo, para controlar las teclas WASD con un guante:
- W = glove.z > -50 cm
- S = glove.z < -70 cm
- A = glove.x < -10 cm
- D = glove.x > 10 cm
también puedes usar GlovePIE para jugar a juegos que necesiten obligatoriamente un joystick sin joystick, o juegos que utilicen solo teclado con un juystick. O puedes usarlo para crear macros para complicados atajos de teclado.
También puedes usarlo para controlar varios punteros con varios ratones
Requisitos del sistema
- Windows 98 o superior (Windows 2000 o superior para emular teclas en juegos DirectInput o usar multiples cursores falsos - Windows XP o superior para controlar varios teclados o ratones o para tener varias teclas especiales).
- DirectX 8 o superior.
- La emulación de joystick necesita el PPJoy. El hablado necesita SAPI 5.1 with microsoft recogniser.
Hardware soportado
- Nintendo Wii Remote (Wiimote)
- NaturalPoint (Or eDimensional) TrackIR, OptiTrack, SmartNav
- FakeSpace Pinch Gloves (9600 baud by default, but can be changed)
- Concept 2 PM3 rowing machines (ergo or erg)
- All joysticks or gamepads recognised by Windows
- Parallel port gamepads (with PPJoy)
- All keyboards
- Mice with up to 5 buttons and 2 scroll wheels
- Most microphones (don't have to be high quality)
- Most MIDI input or output devices
- Essential Reality P5 Glove
- 5DT Data Glove (all versions)
- eMagin Z800 3D Visor HMD
- Polhemus trackers (must be set to 115200 baud): IsoTrak II, FasTrak, Liberty, Patriot, Liberty Latus
- Ascension trackers: Flock of Birds, MotionStar, etc.
- Intersense trackers: InterTrax, InertiaCube, IS-300, IS-600, IS-900, IS-1200, etc.
- WorldViz PPT trackers (all versions)
- GameTrak (only as a joystick, no direct support)</nowiki>
Scripts para Wiimote
Programación básica del Wiimote
Para empezar a programar scripts en GlovePie para poder usar nuestro Wiimote en el PC, lo primero que debemos conocer es como se llama cada tecla del Wiimote, a continuación os dejo una lista de las teclas.
Cursor
- Arriba = Wiimote.Up
- Abajo = Wiimote.Down
- Izquierda = Wiimote.Left
- Derecha = Wiimote.Right
Botones
- A = Wiimote.A
- B = Wiimote.B
- - = Wiimote.Minus
- + = Wiimote.Plus
- Home = Wiimote.Home
- 1 = Wiimote.One
- 2 = Wiimote.Two
Sabiendo esto podemos empezar a crear nuestros scripts básicos facilmente, para ello solamente habrá que seguir la siguiente nomenclatura
Tecla del teclado = Botón del Wiimote
Vamos a hacer un script sencillo para cualquier juego de carreras, habría que hacerlo así:
// Script de ejemplo de juego de carreras hecho por Scatsy
//Controles de dirección
Left = Wiimote.Up
Right = Wiimote.Down
//Controles de aceleración
Up = Wiimote.One
Down = Wiimote.Two
Con este script conseguiremos que, girando el wiimote dejando la cruceta a la izquierda, al apretar el boton 1 aceleraremos y con el 2 frenaremos, y pulsando arriba o abajo en el Wiimote (que girado sería izquierda y derecha) giraremos el coche.
Los comentarios se ponen con // delante, así el GlovePie no lo interpretará como una acción.
Con esta programación básica podremos tener controles para juegos sencillos, emuladores o controles multimedia, a continuación pongo un ejemplo algo más elaborado, un script para controlar el Media Player Classic
// Media Player Control by Scatsy V 0.1
// Controles de archivo
Ctrl+o = Wiimote.One // Abrir Archivo
Ctrl+l = Wiimote.Two // Cargar Subtitulos
// Controles de reproducción
Space = Wiimote.A // Play-Pause
Period = Wiimote.B // Stop
Ctrl+right = Wiimote.Right // Avanzar 5 segundos
Ctrl+Left = Wiimote.Left // Retroceder 5 segundos
Add = Wiimote.up // Retraso de audio +10 ms
Subtract = Wiimote.Down // Retraso de audio -10 ms
// Controles del reproductor
Ctrl+Enter = Wiimote.Home // Pantalla Completa
Alt+X = Wiimote.B + Wiimote.A // Salir del Media Player
Up = Wiimote.Plus // Subir Volumen
Down = Wiimote.Minus // Bajar Volumen
Este script hace uso de todos los botones del Wiimote e incluso de una funcion usando 2 botones a la vez, como se puede ver es muy sencillo.
Programación media del Wiimote
En esta sección extenderé un poco más acciones con el Wiimote, más concretamente las acciones relacionadas con la inclinación del mando, lo primero que tenemos que ver son los valores de inclinación.
- Wiimote.RawForceX
- Wiimote.RawForceZ
- Wiimote.RawForceY
Estos valores controlan la inclinación de los distintos ángulos del Wiimote y varian según se posicione el mismo, estos valores se programan de manera similar a los botones, solo que tenemos que tener en cuenta los valores. Para ver los valores de cada eje podemos usar el siguiente script
debug = "X=" + Wiimote.RawForceX + " Y=" + Wiimote.RawForceY + " Z=" + Wiimote.RawForceZ
Esto nos mostrará los valores de cada eje en la ventana de Debug del GlovePIE, y con esto podremos empezar a crear acciones para estos valores, por ejemplo, vamos a ver de nuevo un script para juegos de coches
// Script de ejemplo de juego de carreras hecho por Scatsy
Up = Wiimote.RawForceX <= -10 // Acelera
Down = Wiimote.RawForceX >= 20 // Frena
Left = Wiimote.RawforceZ <= -10 // Gira Izquierda
Right = Wiimote.RawforceZ >= 10 // Gira Derecha
Con este script tendremos el control del coche inclinando el mando hacia los lados y hacia delante y atras, por supuesto tendremos que coger el mando como en el script de carreras anterior.
En Up = Wiimote.RawforceX <= -10 lo que he echo es programar el mando para que al inclinarlo en el eje X (es decir, al inclinarlo hacia adelante) igual o menos que -10, se presione la tecla Up del teclado, es decir la flecha de arriba, he elegido -10 por gustos personales pero se puede poner el valor que mejor te vaya, esto es lo mismo para el resto de valores.
También podemos programar los leds, es lo más sencillo, los valores para los leds son los siguientes:
- Wiimote.Led1
- Wiimote.Led2
- Wiimote.Led3
- Wiimote.Led4
Si queremos encender o apagar algúno de los leds, simplemente le añadimos "= True" o "= False".
Por ejemplo, para encender los leds de los lados:
Wiimote.Led1 = True
Wiimote.Led2 = False
Wiimote.Led3 = False
Wiimote.Led4 = True
Programación avanzada del Wiimote
Aqui vamos a profundizar en las variables y en las condicionales, es un tema muy complejo del que se podría llenar libros enteros, pero empezaré por lo mas básico, que son los if, then, else y endif luego explicaré un poco lo de las variables.
Estas 4 palabritas que he puesto definen casi todo en la programación avanzada del Wiimote, sirven para hacer condicionales, el GlovePIE usa un lenguaje de muy bajo nivel por lo tanto es bastante sencillo de comprender, pero por supuesto, con estas condicionales se pueden hacer cosas basante complejas, como siempre veamos un ejemplo.
//Ejemplo de vibración por Scatsy
if wiimote.b then // El Wiimote tiembla al usar el disparo primario
wiimote.rumble = true
wait 400 ms
wiimote.rumble = false
Endif
if pressed (wiimote.a) then // El Wiimote tiembla al usar el disparo secundario
wiimote.rumble = true
wait 300 ms
wiimote.rumble = false
Endif
If Pressed(e) Then // El Wiimote tiembla si se pulsa e
Wiimote.Rumble = True
wait 200 ms
Wiimote.Rumble = False
EndIf
Como veis, todas las condicionales empiezan por if y acaban en endif, en la primera condicional if wiimote.b then le estamos diciendo básicamente al wiimote que se prepare para algo cuando esté pulsado el botón b del wiimote, siempre tendremos que empezar así if acción then reacción, si lo traducís al español tiene lógica "si Wiimote.b entonces", a continuación tendremos que poner la condición, en el caso del ejemplo, le hemos dicho que el wiimote vibre "wiimote.rumble = true" cuando esté pulsado el boton B "if wiimote.b", luego le hemos dicho que espere 300 milisegundos y se apague "wait 300 ms | Wiimote.rumble = false", por último hemos puesto el endif que es lo que hace que la condición se acabe.
En la segunda condición, hay algo cambiado, el pressed, el sistema es el mismo, pero esto indica que en vez de vibrar mientras se pulse, vibrará durante 300 ms cuando sea pulsado, es decir, en la primera condición el Wiimote vibrará mientras tengamos pulsado el botón B del wiimote, mientras que en la segunda condición, el Wiimote vibrará durante 300 ms cuando pulsemos el boton A del Wiimote.
Por último, la tercera condición es exactamente la misma que la segunda, salvo que en vez de indicar a un botón del Wiimote, indicamos a un boton del teclado.
Hay otras formas de definir todo esto, usando la función Else, como siempre, un ejemplo
//Ejemplo de leds por Scatsy
if wiimote.b = true then
wiimote.led3 = true
wiimote.led2 = true
else
wiimote.led2 = false
wiimote.led3 = false
endif
Este ejemplo es muy sencillo y similar a los demas, en la primera condicional del ejemplo anterior, le habiamos dicho al GlovePIE que mientras estuviera pulsado el boton B del Wiimote, este vibrara, y que al soltarlo esperara 300 ms y dejara de vibrar, con este script hacemos lo mismo, mientras pulsemos el boton B del Wiimote, los leds 2 y 3 se encenderan y cuando lo soltemos se apagarán, si intentamos hacer esto de la misma forma que el ejemplo anteriór, lo único que conseguiremos es que los leds empiezen a parpadear, sin embargo podemos hacer lo mismo del ejemplo anterior con este modo, en resumen, la funcion Else hace que mientras esté pulsado ese boton o ejecutandose esa acción, se haga algo hasta que se suelte o acabe la acción.
Variables
Las variables mucho mas sencillas de lo que parece, en realidad se programa igual que cualquier función, solo que tendremos que enunciarlas antes, veamos un ejemplo
//Ejemplo de variables por Scatsy
Var.A = Wiimote.A and Wiimote.B
Var.B = Wiimote.A and not Wiimote.B
if Var.A = true then
Wiimote.Led1 = True
Wiimote.Led4 = True
else
Wiimote.Led1 = False
Wiimote.Led4 = False
end
if Var.B = True Then
Wiimote.Led2 = True
Wiimote.Led3 = True
else
Wiimote.led2 = False
Eiimote.Led3 = False
endif
En el ejemplo, hemos enunciado primero las variables y lo que son, Var.A es que esten pulsados los botones A y B del Wiimote, mientras que Var.B es que esté pulsado el botón A del Wiimote pero no el B, entonces cuando las condiciones de estas variables se cumplan "Var.A = True", la acción que hemos hecho se ejecutará, esto viene bien por si queremos asignar 2 o mas botones a una determinada acción o que cuando ocurran 2 cosas a la vez se ejecute una determinada acción (por ejemplo cuando el Wiimote esté en horizontal y pulsemos el botón A del Wiimote).
También podemos encadenar todo tipo de variables y acciones, por ejemplo, tomando el mismo ejemplo de antes pero añadiendole una cosa mas
//Ejemplo de variables por Scatsy
Var.A = Wiimote.B
Var.B = Wiimote.A
if Var.A = true then
Wiimote.Led1 = True
Wiimote.Led4 = True
else
Wiimote.Led1 = False
Wiimote.Led4 = False
end
if Var.B = True Then
Wiimote.Led2 = True
Wiimote.Led3 = True
else
Wiimote.led2 = False
Eiimote.Led3 = False
endif
if Var.B and Var.A = true then
Wiimote.Rumble = true
Else
Wiimote.Rumble = False
endif
En este ejemplo que es muy similar al anterior, si pulsamos el botón B del Wiimote, se encenderán, los leds de los laterales, si pulsamos el botón A del Wiimote, se encenderán los leds del centro y ahora si pulsamos los dos botones a la vez, se encenderan todos los leds (por las variables A y B) y ademas el Wiimote Vibrará por que se han cumplido las variables A y B. Como podéis ver, las variables son muy comodas.
Programación del Nunchuk
GlovePIE, aparte de soportar el Wiimote, también soporta el Nunchuk, es decir, el addon principal del Wiimote, programarlo es también muy sencillo, es casi igual que el Wiimote pero cambiando los nombres, vamos a ver sus botones y valores
Botones
- Nunchuk.ZButton = Botón Z del Nunchuk
- Nunchuk.CButton = Boton C del Nunchuk
Joystick
- Wiimote.Nunchuk.JoyY = Eje Y del Joystick
- Wiimote.Nunchuk.JoyX = Eje X del Joystick
Inclinación
- Nunchuk.RawforceX = Inclinación del Eje X
- Nunchuk.RawforceY = Inclinación del Eje Y
- Nunchuk.RawforceZ = Inclinación del Eje Z
Salvo los botones, el resto de valores han de tratarse de forma analógica, al igual que haciamos con la inclinación del Wiimote, vamos a ver un ejemplo para tenerlo mas claro
// Ejemplo de movimiento en FPS creado por Scatsy
//Movimiento del personaje
W = Wiimote.Nunchuk.JoyY < -0.4 // Adelante
A = Wiimote.Nunchuk.JoyX < -0.4 // Paso Lateral izquierdo
S = Wiimote.Nunchuk.JoyY > 0.4 // Atras
D = Wiimote.Nunchuk.JoyX > 0.4 // Paso Lateral derecho
Ctrl = Wiimote.Nunchuk.ZButton // Agacharse
Space = Wiimote.Nunchuk.CButton // Saltar
Como veis es bastante sencillo, la única complicación es el movimiento en si, como ya he dicho, salvo los botones, el resto de valores tienen que ser analógicos, es decir, según empujemos el joystick del Nunchuk los valores cambiarán, estos van de -0,93 a 1,07 aproximadamente, en el caso del eje Y -0,93 sería empujando el joystick hacia alante del todo y 1,07 emujandolo hacia atras del todo, en el ejemlpo, cuando he puesto W = Wiimote.Nunchuk.JoyY < -0.4 // Adelante lo que he "dicho" al GlovePIE es que cuando el valor del eje Y sea menor de -0,4, pulse la tecla W, consiguiendo así que el personaje en nuestro FPS avance, esto, por supuesto, es personalizable y puedes poner el valor que quieras.
Programar los valores de inclinación es igual de sencillo que hacerlo con el Wiimote y se hace de la misma forma, solo cambia el nombre, veamos un ejemplo
// Ejemplo de recarga y uso en un FPS echo por Scatsy
R = Nunchuk.Rawforce >= 30 // Recarga
E = Nunchuk.Rawforce <= -30 // Usa
Con esto, inclinando el Nunchuk hacia un lado o a otro recargaremos el arma en nuestro FPS o usaremos un objeto (siempre y cuando las teclas que tengais sean esas que son las que vienen normalmente en los FPS), inclinando el Nunchuk a la izquierda veremos los valores positivos, mientras que inclinandolo a la derecha veremos los negativos, esto, como todo, es personalizable para el gusto de cada uno.
Podeis ver los valores del Nunchuk con este Script
debug = "X=" + nunchuk.joyX + " Y=" + Nunchuk.joyY + " RZ=" + Nunchuk.RawForceZ + " RY=" + Nunchuk.RawForceY + " RX=" + Nunchuk.RawForceX
Listado de funciones comunes
Wiimote | Nunchuk | ||||||
Botones | Cruceta | Vibración | Leds | Sensores | Botones | Cruceta | Sensor |
Wiimote.A | Wiimote.Left | Wiimote.Rumble | Wiimote.Led1 | Wiimote.RawForceX | Nunchuk.C | Nuncuk.JoyY | Nunchuk.RawforceX |
Wiimote.B | Wiimote.Right | Wiimote.Led2 | Wiimote.RawForceY | Nunchuk.Z | Nuncuk.JoyX | Nunchuk.RawforceY | |
Wiimote.One | Wiimote.Up | Wiimote.Led3 | Wiimote.RawForceZ | Nunchuk.RawforceZ | |||
Wiimote.Two | Wiimote.Down | Wiimote.Led4 | Wiimote.RawAccX | Nunchuk.RawAccX | |||
Wiimote.Home | Wiimote.RawAccY | Nunchuk.RawAccY | |||||
Wiimote.Plus | Wiimote.RawAccZ | Nunchuk.RawAccZ | |||||
Wiimote.Minus |
Construcción de una WiiBar Casera
En realidad no hay una forma standard de crear una WiiBar casera, basta con tener un led en el centro superior del monitor o tv o 2 leds separados unos 20 CM, dependiendo de la distancia a la que vayas a usar el Wiimote de la barra.
Puedes ver diferentes barras caseras en este enlace de Elotrolado
Scripts para usar el Wiimote en el PC
A continuación os dejo una lista de scripts para usar el Wiimote en el PC, estos están en formato .PIE que es el usado por GlovePIE
- F
- [1]Freets of Fire by Iron Tiger [Con Nunchuk]
- G
- [2]Google Hearth by J.Coulston
- H
- [3]Half Life 2 by Arianol and Scatsy [Con Nunchuk]
- T
- [6]Trackmania by Scatsy
- Z
- [12]Zelda Ocarina Of Time by Carl Kenner and Bomboy02 [Con Nunchuk]