Kana DS

Learning Japanese writing on the Nintendo DS

14 September, 2008

Katakana writing game added

Just two weeks after the last update, I am releasing a new version of Kana DS/My Japanese Sensei, now including a katakana writing game.

Some planned additions for future releases:
- Displaying an animation of the (stroke order) correct writing of a kana when the player fails to write it properly.
- Implementing a similar functionality in the Reference screen.

Download the ROM (696KB)
Download DeSmuME emulator (Win/Mac/Linux)

28 August, 2008

New public release! [update]

New features and changes:
  • Completely new user interface
  • Added hiragana writing practice game (katakana will be added soon)
  • Added selectable difficulty level for the games
  • Game has been rebranded to "My Japanese Sensei"

Download the ROM (580KB)
Download DeSmuME emulator (Win/Mac/Linux)

PS: We are looking for a publisher to fund a commercial version of the game. Please contact us if you'd like to hear more about the project.

Edit: Updated ROM with ds.gba ROM for GBA-slot cards.

18 August, 2008

Kana DS at Games Convention

Next week I'll be at Leipzig's Game Convention with my friend and industry colleague Nae, representing the DOID, a spanish game developers association. We are located at the GC Business Center, Halle 2, Stand D46.

Among other things, I will be showcasing the latest iteration of Kana DS to a select few. If you happen to be in the show too, you are welcomed to come by for a brief demo. Here's an appetizer:
I will post some pictures from the show when we get back.

04 August, 2008

Desarrollador_ES awards

On the 2nd August, the Desarrollador_ES awards were hand out at Campus Party, Valencia. These awards are the result of a collaboration between the DOID (spanish game developer association) and E3 Futura (the organization behind Campus Party).

Kana DS was nominated to best game in the category of vaporware innovation, but it was finally Doodle Hex (another DS game) from Tragnarion who took the prize for this category. You can check the full list of nominees and winners at Meristation.

I would like to thank the organization for nominating Kana DS. It has been a honor to be somehow considered on the same level as some of the coolest game development studios in Spain. Also, my congratulations to all the winners and nominees! .

Cookie goes to the first person able to spot me in this picture:

(I still have a pending post about the Games Convention :P)

20 July, 2008

What I have been up to

This is a "sorry for not updating more often" post. For the past year I have been extremely busy and that has held me back from spending more time on Kana DS. Although at a slow peace, I have not stopped working on it directly or indirectly, through my final degree project (which I'm not done with yet either).

Still don't believe me? Well, here is a brief summary of all I have been through in the last academic year (september 07 - june 08):

Next post: Kana DS goes to Leipzig!

19 July, 2008

No luck with NextFun

NextFun is a program sponsored by Barcelona Media, started last year, that awards three 3000€ stipends to "the development of prototypes related to the entertainment industry" with the goal of "promoting research and development of recreational technology projects".

Since Kana DS seemed fit for the program's goals, I applied by sending the organizers a 40 page long business plan among other required documentation, on the 31st December of 2008. The projects awarded with the stipends should have been announced on January 31st. Somehow, the results were not disclosed until July 11st. Six months later. Sadly, Kana DS was not awarded. The winning project proposals are:
Project “Patakiu”: A virtual, interconnected community of puppets, able to communicate and interact between them and with their environment in real time.

Project “Gears”: Interactive system with an advanced interface allowing the manipulation of pre recorded video fragments, enabling the creation of new contents through an innovating edition procedure.

Project “Variable Audio”: Implementation of an an audio file format that, by using an ad-hoc player, would allow for the reproduction of a musical piece with automatically created variabilities.
Needless to say, the Kana DS project goes on. Expect a new blog update soon :)

31 December, 2007

New Year's Eve

It's New Year's Eve, 7:19 AM. After a long working night, I still have to write the executive summary of a business plan that should have been sent on friday (ó.ò)...

However, I expect 2008 to turn out like a great year for Kana DS. We'll see.

/provides himself with an intravenous caffein injection
/feels better


10:53 AM. Finished! Now off to the post office... :P

27 December, 2007

December update

What's going on with the project? What have I been up to?

