miércoles, 21 de diciembre de 2016

Super PepeToni -making off- 2 ¡Combate!

Tras optimizar todo lo que he podido me alegra anunciar que ya he implementado los enemigos, tanto su diseño como su comportamiento.

He de reconocer que hasta ahora nunca había dibujado nada en rollo pixel art, (Además que hacía años que no dibujaba) y en este proyecto, menos la música, me encargo de realizar todo desde cero.
No va quedando mal pero tengo muchas ganas de verlo corriendo en mi Game Boy ladrillo genuina made in Japan del '90.

Y bueno esto es lo que hay...


martes, 13 de diciembre de 2016

Super PepeToni -making off- 1

En esta serie de entradas narraré aquellos aspectos mas interesantes bajo, mi punto de vista, de los retos técnicos que me supone desarrollar un juego completo para GameBoy

Intentaré apartarme de los tecnicismos de programación y usar un lenguaje mas sencillo para que todo el mundo, incluso la vecina de los rulos o mi bisabuela, me pudieran entender.

Y para comprender mi punto de vista es necesario explicar, a groso modo, parte de mi trayectoria como programador.

Yo me inicie como desarrollador de software con el lenguaje de programación Java. Acumulo algo mas de cinco años de experiencia con esta tecnología y actualmente sigo usándola de manera profesional. Con todo esto, puedo considerar que mi nivel de conocimientos en JAVA es relativamente alto. Toma ya.

A lo largo de mi recorrido académico y profesional he aprendido y trabajado con otros lenguajes de programación entre los que destaco C#, Javascript, SQL y C.

Hasta ahora he desarrollado proyectos para muchas plataformas, tanto móviles como de escritorio, y también WEB. Windows, Android, HTML5,  Blackberry y ñañaña...pero es en Android donde he pasado la mayor parte del tiempo trabajando y explotando este entorno. Para Android he desarrollado juegos y apps tanto de forma nativa como también usando frameworks del tipo Unity3D.  He de reconocerlo, Android me gusta, me resulta cómodo, ya le vi potencial hace 5 años y opino que su futuro sigue siendo igual de brillante.



 Este es uno de los proyectos que desarrollé completamente en Android nativo. 100% canvas "a pelo"



Hasta ahora, la tecnología mas limitada en la que había trabajado era la extinta JavaME; ¿Os acordáis de cuando los "teléfonos" no se denominaban "smarphones" sino sencillamente "móviles"? Si, aquellos "rechonchetes" Nokias, Motorolas y Alcateles que tenían unas extrañas protuberancias llamadas "botones". Pues en mi anterior empleo de programador pasé unos tres años desarrollando juegos para estos dispositivos.


¿Te gusta instanciar objetos a loco, perro? Pues este estilizado diablo te va a patear el culo.




Aunque si que había considerables limitaciones técnicas (Había un Nokia que te imponía un tamaño máximo del juego de 128KB, por ejemplo) su mayor inconveniente venia dada por la desfragmentación innerente, esto es, que un mismo juego tenia que ser compatible con unas cincuenta familias de móviles distintos, con una implementación de JAVA que variaba (Cada uno era de un padre y una madre) que por el hardaware subyacente, que también, si, pero sobre todo por la desfragmentación.

Pero GameBoy es otro mundo. Es mas, es otra Galaxia.


Aunque lo publicitaran como un artilugio super-mega-futurista, ya en su día, la Gameboy contaba con una CPU "capada" para ahorrar en batería (Y en costes de producción)



Cuando programas para GameBoy, a diferencia de la concepción actual, no puedes "hacer" lo que te de la gana. Pensad que GameBoy ya era una máquina limitada en 1990. Cualquier pequeño detalle que en una plataforma actual es sencillo de realizar, en GameBoy puede resultar toda una odisea y cada una de las tomas de decisiones que afectan al diseño del juego viene condiciona, siempre, por la imposición del hardaware.

Si pensabais que la limitación de 128KB de aquel Nokia era dura...el reto ahora está en no exceder de los 32KB. En ese espacio tiene que entrar todo; la lógica del juego, los gráficos y el sonido.

Es todo un reto para mi porque vengo de la programación de alto nivel. La programación de alto nivel no significa que uno es un ninja programando, significa que puedes codificar y diseñar un proyecto sin necesitar conocer la arquitectura interna de la máquina. En GameBoy esto es impensable, no vale que el código sea bonito, exportable o modular, no, eso no, ha de ser rápido y ocupar poco espacio.

