Saturday, December 30, 2006

runME pre-0.1

Enfin des bonnes nouvelles pour la programmation sur ma DS. J'ai réussi à porter les routines de détection et sélection de bornes WiFi dans mon le modèle de programmation du Sprite Editor. Grosso modo, ce sont les fonctions de SgStair -- dans son exemple d'utilisation de la bibliothèque dswifi -- mais répartis sur quelques widgets de mon crû plutôt que de s'amasser dans un gros fichier "main.c" (qui me rappelle un peu mes débuts en Basic). Et le mieux, donc, c'est que ça marche.

At last some good news in homebrew coding ... I managed to have the wifi accesspoint detection and selection code working with my own Application Engine (that is, pulling the logic of sgstair's work out of his effective-but-huge "main.c" file, split it more-or-less nicely into widgets and windows, and still have it working.

Au départ, j'aurais voulu intégrer ça dans "DSFTP", mais seul une toute petite partie des sources sont disponibles, et d'après les échanges que j'ai eu avec son auteur, il y a peu de chances que ça bouge. Donc je m'y attelle. Mon objectif ? "runME". Un petit programme tout simple (et ouvert) qui listerait une série d'annonces reçues sur un port UDP pour ensuite permettre au propriétaire de la DS de démarrer un transfert TCP pour récupérer et stocker un des fichiers.

Basically, i planned to do this into "DSFTP" application, but his author didn't released any source and he doesn't seem to consider doing it soon ... so my plan is to work on "runME": a dumb (and open-source) application that will let one listen for "upload advertisements" on a UDP port, report what file is available to the user which then pick it from the DS, connects back to a TCP port on which the raw bytes will be received.

Those raw bytes will then be stored on the DS card and the program will be launched.

Well that's the deal, but for now, my eyes need to relax ... i've typed most of this looking only at the keyboard, and my doctor would probably frown if he knew i did some dev'ing today.

the demo with sources : runME-dec30.tar.gz

Wednesday, December 20, 2006

chuzzle

Si je devais cloner un jeu de réflexion sur la DS, ce serait celui-là. une grille 6x6 avec des bidules de couleurs qu'il faut aligner pour les éliminer et remplir une jauge. On passe au niveau suivant quand la jauge est pleine, et on a perdu quand plus aucun mouvement ne permet de faire exploser des peluches (3 minimum).

If i was to code a puzzle-game clone on Nintendo DS, i would pick chuzzle. A 6x6 grid full of colorful furballs that you pop in order to fill a bottle and gain one level. Unlike Tetris Attack, you can pop furballs even if they're not aligned, but every move _must_ pop some. Then you get combos, avalanches, super-pops (5 or more) ...

contrairement à Tetris Attack, les peluches ne doivent pas forcément être alignées, mais par contre, un déplacement n'est valable que s'il permet de faire exploser des peluches (comme à Othello/reversi). Si on en explose un carré de 2x2, on a "droit" à un méguzzle (le gros vert), et à un chuzzle "explosif" si on en éclate 5 d'un coup (ou plus) de la même couleur.

The game comes even more addictive with the locks that will come regularly unless you do enough combos/super per minute. There are also mega-chuzzles and rainbow chuzzles. Another thing that makes the game addictive is the high quality of animations: chuzzles wiggle and giggle as you move them or when a match could be done. Their fur is also animated when you drag them around, and the music was a real pleasure to have along. I wish raptisoft get a DS license soon and thing about porting the game ^_^

Si on ne fait que des groupes de 3, au bout d'un moment, des verrous apparaissent, qui bloquent la ligne et la colonne sur le verrou . . .

allez, petit calcul rapide ... pour l'écran 256x192 de la DS, il y aurait place pour des peluches de 32x32 ... Je sais ce qu'il me reste à dessiner ^_^

edit 2009 : eh non. Toujour pas réalisé, mais Plop Invaders s'en rapproche.

Friday, December 15, 2006

Guru Meditation


Grace aux bons conseils sur forum.gbadev.org, j'ai mon premier "Guru Meditation Error" sur la DS ... Probablement une erreur dans le code de la petite bricole que je suis occupé à faire (réintégrer les routines Wifi avec mon interface de 'SpriteEditorDS' pour pouvoir uploader des exécutables sur la console)

Un peu plus verbeux et moins poétique que les messages amiga, ceci dit. Ca ressemble plus à un écran bleu windows, mais en rouge...

pc: 021c6d6 addr:00000000
r0: 0206f7b0 r8:00000120
r1: 0201450f r9:0b003b84
...
sp:0b003ae0 lr: 0201c6d7
Thanks to the advice found on forum.gbadev.org, i saw my very first "Guru Meditation" error screen on the nintendo DS. Most likely a bug of mine in the code i'm messing with (merging WIFI routines with my SpriteEditor's interface so that i can upload data and software on the DS without rebooting or cart-swapping). It's less poetic than the original Amiga message, though ... more or less a Blue-Screen-Of-Death, but with a red background...