The academic course 07-08 is keeping me quite busy in fact. Besides being my last year in university, I'm also taking a 500-hour master in project management. However, even though my free time is close to zero, some progress has been done on the business side of Kana DS development.

We were very close to attend the Game Connection event in Lyon, thanks to the Level Up program. We ranked 6th among applicants, missing the cut for just one position. Although Lemon Team does not show up in the final results, I know we were 6th because I was contacted by the organizers in case one of the winners decided to drop. So, maybe next year..

I have also been writing a business plan for Lemon Team, based on Kana DS as its first product. It will be ready soon, just in time to apply for another program in multimedia innovation. I must say that writing a business plan is quite a time-consuming task, but in return you get solid information about its viability, main risks and weak points. It really helps to make you rethink the whole thing.

As for the status of the DS prototype, I can only say that it's going to be greatly improved as part of my final degree project, which involves research and implementation of an online handwriting recognition system for japanese characters. So far it's been mostly research, reading papers about the topic, and more paperwork. This can be quite boring, but this formal approach will eventually pay off and provide better results based on solid knowledge.

Next update will probably come in february. The iPhone SDK is going to be unveiled around that date, which might offer some opportunities for japanese-learning applications. Again, thanks again to the people who are showing their interest on this project via e-mails and comments.

16 October, 2007

Still alive!

I am sorry for the news draft, but studies and work have kept me away from Kana DS. So, what's new about the project?

On one side, I'm working on a business plan for possible investors/publishers, as this is the only way I could get this 100% finished some day. Will I find financial support? Hard to say.. but I will keep trying, as I have little to lose and much to learn.

On the other side, I can now confirm that I will further develop Kana DS as part of my Computer Science degree's final project. Specifically, I will keep working on the hand-writing recognition stuff, but in a more scientific approach under the supervision of my tutor. We are also planning to release some updates as we make progress during this course.

Lastly, thanks for the all your e-mails, I wish I could devote all my time to this and deliver this great app to all of you but you will have to be patient. Oh, some art that *might* make it into the game:

PD: I must admit I ripped off the overall style from Mr's artwork, gotta love his Heidi-like girls. Some links(probably NSFW):


30 July, 2007

Kana DS earns 'best game project' award

I'm proud to announce that Kana DS was declared winner in the 'game project' competition at the latest edition of Campus Party in Valencia, Spain.

I'm really happy about this award, as it shows that the project is generating interest even amongst those that are not currently learning japanese. Again, many thanks to my friends, fellow developers and project supporters!!! ;-)


19 July, 2007

Progress on KaTool

Hi everybody! I'm still working on KaTool, the gesture database management app for Kana DS. It is now almost complete: it already implements all the intended features, only lacking some polishment regarding usability.

The following screenshot depicts the 'test' mode, where you can draw a gesture on the right side of the document window, and check whether it matches the gesture on the left or not.

And this is the new application icon, in the style of the old MX 2004 Macromedia suite ( I hate the new CS3 family icons):

By the way, next week I will introduce the Kana DS project to some fellas in the mega LAN-party Campus Party in Valencia, Spain ( 5,500+ attendees). If you are attending the party and you want a hands-on impression about Kana DS or KaTool, feel free to drop me a line!

07 July, 2007

KaTool - early screenshot

I want to give you a first glance at the symbol/gesture editor. As I have explained in previous posts, this application will let me build the handwritten kana/kanji symbol database for Kana DS. I'm using J2SE 5.0/Swing in Xcode. Here's how it looks so far:

Some notes:
  • The user interface is far from finished. Placing the widgets is quite a hard task in Swing, so for the time being I'm using the simplest possible layouts. I will polish the UI later.
  • There is a main window that holds a custom "GridPanel" component. This new component can have any number of columns or rows. Now I'm using a 11x5 distribution, to match the hiragana/katakana character sets.
  • Clicking on any of the grid's placeholders opens a new document window, when you can edit the corresponding symbol.
I'm sorry for the slow development pace, but I must pay attention to other projects as well. Hopefully I will be able to spam about them in the coming weeks.

PD: Thanks for all the comments. It really encourages me to keep working on this :)

30 June, 2007

Back to work!