y para finalizar esta primera entrada que he alargado mas de los deseado, cito una pequeña lista de limitaciones e imposiciones con las que voy a lidiar:


  • Tamaño máximo del juego de 32KB.
  • Sprites de 8x8 píxeles.
  • 40 Sprites como máximo para todo el juego. Pensad que Super PepeToni se compone 2x8 sprites, es decir, el sólo ya se "chupa" 16 de los 40 disponibles.
  • Increíble paleta para los gráficos de hasta...4 tonos de gris.
  • Imposibilidad usar variables con precisión de coma flotante (Esta limitación ya la sufrí en la época de JavaME)
  • Aunque se puede, las operaciones aritméticas de multiplicación y división son efectuadas por software, lo que significa que son muy lentas. Así que a desplazar bits toca (De nuevo).
  • Todas la memoria reservada para las variables del juego deben de caber en el espacio de memoria de la frame de cada método. Punteros si, claro, pero alojarlos en el heap como que no (Ya explicaré este punto con mas detalle)
  • Toda la lógica del juego debe de resolverse antes de que empiece el barrido vertical de la pantalla que accede a la memoria de vídeo para pintar los sprites. Si se lee de la memoria de vídeo mientras esto ocurre se producen efectos raros. Esto significa que el código debe de ser lo suficiente rápido para que no le coja el "toro del dibujado".



Esta sería la solución fácil para los débiles de espíritu y también para aquellos que no perderán las horas de sueño que voy a perder yo \o/



Y eso es todo de momento. Volveré con nuevas aventuras.

Saludos.




domingo, 11 de diciembre de 2016

Super Pepe Toni. La historía del héroe mas grande

Cuando el planeta caminaba hacía la perdición a causa de multitud de malvados, maquiavelos en la sombra, y nada ni nadie parecía tener la receta para remediarlo, la ayuda llegó, una vez mas, del espacio exterior en forma de ser omnipoderoso; Super Pepe Toni es un increíble personaje de origen extraterrestre con una fuerza insuperable, una destreza sin paragón y una voluntad noble, cuando se lo propone.

Su único problema es que es tan holgazán que se traga el diario de Ana Rosa en Antena 3 con tal de no levantarse del sofá a cambiar de canal porque hace cuatro meses que el mando de la televisión se quedó sin pilas.

Por otro lado, El Xali, alocado villano que quiere convertir el mundo en un lugar caótico donde reine la locura, ha logrado hipnotizar a los personajes mas peligrosos e influyentes del mundo para que acaben con Super Pepe Toni, el único capaz de detener sus perturbados planes. Estos son Coco, el mas influyente escritor de todos los tiempos, Xoco, un monstruo con una descomunal fuerza, Babit un robot indestructible y Burufulot, un furioso cretino con un peligroso lobo.

Super Pepe Toni no tendrá mas remedio que levantarse del sofá, apagar la tele con el botón, e ir en busca de cada uno de estos individuos para detenerlos. Y ya de paso, para cuando regrese, pasara por la tienda del barrio a comprar pilas de oferta para el mando de la televisión.








Próximo destino: Game Boy

Uf que abandonado está esto. Da igual. Tras muchos meses liado en otros menesteres que mas o menos tienen que ver con los videojuegos, pero siempre con la programación, he decido que mi siguiente proyecto será algo que realmente me apetezca dejando a un lado su viabilidad comercial.

Dos párrafos de rollazo personal y luego voy al lío.

Cuando era pequeño, de todas las consolas y ordenadores que llegaron a casa: un ZX Spectrum, un clon del Atary 2600, una NES, una MegaDrive, una Game Gear y una Game Boy, le guardo un especial cariño a esta última.
Bien cierto es que todas me proporcionaron incontables horas de diversión y me robaron otras tantas de sueño (y también de estudio) pero es la Game Boy aquella que, por todo lo la hace tal y como es, la que elegí como mi mas fiel compañera de diversión, allá donde fuese.

Desde hace algunos años alguien distribuyó por Internet la documentación técnica oficial de Nintendo de GameBoy y es este hecho lo que probablemente haya dado pie a que exista una excelente librería para programar en lenguaje C o e ensamblador que alguien se ha tomado la molestia de escribir de forma totalmente desinteresada.
En concreto me refiero a GBDK, el cual brinda la oportunidad de codificar en C pero que, no obstante, hace llamadas directamente a rutinas nativas del Z80 de la GameBoy.

C es un lenguaje perfecto para desarrollar para esta arquitectura porque que me permite pensar a mas alto nivel mientras me facilita la posibilidad de optimizar a bajo nivel, algo que para la limitada GameBoy es prácticamente imprescindible.

Así que, tras documentarme un poco de aquí y de allá e inspirado por un ex-compañero de trabajo que ya ha hecho su primer pinito con esta librería, he decidido arremangare y desarrollar mi propio juego para aquella máquina que tantas horas de felicitad me brindo y a la cual considero como una influencia para mi que ha determinado el rumbo de mi vida.

Querida Game Boy, este es mi homenaje para ti. Durante las próximas semanas iré reportando mi avance de lo que se convertirá en un juego completo para la Game Boy.

Por cierto, me confirma Francisco Hoyos  que se va a encargar del apartado sonoro, así aunque el juego sea feo y esté mal hecho, al menos sonará bien.

Saludos.