miércoles, 28 de agosto de 2019

API de geolocalización de Google y sus peligros

Pongámonos en una de las siguientes situaciones:

  • Eres un gran hacker: el p*** amo hackeando redes WI-FI y decides compartir capturas de pantalla/tutoriales de como usas Aircrack-ng o similares
  • Estas usando una aplicación para analizar redes wifi cercanas ya sea en PC o smartphone (Ej: Acrylic WI-FI) y compartes capturas de pantalla de la aplicación
  • Compartes las direcciones MAC de routers WI-FI cercanos de cualquier otra forma (Ej: te engañan mediante ingeniería social)
Suponemos que de alguna de estas formas compartimos las direcciones MAC de routers WI-FI cercanos y las hacemos publicas, no las tachamos ni ocultamos. ¿Que puede pasar?

Comprobamos lo fácil que es encontrar gente compartiendo esta información a través de la red social Instagram, donde comparten por ejemplo capturas de Airodump-ng.
Bueno, pues sin saberlo están compartiendo el lugar donde están/viven/hacen cosas malas. ¿como es posible?

Esto es gracias a la API de geolocalización de Google, la cual mediante las señales de los WI-FI y triangulación permite ubicarnos geográficamente a pesar de no tener GPS. ¿habeis probado alguna vez a pedirle a Google Maps vuestra ubicación desde PC? notaréis que os localiza con gran precisión.

Y es que solo hace falta saber unas pocas direcciones MAC de routers cercanos y Google ya es capaz de localizar la posición con un error de 10-50 metros. ¿Notáis el peligro?
Vamos a probarlo. Ejecutamos la siguiente petición con los datos de 3 direcciones MAC que hemos obtenido en un post de Instagram:
Y obtenemos la siguiente respuesta:
Si añadimos mas direcciones MAC aumentaremos la precisión, aunque con solo 3 ya tenemos un radio de error de tan solo 37 metros.
Ahora buscamos las coordenadas en Google Maps (o Bing Maps o donde querais) y voilà! localizado.
Os animo a jugar un poco con esto y a localizar a distintos jaquers ;)
(SIN IR CON MALAS INTENCIONES)

sábado, 10 de agosto de 2019

Mis filtros AR de Instagram

¡Es una realidad! Formo parte de la beta AR de Facebook, lo que me permite no solo desarrollar sino también publicar filtros AR para las historias de Facebook e Instagram.
Seguramente si sois usuarios de Instagram hayáis seguido alguna cuenta por el hecho de que al seguirla os aparecen nuevos filtros para las historias. Bueno, pues ahora yo también soy una de esas pocas personas, de hecho en España probablemente no seamos ni 50 (En realidad no tengo ni idea, aunque en los grupos solo participa gente extranjera).
Pero hay un problema: no tengo manera de promocionarme, y esta última semana apenas he ganado entre 10 y 20 nuevos seguidores y todos son guiris, así que aquí estamos de nuevo... Otro intento fallido de convertirme en influencer tras el fracaso de mi canal de Lloutuve, y el #UnfollowProjectFest (En realidad este último si que tuvo bastante exito).
En fin, en el primer vídeo podéis ver como son mis primeros filtros, y en el siguiente podéis ver un experimento AR cutre que hice en un par de horas en el que puedo controlar un coche RC virtual superdetallado diseñado en mi querido Google Sketchup (Sí, sigo usando la versión 8, la última que hizo Google).