Now that I'm finally done with my June exams, I am going to continue the work on Kana DS. For the next couple of weeks, I am going to focus on the kana database editing tool. I want to complete the following points:

  • Symbol drawing/editing
  • Load/save database
  • Export database (to an optimized binary format loadable by KanaDS)
Then I will port the recognition engine to the NDS(C++), do some tests and add another mini-game demonstrating the kana input.

I already have the application skeleton and base classes, which I have coded during the past month. The tool uses Java/Swing as I said in another post, so it will be completely cross-platform.

14 May, 2007

Exams - Managing the gesture DB

As promised, for the pleasure of the 90% of the visitors and starting today, I will be writing only in English.

I am afraid to say that since the (college) exams period is about to start here in Spain, there won't be any big update until mid-July. This is a lot of time, yes, but I'm just being realistic here.

In the meantime, I plan to (slowly)work on the gesture recognition side of the project. The applet is now not enough for my needs, so I started writing a more complex application to manage the kana/kanji gesture database. I am using Java/Swing, and it should let me perform the following tasks:

Note: The binary DB represents the final, static database holding gesture information for all recognized kana and kanji in the game.

Oh and finally, Kana DS did not win any award at the Concurso de Software Libre(Open Source Contest for spanish universities) that finished last weekend. I have been given an 'special mention' though, which basically means a slap on the back.

See you on the next post!

16 April, 2007

Avances en el reconocimiento

Estos últimos dias he tenido algo de tiempo para implementar una pequeña mejora en el algoritmo de reconocimiento de la escritura. Ahora tambien detecta si un trazo se cruza consigo mismo, teniéndolo en cuenta a la hora de comparar el símbolo escrito con el modelo almacenado.

Antes de añadir esta característica, el programa confundía con facilidad algunos símbolos similares, como por ejemplo los hiragana 'nu'/'me', o bien 'wa'/'ne' /'re':

Ahora, 'nu' y 'me' ya no son nunca confundidos, debido a que el 'rabito' de 'nu' no está presente en 'me'. El caracter 'ne' tampoco es reconocido ahora como 'wa' ni 're', por la misma razón.

Sin embargo, aun hay problemas para diferenciar claramente 'wa' de 're', como se ve en el siguiente gráfico:

La explicación adjunta es para los lectores no hispano-parlantes, que son mayoría en las visitas, aunque no dejen muchos comentarios en el blog.

Por cierto, los fuentes del applet que hay en la zona de descargas aun no contienen la mejora mencionada, antes quiero adecentar un poco el código como de costumbre. Ya avisaré cuando esté colgada la nueva versión.

Por último me gustaría mencionar que en la edición de Abril de Linux Magazine se me ha publicado un pequeño artículo sobre Kana DS, con motivo de la proximidad del final del concurso. Tambien aparecen los proyectos CoolTran y OpenPipe(gracias por avisar!), de nuevo comentados por sus respectivos autores.

¡Suerte a todos los participantes!

11 April, 2007

Fuentes del applet disponibles

¡Por fin están disponibles los fuentes del applet que mostré al comienzo del proyecto! Recordad que era un pequeño 'proof-of-concept' que implementaba un algoritmo simple para reconocer figuras escritas a mano. Este algoritmo será posteriormente usado en algunos mini-juegos de Kana DS.

Download applet sources here

Además de adecentar y reorganizar un poco el código, he añadido una miniatura del caracter almacenado en ese momento. Junto con los fuentes viene tambien un .jar precompilado y un proyecto de Xcode.

KanjiDraw applet

Como ya dije en su momento, el módulo de reconocimiento de caracteres bien podria ser un proyecto por sí mismo, y es mi intención mantenerlo en un módulo independiente de Kana DS, ya que probablemente acabe siendo reutilizado por otras personas en proyectos distintos. Bueno, de hecho, ya ha sido usado por una estudiante de informática Mexicana que me pidió los fuentes hace tiempo.

09 April, 2007

Video y nueva release

Gracias al mal tiempo que ha hecho en levante esta Semana Santa, he podido añadir al menos uno de los mini-juegos antes del plazo de finalización: "numerales kanji". Aparte del juego, he retocado algunos aspectos de usuabilidad y muchas más cosas que no se ven a simple vista. He colgado un vídeo de Kana DS en Youtube mostrando los aspectos ya implementados:

- Pues vaya birria, ¿4 meses para eso?
- Sí..

Podeis tomar la nueva release desde la sección de descargas de la forja. He aprovechado para cambiar el estado del proyecto en la forja, de 'pre-alpha'(2) a 'alpha'(3).

Lo malo de hacer las cosas corriendo es que luego toca limpiar y refactorizar mucho código, que será lo que haga de aquí a Junio. Cuando termine exámenes volveré a seguir añadiendo cosas. Hasta entonces, lo dicho, mucha limpieza y empezar a pensar en la siguiente fase de desarrollo. De momento he rechazado 'elegantemente' algunas peticiones de colaboración, ya que no tenia muy claro el rumbo en ciertos aspectos.. y por eso quiero ir pensando en cómo plantear un futuro desarrollo en torno a una posible comunidad.

Por último, recordar que el estado actual de la aplicación es equivalente al de un prototipo jugable, que era mi objetivo al entrar en el concurso. Y es que la parte más difícil al desarrollar un juego es terminarlo.

Pero bueno, precisamente lo bueno de participar en concursos es que te obligas a trabajar con cierta constancia, te lo tomas con un poco más de seriedad y te marcas unos plazos. Si no hubiese participado, seguramente el proyecto no habria avanzado tanto.

Ah, el blog seguirá aquí. Quiero volver a escribir sobre el proyecto esta misma semana, pero ahora mismo hay una práctica de compiladores y otra de IA que me reclaman... :P

04 April, 2007

Nueva versión 'preview'

Ayer subí una nueva 'preview' de Kana DS a la forja. Si la probais, podreis ver que el menú de referencia de kanas ya está bastante avanzado, y que ya es posible llegar hasta el menú de selección de mini-juegos.

Tambien he añadido algunos efectos de sonido a la interfaz de usuario, para p.ej. dar un pitido de error al pulsar sobre los botones que aun no son funcionales. Los efectos los he tomado del Banco de Sonidos del Ministerio de Educación y Ciencia.

Un par de fotos:
kana ds kana ds

Hará cosa de un mes probé Kana DS en varios emuladores de Nintendo DS, y no funcionaba correctamente en ninguno. Al cargar la ROM, o bien no pasaba de la pantalla de logo, o bien no parecía funcionar la stylus. Agradecería mucho que si alguien lo hace funcionar en algun emulador, me lo diga. Gracias.

Antes de que llegue el 9 de Abril me gustaria tener implementados varios mini-juegos, no sólo por ser la fecha a partir de la cual se empiezan a evaluar los proyectos, sino tambien porque tengo mucho trabajo pendiente de la carrera :P, y el final del curso comienza a acercarse peligrosamente. Necesito un chute de algo, y rápido xD.

30 March, 2007

Iniciativas similares

La Universidad y el trabajo no me estan dejando avanzar tan rápido como me gustaria, pero bueno poco a poco voy sacando esto adelante. Como aun no tengo demasiadas novedades que enseñar, voy a dedicar el post a programas similares.

First things first. Gracias a todos los que han dejado comentarios por los ánimos, pero la verdad es que la idea del proyecto no es ni mucho menos original. Antes de comenzar observé que ya existían algunas iniciativas similares, y además en muchos foros se preguntaba y/o demandaba por este tipo de juegos para Nintendo DS. Que quede claro entonces que no tengo el mérito de la idea eh ;)

He recopilado una breve lista de proyectos similares. Algunos los descubrí de casualidad, y otros los he conocido mediante vuestros comentarios. Tenemos pues:

  • DSLearnJ, de reciente aparación. Se centra en el estudio de kanas y kanjis mediante tarjetas. El código fuente está disponible para descarga.

  • JapFR es otro proyecto francés que tambien parece detenido, presenta varias lecciones para aprender hiragana y katakana, así como un módulo de evaluación.

  • Project JDS. Este programa holandés tambien es reciente, y de momento muestra la escritura de los hiragana y katakana mediante animaciones. Tambien permite escuchar los sonidos de algunas sílabas. Por cierto, las animaciones (.GIF) han sido tomadas de esta conocida página, y no sé si tendrá el permiso del autor...

