23 de Septiembre de 2018
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.

 
 
Mirar las carpetas que he añadido al proyecto. La carpeta "examples" con los codigos fuentes de todos los ejemplos y los archivos necesarios para crearlos, la carpeta "lib" con todos los archivos que componen la libreria propiamente dicha y la carpeta "docs", con un manual en castellano e ingles de todas las funciones hechas hasta hoy. Lo he hecho en un formato que sea imprimible para usarlo como referencia mientras se programa.

Aqui teneis el proyecto: NightFox's lib for libnds 20090506
 
Un  cordial saludo a todos y buenas noches
 
Fox

0

6 Comentarios:

Escribir texto

Buenas Night. Estoy intentando seguir sus tutoriales. Voy por uno de los primeros, para cargar bgs. Intentando hacerlo me he topado con un problema y es que cuando utilizo tu función InitTiledBgSys(n) no puedo escribir texto de la manera en la que venía utilizando (iprintf). ¿A que se debe esto? Posteo aquí por que he leido en alguna de tus entradas / funciones (no recuerdo exactamente dónde) que con el uso de esa función no se podía usar el iprintf. ¿A qué es debido esto? Supongo que es algo del videosetmode ... no sé. ¿Esto no se podría solucionar? La verdad que el iprintf era bastante sencillo de usar y he estado ojeando por encima este último proyecto y no entiendo por que tantos pasos para poder escribir (cómo ya es poco sencillo lo demás, lo que suponía fácil se convierte en un infierno :( ) Bueno pues eso. Un saludote y gracias por adelantado.

Basicamente es porque para

Basicamente es porque para usar el iprintf, se usa la consola de debug, vamos que inicializa el modo 2d y configura la VRAM a su antojo. Para escribir un texto sobre fondo negro, premio (si te fijas, en los ejemplos de las libnds no hay ni un ejemplo de fondo + texto). Para usar texto sobre otros fondos, si has configurado la VRAM a tu gusto, como es mi caso, se tiene que usar una funcion propia de texto. La que he hecho es algo mas complicada que el iprintf (que es la que viene integrada con las libnds), pero en contrapartida se puede usar en varias capas a la vez, rotarlo y usarlo conjuntamente con fondos. Para poder usar el iprintf, la unica solucion seria adaptar toda la libreria a la configuracion de VRAM que usa el initDefaultConsole(); la cual cosa, la verdad, no me apetece nada porque limita un monton el trabajar con fondos y sprites.

Buenas de nuevo

Buenas de nuevo Nigth, gracias por la pronta respuesta. La verdad que estuve mirando ejemplos y no encontré ninguno con texto y fondos y me parecía raro (aunque ya se ve que la documentación de esto más bien tiende a 0, vaya asco). Otra cosa, ¿cómo sabes manejar tan bien la VRAM? La verdad es que no he encontrado ninguna documentación que sea lo bastante explicativa como para llegar a plantear el código como tú lo haces. Pues nada seguiré tus tutoriales de cerca,muchas gracias por tu disposición. Un gran saludo.

Casi toda la parte

Casi toda la parte referente a la VRAM la he programado en base a esta tabla:
 
http://dev-scene.com/NDS/NDS_Tutorials_VramTable
 
Pero, hay referencias a VRAM que no estan bien (ya me di de morror para darme cuenta) y me costo como 10 dias que todo fuera perfecto. Me ayudo mucho haber programado hace 20 años en ensamblador de Z80 para MSX, ya que ahi tambien tenias que rascarlo todo a nivel muy bajo.
Y si, tienes razon, la documentacion de las libnds es asi como escasa y los tutoriales decentes, inexistentes, pero es lo que tiene la DS, es una consola para masoquistas.

Buenas de nuevo

Buenas y gracias de nuevo. Escribo a ver si me pudieras resolver una duda. ¿Por qué no me crea el .nds cuando incluyo el siguiente código en el main? La verdad que no tengo ni idea. Ya he comprobado que es esa parte . Lo raro es que no da fallos pero no crea el .nds Este es , un fragmento de tu código. // Inicializa el sistema de interrupciones irqInit(); // y habilita el vblank para poder usar swiWaitForVblank() irqEnable(IRQ_VBLANK); // Inicializa el sistema FAT consoleDemoInit(); // Inicializa la consola de texto iprintf("Inicializando FAT.\n"); if (fatInitDefault()) { // Intenta inicializar la FAT // Conseguido, continua } else { // Fallo. Deten el programa iprintf("Fallo en la inicializacion.\n"); iprintf("Programa detenido.\n"); // Bucle infinito. Fin del programa while(1) { swiWaitForVBlank(); } }

Solucionado

Por si a alguno le ocurría lo mismo, el fallo estaba en el MAKEFILE en el que había que añadir la línea -libfat antes de -libnds . Ahora mismo no tengo delante el proyecto así que no sé exactamente qué línea es. ¡Un saludote!