Indice
Introduccion
HowTo
Changelog
Screen
Sound
Controls
System
Timer

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 avanzado
Gracias 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.1
Se 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

Spoiler: Mostrar/Ocultar

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

Spoiler: Mostrar/Ocultar

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

Spoiler: Mostrar/Ocultar

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

(SE USAN IGUAL QUE LOS DE Lua HM7 de PSP, SI NECESITAIS DOCUMENTACION: http://pipagerardo.fortunecity.es/Tutorial_LUA_PSP_pipagerardo.html#FUNCIONES_DE_CONTROL_DE_TIEMPO)