mardi, mai 31, 2016

ChannelState.CurrentCell

Je replonge un peu dans le code de libntxm. L'idée, c'est d'ajouter à ChannelState une référence directe à l'emplacement dans le pattern.  La bonne nouvelle, c'est que comme les patterns sont stockés piste par piste (plutôt que ligne par ligne), il est assez facile d'avancer dans une de ces "pistes spéciales", l'idée étant bien sûr de les configurer pour qu'elle jouent le contenu d'un des "effets sonore sur pattern" de mon frère... pas de murs à défoncer pour cette-fois ci ... par contre, pour l'instant, on entend rien ^^"

Let's go for some more libntxm hacking. I added years ago a "ChannelState" structure to capture what effect processing code needs to know about the running player. What I want to have now is a way to "lock" some channels to a specific place in the tune indepently of where other channels are (that is, current position in song), so that I could have channels 1 and 2 of a sound effect playing temporarily on channels 14 and 15 of the NintendoDS. Well ... enough blogging, it's time to run ddd and figure out why I don't hear anything.

edit: oh, well. I guess with 'unmute()' function silently skipping action past the 12 official channels of the song, I'll have no hope to see it working :P

edit++done.


edit: according to my computation, this was the 1000th posted entry. Roughly 10 years after I decided to Bilou on Nintendo DS.

dimanche, mai 22, 2016

Presentation topics

 62 téléchargements de "School Rush". Ce soir, je mets fin à la "campagne de promotion" de mon projet qui court depuis la release du dernier jeu. RaymanPC, way of the pixel, gbatemp, nintendomax, playeradvance... La grosse différence avec l'époque dev-fr, c'est que ça ne se propage pas tout seul. Je viens, je discute, je présente ... A chaque endroit. J'aurais aimé parvenir aussi à contacter "gbarl.it" et "scenebeta" (espagne), avec qui le contact avait été plutôt sympa à l'époque Apple Assault. Ce sera difficile de me faire entendre sur "tigsource", aussi.

I made a break in game development those last two weeks. Instead, I've done my best to make the game known. In the forums where there is still a bit of activity about homebrew games, where I already presented Bilou back in time, and in the Rayman fans community, since everywhere else, the similarity with Rayman's Picture City is pointed out :P

I'd have liked to reach the other european website that relayed automatically Apple Assault after the release on dev-fr, like gbarl.it, scenebeta and pdroms. These were fun because the owners tended to bring added value to the mere link. I'm not that good at promoting my own game. I tend to feel like an intruder when doing so. So it will be my last evening as a 'communication and download manager', and I'll go back to game design and lead engine developer.


C'est un score honorable, comparable au premier mois du "Apple Assault" qui a le mieux marché jusqu'ici. Maintenant, je ferme la parenthèse. On va reprendre les petits développement pépère. Si quelqu'un sur un forum veut attirer mon attention, j'espère que j'ai laissé assez de liens spécifiques pour qu'on pense à venir me relancer ici :P

PS: j'aurais bien aimé pouvoir dire quelque-chose de semblable sur base des statistiques de blogger. Seulement voilà: comment tirer quoi que ce soit d'un système qui vous annonce "90 visites l'heure dernière" mais qui est incapable de refléter ça sur les points d'arrivée ou sur les pages affichées ? ça ressemble presque à une façon d'imposer l'utilisation de la plate-forme professionnelle (et trop gourmande en ressources sur le navigateur, selon moi) de Google. Grmbl.

jeudi, mai 19, 2016

Sound Effects.

La prochaine release aura des effets sonores supplémentaires. Mon frangin a enfin fait quelques prises avec BFXR et je me retrouve avec une nouvelle bande son qui propose deux ambiances (à l'aise pour l'encre ou non ?) et 8 nouveaux petits sons.

Niveau mémoire, ça semble passer, malgré la taille conséquente de 1Mo du fichier. Ça pourrait bien nous amener à une occupation de 50% de la mémoire totale pour la musique, puisque libntxm compense en software les limites du soundchip de la DS en créant des variantes des samples à l'octave, mais pour autant que j'aie pu en juger tout va bien.

