Sunday, December 16, 2018

One last fix.

I'm pretty pleased to hear my 5-year old asking me to play School Rush. But for some reason, j.l.n has a fascination about power. And in School Rush, he wants to get the power-ups. He knows the pendats hold them and so he wants the pendats down.

remember your first pendat ?
But the thing is, the first encounter was designed to let the player easily avoid the pen, not to easily dispatch it. So he tries, again and again, asking for help when he's out of bladors (amno) because he's so scared to get down in the pencil' lair, grabbing them back. He's wishing so hard that you could throw a sponge at the pencil instead, wich would turn its harmful spike into a friendly moving platform (yeah, he's been watching me playing some Rayman, too).

I'm not going to grant that wish, partly because that could affect the gameplay balance too deeply, and partly because doing that himself could be a powerful motivation to learn letters, words and numbers...
But there is one more thing, something I can -- and did change : fixing a collision bug with the pendat. See, every time J.l.n makes a successful throw, the game never triggers the collision. He always manages to throw the blador at the exact time where the pendat bounces back and before it turns back. And during those few frames, the pendat is unfortunately unvulnerable in "aftermaths" version.
This is clearly a bug, an easy to fix one, and I'm quite surprised that it never annoyed anyone else so far. Anyway, that makes one more release to make one little kid's life easier.

Thursday, December 06, 2018

16 couleurs.

Bon, c'est un peu inévitable: à présenter Bilou sur un forum de dévelopeurs NES arrive la question des "demakes" sur GBA, SNES et autres MegaDrive. J'avais déjà un peu regardé ce que ça pourrait donner suite à un commentaire de MonsieurL sur UltimateConsole, mais ni la SNES ni la MegaDrive n'est vraiment convaincante. Pourtant, il y a déjà des bibliothèques pour les aspects bas-niveau qui auraient pu être intéressantes.

Pour commencer, la MegaDrive n'a que 4 palettes de 15 couleurs, décors et  sprites inclus. Ici, dans Bilou, j'ai travaillé avec 8 palettes de 256 couleurs. Bon, on est bien d'accord, je n'utilise pas l'entièreté des possiblités, mais j'ai quand même au moins 6 couleurs de pieds (2 pour Bilou, 2 pour les Pendats et 2 pour les Dumbladors), 4 couleurs de mains, plus des livres et des fardes qui font pas mal dans le color swap. Bref, il faudrait presque considérer une réduction à 60 couleurs fixes. Il y a bien quelques palettes sympa dans ces eaux-là, ce n'est quand même pas top-sexy, comme résultat.

La SuperNES, de son côté a quand-même droit à 8 palettes de 15 couleurs pour les sprites et 8 autres pour le décor. On est déjà nettement plus à l'aise. Jusqu'à 1024 tiles par plan de décor et 512 pour les sprites (moitié moins que sur DS. On ne s'en sortira pas sans une technique façon Zmiro ou Perry) pour un total de 64KB de mémoire vidéo ... presque 10 fois moins que sur la DS. Il faudra aussi compter avec un maximum de 34 sprites 8x8 par scanline (or je fais pas mal de recouvrement) mais bon, c'est pas un bullet hell non plus. Lors des tests automatiques, j'ai au plus 70 objets actifs (pas forcément tous visibles) en même temps.

Un autre élément à prendre en compte, c'est que sur la planète PAL, la gravité est 224/192 fois plus forte que sur la planète DS. tout y est donc un peu plus tassé. Ce n'est pas vraiment un problème pour les indigènes, mais Bilou a tendance à se tasser, ce qui nuit à son charisme. J'utiliserais probablement les lignes de pixels transparents (le corps de Bilou fait plutôt 16x13  pixels au sol et 16x14 en chute libre)

Il y a donc 32 lignes inutilisées (en noir sur l'image) que je pourrais exploiter pour insérer un HUD, vu qu'on perd l'écran du bas.

Bref, Piet, si ça t'inspire, il faudrait que la musique tienne en 64K (disons 48K pour les samples, 16 pour les patterns et le player) et n'utilise que 8 pistes au maximum.

Et pour rire, avec une seule palette de 16 couleurs, on arrive à  ... quelque chose de pas complètement moche, mais quand même fort loin de l'original (bon, c'est de la conversion automatique, évidemment).

Par contre, le homebrew sur GBA serait légal dans certains pays où le homebrew NDS est frappé d'interdiction ... ça mérite qu'on y réfléchisse ...

edit : bon, j'ai pas pu m'empêcher de faire un gros montage de plein de screenshots de SchoolRush, de retirer tous les sprites et de faire "conversion en mode indexé" pour voir où on en est (avec les différentes variantes de teintes pour les livres, le sol, etc). Bin ça fait 190 couleurs en tout. Alors que la SuperNES n'en a que 120 à me proposer ... sur GBA, par contre, ça passerait sans soucis.

 edit again: oui, mais une SuperNES, ça sort un signal analogique. Et sur un signal analogique, le dithering passe beaucoup mieux que sur écran LCD. Je peux donc avoir une variante du contenu qui passera pas trop mal (moyennant quelques retouches sur les crayons qui peuvent se passer des petits pixels isolés et prendre une teinte légèrement différente de celle utilisée sur DS ... ce genre de choses).

A suivre, donc, finalement. Mais attention: la SuperNES n'a au mieux que 3 plans et ne pourra pas faire les vagues avec des sprites parce qu'elle n'autorise au mieux que 34 sprites de 8x8 sur une ligne horizontale, l'image en faisant 32 de large.

Saturday, December 01, 2018

School Zone: aftermaths

Five year ago, I released a single-level "anniversary" game featuring Bilou in a school zone settings. A bit later, in early November, I had the opportunity to have it play-tested by my nephews, who were 7 to 13 years old by then. From there difficulties to approach the game, I added one "preliminary" level that is now level 1 in school Rush.

Voici 5 ans, je vous faisais un jeu-anniversaire avec Bilou dans la zone de l'école. Quelques semaines plus tard, en septembre, mes p'tits n'veux me faisaient me rendre compte qu'il me fallait quelque-chose d'autre comme niveau pour introduire les mécaniques du jeu. Ce niveau non-tutoriel est depuis devenu le premier niveau de School Rush.

So yeah, the 5 levels I'm releasing today for Bilou's 25th  anniversary took me long time to make. And it doesn't even feature the level that started it all. Because meanwhile, I grew interest in speedruns, and I wanted the game to focus on going as fast as we could and save the books. Things with a focus on wandering, discovering, solving or exploring will happen in another small game.

I'm proud I could get feedback from several professionals with the 2016 release. I hope the game is better now. May there be many of you finding it, may you have a fun time playing it. This is my gift to whoever makes free software, free music, or free videos. Thank you all for making coding possible/enjoyable


The engine code is LGPL, the tools 'used to make it (animations and level editors) are GPL, the art and level design remain my copyrights, but they are free to play, and free to share unmodified as part as this School Rush release.

Aujourd'hui, le développement de School Rush prend fin. Ce fut long, parfois fastidieux, mais je voulais l'amener jusqu'au bout. Comme dans tout jeu, il y a des choses qui ont été abandonnées en cours de route. Soit qu'elles ne convenaient pas, soit qu'elles m'écartaient du but premier du jeu... soit qu'elles promettaient de devenir un gouffre de développement rendant irréaliste toute sortie tant que je serais en solo sur le développement. Que ce jeu soit mon cadeau à tous ceux qui ont écrit du code free software que j'utilise tous les jours, les musiques que j'écoute en codant, les vidéos sympa qui m'ont donné envie de continuer. Merci à tous pour votre travail.

I'll just update November post with the link to December contents, if you don't mind. How-to-play etc. is there. If you're looking for a changes list, it's been posted already ;)

History tracked on playeradvance, tigsource, homebrewlegends

Sunday, November 18, 2018

Finishing School Rush ...

Bon, après une série de pépins sur la voiture, c'est visiblement à la maison d'y aller avec ses revendications d'entretiens. Le lave-vaisselle, l'aspirateur, même le porte-manteaux. On se croirait dans l'intro d'une video de la développeuse du dimanche!
Avec tout ça, j'ai un peu du mal à me souvenir en fin de journée si j'ai des choses en attente pour finir school Rush ou non. Donc, retour de la todo-list.

  • [done] provide a TypeName widget that do not require users training
  • [done] only let the players enter their name when they beat some high score.
  • [unneeded, but done anyway] sleepy eraser
  • [done] preload "forever heroes" with SD card file
  • [done] do something useful with the pointing hand.
  • [done] Save new scores [on demand].
These are the things that are still pending to get the final build of School Rush, iirc. I've started converting some 'todo' items into 'newfeatures' (to be addressed out of the 'finish that game' track) because the 'todo' tag was starting to be quite unhelpful.
on the other hand, maybe it isn't that wise to think about starting to edit code on evenings where I feel too tired to remember what are the things that still need my attention before the final School Rush release...

Saturday, November 17, 2018

They won't show up in School Rush (?)

a few post-mortem sketches of ideas for the good-ending of Bilou: School Rush that didn't make it to the game.

since early in the redesign of the game on NDS, I tried to work with the idea that most foes we encounter while playing a Bilou game are not really evil, although they can be quite dangerous.
I hope I made it clear enough with the ink.jets who are trying to defend their realm against a pendats invasion but may occasionally help Bilou.

The comic shows the bopping erasers speechless quick to anger when disturbed during nap time. The theory in School Rush was that the sudden ink rise made them very nervous. The secret ending should have shown them relaxed again, being taught that pendats are dangerous, but that they should behave friendly with Bilou.
Unlike bladors, erasers aren't speechless, although I'm not sure I've ever published any of my sketches about the "erasers bridge", and you'll have to dig deep into this blog to see some evidence that they can speak (or trust the picture shown just nearby).

All my attemps so fan to draw those erasers as pixel art were unsatisfying once I reached the "animate them" step. But I was trying to just reuse the sprites from "normal" erasers, with some overlaid sleepy eyes or snoring mouth. I was about to just write "I'll just use regular eraser instead" burl had my DS in my pocket, so I tried another approach.

First I used a draft 32x32 blocks page to draw a few keyframes for a sleeping eraser. I used SEDS limited animation features to check it was fun and only then I split them into 16x16 blocks for AnimEDS. This way i keep only 2 sprites for the animation, but I can do squashes, stretches and wobbles to make the animation look smoother.

Friday, November 16, 2018

rez x-factor 2

Let this be my official "I love (idea I have of) the demoscene" post. (better late than sorry)

back in '96, demoscener REZ wrote a stunning .mod track featuring about 1'30" of chiptune within 3x64 lines of 5
-track (amiga-compatible?) patterns ... He did so by pushing the use of loop commands to an extreme. I love that spirit of taking something that was meant to work within some constraints and pushing it far out of its limits.

He also used very pleasing waveforms (reminding me of Namco's wavetables), of 16 to 64 bytes plus a few larger (300 and 700 bytes) drums. The result is a stunning 8.8K chiptune. Of course, by now, we have 4K compos with songs twice the lenght, but REZ did it without requiring a custom player. Chapeau.

Sunday, November 11, 2018

B-trees

i was thinking a bit more about my handscript recognition system for the NDS this week-end, and i figured out that the sorting techique might not need to be as complex as I initially thought.

The plan is to support the 128 characters of the ASCII charset. There should be a way to define multiple models for the same character — e.g. you might have the ‘d’ character done in either 1 or 2 strokes — but I doubt I would ever need much more than 4 model of each one. That means at most 1K models to sort.

In my technique they can all be indexed with a 16-bit code, but even then storing 64 K pointers would be overkill. I had plans for techniques that find the most discriminating bit(s) for a subset of the models an make an optimal radix tree, but then I realised that with only 1K entries, it might even not be required: a simple B-tree structure would index all the keys with just 64 index blocks of 16 pointers each, plus 4 super_index blocks and one top-level index. This is a perfectly sustainable amount of overhead. Plus I already have a B-tree implementation from my Clicker32 operating system project. . .