Resumen:
Spiral: Genera una espiral en movimiento alrededor del cuerpo (varios colores para elegir, se puede cambiar el tamaño pellizcando la pantalla)
Puzzle: Convierte la imagen de la cámara en un puzzle de tamaño a elegir (3x3 - 4x5) que se mezclará y resolverá con movimientos aleatorios que serán cada vez distintos.
Frame: La imagen de la camara aparece en un pequeño rectangulo, circulo, o rombo con 3 colores a elegir (tocando la pantalla se cambian, pellizcando la pantalla se cambia el tamaño)
Malefica: Te convierte en la villana de moda de Disney
Lovely: Aparecen corazones detrás de ti y aplica un filtro rosado.
Mirrors: La imagen de la cámara aparece 4 veces haciendo zoom en zonas aleatorias de la pantalla
OldTV: Simula el efecto pixelado y curvo de los antiguos televisores CRT
Construction: Como el Minecraft pero en AR
Noise: Aplica ruido aleatorio a la imagen. (Se puede variar la intensidad)
Nebulosa: Combina la imagen de la cámara con la de distintas nebulosas que se pueden cambiar tocando la pantalla
Dithering: Aplica pixelado Dither a la imagen de la camara. Se puede cambiar el color y el tamaño de los pixeles pellizcando la pantalla LEDStarIG: La versión descafeinada de mi efecto LEDStar en Facebook en la que no se puede escribir texto personalizado. Versión de FB: https://www.facebook.com/fbcameraeffe...
Heather: Aplica distintos colores con la intensidad deseada sobre la imagen
CelShading: Aplica efecto posterizado a la imagen
Mosaic: La imagen de la camara aparece formada por pequeñas versiones coloreadas de la imagen de la cámara que cambian de tamaño al abrir la boca
Area51: Te convierte en un alien. Si en la cámara hay una segunda persona, la convierte en un alien aun más feo.
LeTRIX: letras verdes que caen que nada tienen que ver con una película conocida y por lo tanto no hay problemas de derechos de autor.
JustMe: Aplica distintos efectos al fondo detrás de ti: Blanco y negro, desenfoque, lineas horizontales, etc...
SpaceLander: 3 niveles de aterrizaje lunar. Girar la cabeza para girar la nave, y abrir la boca para propulsar
NotHuman: Aquí tampoco estoy mencionando ninguna peli de Holliwood. Como curiosidad que nadie ha notado, si cierras el ojo izquierdo se apaga la luz roja.
Fantasy: Efectos de color fantasiosos. Si tocas la pantalla se intensifican
LaserEyes: Cerrando los ojos se activa y desactiva el laser. Tocando la pantalla se cambia el color
TearDrops: Te hace llorar de lo cutre que es el filtro. Abriendo la boca se intensifican las lagrimas (una versión mejorada iba a ser subida pero los moderadores de Facebook no ven bien un filtro en el que sales llorando)
LoveShooter: Otro juego para pasar el rato. Comentad abajo hasta que puntuación habeis llegado. No me hago responsable si os partis el cuello por el nivel 74 (La velocidad sube cada vez más y no he puesto límite por lo que a partir de 50 ya es practicamente imposible). Ahh si, teneis que girar la cabeza para mover la mira y mantenerla 1 segundo en los corazones para hacerlos desaparecer
Thug-Life: Cierra los ojos y veras unas gafas pixeladas caer.

jueves, 28 de marzo de 2019

CTurtle: una buena forma de aprender C con la tortuga de LOGO

Ver CTurtle en mi GitHub
Es posible que algunos conozcáis el lenguaje de programación LOGO, puesto que se enseña/enseñó en algunas escuelas para empezar a aprender programación. Consiste en un lenguaje de programación donde básicamente mueves una tortuga con un lápiz en un entorno gráfico, con comandos como hacer avanzar la tortuga (fd) o hacer girar la tortuga (rt, lt). Esto esta muy bien, pero tiene un inconveniente: una vez dominas el lenguaje, no te va a servir para nada más aparte de mover la tortuga.
Aparte de esto, la mayoría de los interpretes de LOGO son antiguos, no tienen antialising en el dibujado, e incluso algunos ni siquiera son compatibles con los procesadores de 64 bit actuales.
Pues aprovechando estas vacaciones de navidad, he creado una librería para C muy fácil de utilizar que os permitirá hacer dibujicos de la misma manera que se hace en LOGO en el lenguaje de programación C.
Esta librería consta únicamente de 2 archivos turtle.cturtle.h aparte de la librería SDL, y tiene una implementación propia de antialising (En la cual dediqué gran parte del tiempo) y es compatible con Windows, Linux (Incluyendo Raspberry Pi), e imagino que en Mac también.

Ej:
El programa de la imagen sería el siguiente:

#include <stdio.h>
#include "turtle.h"
void fern(int size, int sign);
void fern(int size, int sign)
{
if (size<1) return;
t_penSize(size/4);
t_forward(size);
t_turnRight(70*sign);
fern(size/2,sign*-1);
t_penSize(size/4);
t_turnLeft(70*sign);
t_forward(size);
t_turnLeft(70*sign);
fern(size/2,sign);
t_penSize(size/4);
t_turnRight(77*sign);
fern(size-1,sign);
t_turnRight(173*sign);
t_penUp();
t_forward(size*2);
t_penDown();
t_turnLeft(180);
}
int main(int argc, char ** argv)
{
if (t_init(640,480,window)!=0) puts("Init error");
else {
t_autoframeOff();
t_moveSpeed(200);
t_turnSpeed(0);
t_penUp();
t_goTo(192,450);
t_setAngle(0);
t_penDown();
t_turColor(0,60,0);
fern(25,1);
t_frame();
t_saveBMP("fern.bmp");
t_idle();
}
}

