Bueno, me entusiasme con esto de conectar los wiimotes a la PC y (frustrado por no encontrar cómo controlar el teclado y el mouse usando python) creé un juego simple para jugar usando los wiimotes.
El juego no fue mi idea, me basé en un juego que otra persona creó usando el PS Move, lo vi en un video de una convención de juegos indie pero no lo encontré para compartirlo.
El juego es bastante simple, cada uno tiene su wiimote y debe mantenerlo lo más quieto posible, cada vez que se mueve bruscamente su barra se llena un poco más (la barra se muestra en la pantalla y en los leds del wiimote), cuando la barra se llena, ese jugador perdió y gana el que queda al final.
Este script funciona sólo en Linux (no sabría cómo hacerlo para Windows) y precisan tener el cwiid instalado.
Éste es el script del juego:
Al comienzo les preguntará cuántos wiimotes se van a conectar, después les pedirá el límite, que es el valor en el cual la barra se llena, 100 me parece que anda bien, pero prueben con distintos valores. Después tienen que conectar los wiimotes, les va a pedir uno por uno que los conecten (si no los conectan en cierto tiempo salta un error y se detiene el programa). Una vez estén todos los controles conectados, el juego empezará después de que todos hayan presionado el botón A.
Espero que prueben el juego y se diviertan.
sábado, 23 de marzo de 2013
jueves, 21 de marzo de 2013
Actualización del script para conectar wiimotes a la PC
Ya hice una actualización para obtener datos de los botones presionados de un nunchuk y classic controller, el script se encarga de fijarse si están conectados y devolver los botones que están siendo presionados.
El script:
Voy a explicar sólo los cambios.
Lo primero es la función checkPressed, ahora toma dos argumentos, el primero es el estado del joystick que queremos revisar, si se trata del wiimote será la variable wm.state (asumiendo que el wiimote está guardado en wm), si se trata de un nunchuk será wm.state['nunchuk'] y para el classic controller será wm.state['classic']. El segundo es el mapeo de los botones que está guardado en las variables bWiimote, bClassic y bNunchuk.
La siguiente función es checkConnected, ésta simplemente revisa si el periférico está conectado, simplemente hay que dar como argumento la variable del wiimote y el nombre del periférico ('nunchuk' o 'classic').
Lo último es una simple prueba que muestra qué botones están siendo presionados en qué control, lo que hace es revisar si tiene algún periférico conectado, revisar qué botones están siendo presionados y guardar estos en un diccionario, después esos diccionarios se guardan en una lista donde cada lugar corresponde a un control. Además se puede conseguir los datos de los sticks, estos están guardados en variables dentro de 'classic' y 'nunchuk', tienen que revisar .state['nunchuk'] y fijarse los nombres, son fáciles de identificar.
El script:
Voy a explicar sólo los cambios.
Lo primero es la función checkPressed, ahora toma dos argumentos, el primero es el estado del joystick que queremos revisar, si se trata del wiimote será la variable wm.state (asumiendo que el wiimote está guardado en wm), si se trata de un nunchuk será wm.state['nunchuk'] y para el classic controller será wm.state['classic']. El segundo es el mapeo de los botones que está guardado en las variables bWiimote, bClassic y bNunchuk.
La siguiente función es checkConnected, ésta simplemente revisa si el periférico está conectado, simplemente hay que dar como argumento la variable del wiimote y el nombre del periférico ('nunchuk' o 'classic').
Lo último es una simple prueba que muestra qué botones están siendo presionados en qué control, lo que hace es revisar si tiene algún periférico conectado, revisar qué botones están siendo presionados y guardar estos en un diccionario, después esos diccionarios se guardan en una lista donde cada lugar corresponde a un control. Además se puede conseguir los datos de los sticks, estos están guardados en variables dentro de 'classic' y 'nunchuk', tienen que revisar .state['nunchuk'] y fijarse los nombres, son fáciles de identificar.
miércoles, 20 de marzo de 2013
Script para conectar wiimote a PC en Python
No he probado nada de lo siguiente en Windows, así que aviso que todo fue probado en Ubuntu 12.10.
Me compré un dongle USB Bluetooth para conectar los Wiimotes a la computadora, lo primero que hice fue instalar el wiican, hay explicaciones de cómo hacerlo por internet y lo pueden instalar desde los repositorios de getdeb, así que no voy a explicar eso. El wiican funciona bien, se puede usar las configuraciones por defecto o se pueden crear las propias pero ya empecé a encontrar problemas cuando no encontré cómo hacer que un botón presione dos teclas del teclado a la vez, no sé si es posible de hacer con el wiican pero tampoco es muy libre lo que se puede hacer con él, así que decidí averiguar cómo hacerlo desde algún punto anterior, antes de llegar al GUI. No me costó mucho encontrar que se podía hacer en python, encontré que ya hay un módulo que se encarga de lo más importante, cwiid (es parte de una herramienta general de ubuntu, aquí se explica cómo instalarlo). Averigüé un poco cómo usarlo y desarrollé un script simple que conecta el wiimote y obtiene la información de qué botones se están presionando.
El script en si:
No he hecho nada más, pienso usarlo para controlar el teclado y el mouse, probablemente para jugar juegos y quizás para controlar ciertos programas. Dejo el script para que cualquier persona que quiera programar algo usando un wiimote, pueda mandarse derecho a la parte entretenida.
El script es bastante simple en su funcionamiento, al principio pregunta cuántos wiimotes se van a conectar, corre un loop en el cual se fija qué botones están siendo presionados (esto no es trivial, está explicado más adelante.
Explicación:
La primera línea es un import del módulo en el que nos estamos basando.
Entre la línea 3 y la 9 se hace la conexión de los wiimotes. Primero se pide que se ingrese la cantidad de wiimotes que se conectarán y después se realiza las conexiones creando las variables de clase cwiid.Wiimote(), esas variables son guardadas en en una lista y contienen todo lo relacionado con el wiimote, desde los botones que están siendo presionados hasta los leds que están encendidos. Además en la línea 9 se enciende el led que corresponde al número de wiimote conectado. Esa variable puede tomar valores entre 0 y 16, 0 significa que todos los leds están apagados, entre 1 y 4 se enciende sólo el led indicado y entre 5 y 16 son combinaciones entre los cuatro leds, se podría usar por ejemplo para marcar la batería restante en el wiimote.
Si revisan la variable state['buttons'] del wiimote, verán que toma distintos valores dependiendo del botón que se esté presionando, estos valores son potencias de 2 y se suman si se está presionando más de uno a la vez, esto hace que teniendo el número correspondiente a esa variable, hay una sola combinación de botones posible, aunque conseguirla no es tan trivial.
En la línea 11 simplemente hice un diccionario asignando el valor correspondiente a cada botón, en las siguientes dos líneas creé una lista con esos valores y los ordené de manera descendiente.
Lo siguiente es la función que revisa qué botones están siendo presionados. Cómo dije, a partir de ese único número se puede averiguar qué botones están siendo presionados, para eso lo que hay que hacer es ir revisando desde el número más alto de la lista si éste es menor o igual que el número (llamémoslo n), si eso se cumple, se guarda ese botón en la lista de los que están siendo presionados, se resta a n y se pasa al siguiente botón. De esa manera se obtiene una lista de sólo los botones que están siendo presionados que es lo que se devuelve.
La última parte es una demostración, se trata de un loop infinito que muestra en cada iteración qué botones están siendo presionados, notarán si conectan más de un wiimote que se trata de una lista con varias listas adentro, una por cada wiimote y en cada una aparecerán los botones que están siendo presionados.
Lo más básico ya está listo, faltarían algunas cosas cómo continuar el algoritmo para el nunchuck y el classic controller, cosa que pienso hacer en el futuro.
Además se pueden usar los datos de los acelerómetros y el sensor infrarrojo, para eso se usan las variables acc e ir_src dentro de state. Un ejemplo de cómo se ve el diccionario state es:
{'acc': (117, 118, 143), 'led': 1, 'ir_src': [None, None, None, None], 'rpt_mode': 14, 'ext_type': 0, 'buttons': 0, 'rumble': 0, 'error': 0, 'battery': 62}
Revisen el script y hagan sus propios programas, si tienen alguna duda pregunten y si quieren compartir algún programa genial.
Me compré un dongle USB Bluetooth para conectar los Wiimotes a la computadora, lo primero que hice fue instalar el wiican, hay explicaciones de cómo hacerlo por internet y lo pueden instalar desde los repositorios de getdeb, así que no voy a explicar eso. El wiican funciona bien, se puede usar las configuraciones por defecto o se pueden crear las propias pero ya empecé a encontrar problemas cuando no encontré cómo hacer que un botón presione dos teclas del teclado a la vez, no sé si es posible de hacer con el wiican pero tampoco es muy libre lo que se puede hacer con él, así que decidí averiguar cómo hacerlo desde algún punto anterior, antes de llegar al GUI. No me costó mucho encontrar que se podía hacer en python, encontré que ya hay un módulo que se encarga de lo más importante, cwiid (es parte de una herramienta general de ubuntu, aquí se explica cómo instalarlo). Averigüé un poco cómo usarlo y desarrollé un script simple que conecta el wiimote y obtiene la información de qué botones se están presionando.
El script en si:
No he hecho nada más, pienso usarlo para controlar el teclado y el mouse, probablemente para jugar juegos y quizás para controlar ciertos programas. Dejo el script para que cualquier persona que quiera programar algo usando un wiimote, pueda mandarse derecho a la parte entretenida.
El script es bastante simple en su funcionamiento, al principio pregunta cuántos wiimotes se van a conectar, corre un loop en el cual se fija qué botones están siendo presionados (esto no es trivial, está explicado más adelante.
Explicación:
La primera línea es un import del módulo en el que nos estamos basando.
Entre la línea 3 y la 9 se hace la conexión de los wiimotes. Primero se pide que se ingrese la cantidad de wiimotes que se conectarán y después se realiza las conexiones creando las variables de clase cwiid.Wiimote(), esas variables son guardadas en en una lista y contienen todo lo relacionado con el wiimote, desde los botones que están siendo presionados hasta los leds que están encendidos. Además en la línea 9 se enciende el led que corresponde al número de wiimote conectado. Esa variable puede tomar valores entre 0 y 16, 0 significa que todos los leds están apagados, entre 1 y 4 se enciende sólo el led indicado y entre 5 y 16 son combinaciones entre los cuatro leds, se podría usar por ejemplo para marcar la batería restante en el wiimote.
Si revisan la variable state['buttons'] del wiimote, verán que toma distintos valores dependiendo del botón que se esté presionando, estos valores son potencias de 2 y se suman si se está presionando más de uno a la vez, esto hace que teniendo el número correspondiente a esa variable, hay una sola combinación de botones posible, aunque conseguirla no es tan trivial.
En la línea 11 simplemente hice un diccionario asignando el valor correspondiente a cada botón, en las siguientes dos líneas creé una lista con esos valores y los ordené de manera descendiente.
Lo siguiente es la función que revisa qué botones están siendo presionados. Cómo dije, a partir de ese único número se puede averiguar qué botones están siendo presionados, para eso lo que hay que hacer es ir revisando desde el número más alto de la lista si éste es menor o igual que el número (llamémoslo n), si eso se cumple, se guarda ese botón en la lista de los que están siendo presionados, se resta a n y se pasa al siguiente botón. De esa manera se obtiene una lista de sólo los botones que están siendo presionados que es lo que se devuelve.
La última parte es una demostración, se trata de un loop infinito que muestra en cada iteración qué botones están siendo presionados, notarán si conectan más de un wiimote que se trata de una lista con varias listas adentro, una por cada wiimote y en cada una aparecerán los botones que están siendo presionados.
Lo más básico ya está listo, faltarían algunas cosas cómo continuar el algoritmo para el nunchuck y el classic controller, cosa que pienso hacer en el futuro.
Además se pueden usar los datos de los acelerómetros y el sensor infrarrojo, para eso se usan las variables acc e ir_src dentro de state. Un ejemplo de cómo se ve el diccionario state es:
{'acc': (117, 118, 143), 'led': 1, 'ir_src': [None, None, None, None], 'rpt_mode': 14, 'ext_type': 0, 'buttons': 0, 'rumble': 0, 'error': 0, 'battery': 62}
Revisen el script y hagan sus propios programas, si tienen alguna duda pregunten y si quieren compartir algún programa genial.
jueves, 14 de marzo de 2013
Google reader cierra. Mi elección de alternativa.
Google anunció que su servicio para leer feeds, Google Reader, cerrará el primero de Julio (http://nooooooooooooooo.com/). Si son como yo y leen unos 100 webcomics y utilizan Google Reader para obtener actualizaciones y tener todo bien organizado, sería un gran problema no tener una alternativa lista antes del cierre.
Si estuvieron buscando alternativas, se habrán encontrado con varias páginas que al principio parecen aceptables hasta que se dan cuenta de que para poder seguir más de 10 páginas hay que pagar (Google Reader hacía todo gratis!
). Por suerte encontré una alternativa simple y gratuita, aunque no es tan práctica como Google Reader, de lo que encontré, es lo menos peor. Se trata de Feedly, un servicio que se preparó para la transición de Google Reader debido a su cierre.
Se inicia sesión usando una cuenta de google y automáticamente pasa todas las suscripciones de Google Reader.
Está bastante bien, no está en español pero diría que es una alternativa aceptable, me gustaría un reader completamente basado en Google Reader, que sea un clon, ahí voy a estar feliz.
Si estuvieron buscando alternativas, se habrán encontrado con varias páginas que al principio parecen aceptables hasta que se dan cuenta de que para poder seguir más de 10 páginas hay que pagar (Google Reader hacía todo gratis!
Se inicia sesión usando una cuenta de google y automáticamente pasa todas las suscripciones de Google Reader.
Está bastante bien, no está en español pero diría que es una alternativa aceptable, me gustaría un reader completamente basado en Google Reader, que sea un clon, ahí voy a estar feliz.
lunes, 28 de enero de 2013
Nerd Programming - Crear gif a partir de video en linux
Actualización: Agregué un par de líneas de código que permiten que se agregue un cuarto argumento al comando para especificar el nombre del archivo de salida.
Crear gifs a partir de videos es cosa de todos los días, así que me imaginé que ya habría un software que se encargara de hacer eso, cuando busqué cómo hacerlo en Ubuntu lo primero que encontré fue cómo hacerlo usando mplayer y GIMP, enseguida dejé de buscar y se me ocurrió que podría escribir un script que se encargara de hacer todo el trabajo al escribir una simple línea en la terminal.
Así fue que creé este script que dándole los datos de la dirección del video, el momento en el que debe comenzar el gif y su duración en segundos, crea el gif automáticamente. Para utilizar este script es necesario tener el mplayer e imagemagick.
El script en cuestión:
Para instalar el script tienen que crear un archivo nuevo y llamarlo como quieran (yo lo llamé creargif y lo coloqué en mi carpeta personal, así que en los ejemplos voy a usar esos datos), copian el código y lo guardan. Lo siguiente es abrir la terminal y escribir
$ sudo cp creargif /usr/bin/creargif
$ sudo chmod a+x /usr/bin/creargif
Ahora podrán crear gifs usando la siguiente sintaxis:
$ creargif <dirección del video> <comienzo del gif> <duración en segundos> <nombre de gif>
(El último argumento es opcional)
Ejemplos:
$ creargif video.avi 0:10:00 5
$ creargif video.avi 0:10:00 5 animacion.gif
En ese ejemplo se crea un gif extraído de video.avi que comienza en 0:10:00 y dura 5 segundos.
Cuando corren el programa, primero les va a mostrar esa sección del video en una nueva ventana en un bucle para que vean si quieren crear el gif, cuando cierren la ventana les va a preguntar si quieren crear el gif, si ingresan "y" se creará el gif en un archivo llamado animation.gif (si no lo modifican será sobrescrito la próxima vez que creen un gif) a menos que hayan especificado otro nombre.
Para los que les interese, voy a explicar como funciona el script línea por línea.
Comenzando por la línea 9, simplemente se fija si hay por lo menos 3 argumentos, si no hay lo único que hará es mostrar la línea "Faltan uno o más argumentos", en caso contrario el script continúa.
La siguiente línea es mplayer -ao null -loop 0 -ss $2 -endpos $3 "$1" esto lo que hace es mostrar el fragmento del video en bucle en una nueva ventana, la opción -ao null quita el sonido, -loop 0 hace que quede en un bucle infinito, -ss $2 indica donde comenzar el video ($2 es la variable que contiene el segundo argumento), -endpos $3 indica la duración en segundos y finalmente "$1" es la dirección del video.
El siguiente fragmento se encarga de asegurarse que la carpeta que se creará temporalmente no exista ya que al final será borrada y si ya hubiera una carpeta con el mismo nombre no solo sería borrada sino que también podría usar cualquier imagen que ya estuviera en la carpeta para el gif.
La siguiente parte se fija si hay un cuarto argumento, en el caso de que lo haya lo guarda en la variable anim, en el caso contrario guarda el nombre por defecto animation.gif.
Crear gifs a partir de videos es cosa de todos los días, así que me imaginé que ya habría un software que se encargara de hacer eso, cuando busqué cómo hacerlo en Ubuntu lo primero que encontré fue cómo hacerlo usando mplayer y GIMP, enseguida dejé de buscar y se me ocurrió que podría escribir un script que se encargara de hacer todo el trabajo al escribir una simple línea en la terminal.
Así fue que creé este script que dándole los datos de la dirección del video, el momento en el que debe comenzar el gif y su duración en segundos, crea el gif automáticamente. Para utilizar este script es necesario tener el mplayer e imagemagick.
El script en cuestión:
Para instalar el script tienen que crear un archivo nuevo y llamarlo como quieran (yo lo llamé creargif y lo coloqué en mi carpeta personal, así que en los ejemplos voy a usar esos datos), copian el código y lo guardan. Lo siguiente es abrir la terminal y escribir
$ sudo cp creargif /usr/bin/creargif
$ sudo chmod a+x /usr/bin/creargif
Ahora podrán crear gifs usando la siguiente sintaxis:
$ creargif <dirección del video> <comienzo del gif> <duración en segundos> <nombre de gif>
(El último argumento es opcional)
Ejemplos:
$ creargif video.avi 0:10:00 5
$ creargif video.avi 0:10:00 5 animacion.gif
En ese ejemplo se crea un gif extraído de video.avi que comienza en 0:10:00 y dura 5 segundos.
Cuando corren el programa, primero les va a mostrar esa sección del video en una nueva ventana en un bucle para que vean si quieren crear el gif, cuando cierren la ventana les va a preguntar si quieren crear el gif, si ingresan "y" se creará el gif en un archivo llamado animation.gif (si no lo modifican será sobrescrito la próxima vez que creen un gif) a menos que hayan especificado otro nombre.
Para los que les interese, voy a explicar como funciona el script línea por línea.
Comenzando por la línea 9, simplemente se fija si hay por lo menos 3 argumentos, si no hay lo único que hará es mostrar la línea "Faltan uno o más argumentos", en caso contrario el script continúa.
La siguiente línea es mplayer -ao null -loop 0 -ss $2 -endpos $3 "$1" esto lo que hace es mostrar el fragmento del video en bucle en una nueva ventana, la opción -ao null quita el sonido, -loop 0 hace que quede en un bucle infinito, -ss $2 indica donde comenzar el video ($2 es la variable que contiene el segundo argumento), -endpos $3 indica la duración en segundos y finalmente "$1" es la dirección del video.
El siguiente fragmento se encarga de asegurarse que la carpeta que se creará temporalmente no exista ya que al final será borrada y si ya hubiera una carpeta con el mismo nombre no solo sería borrada sino que también podría usar cualquier imagen que ya estuviera en la carpeta para el gif.
dir="gif"
while [ -d $dir ]
do
dir="gif$RANDOM"
done
Lo que hace es revisar que no exista una carpeta llamada gif y en el caso de que exista cambia el nombre aleatoriamente hasta que no exista una carpeta con ese nombre. dir="gif$RANDOM" asigna el nombre gif con cuatro números aleatorios al final a la variable dir.
En la línea 21 simplemente se muestra la pregunta de si se quiere crear el gif y en la 22 se obtiene la opción que se ingrese y se guarda en la variable opt.
La siguiente parte se fija si hay un cuarto argumento, en el caso de que lo haya lo guarda en la variable anim, en el caso contrario guarda el nombre por defecto animation.gif.
El siguiente if revisa que la opción ingresada sea una y o Y. Dentro del if la primera línea es muy parecida a la línea que muestra el video solo que en este caso el bucle infinito no se encuentra y se agrega la opción -vo jpeg:outdir=$dir que guarda todas las imágenes del fragmento en la carpeta $dir cuyo nombre fue establecido al principio del código.
Las siguientes dos líneas son para averiguar el tiempo que debe transcurrir entre dos imágenes de la animación, para eso en la primera línea se guarda en la variable am la cantidad de archivos en la carpeta $dir y en la siguiente se calcula el tiempo dividiendo el tiempo en segundos que se había ingresado entre mil para pasarlo a milisegundos y después entre la cantidad de archivos am.
La siguiente línea es la que crea la animación en cuestión usando una de las herramientas de imagemagick
convert -delay $delay -coalesce -layers OptimizeFrame -loop 0 $dir/*.jpg $anim
La opción -delay $delay asigna el tiempo entre las imágenes que fue calculado anteriormente, -loop 0 indica que debe estar en un bucle infinito, -coalesce -layers OptimizeFrame se encarga de optimizar la animación y las siguientes dos opciones indican las imágenes de entrada ($dir/*.jpg) y la de salida $anim que depende de si se ingresó un cuarto argumento.
Lo último es borrar la carpeta $dir y el script está terminado.
martes, 13 de noviembre de 2012
Beyond Good & Evil
Es por juegos como éste que los videojuegos son considerados arte.
Una excelente combinación de historia, jugabilidad y diseño. Beyond Good & Evil ofrece horas de entretenimiento, una historia interesante y un setting muy imaginativo.
El juego se ubica en un setting futurista en el cual los humanos no son los únicos capaces de razonar y la civilización se ha expandido por la galaxia, la historia del juego ocurre en el planeta Hillys el cual está siendo atacado por DomZ, una raza alienígena, Jade, el personaje principal, es una reportera que está a cargo de huérfanos resultantes de los ataques junto a Pay'j, un cerdo mecánico (mecánico es su profesión) que es como un tío para ella. No solo hay una diversidad en las razas de los personajes, desde cabras hasta rinocerontes, sino que también hay diversidad en las culturas, por ejemplo Jade tiene un dispositivo con inteligencia artificial hispana y los rinocerontes son rastafari, todo resulta en un juego colorido en todos los sentidos.
El juego tiene un gameplay simple y fácil de aprender, y tiene distintos "modos de juego" que mantienen fresca la experiencia. Para movernos por el mapa usamos un bote híbrido, en las distintas locaciones nos movemos a pie y hay partes en las que es necesario el sigilo y partes en las que es necesario escapar, también está toda la parte de reportera en la que hay que sacar fotos de animales y cosas incriminantes, todo esto mantiene al juego sin repetirse demasiado. Hay quien dice que es muy parecido a los juegos de Zelda y si bien tiene aspectos similares, diría que es un juego bastante distinto, aunque si les gusta el Zelda, este juego seguramente les va a gustar.
El diseño en el juego es excelente, los personajes son originales y las caras están más detalladas que el resto del cuerpo para gastar menos recursos y poder hacer una buena animación de las expresiones, las distintas localidades tienen diseños diferentes aunque todo sigue un mismo estilo. La música es muy buena, combina bien con el estilo del juego y se adecua a las situaciones.
En conclusión es un buen juego, algo corto, unas 10 horas para terminarlo, pero una excelente experiencia y lo recomiendo a todo el mundo.
Esta vez no hice review directamente de un juego de Wii, aunque sí se puede jugar en la Wii, además el juego está disponible para PC, PS2, XBox y salió una versión HD (revisé imágenes y se ve igual) para XBox Live Arcade, PC y todavía no ha salido para PSN.
Una excelente combinación de historia, jugabilidad y diseño. Beyond Good & Evil ofrece horas de entretenimiento, una historia interesante y un setting muy imaginativo.
El juego se ubica en un setting futurista en el cual los humanos no son los únicos capaces de razonar y la civilización se ha expandido por la galaxia, la historia del juego ocurre en el planeta Hillys el cual está siendo atacado por DomZ, una raza alienígena, Jade, el personaje principal, es una reportera que está a cargo de huérfanos resultantes de los ataques junto a Pay'j, un cerdo mecánico (mecánico es su profesión) que es como un tío para ella. No solo hay una diversidad en las razas de los personajes, desde cabras hasta rinocerontes, sino que también hay diversidad en las culturas, por ejemplo Jade tiene un dispositivo con inteligencia artificial hispana y los rinocerontes son rastafari, todo resulta en un juego colorido en todos los sentidos.
El juego tiene un gameplay simple y fácil de aprender, y tiene distintos "modos de juego" que mantienen fresca la experiencia. Para movernos por el mapa usamos un bote híbrido, en las distintas locaciones nos movemos a pie y hay partes en las que es necesario el sigilo y partes en las que es necesario escapar, también está toda la parte de reportera en la que hay que sacar fotos de animales y cosas incriminantes, todo esto mantiene al juego sin repetirse demasiado. Hay quien dice que es muy parecido a los juegos de Zelda y si bien tiene aspectos similares, diría que es un juego bastante distinto, aunque si les gusta el Zelda, este juego seguramente les va a gustar.
El diseño en el juego es excelente, los personajes son originales y las caras están más detalladas que el resto del cuerpo para gastar menos recursos y poder hacer una buena animación de las expresiones, las distintas localidades tienen diseños diferentes aunque todo sigue un mismo estilo. La música es muy buena, combina bien con el estilo del juego y se adecua a las situaciones.
En conclusión es un buen juego, algo corto, unas 10 horas para terminarlo, pero una excelente experiencia y lo recomiendo a todo el mundo.
Esta vez no hice review directamente de un juego de Wii, aunque sí se puede jugar en la Wii, además el juego está disponible para PC, PS2, XBox y salió una versión HD (revisé imágenes y se ve igual) para XBox Live Arcade, PC y todavía no ha salido para PSN.
lunes, 12 de noviembre de 2012
Esquina del cosplay - Ed, Edd n Eddy
El fin de semana anterior (sábado 10 y domingo 11) fue el Continuará (sobre el cual escribí una reseña ayer) y los que reconocieron nuestro cosplay (que fueron bastantes aunque al principio fue bastante lento) pudieron ver que fuimos de Ed, Edd n Eddy (el mismo grupo que hicimos de Dexter para la ConComics y vamos a seguir haciendo cosplay en grupo para el futuro).
Hacer cosplay de Ed fue muy divertido y confeccionarlos fue muy fácil, todo el proceso se hizo en una semana, así fue cómo lo hicimos.
Lo primero fue ver qué ya teníamos para el cosplay, Ed y Eddy usan Jeans, Edd usa una bermuda azul y medias rojas, todas esas cosas ya las teníamos, la campera de Ed es simplemente mi campera con unas cintas blancas cocidas en las mangas y un alambre cocido en el cuello para que se mantuviera erguido, y el gorro de Edd es un gorro de abrigo (esos que se doblan abajo para mostrar una marca) con dos cintas blancas cocidas. A esta altura solamente tuvimos que comprar las cintas.
Lo siguiente fue lo más importante, las camisetas. Conseguí las tres camisetas muy baratas por un contacto ($100 cada una), para las camisetas de Eddy y Ed usé tela modal para hacer los detalles. Trabajar con tela modal fue algo complicado porque es muy elástica pero es una buena tela para el caso ya que se va a acomodar a la camiseta fácilmente, de haber usado una tela menos elástica se podría haber descocido al estirarse.
El cuello de Eddy presentó algunos problemas ya que la tela no es la mejor para hacerlo (y no quería comprar otra tela solo para eso) pero se solucionó fácilmente cociendo la parte en forma de V directamente a la camiseta, hizo que se viera bien y que el resto del cuello se acomodara y quedara natural. El resultado final personalmente me encantó.
Finalmente el último detalle fue la uniceja de Ed. Busqué en internet cómo maquillar una uniceja y no encontré nada (estaba lleno de artículos sobre como sacarse una uniceja), al final facebook fue el mejor recurso ya que comenté mi frustración por ahí y un amigo me dijo que lo hiciera con un corcho quemado, todos quedamos contentos con el resultado.
Me gustó mucho este cosplay porque fue muy sencillo y barato, y resultó en un buen cosplay, al final los gastos fueron:
Hacer cosplay de Ed fue muy divertido y confeccionarlos fue muy fácil, todo el proceso se hizo en una semana, así fue cómo lo hicimos.
Lo primero fue ver qué ya teníamos para el cosplay, Ed y Eddy usan Jeans, Edd usa una bermuda azul y medias rojas, todas esas cosas ya las teníamos, la campera de Ed es simplemente mi campera con unas cintas blancas cocidas en las mangas y un alambre cocido en el cuello para que se mantuviera erguido, y el gorro de Edd es un gorro de abrigo (esos que se doblan abajo para mostrar una marca) con dos cintas blancas cocidas. A esta altura solamente tuvimos que comprar las cintas.
Lo siguiente fue lo más importante, las camisetas. Conseguí las tres camisetas muy baratas por un contacto ($100 cada una), para las camisetas de Eddy y Ed usé tela modal para hacer los detalles. Trabajar con tela modal fue algo complicado porque es muy elástica pero es una buena tela para el caso ya que se va a acomodar a la camiseta fácilmente, de haber usado una tela menos elástica se podría haber descocido al estirarse.
El cuello de Eddy presentó algunos problemas ya que la tela no es la mejor para hacerlo (y no quería comprar otra tela solo para eso) pero se solucionó fácilmente cociendo la parte en forma de V directamente a la camiseta, hizo que se viera bien y que el resto del cuello se acomodara y quedara natural. El resultado final personalmente me encantó.
Finalmente el último detalle fue la uniceja de Ed. Busqué en internet cómo maquillar una uniceja y no encontré nada (estaba lleno de artículos sobre como sacarse una uniceja), al final facebook fue el mejor recurso ya que comenté mi frustración por ahí y un amigo me dijo que lo hiciera con un corcho quemado, todos quedamos contentos con el resultado.
Me gustó mucho este cosplay porque fue muy sencillo y barato, y resultó en un buen cosplay, al final los gastos fueron:
- Camisetas: $300
- Cinta blanca (3m): $30
- Tela modal (2m, sobró bastante que será usada para otros cosplays): No pude encontrar el recibo y no me acuerdo bien pero creo que eran menos de $200
- Total: Entre $330 y $530 (tomar en cuenta que sobró bastante material para ser usado en otro cosplay)
Suscribirse a:
Entradas (Atom)