Noël! My brother finally shipped me an updated soundtrack for Bilou : School Rush that features new sound effects for jumps, bounces, pick up, throw and other moves of the sound palette. The second good piece of news is that despite the fairly large 1MB for the soundtrack, it still fits in the memory budget (at least for the first level). Maybe I'll have to work a bit on the sub-sampling loader of NTXM, but it doesn't seem to be a priority.

La où ça va me demander d'avantage de travail, c'est que mon frère n'a pas mis des sons "tout simples" pour les effets. A la place, il propose des combinaisons du sample sur deux ou trois pistes simultanément, avec des notes différentes, voire des effets de portamento ou d'arpeggio comme on en aurait eu dans le module lui-même. Et ça, eh bien ... le moteur de jeu et la libntxm ne sont pas vraiment prêts à le faire.

Yet, there is a heavy chunk of coding ahead before I can use the sound effects as he designed them. The samples alone are not what I need to use: my brother designed the samples to be played at given pitch, combining 2 or 3 notes to get the desired effect. Sometimes I'll have to support arpeggios or portamentos, too. I'll need to figure a way to do that properly. I had plans for such things for quite a long time, but now it turned from [wish] to [need].

dimanche, mai 15, 2016

En direct de Leilani's Island

Dans son petit coin de web, Ishi (Craig Forrester, auteur de Johnny biscuit et Princess Chardonnay entre-autres) nous prépare un adorable jeu en pixel art dont le gameplay rappelle assez bien celui de son jeu favori: Wario Land. Bien qu'étant un jeu de plate-formes, le jeu s'articule surtout sur la "roulade" de cette charmante protagoniste. Du coup,

  • la roulade permet d'aller plus vite que si on courait,
  • la roulade permet d'attaquer certains ennemis de face, plutôt qu'en les écrabouillants. En fait, tout comme dans SML3:WL, sauter sur un ennemi ne l'élimine pas. Faire une roulade bien.
  • le saut est volontairement limité (3 blocs, 4 en rebondissant sur un ennemi) pour qu'il soit plus intéressant de se servir de la roulade que de l'éviter.
  • Certaines plate-formes (les cordes) ne peuvent être traversées qu'en roulade. 
  • C'est en poussant sur ROLL en l'air qu'on lance l'attaque spéciale de la fleur de feu, et parce que ça fait bizarre que le bouton ne fasse rien dans certains cas, Ishi ajoute un "annulateur de saut" pour celui qui fait "ROLL" en l'air sans avoir ce power-up.

Hats off to Craig Forrester (Ishisoft) for his brilliant work on Leilani's Island. I hope he won't mind that I keep note here of the good design decision he took to have the game focus on one rich, interesting and funny mechanic: the island girls' ROLL move. If you really don't read French, I suggest you randomly click links in the French text to be sent to some of Craig's updates that I found especially interesting. I hope I'll be able to make Bilou's Adventure as rich as this. Btw, have you noted that Craig selected the 400x240 resolution of the 3DS ?  

Décision sympathique, c'est en ajoutant une fleur dans ces cheveux que Leilani augmente sa force. Et oui, elle peut aussi utiliser une fleur de feu. Mais ici il s'agira d'une attaque-roulée plongeante, capable de détruire des blocs. La combinaison de l'attaque-rodéo de Mario et le bouclier de feu de Sonic. L'utilisation de la diagonale lui permet de rendre les choses plus prévisibles (plus de timer "chéri, ça va couper"), plus faciles à viser (qu'à l'horizontale, en tout cas), et moins génant pour celui qui voulait simplement faire une roulade en atterissant. Bien vu.

Avec son mécanisme de "j'te roule en boule", le jeu permets plein d'aspects-puzzle, renforcé par les effets de réactions en chaîne sur les blocs. Oui, parce que -- contrairement à Bilou jusqu'ici -- le jeu assume pleinement l'héritage de Mario avec des blocs-à-bonus que l'on peut frapper verticalement ou latéralement, et d'autre blocs qui se fractureront si on les frappe assez fort. Cette histoire de réaction en chaine est encore renforcée par des séquences d'objets. Bref, côté éléments à coder, Ishisoft n'est pas en reste.

