Kana DS

Learning Japanese writing on the Nintendo DS

02 February, 2007

Arquitectura de Nintendo DS (III)

Este es el último artículo sobre la arquitectura de Nintendo DS. En el primero mostré un mapa de memoria de la consola, incluída la memoria de vídeo. Esta vez voy a poner un ejemplo práctico con la asignación de bancos de vídeo que he usado en Rudolph Steady Go!

Cuando comienza el juego activo el modo de vídeo 5 con las funciones de Libnds:
videoSetMode(MODE_5_2D | DISPLAY_BG3_ACTIVE );
videoSetMode( MODE_5_2D | DISPLAY_BG3_ACTIVE | DISPLAY_BG2_ACTIVE);

vramSetMainBanks( VRAM_A_MAIN_BG_0x6000000, VRAM_B_MAIN_BG_0x6020000, VRAM_C_SUB_BG_0x6200000 , VRAM_D_MAIN_BG_0x6040000 );

BG2_CR = BG_BMP8_256x256 | BG_BMP_BASE(16) | BG_PRIORITY(0);
BG3_CR = BG_BMP8_256x256 | BG_BMP_BASE(0) | BG_PRIORITY(3);

SUB_BG2_CR = BG_BMP8_256x256;

El código anterior no está completo, ya que faltan algunas funciones que no necesito repetir y que llamo al comienzo del juego, cuando se inicializa el modo gráfico para el menú principal. Gráficamente la asignación de memoria y uso de los bancos queda así:

CLICK PARA AGRANDAR

Como los contenidos del banco C (pantalla superior) y el A(fondo de la pantalla inferior) no se actualizan frecuentemente, no uso ninguna técnica especial para pintar en ellos. Simplemente transfiero bloques de memoria para actualizar ciertas zonas, como los marcadores de puntuación y las ardillas.

En cambio el plano que se superpone al A(pantalla inferior), y que muestra los círculos y botones que hay que pulsar, se actualiza constantemente cada frame. Por ello, para evitar parpadeos y que la animación sea lo más suave posible utilizo un esquema de doble búfer: Voy alternando los bancos B y D, de manera que nunca pinto en el banco que se está mostrando en el frame actual. De la superposición de varios planos ya se encarga la consola, basta especificar una prioridad o valor-Z a cada banco. En este caso se superponen los bancos B/D sobre el A.

En el modo 5, cada una de las dos pantallas tiene asignada una paleta de 256 colores, entendiéndose el índice 0 (cero) como color transparente. Con otros modos de vídeo se pueden usar hasta 16 bits de color, reservando el último bit para marcar los píxeles tranparentes.

Con este juego no he utilizado el motor de sprites (OAM) ni los modos de vídeo para 'tiles', cuyo uso es necesario para casi cualquier cosa que implique planos de scroll o escenarios grandes.

Más información sobre los modos de vídeo en Dev-Scene.

0 Comments:

Post a Comment

Links to this post:

Create a Link

<< Home