Si alguien conoce algun proyecto parecido más, puede usar los comentarios para enlazarlo.

08 March, 2007

Generando tablas de símbolos en Python

Normalmente, para poder pintar textos en un juego, es necesario tener primero un mapa de bits con todos los posibles caracteres. Así, para pintar un "hola" en pantalla, deberíamos hacer cuatro transferencias de memoria hacia el 'frame buffer', una por cada letra.

Kana DS usa, de momento, tres tablas de caracteres: ASCII, hiragana y katakana. Más adelante, cuando soporte castellano u otros idiomas, ampliaré la primera tabla para que soporte ISO-8859-1, que incluye gran parte de los caracteres 'especiales' usados por lenguas europeas.

Despues de diseñar a mano el bitmap para la tabla ASCII me he dado cuenta de que estaba perdiendo el tiempo, porque luego querré hacer cambios y me costará lo suyo. Total, que al final he decidido invertir algunas horas en refrescar mis escasos conocimientos de Python, y hacerme un script que me genere las fuentes:

python japanese glyphs

En apenas 35 líneas, el script me genera las tres tablas que estoy usando ahora mismo en el juego:

Ahora, si quiero cambiar el color o tamaño de las fuentes, sólo tengo que tocar un par de constantes en el script y volver a ejecutarlo :)

Podeis descargar el script desde la forjat: genglyphtable.py

Como diría un amigo, Python rocks!

PD: Estoy teniendo problemas con el servidor donde alojo las imágenes y ficheros, espero poder solucionarlo pronto definitivamente.

05 March, 2007

Problemas compartiendo repositorio entre Windows y OS X

Espero que esta entrada sea de utilidad a más gente como yo, que comparte respositorios SVN entre diferentes sistemas operativos, típicamente en un disco duro externo.

Pues bien, parece ser que SVN en Windows modifica ciertos atributos de archivo en sistemas FAT32, que luego causan problemas del siguiente tipo al hacer un 'update' en Mac OS X:

svn: Can’t move ‘.svn/tmp/entries’ to ‘.svn/entries’: Operation not permitted

La solución pasa por usar el siguiente comando en el directorio raíz del repositorio:

chflags -R nouchg ./

23 February, 2007

Menú principal rediseñado, empollando Unicode

Ya he modificado el menú principal respecto a los cambios que propuse en la anterior entrada. Aun no he actualizado los ficheros en la forja, pero tiene este aspecto:

Me gustaria implementar ya alguno de los mini-juegos, pero antes tengo que terminar una tarea inesperadamente dura: el manejo de texto en japonés. En un principio, los textos asociados a cada juego van en ficheros .txt con codificación UTF-8. Tengo que investigar un poco más sobre las capacidades de newlib para tratar con 'widechar' strings, pero creo que me va a tocar hacerme al menos un parser de UTF-8. Luego en memoria ya veremos que TAD uso para las cadenas...

Una vez tenga los textos en japonés en memoria, necesitaré una fuente gráfica para todos los caracteres hiragana, katakana, y unos 80 kanjis. Voy a ponerlos todos en un bitmap, organizándolos de alguna manera respecto a su orden en Unicode, para que luego las funciones de pintado sean lo más sencillas y rápidas posible.

Algunos enlaces sobre lo comentado:

17 February, 2007


Al igual que el resto de concursantes, voy con retraso en el proyecto. Sólo quedan dos meses escasos, y mucho trabajo por delante. Sin embargo, mi meta inicial no era terminar el juego completo, sino lograr un prototipo avanzado, con las funcionalidades básicas y varios de los mini-juegos. Creo que aun tengo tiempo para lograrlo, veremos.

Precisamente por esta falta de tiempo los contenidos del juego sólo van a estar -de momento- en inglés. Traducir todo es fácil, pero implementar ahora mecanismos de localización decentes supondrían un tiempo que prefiero invertir en otra funcionalidad. Como el proyecto no termina al final del Concurso, sino que seguirá hacia delante, ya habrá tiempo para añadir más idiomas.

Éste es el aspecto del menú principal, y el menú de consulta de silabarios y kanji:

kana ds