C'était déjà riche comme ça, mais Ishi nous rajoute encore les fruits, éléments interactifs un peu comparables aux carapaces de koopa, sauf que je n'en ai pas encore vu blesser le personnage. Et pour s'assurer que tout va bien, rien de tel qu'une map-unit-test qui montre en un écran toutes les interactions possibles entre les différents éléments du jeu.

Ishi nous dévoile aussi un truc que je ferais bien de réutiliser dans le développement de Bilou:  l'enregistrement de la trajectoire lors d'une scéance de jeu qui peut servir par la suite à placer des bonus précisément sur la trajectoire proposée au joueur (c'est très KirbyKid-esque, ça ;)

Il est aussi fréquent qu'il teste ses idées de jeu (ennemis, éléments spécifique à un environnement) dans un décor de blocs colorés tout génériques ... le graphisme vient alors plus tard.

Il me reste un gros morceau à lire: le système d'interaction entre les objets.


Object-to-Object collision has been recently revamped in Leilani's engine. In most collision, one object sends several "collision probe", to which the other object replies with either "NONE" or with a custome message indicating how the originator (typically Leilani herself or a rolling baddie) should react.  I think I keep preferring my own approach combining the active/passive roles of Out'm'Up with the CAN_xxx flags of Xargon Engine.

In my engine, I'd have

  • Leilani.walk { test F_COLLECT ; area F_HIT }, 
  • Leilani.roll { test F_COLLECT|F_ROLL } as well as Baddie.roll { test F_ROLL|F_COLLECT }. 
  • Shells would be passive and have only {area F_COLLECT }. Possibly you could need a second flag for F_COLLECT_PUP, so that only Leilani gets flowers. 
  • Spiky.walk would have { test F_HIT; area F_ROLL } : it actively hurts leilani, but may be rolled into.
those "test" and "area" commands may correspond to distinct hit boxes, allowing e.g. spiky to be rolled in the back, but still hurt in the spike.

vendredi, mai 13, 2016

The SP case.

Himmel, I hate those sect cases. If they want to reach enlightenment, I can offer them a small estate where the light on the ceiling never turns off. I got one at the office. But the clue my informant Gilles dropped me leaves no doubt about it. The meditating guru is back, and where he goes, he always leaves a red trail behind.

Of course, he had to be back just we were celebrating the nomination of City's new Release. A promising release in fact. With almost as much guts and balls as I've got guns and bullets. I'm afraid he'll have a though time getting us rid of corruption where he lays. I remember hearing the Chief warning he that he pushed too far. "You are trying to get things too perfect", the Chief said. "But you shouldn't be in such a rush to do it. I'm not sure there is room for so much perfection in our City as it is now."

I'd better be in my bed than chasing the guru's minion in a smelly car. But I can wash my car next week... the City's honour is not likely to wait that long. The younger brother of our fresh Release is already getting media attention, promising to take over the duties of his beloved elder. I knocked Malloc on the door, as usual, but for once he seemed clean. Maybe a bit too clean. I suspect he could have avoided the drama if he felt like moving a mere finger. But you know how Malloc is. Claim that you will do garbage collection to get a clean City, rid of corruption and you know he will stare and wait for you to collect yourself.

I tried to hook on Noda, too. He's been seen on riots against the Devkit's establishment with his anti-ARGV claims, free-EFS for all and so on. He used to hang around on the docks. Looks like he now hangs. Period. The guru again ? Perhaps. But the murderer forgot something behind, this time. There was some pointer showing that Mr. Stack has been breaking away his parole. He shouldn't have moved any further than 16K from his home, in 3e' block of district B, and here he was, at 0xAFFFF58. I'm pretty sure if I get my hands on him, he'll sing.

Either that, or I'll find a place where I could find another bottle.

tout ça pour faire un clin-d'oeil à Gilles pour avoir attiré mon attention sur un couac que j'ai laissé passer. Avec une mémoire de seulement 16Ko pour la pile, y ajouter une copie des 6 maps (un peu moins de 2Ko chacune) destinées à l'écran de statut, c'était une mauvaise idée. Faire une release sans avoir re-testé l'ensemble sur le vrai hardware encore plus. Comme quoi, les jours d'optimisations de la NES ne sont pas encore complètement obsolètes

lundi, mai 09, 2016

Go play SchoolRush!

https://sourceforge.net/projects/dsgametools/files/latest/download?source=navbarI got all those little details fixed now, and at last, I am ready to release an improved version of Bilou: School Rush with the completed bottom screen. It hints you what to do. It reminds you how powerful or weak you are. It makes whatever happens on the top screen easier to decide about.


WARNING : I just (May 10th) spotted a bug when running on the Real Thing.
 A fix is written. It has been uploaded on May 11th. 
Look for SchoolRush-lazy.nds packaged within SchoolRush-cow.zip

School Rush is a speed-driven platformer. The action takes place above the ink. Don't fall. And make sure you don't let the raising it reaching you. If you loved challenge of platformers of the Amiga age, if you're the kind of player that seeks mastery of a game and enjoy to re-play the game to see whether you've progressed, School Rush is made for you
  • use the D-PAD to walk left and right and double-tap the D-PAD to run (better run whenever you can),
  • use A to JUMP and FLOAT.
  • use B to GRAB and THROW.
  • double-tap B when you have the punch power-up to PUNCH freaky supplies.
Oh, and if you're a dad or mum with kids, the 'easy' mode of School Rush is for them: it offers a more free playing mode where ink doesn't move, allowing to toy with the environment and learn how to go through obstacles in a more friendly way.

PS: now all's left for me to develop is the extra 20% : the secret level, endings and power-up shop.


PPS: voilà, Gilles. C'est la release dont je parlais ce matin: Bilou, la balle bleue qui essaie de devenir la plus rapide du monde! Assez rapide en tout cas pour arriver à stopper la montée d'encre qui menace la livrille. Sûrement encore un coup de ces envahisseurs de crayons-soldats. Heureusement, Bilou à plus d'un tour dans son sac!

samedi, mai 07, 2016

The lifemark


Allez, je vais tenter d'enchainer sur l'implémentation de la marque-ta-page-de-vie, parce que tout de suite, c'est moins utile quand l'illustration pour le 'punch' se fait manger à moitié dès qu'on prend un seul coup ^^"

Puis un peu de débugging, parce qu'au retour sur le menu, mon bel écran se fait cacher (pas de tile transparent sur les écrans de menu) ... donc je dois utiliser la version "normale" de desmume pour afficher/masquer les calques en cours de jeu (j'utilise d'habitude desmume-cli, la version sans interface utilisateur)...

Two great news. First, I'm almost done with that new life meter for Bilou: School Rush. The old "black rectangle" display mimick'ing some raising ink really doesn't work anymore with the gameplay hints on the bottom screen.

Second -- that happened as I tried to move a (regular) desmume window: looks like the full-fledged version of desmume (0.9.9) is now featuring a scaling filter that reconstruct curves from pixel images. And it behaves reasonably well with my pixel art.


Et là, surprise: desmume intègre maintenant un système pour agrandir l'image, avec du lissage qui donne plutôt bien dans le monde de Bilou.


jeudi, mai 05, 2016

Its all sketched in the book!

early bugs to be caught.
Don't you dare thinking I'm using the BmxExcuse to pause School Rush development near completion once again. Here's the proof: a few more lines of code (with plenty of hard-coded magic values to bridge with the game logic and assets, I confess) and I get those illustrations on the bottom book updating as Bilou gets and loses power-ups. Even better: as she picks up bladors, the player is hinted that she could throw them at pendats, which is the way to get power-ups. 

Now all I have to do is to switch to that bookmark-health-bar because the raising black rectangle ridiculously obscures now-crucial gameplay feedback.

N'allez pas vous imaginer que j'utilise une autre excuse-de-BMX pour ne pas fignoler School Rush! J'attendais juste un moment un peu plus calme où je ne serais pas occupé à faire des trous dans les murs. C'est tout. Et nous y voilà justement, avec un sympathique changement d'illustrations pour guider le joueur dans son aventure et le renseigner rapidement sur les mouvements possibles.

En direct de Xenial

Voici la relève. Un laptop BMX quad-core avec un Ubuntu Xenial Xerus fraîchement installé (LTS 16.04).

Première bonne nouvelle: il aura suffi d'un apt-get install desmume pour avoir un émulateur capable de faire tourner la dernière version de Bilou. Le support du DLDI a apparemment été bien amélioré puisque je n'ai plus besoin de donner du --gbaslot-rom pour que le jeu fonctionne.

I'm testing a new laptop, thus a new Ubuntu release and ... well ... why not trying out the latest DevkitPro toolchain ? So far, I can easily run homebrews on desmume emulator (easier than with former ubuntu flavours), and it was trivial to install devkitPro on the beast. I'll take some time to discover all the small things I have to fix to bring my code with something compliant with "devkitpro r45". Please allow me to be a bit brief tonight.

Deuxième bonne nouvelle, il suffit de télécharger le devkitArmUpdate.pl depuis devkitpro et d'exécuter perl devkitARMupdate.pl dans le répertoire où il a été téléchargé pour se retrouver avec un kit de développement DS (ou 3DS, ou GBA, etc, d'ailleurs) fonctionnel, capable de recompiler tous les bons vieux exemples -- ce qu'il fait d'ailleurs très bien d'un "make" dans ~/devkitPro/examples/nds.

