Introduccion a LuaFWii
LuaFWii es un lua player para wii. Ademas de ser el primer lua player para wii con funciones adicionales. Actualmente esta en un estado de desarrollo bastante avanzadoGracias a mdbrim por ayudarme con los WAV, a rubenelportero y csar.ale betatesters oficiales del proyecto, y a deviante por algunos consejos.
Como usar LuaFWii
Para usar el script predeterminado es tan simple como extraer en la raiz de tu SD y a continuacion acceder a Homebrew Channel, seleccionar LuaFWii (pulsando A encima) y darle a cargar.Para usar tu script descomprime en la raiz y ve a la carpeta sd:/apps/LuaFWii1.1, sustituye el script.lua por el tuyo. Si lo deseas tambien puedes cambiar el meta.xml y el ICON.png. Tambien puedes cambiar el nombre de la carpeta.
Si deseas cambiar la fuente usada para mostrar los errores sustituye error.ttf por la que tu quieras. Una vez que sepas que tu homebrew no tiene errores puedes eliminarla, si se produjera algun bug inesperado regresara al homebrew channel sin mostrar nada. (Recuerda que Screen.print usa la fuente por defecto)
Changelog
1.1Se aņaden las funciones OggLoad, oggPlay, oggFree y oggisPlaying, y el argumento repeat en wavPlay Permite mostrar parte de la imagen (para paletas de imagenes)
Se aņaden surfaceCreate, surfaceBlit y surfaceFree (Parecido a imageCreateEmpty de psp, crea un surface donde puedes mostrar texto e imagenes, y luego copiarlo a la pantalla)
Posibilidad de mostrar texto e imagenes en surface o pantalla
Se aņade esta guia de referencia
1.00
Se aņaden funciones de Timers
Se aņade mover y renombrar archivos, y borrar directorios a System
Se separan funciones de imagen, wav y fuentes en Load, Blit y Free
Posibilidad de Cambiar color por defecto a print
Carga contest_splash.png al inicio si existe
Corregido error en FontWrite
Mejoras y cambios varios en Controls
Algunos cambios en Screen.delay y funciones Screen.draw
Mejorada la estabilidad y velocidad
Screen
Nota: lo que esta entre [ ] quiere decir que es opcional, pero estos simbolos no hay que ponerlos a la hora de usar la funcion
Screen.color(r, g, b[, a])
Carga un color especificado en RGB en la variable asignada, tambien soporta Alpha (transparencia, aņadiendo un cuarto numero de 0 a 255)
negro = Screen.color(0, 0, 0) --Color negro opaco
negro_alpha = Screen.color(0, 0, 0, 180) --Color negro semitransparente
Screen.delay(s)
Congela la pantalla el numero de segundos especificado
Screen.flip()
Muestra todo en pantalla.
Screen.surfaceCreate([w, h])
Crea un surface, una superficie virtual que emula a la pantalla en la cual se puede mostrar texto e imagenes, opcionalmente se puede especificar el tamaņo, sino usa el tamaņo por defecto (640x480).
surface = Screen.surfaceCreate(320, 240) --Crea una surface de ese tamaņo y la almacena en la variable surface
surface = Screen.surfaceCreate() --Crea una surface de 640x480
Screen.surfaceBlit(x, y, surface)
Copia un surface a pantalla.
surface = Screen.surfaceCreate() --Crea una surface
Screen.surfaceBlit(1, 1, surface) --Copia la surface a pantalla en el pixel 1, 1
Screen.surfaceFree(surface)
Libera un surface.
Screen.print(x, y, text)
Muestra el texto especificado en pantalla usando la fuente por defecto (error.ttf) en las coordenadas dadas.
Screen.print(1, 1, "Hola mundo") --Muestra el texto Hola mundo en las coordenadas dadas
Screen.printSetColor(r, g, b)
Cambia el color por defecto para el texto.
Screen.clear(color[, surface])
Limpia la pantalla del color indicado entre parentesis. Este tiene que definirse previamente con Screen.color.
negro = Screen.color(0, 0, 0) --Cargamos el color negro
Screen.clear(negro) --Limpiamos la pantalla de ese color
Screen.clear(negro, surface) --Limpiamos el surface especificado de ese color
Screen.fontLoad(font_file, size)
Carga una fuente, entre parentesis se pone la rute de la imagen y el tamaņo de la letra.
font = Screen.fontLoad("dejavu_sans.ttf", 16) --Cargamos la fuente dejavu_sans.ttf en tamaņo 16
Screen.fontWrite(x, y, text, font[, r, g, b][, surface])
Muestra el texto en las coordenasdas especificadas, con la fuente previamente cargada, opcionalmente se puede elegir el color del texto y si se desea mostrar en una surface en lugar de en pantalla.
font = Screen.fontLoad("dejavu_sans.ttf", 16) --Cargamos la fuente dejavu_sans.ttf en tamaņo 16
Screen.fontWrite(1, 1, "Hola mundo", font) --Aqui mostramos el texto Hola mundo en las coordenadas 1, 1, con la fuente cargada y el color por defecto
Screen.fontWrite(1, 1, "Hola mundo", font, 255, 255, 255, surface) --En este caso el color es blanco y lo muestra en la surface especificada
Screen.fontClose(font)
Cierra y libera la fuente de la variable especificada.
Screen.drawPixel(x, y, color[, surface])
Dibuja un pixel en las coordenadas dadas, del color especificado por Screen.color, opcionalmente puede mostrarse en un surface.
Screen.drawLine(x1, y1, x2, y2, color[, surface])
Dibuja una linea desde x1, y1, hasta x2, y2.
Screen.drawBox(x, y, w, h, color[, surface])
Dibuja un cuadro sin relleno en las coordenadas dadas, con el ancho y altos especificados.
Screen.drawfillBox(x, y, w, h, color[, surface])
Dibuja un cuadro relleno.
Screen.drawCircle(x, y, r, color[, surface])
Dibuja un circulo sin relleno (r es el radio).
Screen.drawfillCircle(x, y, r, color[, surface])
Dibuja un circulo relleno.
Screen.drawEllipse(x, y, w, h, color[, surface])
Dibuja un elipse sin relleno.
Screen.drawfillEllipse(x, y, w, h, color[, surface])
Dibuja un elipse relleno.
Screen.drawRound(x, y, w, h, r, color[, surface])
Dibuja un rectangulo redondeado relleno.
Screen.drawfillRound(x, y, w, h, r, color[, surface])
Dibuja un rectangulo redondeado relleno (r es el radio de las esquinas).
Screen.imageLoadinOne(x, y, image_file)
Carga y muestra una imagen de los formatos soportados por SDL (entre ellos bmp, jpg, png o tiff). En el parentesis estan X, Y y la ruta de la imagen.
Screen.imageLoad(image_file)
Carga una imagen de los formatos suportados por SDL y la almacena en una variable.
image = Screen.imageLoad("image.png") --Cargamos image.png y la almacenamos en la variable image
Screen.imageBlit(x, y, image)
Muestra la imagen cargada en las coordenadas dadas.
Screen.imageFree(image)
Libera la imagen cargada.
Sound
Nota: lo que esta entre [ ] quiere decir que es opcional, pero estos simbolos no hay que ponerlos a la hora de usar la funcion
Sound.wavLoadandPlay(wav_file, repeat)
Carga y reproduce un sonido wav (PCM Stereo 16bit). 0->No repite, 1->Repite infinitas veces
Sound.wavLoad(wav_file)
Carga un archivo wav y lo almacena en una variable (util para efectos sonoros en juegos).
sound = Sound.wavLoad("sound.wav") --Cargamos sound.wav y la almacenamos en la variable sound
Sound.wavPlay(sound, repeat)
Reproduce el sonido de especificado. 0->No repite, 1->Repite infinitas veces
sound = Sound.wavLoad("sound.wav") --Cargamos el sonido
Sound.wavPlay(sound, 0) --Reproducimos el sonido 1 vez
Sound.wavFree(sound)
Libera el sonido cargado.
Sound.wavStop(sound)
Para la reproduccion y vuelve al principio.
Sound.wavPauseResume(sound, pause)
Pausa o reanuda la reproduccion. 0 -> reanuda, 1-> pausa.
Sound.wavVolume(sound, volume)
Volumen del sonido de 0 a 255.
Sound.mp3LoadandPlay(mp3_file, repeat)
Carga y reproduce un sonido mp3. 0->No repite, 1->Repite infinitas veces
Sound.mp3Load(mp3_file)
Carga un archivo mp3 y lo almacena en una variable.
sound = Sound.mp3Load("sound.mp3") --Cargamos sound.mp3 y la almacenamos en la variable sound
Sound.mp3Play(sound, repeat)
Reproduce el sonido de especificado. 0->No repite, 1->Repite infinitas veces
sound = Sound.mp3Load("sound.mp3") --Cargamos el sonido
Sound.mp3Play(sound, 1) --Reproducimos el sonido infinitas veces
Sound.mp3Free(sound)
Libera el sonido cargado.
Sound.mp3Stop(sound)
Para la reproduccion y vuelve al principio.
Sound.mp3Volume(sound, volume)
Volumen del sonido de 0 a 255.
Sound.mp3PauseResume(sound, pause)
Pausa o reanuda la reproduccion. 0 -> reanuda, 1-> pausa.
Sound.mp3isPlaying()
Retorna 1 si se esta reproduciendo un sonido mp3, 0 si no.
is_playing = Sound.mp3isPlaying()
Sound.oggLoadandPlay(ogg_file, timepos, repeat)
Carga y reproduce un sonido ogg, timepos es el segundo en el que quieres que empieze. 0->No repite, 1->Repite infinitas veces
Sound.oggLoad(ogg_file)
Carga un archivo ogg y lo almacena en una variable.
sound = Sound.oggLoad("sound.ogg") --Cargamos sound.ogg y la almacenamos en la variable sound
Sound.oggPlay(sound, timepos, repeat)
Reproduce el sonido de especificado, timepos es el segundo en el que empieza. 0->No repite, 1->Repite infinitas veces
sound = Sound.oggLoad("sound.ogg") --Cargamos el sonido
Sound.oggPlay(sound, 0, 0) --Reproducimos el sonido 1 vez
Sound.oggFree(sound)
Libera el sonido cargado.
Sound.oggStop(sound)
Para la reproduccion y vuelve al principio.
Sound.oggPauseResume(sound, pause)
Pausa o reanuda la reproduccion. 0 -> reanuda, 1-> pausa.
Sound.oggVolume(sound, volume)
Volumen del sonido de 0 a 255.
Sound.oggisPlaying()
Retorna 1 si se esta reproduciendo un sonido ogg, 2 si no.
is_playing = Sound.oggisPlaying()
Sound.oggGetTime()
Devuelve el segundo actual del sonido que se esta escuchando
actual_second = Sound.oggGetTime()
Sound.oggSetTime(s)
Avanza la cancion hasta el segundo especificado
Controls
Nota: lo que esta entre [ ] quiere decir que es opcional, pero estos simbolos no hay que ponerlos a la hora de usar la funcion
Controls.read(wpad)
Examina los wpad en busca de eventos de botones y retorna el resultado. Los wpad son 0->Wiimote 1, 1->Wiimote 2, 2->Wiimote 3, 3->Wiimote 4
wpad1 = Controls.read(0)
Controls.readData(wpad)
Obtiene los datos del wiimote y retorna el resultado. Los wpad son 0->Wiimote 1, 1->Wiimote 2, 2->Wiimote 3, 3->Wiimote 4
data1 = Controls.readData(0)
Controls.pressA(wpad)
Comprueba si se ha pulsado el boton A en el wpad especificado. A continuacion una lista de todas las funcions de wpad
wpad1 = Controls.read(0) --Examinamos el wiimote 1
if Controls.pressA(Wpad1) == 1 then --Comprobamos si se ha pulsado A en el wiimote 1
Screen.print(1, 1, "Estas pulsando A") --Mostramos un texto
end
Controls.IRx(data)
Comprueba si se ha pulsado el boton A en el wpad especificado. A continuacion una lista de todas las funcions de wpad
data1 = Controls.readData(0) --Examinamos el wiimote 1
Screen.print(1, 1, "Coordenada X: "..Controls.IRx(data1)) --Obtenemos el dato y lo mostramos
System
Nota: lo que esta entre [ ] quiere decir que es opcional, pero estos simbolos no hay que ponerlos a la hora de usar la funcion
System.sleep(s)
Duerme la wii durante los segundos indicados
System.exitHBC()
Sale al HBC
System.currentDir([path])
En el caso rellenar el campo path con una ruta ("apps" por ejemplo) establece el directorio actual en esa ruta (cuidado puede dejar de leer el script), en caso de dejarlo vacio devuelve la ruta de tu boot.dol
System.createDir(path)
Crea un directorio
System.removeFile(file)
Elimina un archivo
System.removeDir(path)
Elimina un directorio
System.renameFile(file, file_new)
Renombra un archivo
System.moveFile(file, path_file_new)
Mueve un archivo
System.checkFile(file)
Comprueba si existe un archivo, retorna 1 si existe, 0 si no
System.getDir([1])
En caso de estar vacio el parentesis recuperara la lista de archivos, en caso de tener un valor (numerico) entrara e la carpeta correspoendiente a ese valor (para ejemplo mirar el script.lua)
System.getDName(1)
Obtiene el nombre del archivo o carpeta correspondiente con el numero entre parentesis (para ejemplo mirar el script.lua)
System.getDType(1)
Obtiene el el tipo, es decir, si es archivo (devuelve 0) o carpeta (devuelve 1) (para ejemplo mirar el script.lua)
System.isDExt(ext, 1)
Obtiene la extension del archivo correspondiente con el numero y la compara con la especificada entre parentesis, devuelve 1 si el archivo tiene esa extension y 0 si no la tiene
System.getMaxDir()
Devuelve el numero de resultados obtenidos por System.getDir() + 1 (para ejemplo mirar el script.lua)
System.getPathDir([1])
En el caso de que halla un numero devuelve la ruta completa del archivo o carpeta correspondiente, en el caso de que este vacio devuelve el directorio en el que estas actualmente
Timer
Nota: lo que esta entre [ ] quiere decir que es opcional, pero estos simbolos no hay que ponerlos a la hora de usar la funcion
Timer.new([0])
Crea el timer, entre parentesis el tiempo de inicio
Timer.start(timer)
Inicia el timer
Timer.time(timer)
Obtiene el tiempo del timer
Timer.stop(timer)>/p>
Detiene el timer
Timer.reset(timer[, 0])
Reinicia el timer, entre parentesis la variable del timer y opcionalmente el tiempo de inicio
Timer.free(timer)
Libera el timer