Aparte de las instrucciones básicas como t_forward y t_turnRight también tenemos otras instrucciones opcionales como t_autoframeOff, t_moveSpeed y t_turnSpeed relacionadas con la animación, y otras instrucciones de utilidad interesantes como t_saveBMP que guarda en un archivo BMP el contenido de la pantalla.
La librería esta totalmente documentada en cualquier caso. Si aun así tenéis dudas o sugerencias, me las podéis comentar por aquí.

lunes, 31 de diciembre de 2018

Hackeando un drone y leyendo una EEPROM con transistores y leds

¡Feliz año nuevo lectores inexistentes!
En esta ocasión os traigo 2 3 experimentos de electrónica divertidísimos (okno).
En el primer experimento desarmamos un drone FPV y nos encontramos con que tiene dos placas. Una para el FPV (el wifi y la camara) y otra para el control y todo lo demas (el drone podría funcionar unicamente con esta última placa). Estas placas se comunican a traves de un puerto serie UART a 19200 baudios. Tras conectar este puerto seríe a mi Arduino, me pongo a analizar que datos se envian desde la placa FPV a la principal. Y este es el resultado:

En el segundo experimento os muestro como se puede leer y escribir de una EEPROM (Un chip de memoria no volatil, como los pendrais) con el protocolo I2C sin ordenador, Arduino, ni nada,... de forma manual con solo unos cuantos transistores y resistencias.

Y por último, por si os habíais quedado con ganas de mas cacharreos, os muestro como se puede transmitir una señal de audio a través de un emisor y receptor de infrarrojos.



¿Dudas? ¿Sugerencias? Que bien, ¡habéis entendido todo! :')


domingo, 5 de agosto de 2018

Technology-Hellín ahora en GitHub

Desde el inicio de mi blog, (Cuando pasó de ser un blog personal a centrarse en la tecnología) siempre que he tenido la necesidad de subir algún contenido, ROM, o código fuente he recurrido a Google Drive. Pero hoy día, con el grado en ingeniería informática ya terminado y años de experiencia realizando proyectos (No solo en mi blog) ya iba siendo hora de recurrir a una plataforma mas profesional.



Aparte de algunos proyectos que ya tenía en el blog, he creado algunas 'cosicas' nuevas que os pueden gustar:

-JVideo (Extensión Google Chrome): Permite ver sin anuncios y descargar vídeos y pelis de internet.

-Librería Jsocket (C++): Una librería que permite crear conexiones e implementar servidores con sockets TCP. La principal diferencia respecto a otras librerías es que es muy muy fácil de usar y el mismo código fuente os sirve para Windows y Linux.

-Librería JJSON (Java, C++): Una librería para manejar y generar cadenas JSON.

-SOCKS2HTTP (C++): Genera un proxy HTTP a partir de un proxy SOCKS5 como puede ser Tor. Es el resultado de haber perdido el código fuente en Java de mi anterior proyecto.

Si tenéis tiempo echadles un vistazo y me comentáis ;)

viernes, 13 de abril de 2018

Motor 3D para GameBoy Advance: Consiguiendo lo imposible

Versión 2:
Descarga ROM y código fuente aquí.
Esta versión ya se mueve fluida a 60fps y permite girar la cámara.
Cambios:
Aparte de las optimizaciones de la versión 1, he añadido mas optimizaciones, y he implementado la rotación de la camara.
-Todo el código es copiado a la RAM y se ejecuta desde ahí. Se usa código ARM en vez de Thumb.
-Para ganar mas velocidad utilizo el modo5, que baja un poco la resolución y permite tener dos framebuffer en la memoria de video evitando tener que usar la RAM para luego copiarla a la VRAM en cada frame. También uso las técnicas de escalado y desplazamiento de la GBA para crear un par de frames intermedios mientras se renderiza el siguiente frame final.

