4 de Julio de 2009

NightFox & Co - Desarollo de Homebrew para NDS, blog de KnightFox

Buenos dias!
El desarrollo de mi pequeño juego me ha obligado a realizar un par de funciones que mucha gente encontraria de utilidad, asi que las he añadido a mi libreria.
Las funciones nos permitiran saber el tile que se encuentra en las coordenadas que indiquemos de un fondo en concreto, para poder realizar cambios en el, por ejemplo, destruir partes del decorado, realizar animaciones en el fondo (cascadas, arboles moviendose, etc) de una manera bastante simple.
Las instrucciones en concreto son 3:
 
NF_GetTileOfMap(u8 screen, u8 layer, u16 tile_x, u16 tile_y);   (ver codigo fuente)
Esta funcion nos devuelve el valor del tile que se encuentra en las coordenadas especificadas (en tiles, no pixeles), del mapa cargado en la capa y pantallas especificados.
 
NF_SetTileOfMap(u8 screen, u8 layer, u16 tile_x, u16 tile_y, u16 tile);   (ver codigo fuente)
Similar a la funcion anterior, pero esta lo que hace es cambiar el valor del tile, con lo que es posible alterar el decorado.
  

Hola!
Hace dias que queria tocar el tema de la lectura de las teclas y keypad, pero al ser tan facil en las Libnds lo he ido dejando. Lo cierto es que por facil que sea, siempre es de agradecer tener unas funciones que lean todas las teclas y su estado y lo almacenen en una estructura de variables que podamos consultar desde cualquier lugar. En mi caso, me he creado una estructura en un archivo .h (llamemosle nf_input.h) y la funcion de lectura del keypad en un archivo .c (llamemosle tambien nf_input.c). Asi pues, incluyendo en nuestro codigo la linea
 
#include "nf_input.h"
 
Podremos acceder a la estructura que hemos creado para almacenar los datos del keypad.
 
Aqui teneis el codigo fuente del archivo .h
http://nightfox.pastebin.com/f4259eef6
 
Y el codigo fuente del archivo .c
http://nightfox.pastebin.com/f19d7b435
 

Buenas tardes.
Dado que estoy inmerso en un mini proyecto para la compo de SceneBeta, estoy desarrollando un conjunto de nuevas funciones, algunas de las cuales incorporare a mi libreria, otras no, dado que ya son increiblemente simples con las ultimas Libnds.
Este es el caso de los efectos de transparencia (Alpha Blending).
El hardware 2D de la DS (y tener este punto en cuenta), permite un solo canal alpha de 5 bits (es decir, 32niveles, de 0 a 31) entre 2 objetos. Entenderemos por objetos las capas de fondos tileados (0 - 3), los sprites y el backdrop. Explicar que es el backdrop es algo complejo, digamos que es una pared solida al fondo de todo lo demas, que no podemos (en principio) modificar y que sirve como fondo a todo lo que se dibuja encima.

Jun
21

Programacion en DS. Uso de la libreria EFS.

Categorías: ,
Buenas noches.
Antes que nada pedir disculpas por este mes de ausencia, pero temas de trabajo han requerido mi atencion y no he podido dedicarme a esto.
Dicho esto, pasemos a las novedades de hoy.
Recientemente el equipo de las PALIB (con los que colaboro habitualmente) han empezado a actualizar esta libreria para hacerla compatible con las ultimas LIBNDS. Bien, adicionalmente, mucha gente usaba unas librerias llamadas EFS, las cuales permitian encapsular todos los archivos necesarios para nuestro proyecto dentro de la ROM, de una manera muy parecida a como funciona un ROM comercial, con lo que se facilita la distribucion de nuestra ROM y facilita su uso, ya que no obligamos al usuario a tener que tener la ROM en una carpeta espcificada. Tambien debeis saber que todas las ROMS que usen EFS, son compatibles con el emulador NO$GBA, lo que nos facilita enormemente la tarea de debug.
Las ventajas son muchas, las desventajas, la carga es bastante mas lenta que usando FAT, pero nada dramatico. Tambien comentaros que se pueden usar los dos sistemas a la vez, lo cual es muy util para los savegames y demas.
 

Buenas a todos!
 
Realizando mi nuevo juego he detectado un bug rarito en el sistema de animaciones, el cual aparecia si se usava un nº de slot de GFX en VRAM y nº de sprites diferentes, juntamente con la opcion KEEPFRAMES = true. El bug en cuestion provocaba que solo apareciera el primer frame de la animacion. El bug ya ha sido solventado.
 
He aprovechado tambien para actualizar toda la documentacion relativa a los mapas de colision, tanto en Castellano como en Ingles.
 