You're also offered 10 lines of register dumps (see above) which may (or may not) help you pin-pointing what's going wrong in your code. Well, i won't show it all, even if that could help me later. And for those who wonder, you can check out the bookmarked links below, or just add defaultExceptionHandler() at your convenience in the program (hint: install it on START press rather than straight from program execution so that you don't immediately lose screen content in case of an error).


Et il y en a 10 lignes comme ça. Même si ça peut m'aider pour débugger plus tard, je vais pas vous imposer le tout, hein.

J'avais enregistré les bookmarks pour y arriver sur http://www.blogmarks.net/marks/tag/guru, mais grosso-modo, il suffit d'appeler defaultExceptionHandler(); en début de programme ^_^

Incoming Features for SpriteEditorDS

Deux ou trois choses que je voudrais modifier avant de pouvoir offrir la version "0.1" de mon éditeur de Sprites (et accessoirement, en intensifier l'usage) :

  1. une interface plus conviviale pour sauver son travail, qui indiquerait notamment de quel fichier les images proviennent, et éventuellement les quelques premiers sprites de chaque jeu d'images (A,B,X et Y)
  2. un éditeur de palettes permettant de mélanger des couleurs pour en produire des autres (entrer des codes RVB avec le stylet me tente assez peu), transférer des couleurs d'un jeu d'images à l'autre, créer des dégradés entre des couleurs existantes, etc.
  3. présenter une "liste d'objets" sur l'écran supérieur, dans laquelle on pourrait conserver ses animations, les objets plus larges (tels que l'arbre, par exemple). Le mode gestion sera pour plus tard, mais il devient urgent de pouvoir sauver aussi les objets.
A couple of things that i need to modify before i can release a "0.1" version of my Sprite Editor (and using it more extensively)
  1. a more friendly 'save' interface, showing which file the current dataset comes from, and showing the first few tiles of each dataset (A,B,X,Y)
  2. a palette editor giving the ability to mix colors to produce new ones (no, i don't feel like editing colors with #rrggbb values on the DS), to swap colors between datasets, and to create raster between existing colors.
  3. an "object list" in addition to the tile list, where you can add animations. Compound items will also be 'objects' of some sort. The 'object list' will be kept in the upper screen, and a 'management mode' (for removal, etc) will be for a later release.
  4. save the content of the 'object list' in the dataset.

Saturday, December 02, 2006

Ready for Rumble ?



Pfiouh. Bin y'avait du boulot ... j'ai bricolé un peu mon DeSmuME pour qu'il supporte les routines de décompressions (en fait, la version CVS de desmume le fait déjà, l'émulateur a été complètement réécrit en C alors que la version que j'avais bidouillée est en C++).

visiblement, le projet est plus actif que je le pensais, mais je n'ai pas trop trouvé comment utiliser le module "cflash.c", donc j'en reste à mon émulateur plein de rustine.

Résultat, après pas mal d'efforts, j'ai enfin le jeu qui tourne (avec mes modifications :P) et ... (roulement de tambours) les modules sont extraits du .nds et chargés sur la carte SD ...

Ca peut paraître génant, comme ça, mais il faut savoir que les transfers DSFTP ont tendance à s'interrompre trop tôt, donc si je peux essayer plusieurs musiques sans toucher au programme, ça ne serait pas plus mal ...

zou. J'ai enfin une bonne nouvelle dans ce projet "apple rumble": non seulement le test tourne dans l'émulateur, mais mon morceau "little flower on the grass" tourne dessus ^_^ Et ce sera "virtual sid session" qui sert de musique pour l'alarme. Voici donc le premier "tetris attack" avec une rangée de blocs qui se cache derrière un tronc d'arbre :P

It seems that the desmume project is more active than i initially presumed. That's both good and bad. Good, because they have the unpacking routines i was missing, and bad because they rewrote the whole code in C (while the version i have is written in C++) and because i couldn't figure out how their new flash-device support is supposed to work.
So after hacking all over the place, i finally have the tweaked-tetris-attack game running on my console, with the songs loaded with libfatdragon rather than just being bundled with the executable. At first thought, that may sound a bad idea, since it makes the game dependent on a flash reader technology, but this is my only chance to have the binary transferred over WiFi with DSFTP -- which seems to hang randomly when the file transfer gets longer or when the signal weakens.

So that's at least one good new for the "apple rumble" project. Not only i can now run it in the emulator (making bug hunts&fixes easier) but i also have the "little flower on the grass" tune of mine played fine during the game and "virtual SID session" played in "danger" mode. So here's a snapshot of the very first tetris attack clone with a column hidden behind a tree ^_^