Para la rotación utilizo aproximaciones rápidas de lo que serían los auténticos cálculos de la rotación. Ademas, cada vez que se gira, desplazo la posición de referencia para evitar aun mas cálculos al transformar las coordenadas durante el dibujado.

Para evitar aun mas perdidas de velocidad, he replicado la función crítica Render para cada angulo posible, de forma que las transformaciones de coordenadas están hard-coodeadas dentro de las funciónes Render-n, evitando llamadas a funciones y comprobaciones de angulo cada vez que se procesa un pixel.

Versión 1:
Descarga ROM y código fuente aquí.
La GameBoy Advance fue una de las primeras videoconsolas portatiles que intentó en algunos de sus juegos simular el efecto 3D. Juegos como Driv3r, Asterix y Obelix XXL, o Craxy Taxi. No obstante en la mayoría de dichos juegos el efecto 3D era muy, muy básico. Es por eso que yo, como friki ingeniero informático que soy me puse a investigar de que manera se podría conseguir un motor 3D decente. Tras un día investigando y picando código...¡Este fue el resultado!
Como habréis comprobado, la calidad del efecto 3D casi no se puede comparar con la de ningún otro juego de GBA. El motor es de tipo voxel space y el video fue acelerado algo así como x200 ya que la demo en su versión original (la del vídeo) tardaba 11 segundos en generar cada frame. Esto es debido a la gran cantidad de multiplicaciones y divisiones que debía hacer el motor en cada frame. Para los que no sepáis muy bien como funciona un motor voxel space os lo explico de manera muy sencilla:

Tenemos una imagen de color y otra imagen de profundidad. Dibujamos el entorno desde el frente hacia atras aplicando perspectiva (podeis ver el triangulito con el campo de visión en el GIF), para ello trazamos en la pantalla lineas verticales del color proporcional al pixel horizontal de la pantalla y el pixel horizontal de la linea de campo de visión actual. Esta linea vertical empezará desde la ultima altura dibujada hasta un nuevo valor calculado a partir de la altura en el mapa de profundidad y la distancia con el punto de vista (Si el valor obtenido es menor, no se dibuja la linea).

Optimizando el código:
Pues seguramente la baja potencia del procesador de la GameBoy fue lo que hizo que no apareciera ningún juego usando este tipo de motor, las multiplicaciones y divisiones son muy lentas en su procesador. Estas operaciones son vitales tanto para calcular las posiciones horizontales del campo de vision y pantalla como las de las alturas. ¿Que solucion tenemos? ¡Crear una estructura de datos con estos valores precalculados! En el archivo comprimido podeis encontrar generarmatriz.c que puede ser compilado para PC y usando los datos de matrizalturas.h (compartido con el proyecto devkit) generar una estructura de datos con las alturas precalculadas matrizalturas.raw y posiciones horizontales matrizx.raw las cuales se añaden al ROM. También, para realizar otras divisiones y multiplicaciones con multiplos de 2, utilizo a ser posible las operaciones de desplazamiento << y >> las cuales son mas rápidas.
Ademas, calcularemos el campo de visión menos frecuentemente en posiciones alejadas y limitamos la distancia de dibujado a 512 pixeles.
Estos cambios, junto con otras cuantas optimizaciones de código, permiten tras un gran esfuerzo y sudor conseguir unos gloriosos...
¡5fps!
Lo cual supone aproximadamente un speedup del 3000% y seguiría siendo insuficiente para cualquier juego en condiciones, pero al menos se mueve decentemente.
Se podría decir que la optimización es del 95% ya que los limites técnicos de la consola están ahí. Estas son algunas otras optimizaciones menores posibles que ni me he molestado en hacer:
  • Alinear matrizx.raw a 256 bytes cada linea para asi a la hora de leer sus datos podamos cambiar SCREEN_WIDTH*(step-minstep) por (step-minstep)<<8 aunque esto nos hará desperdiciar 16 bytes de memoria en la estructura de datos en la ROM por cada linea.
  • Dibujar las lineas verticales una por una, de forma que si una alcanza el valor maximo se haga un break y se pase a la siguiente sin seguir avanzando en profundidad. Solo habría aceleración en los casos que el mapa alcanzase la parte de arriba de la pantalla y la aceleración sería irregular. Habría que almacenar los valores de step en una estructura de datos.
  • Si se os ocurriese alguna mas, ¡comentad!
Curiosidad:
Uso de memoria en la demo:

ElementoEspacio (KB)PorcentajeNotas
Código9.790.18%El corasón de la demo. La parte que controla todo el funcionamiento.
Imagen Background39.10.72%La imagen del cielo tan bonica para la mitad superior de la pantalla (240x80) a 16 bit bgr555
Mapa colores204838.07%1024x1024 a 16 bit bgr555
Mapa profundidad102419.03%1024x1024 a 8 bit (valores 0-255)
Matriz x2384.42%Valores para cada pixel horizontal (1-240) en cada profundidad (8-512) de la posición horizontal del campo de visión (valores de 16 bit)
Matriz Alturas202137.57%Valores de altura en la pantalla de 8 bit para cada altura del mapa (0-255) en cada profundidad (8-512) para distintas alturas de camara posibles (16)
Total5379.89100%

sábado, 2 de diciembre de 2017

Frikada del día: SOCKS5->HTTP, navega por la deep web desde IOS/Edge/IE

¿Quien no ha querido nunca navegar por la deep web desde su navegador favorito Internet Explorer?
Tanto IOS, como Edge, como el obsoleto Internet Explorer tienen un problema con los proxys en común, y es que no traen soporte para el protocolo SOCKS5 que es el tipo de proxy que utiliza tor.

Ahora es posible hacerlo gracias a un programa en Java creado por mi, que en unas 160 lineas de código, se conecta a un proxy SOCKS5 (como puede ser tor) y devuelve un proxy HTTP al que nos podemos conectar desde los navegadores de Microsoft o nuestros dispositivos de Apple.

Problema con IOS: Por alguna razon en las ultimas versiones de IOS, cuando intentas acceder a un sitio .onion, en Safari, te muestra un mensaje de que no tienes conexión a internet y el navegador ni se molesta en conectarse a traves del proxy. Se puede navegar anonimamente por el resto de paginas en cualquier caso.
Este problema no ocurre en cambio con mi antiguo Iphone 4 con IOS7.

Actualización:
Tras perder el código fuente original en Java, el cual aun tenía algunos fallos por resolver, he re-escrito el programa en C++ (Más eficiente) con mi librería Jsocket. Podeis encontrar el código fuente y ejecutable para Windows en https://github.com/juanmv94/SOCKS2HTTP.

miércoles, 4 de octubre de 2017

Presentacion de diapositivas (PowerPoint) en 3D desde el navegador

Como de costumbre, vuelvo a sorprenderos con una nueva app. En este caso se trata de una aplicación web (funciona a través del navegador) en la que podréis mostrar vuestras presentaciones de diapositivas PowerPoint en un entorno 3D totalmente personalizable. Ademas, de diapositivas PowerPoint, también se pueden añadir otros elementos como fotos, vídeos, aplicaciones, paginas web,...



De momento no voy a hacer pública la app por ausencia total de interés por parte del publico. Podéis contarme vuestra opinión en los comentarios, y como sería vuestro entorno 3D favorito.

sábado, 30 de septiembre de 2017

Manejando la Raspberry Pi desde un ebook (tinta electronica)