A partir de ahora, dado que todas las funciones basicas estan hechas en mi libreria, la cosa ira un poco mas despacio, ya que ire añadiendo funciones a la libreria a medida que las necesite para mi juego (que egoista soy).
 
Eso no quiere decir que este blog siga abierto a sugerencias, preguntas o que vaya publicando partes del codigo de mi juego que pueda encontrar interesantes para que aprendais.
 
Como siempre, las preguntas a los comentarios.
 
Descarga de la ultima version de la libreria y ejemplos: NightFox's Lib 20090524
 

Mayo
12

Programacion en DS. Mapas de colisiones.

Hola!
 
Antes que nada, todo el mundo a actualizarse a la R26 del DevKitArm, basicamente corrige los fallos de la libfat con el emulador ideas, asi que ya tardais. Es muy comodo poder probar el codigo en el emulador, no ?
 
Mas novedades, he corregido un despiste en la libreria de fondos tileados, que en tamaños muy concretos de fondos, no mostraba la parte inferior. Ademas ahora obligo a que los fondos sean divisibles x256 pixeles (el tamaño que entiende la DS), asi evitamos bugs raros, tanto en la DS como usando el GRIT. Los espacios que no necesiteis, los rellenais de color rosa (0xFF00FF) que es el transparente y listos. Ocupar en VRAM, ocuparan lo mismo.
 
Pasemos al tema de hoy, los mapas de colisiones.
Estos se usan en juegos de plataformas y similares para saber que partes de nuestro fondo son o no "atravesables" por los sprites, por ejemplo, muros, escaleras, agua.
No son pixel perfect (se puede llegar, pero eso otro dia) asi que hoy, nos conformaremos en tener la precision de un tile (8x8 pixeles).
 

Mayo
6

Programacion en DS. Textos.

Hola!
Por fin tengo mi motor basico de textos.
La verdad es que es asi como simple. Es coger un fondo tileado, cargar como tiles todo el codigo ascii y despues una simple rutina que lee la cadena de texto y cambia los tiles del mapa por los correspondientes con la letra que queremos escribir.
A todo esto, que es muy tarde y el codigo esta muy documentado.
 

Para ver este video es necesario tener JavaScript activado y el plugin Flash instalado en el navegador.

 
 

Mayo
3

Programacion en Nintendo DS. Textos (Preview)

Hola!
Entrada cortita de fin de semana.
Tengo la intencion durante esta semana pulir un poco las funciones de texto que estoy programando para mi libreria. De momento he logrado esto:
 

Para ver este video es necesario tener JavaScript activado y el plugin Flash instalado en el navegador.

 
La cosa es simple, usar un fondo tileado con un tilesed con la tabla ASCII cargada para mostrar texto. La ventaja es que doy libertad para crear varias capas de texto, asi como moverlas como cualquier otro fondo. Tambien he añadido la posibilidad de poder usar fuentes rotadas 90º a la derecha o izquierda para poder mostrar textos con la pantalla de la DS en vertical (posicion de libro, vamos).
 
De momento esta parte esta muy verde, pero ya ira evolucionando poco a poco.
 

Hola!
Poquita cosa hoy, ya que las funciones de rotacion y escalado del sprite son tan simples como indicarle al OAM (Object Attribute Memory) que Rotset de los 32 disponibles por pantalla queremos asignarle al sprite y luego solo decirle al rotset correspondiente que valor queremos para el angulo y escalado.
Como las Libnds usan valores para la rotacion de entre -32768 y 32768, he decidido pegarle un bitshift para poder usar valores entre -512 y 512 (suficientes digo yo), ademas decorregir que los valores positivos giren a la derecha y los negativos a la izquierda (en las libnds se interpreta al reves, que cosas). El factor de escalado se mueve entre el 0 y el 512, siendo 256 el valor central, que equivale a una escala del 100%
 

Para ver este video es necesario tener JavaScript activado y el plugin Flash instalado en el navegador.

 

Hola,
Entrada cortita. Os dejo un video sobre como va funcionando el tema de mover un fondo casi infinito en cualquier direccion. La teoria es muy similar a la que os comente en la anterior entrada. Como supongo que habra algun bug, dado que tengo que testearlo con mas fondos, de momento disfrutar de el video que os dejo
 
Para ver este video es necesario tener JavaScript activado y el plugin Flash instalado en el navegador.

 
y la descarga del proyecto tal como lo tengo ahora.
He añadido soporte para el Pad de la DS, con el que moveremos el scroll de la pantalla de arriba.
 
Descarga del Proyecto: NightFox Lib para Libnds 20090426
 
Un cordial saludo y si podeis testearlo con vuestros fondos, me hareis un favor.
 
NightFox