Premiers bémols: ce laptop a un pavé numérique à la place des touches "home/end/page-up/page-down", je loupe sa touche "CTRL" une fois sur deux (CTRL et Fn sont inversées par rapport au thinkpad que j'avais jusque là), et il lui manque un bouton du milieu pour son touchpad.

Maintenant, le gros morceau: il va falloir s'assurer que le nouveau devkitPro sait toujours compiler Bilou ... ou plus exactement adapter le code de Bilou au nouveau devkit. 
pour libgeds

  • les fonctions de raccourci pour la programmation des modes vidéo sont marquées obsolètes. Il faudra que je trouve ce que le sieur Wintermute et ses accolytes nous proposent à la place.
  • le nouveau compilateur est plus pointilleux sur les types entiers. En particulier, dans le code de lecture des animations AnimEDS.
  • je ne vois plus de diropen ou dirnext que j'utilise dans FileWidgets ... ça, c'est plus problématique. Il faudra que je convertisse le code correspondant vers opendir/readdir. Ça aura aussi des répercussions sur le code de Noda (efs).
  • le nouveau "die.cpp" a besoin d'un en-tête (nds_loader_arm9.h ?) hébergé à l'intérieur de runME, mais runME ne compilera pas sans libgeds. Il faudra y remédier.

pour les tests automatiques:
  • mercurial, linux-libc-dev, vim, libc6-debv-i386, libstdc++-4.9-dev, libx32stdc++-4.9-dev et surtout g++-multilib.
  • les fonctions DMA de la libnds sont désactivées et remplacées par des memcpy, vu que le PC aura un peu du mal à émuler les copies à travers les registres de la DS. Par contre, du coup il me manque des déclarations de registres dans videoGL.h... il faudra que j'aille voir sur mon bon vieux grizZly si j'ai fait des patches sur les headers de la libnds pour que ça passe...

mardi, mai 03, 2016

HUD layers

Cette fois-ci, il faut que j'attaque le gros morceau du livre-interface: les images qui changent au fur et à mesure du ramassage de bonus. Les voilà prêts à être utilisés sur des calques hardware séparés pour qu'on change indépendemment l'illustration de gauche et celle de droite.

N for new tiles in hud-bg-none.spr
I had built complex plans and sketched VRAM usage layout to enable dynamic illustration updates as Bilou gets power-ups. And it all turns needless because they actually fit altogether on the 1024 tiles allowed on a tileset. That's better, because otherwise, enforcing a single palette in all the individual .spr could have proven complex. The only thing that could need a tileset update would be to replace "hud-bg-none" with another background book image, for instance as you collect puzzle pieces that give you gameplay hint (in easy mode only, ideally).

Sauf qu'en fait ce découpage se révèle totalement inutile: l'ensemble des 6 images totalise moins des 1024 tiles autorisés (de justesse) donc elles peuvent être encodées en une seule fois. En fait, elles doivent être encodées simultanément sinon, il va y avoir un problème de palette... Par contre, si je veux remplacer le "livre vide" (hud-bg-none), je devrai veiller à faire plus simple que le texte.

Le changement d'illustration pourra donc se faire simplement en reprogrammant (voire en scrollant vers) le bon morceau de la "map HUD", mais le tileset, lui, pourra rester constant.