Desde el punto de vista de la usabilidad, me auto-propongo los siguientes cambios:
  • Usar iconos junto a texto en menú principal.
  • Ajustar el tamaño de los botones segun su importancia. Por ejemplo, agrandar "start practice" y hacer "options" más pequeño.
  • Sustituir la etiqueta "back" en el menú de consulta por un simple icono.
Generalmente, cuando menos texto contenga una interfaz mejor, pero tampoco se puede prescindir totalmente de él, ya que a veces es imposible deducir la función exacta de un elmento mediante su icono.

Comentar estas decisiones y cambios es precisamente lo que le da valor a esta entrada, y hace que enseñar algo a medias tenga sentido. Una vez tenga el menú de consulta más o menos funcional(exceptuando quizá la parte de kanjis), pasaré a implementar las fuentes gráficas con el alfabeto inglés y los silabarios hiragana/katakana, que serán empleados en los mini-juegos.

Ah, se me olvidaba: todo lo que he mostrado no es final, el diseño, colores y funcionalidad de los menús irán cambiando. Aun así, cada 10 dias aproximadamente publicaré una "release" en la forja, por si alguien quiere curiosear. De momento podeis probar la primera release pre-alpha, que no es más que dos menús con escasa interacción.

13 February, 2007

Status: 2

Por fin he comenzado a picar código y voy usando el repositorio SVN regularmente. He aprovechado para cambiar el estado del proyecto en la forja, de (1) 'planning' a (2) 'pre-alpha'. Me voy ayudando con un diagrama de casos 'rústico' y algunos casos de uso, pero aun queda por lo menos un mes hasta que tenga algo jugable. Ya iré comentando los progresos por aquí.

Comentar tambien que el código ya hace uso de la nueva revisión de DevKitPRO (R20) y Libnds que aparecieron hace varias semanas. Se han corregido unos cuantos bugs en las librerias y renombrado la mayoría de constantes de Libnds para conseguir una mayor consistencia respecto a la documentación que hay en la red.

Ah, por cierto: Rudolph Steady Go! consiguió el segundo puesto en la DrunkenCoders Xmas Compo! Una pequeña motivación más para continuar trabajando..

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 );

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í:


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.

22 January, 2007

Rudolph Steady Go!

Este fin de semana terminé el juego para Nintendo DS que comenté en una entrada anterior. Es un pequeño homenaje a Osu! Tatakae! Ouendan! del estudio iNiS, y lo he presentado a una competición de juegos navideños para NDS organizada por DrunkenCoders.com.

Para los neófitos: Un juego musical en el que hay que pulsar ciertos elementos visuales al ritmo de la canción de fondo.

¿Para qué me ha servido esto? ¿No hubiese sido mejor pasar a trabajar en Kana DS directamente?

Hacer un pequeño juego con LibNDS y DevkitPRO me ha servido para:
  • Familiarizarme con el entorno de desarrollo
  • Aprender a programar la Nintendo DS
  • Construir funciones y clases básicas que luego reutilizaré
  • Detectar las limitaciones más serias de las librerías
  • Solventar varios problemas técnicos que hubiesen resultado frustrantes más adelante en el desarrollo.
  • Tener un juego *finalizado* más a mis espaldas. Por muy pequeño que sea, siempre se aprende algo con cada proyecto terminado.

A mí personalmente me suele asustar enfrentarme a un proyecto grande sin conocer demasiado las herramientas con las que voy a trabajar antes. Sé que siempre te acabas topando con limitaciones o "known-bugs" que no conocías, llegando a callejones sin salida. En este caso apenas tenía elección, ya que debía elegir entre LibNDS y PALib, y ésta última dependía de varias herramientas para Windows -y yo trabajo en Mac OS X.

Y ya que estamos con el tema de librerías... aquí va un briconsejo:

Cuando os encontréis en la situación de elegir una API/librería para realizar un proyecto os aconsejo que tengais sólo en cuenta las características actuales que ofrecen. Centráos en que lo que ofrecen ahora, y no en lo que sus responsables piensan añadir durante los próximos meses. Mi experiencia me dice que las nuevas 'features' tardan en llegar, y a veces, nunca lo hacen.

Voy a ser malo y señalar directamente con el dedo un ejemplo:

Hace ya tres años que se anunció el motor para juegos Truevision3D 6.5. Aun no está disponible. Sólo se puede acceder a él mediante una "Beta" de pago. ¿Pagar por una librería en desarrollo e inestable? No gracias. Yo quiero terminar mis juegos (comerciales o no), no pelearme con el motor o esperar a que se corrija la característica "x".

Volviendo al tema.. podeis echar un vistazo a Rudolph Steady Go! en su página.

Rudolph Steady Go!

A mediados de Febrero comenzaré la fase de desarrollo de Kana DS.

10 January, 2007

Arquitectura de Nintendo DS (II)

En el anterior artículo hablé sobre la organización de la memoria, los procesadores ARM9, ARM7 y algunas de sus peculiaridades. Esta vez voy a comentar algunas cosas sobre el DMA.

El DMA, o 'acceso directo a memoria' permite la lectura y escritura de la memoria principal sin la intervención de la CPU, esto es, con una circuitería dedicada. Las ventajas de usar DMA para transferencias de memoria son varias, pero a nosotros nos interesa especialmente por 1) su rapided y 2) eficiencia. Las operaciones DMA pueden ser en modo síncrono(la CPU permanece bloqueada hasta que la operación termina) o asíncrono. Éste último modo es el utilizado por los SO modernos para permitir p.ej. que podais estar reproduciendo un vídeo y a la vez grabando un CD sin saturar la CPU.

En un PC corriendo Windows o Linux es el propio SO el que gestiona la DMA, siendo totalmente transparente al programador de aplicaciones. Sin embargo, la Nintendo DS no tiene un sistema operativo en sí, sino una colección de rutinas BIOS y un puñado de registros que activan ciertas funciones. Debemos pues gestionar el DMA manualmente :-/

Por suerte Libnds nos provee de varias funciones para hacer uso del hardware DMA de la consola, y así poder hacer transferencias síncronas o asíncronas de manera eficiente. Si miramos en "include/nds/dma.h" podemos ver p.ej. el código de la función dmaCopy:

static inline void dmaCopy(const void * source, void * dest, uint32 size) {
DMA_SRC(3) = (uint32)source;
DMA_DEST(3) = (uint32)dest;
DMA_CR(3) = DMA_COPY_HALFWORDS | (size>>1);
while(DMA_CR(3) & DMA_BUSY);

En total tenemos siete (7) funciones para controlar el DMA, siendo sus nombres autoexplicativos:
  • dmaCopyWords
  • dmaCopyHalfWords
  • dmaCopy
  • dmaCopyWordsAsynch
  • dmaCopyHalfWordsAsynch
  • dmaCopyAsynch
  • dmaBusy
Si usamos las funciones -Asynch desde el ARM9 o ARM7, podremos seguir utilizando la CPU mientras la transferencia se realiza en un 'segundo plano'. Esto puede ser útil para aplicaciones que hacen decompresión de audio MP3/OGG o vídeo en tiempo real y que usan un sistema de doble buffer. Otro ejemplo práctico: si tuviésemos que hacer un MMORPG, usaríamos transferencias asíncronas para ir cargando el terreno y objetos segun avanzásemos por el mundo virtual, de manera que el juego no se viese nunca interrumpido por estas cargas.

En el próximo artículo hablaré sobre los modos de vídeo soportados por la consola y sus respectivos planos 2D/3D, poniendo como ejemplo el juego Rudolph Steady Go!

PD: Al igual que el resto de participantes del planet, yo tambien estoy hasta el cuello de prácticas y exámenes :P

30 December, 2006

Left channel only sound in Libnds

This post is written in English so that anybody can find it when searching Google for the topic.


Homebrew program with LibNDS only plays sound on the left channel of the console. Panning correctly set, of course.


You are problably using an ARM9-only template from the libnds-examples package at SourceForge.net. Using the 'templates/combined' project solved the problem for me (I'm using a DS-Xtreme in case you wonder), all sounds finally playing on both channels. This project template generates a binary for both ARM9 and ARM7 processors.

I know it's weird stuff but it works. Even though I have spent many hours looking into LibNDS' source code, I'm still wondering why..

Anyways, happy coding and best wishes for 2007!

19 December, 2006

Arquitectura de Nintendo DS

El problema principal al que se enfrenta cualquier programador de Nintendo DS es su atípica organización y esquema de memoria. Entender cómo y para qué se usa cada banco de memoria es fundamental para poder hacer funcionar hasta la más simple de las aplicaciones.

Con esta entrada pretendo mostrar lo diferente que resulta programar un juego para consola de para PC, que es con lo que casi todo el mundo empezamos. Vamos a ver las entrañas de esta consola super-ventas con el siguiente esquema, prestado de Dev-Scene.com:

Los puntos a destacar son:

Memoria principal (4MB)
Almacena los ejecutables y la mayoría de los datos de juego en curso. Los juegos caseros normalmente no pasan de estos 4MB para evitar tener que acceder a la memoria del flashcart mediante FAT16/32, siendo el método dependiente de cada familia de cartuchos.

Procesador ARM 9 ( 32bits / 66Mhz )
Recoge las instrucciones de memoria principal, y cuenta con una caché de 32KB para instrucciones y otra de 16KB para datos. Por lo general, este procesador es el encargado de llevar las riendas del programa, ejecutar la lógica del juego, gestionar los recursos, etcétera.

Procesador ARM 7 ( 32 bits / 33Mhz )
Para minimizar el acceso a memoria principal, al ARM 7 tiene acceso a una pseudo-caché 'IWRAM' de 64KB para instrucciones y datos. Este procesador suele gestionar el audio e input, haciendo las funciones de un DSP a veces. Por lo tanto, es necesario que los ejecutables para el ARM7 sean pequeños y quepan totalmente en la IWRAM(justo debajo en el esquema)

Dejadme remarcar el hecho de que las aplicaciones para la consola requieren usar dos ejecutables diferentes: uno para el ARM9 y otro para el ARM7. El último normalmente será 'esclavo' del primero, y atenderá sus peticiones en cuanto a playback de sonidos, lectura del touchscreen etc. Por tanto, es necesario algun mecanismo para que ambos procesadores puedan comunicarse entre sí.

Una manera es, como se explica en el wiki de NDSTech, usar los dos bancos de memoria compartida etiquetados como 'wram' en el esquema. Cada banco posee 16KB y sólo está disponible para un sólo procesador a la vez. Alternando el acceso a cada banco, se puede implementar un sistema de paso de mensajes para por ejemplo transferir paquetes de red o buffers de sonido. Por suerte, ndslib provee un ejecutable estándar para el ARM7 que ya implementa funcionalidades básicas para gestionar efectos de sonido y lectura de los botones y la pantalla táctil.

Tenía pensado hacer el post más largo, pero para no hacerlo demasiado pesado, lo voy a dejar aquí. Pronto escribiré una continuación hablando un poco sobre el DMA y los bancos de VRAM -cuyo conocimiento es esencial para desarrollar en Nintendo DS- poniendo como ejemplo práctico el juego para la compo de navidad que estoy haciendo.

13 December, 2006

Un desvio en el camino: Christmas Compo

Esto puede parecer algo offtopic, pero ahora me explicaré. Aquí van algunas capturas work-in-progress de mi entrada para la Christmas Compo de Drunkencoders. He decido apuntarme para así tener un juego -aunque sea pequeño- hecho en Nintendo DS antes de comenzar con la implementación de Kana DS. Mirando las fotos no es difícil adivinar el juego que voy a malclonar xD. Como el límite de las ROMs caseras(sin meterse en sistemas de ficheros) es de 4MB, sólo meteré una canción.

Despues de un intensivo de dos dias el puente pasado, ya he sido capaz de dejar los planos del modo de video como yo queria, cargar imágenes, programarme un blitblt básico, un fundido a negro de paletas, y algunas rutinas esenciales más que necesitaba. Es lo bueno y malo de la libnds, que viene pelada. Pero así al menos sabes lo que haces en todo momento y aprovechas los recursos al máximo.

Lo próximo serán algunas animaciones de las ardillas y el pintado de círculos por Bresenham. Una vez acabe la compo y los exámenes de Enero, me meteré ya 'a saco' con la implementación de Kana DS. Hasta entonces tengo pendientes uno o dos posts sobre arquitectura y programación de la Nintendo DS.