Tenemos una Raspberry Pi conectada por LAN a un router Wifi con un teclado inalambrico y un pendrive conectados al USB (y un altavoz conectado a la salida 3,5mm).
Gracias a shellinabox (https://github.com/shellinabox/shellinabox) podemos crear una terminal accesible desde el navegador integrado del ebook.

Para poder redirigir la entrada del teclado USB a la tty de shellinabox uso un programa de creación propia.

He aquí el resultado. Os muestro la ejecución del reproductor multimedia omxplayer a través de esta interfaz.


viernes, 1 de septiembre de 2017

Un videojuego 3D con tecnologia WebGL: Flappy Adventure 2

Descarga aplicación android aquí.
Windows, IOS, Mac y Linux acceded a versión online aquí.




Solo una semana es lo que he tardado en hacer el juego que tantos deseabais poder jugar. Flappy adventure 2 no solo es el primer videojuego 3D 100% hellinero, sino que es uno de los muy pocos implementados en tecnologia web (La mayoria de los juegos Indie 3D se crean en Unity) Esto significa que podeis jugarlo practicamente en cualquier sitio: PC, Mac, Iphone, Ipad, Android, Linux,...


Ademas dentro de la aplicación web tambien podeis jugar a la ya conocida Aventura de Flappy en su versión 2D la cual he mejorado en su versión 1.2, o jugar a la ya anticuada version GB o al Retro Stack Tower 2017 mediante su emulador de gameboy incluido.

Problemas relativos al lag:
-La velocidad de avance se ve reducida impidiendo pasar el primer nivel. Solucion: multiplicar velocidad x delta en control.js pasando delta como parametro a la funcion update.
-Al caer se puede atravesar el suelo si el lag es muy grande. Solución: RaycasterDown= Math.max(la distancia que flappy baja en el siguiente frame , 10).

Mejoras para touchscreen:

-La sensibilidad de los controles depende de la resolucion de la pantalla. Solución: usar ScreenHeight como referencia.
-Camara podría estar quieta al desplazar el dedo a una posicion (2º cuadrado). Solucion: actualizar posicion touchstart a la actual en cada update. (En Galaxy S8 funciona bien, vaya misterio)

Otros:

-Mirar si se puede arreglar spawn inicial.

Si experimentais problemas y teneis especial interes en una version 1.0.1 hacedmelo saber.


Actualización 1 aniversario de Flappy Adventure 2
Para celebrar el 1 aniversario de Flappy Adventure 2, aparte de solucionar la mayoría de los problemas apuntados anteriormente, he implementado la versión VR (Virtual Reality) del juego. Esta versión era mi principal intención cuando decidí hacer FA2, y que lamentablemente tuve que descartar por varios motivos:

  • No tenia gafas VR. Hace un año eran caras, la mayoría eran de cartón, y habría supuesto que mi juego no llegase a ningún publico.
  • Era novato usando WebGL y Three.js y solo me faltaba complicarme aun más la vida con FA2 (El cual quería tener hecho en menos de una semana)
  • No tenía de idea de como poder controlar a Flappy sin poder tocar la pantalla tactil.
Tras abrir el código por primera vez desde 1 año del lanzamiento, me quedé sorprendido de que no tuviera mas fallos. Era la primera vez que usaba Three.js y que desarrollaba un juego en 3D (Ademas con prisas). Arreglé los fallos que pude, e implementé la versión VR sin preocuparme demasiado en dejar el código bonito.

¿Como solucioné el problema del controlador?
Para controlar a Flappy finalmente se me ocurrió poder utilizar un dispositivo móvil auxiliar como controlador y que mediante Websockets se comunicaran con un servidor Java (también creado por mi).

Dudo mucho que nadie quiera probar Flappy Adventure 2 VR así que os adjunto el vídeo y vais sobraos.

sábado, 8 de julio de 2017

Mod-Emulación

No hace falta que busqueis la palabra en Google, lo mas probable es que no salga nada.
Se trata de un nuevo concepto que un día se me ocurrió y que consiste en lo siguiente:
¿Por que no modificar el código fuente de un emulador para que actúe de forma especial en ciertas rutinas de un videojuego? El objetivo de esto será mejorar la jugabilidad y apariencia anteriormente limitada por el hardware de la consola.



Podemos mostrar cuadros de dialogo, mostrar graficos mejorados, sonidos mejorados, interfaz touchscreen... Todo esto sin modificar el ROM del juego.
En el siguiente video podeis ver un ejemplo de mod-emulación que hice para el juego de "Pokemon Gold".

Aunque de momento casi todo es conceptual, pueden existir infinidad de tipos de mod-emulación:

-Mod-emulación grafica: Altera los graficos sin afectar a la jugabilidad.
-Mod-emulación sonido: Altera el sonido o música del juego sin afectar a la jugabilidad.
-Mod-emulación interfaz: Permite utilizar interfaces como touchscreens.
-Mod-emulación avanzada: Afecta a la jugabilidad (Ej: video).


Tambien se pueden diferenciar por la forma en la que se ejecutan los mods:

-CPU: Por ejemplo en una determinada llamada a procedimiento del ROM (Ej: video).
-RAM: Por ejemplo cuando la VRAM o un cierto byte de la RAM tenga un valor. (mas fáciles de implementar).

Como siempre me gustaría que comentaseis para dar vuestra opinión al respecto. ¿Creeis que la mod-emulación es una buena idea o estropea el concepto de retro-gaming?

domingo, 2 de julio de 2017

Frikada del verano: Tower Stack en Gameboy Color??


DESCARGA ROM -> AQUÍ

Terminan los examenes, comienza el verano y como viene siendo tradición me apetece hacer un nuevo juego retro para gameboy.
Esta vez, uno de los juegos de moda (seguido de flappy bird, 2048...) se llama Stack Tower, en el que vas haciendo caer de forma alineada plataformas en 3D que se van haciendo cada vez mas pequeñas.

¿¡Pero como voy a hacer un juego 3D en una consola cuyas capacidades graficas eran... Bueno...
Y es que la Gameboy y la Gameboy color son consolas con graficos basados en tiles con un único background sin escalado ni rotación, y que de forma resumida estan limitadas a un 2D bastante basico.
La cuestión es que como soy friki ingeniero informatico me pongo a diseñar un "motor grafico" para Gameboy que permita crear tiles de forma dinamica via software con los bloques 3D renderizados mediante unas rutinas software. Algo nunca visto. Estoy loco, sí.
Y sí... ¡funcionó! no me digais que no me ha quedado bonico.

No lo hice para Gameboy Original por dos motivos:
  • Aunque funciona, la potencia de la CPU en la Gameboy original se queda escasa.
  • En blanco y negro el juego queda bastante feo.
Como os habreis fijado, el contador de puntos tiene antialiasing, lo cual tampoco se habia visto hasta ahora en Gameboy.
Y este es el resultado :') ayy que lloro... Ahora solo me falta ponerle una imagen de portada bien fea.


Los bloques se imprimen por dos lados:

  • El bloque en movimiento, se dibuja en los sprites. Como sabreis (o no) hay un límite de 10 sprites por scanline, son solo 40 y pueden tener un tamaño de 8x8px o 8x16px. Para dibujar los bloques lo mas grandes posibles, alineo todos los sprites en modo 8x16 px en un único "objeto" de 10x4 sprites. ¡Apuro los límites tecnicos al maximo!
  • Los bloques ya colocados se dibujan en el background. Mi "motor grafico" se encarga de dibujar unos encima de otros y de actualizar el tilemap de forma dinamica.

sábado, 6 de mayo de 2017

J-Music: la aplicación de música para Android (Soporte finalizado)

¡Descarga APK haciendo clic aquí!

Ya esta disponible para Android la app que tantos me habíais pedido, y que tanto retraso ha tenido su lanzamiento: J-Music

Esta aplicación permite:
-Escuchar canciones de Youtube descargando solo el audio. ¡Ideal para ahorrar datos moviles!
-Descargar las canciones en formato MP3
-Explorar las canciones buscando ya sea el cantante o nombre de la canción

La aplicación esta desarrollada con PhoneGap, por lo que el codigo fuente se encuentra dentro del propio APK para los curiosos. Ademas, ¡no tiene publicidad!

La aplicación, a pesar de que los conversores Youtube-MP3 son legales de momento (siempre que sea únicamente para uso personal) no estaría aprobada para la Play Store (ya que es de Google) por lo que descargar el APK desde aquí es la única manera de instalarla. Recordad que podeis comentar aqui si tenéis alguna duda.

En caso de producirse un mínimo problema legal por parte de la aplicación, esta sera retirada de inmediato del blog.

Es posible que la aplicación no sea totalmente compatible en versiones antiguas de Android aunque siempre deje instalarla.


lunes, 1 de mayo de 2017

DInput key switcher. Personaliza el teclado en tus videojuegos.

Descarga el proyecto haciendo click aquí.
¿Quien no ha jugado nunca al Rayman 2 y no ha deseado poder cambiar los controles? Algunos videojuegos (sobre todo los que tienen ya tiempo) no permitían re-mapear las teclas de ningún modo, y no siempre era sencillo hackearlos para cambiar los controles. El videojuego anteriormente mencionado NUNCA vio una forma de cambiar los controles de teclado.

Esto se acabo... Gracias a mi como de costumbre.
Con mi nueva aplicación podréis generar un fichero DINPUT.DLL "hackeado" que al copiarse al directorio donde tenéis instalado vuestro juego cambiará vuestros controles de teclado a los que vosotros queráis.

De momento solo tiene versión de 64 bits, aunque si alguno por casualidad estuviese interesado en una versión de 32 bits, decidmelo, y me plantearía portarla a 32 bits.

Edición: Codigo fuente disponible a peticion de "Rayman Pirate Community"

Algunos juegos donde funciona dinput.dll:

-Rayman 2
-DosBox
-.....

Algunos juegos donde funciona dinput8.dll:

-Rayman 3
-Crazy Taxi
-.....

¡Sugerid mas juegos!