Thursday, March 11, 2021

Mar10, Mar11, ...

C'était l'anniversaire de sortie de la Nintendo DS. (Le lendemain du Mar10, c'est un peu dommage, mais c'est comme ça). C'est maintenant une grande fille de 16 ans. En comparaison, quand JB me lançait "toi, ton hobby, c'est les consoles vintages" en 2010, c'était la PSX, et le jeu qui venait de sortir, c'était Donkey Kong Returns. Donc, euh ... bin, ouais, je crois qu'aujourd'hui, on peut définitivement dire que je suis dans les consoles vintages. C'est juste que j'y étais 10 avant que ça ne soit vintage ^^"

Pas étonnant, donc à ce que RetroEvents ait lancé un mini-sondage sur twitter... Sondage qui fait d'ailleurs écho à la question de Smooth Mc Groove sur le même thème.

ça n'aura pas été facile, par contre, de dire quels étaient les jeux DS que j'ai le plus appréciés. C'est la combinaison Yoshi's Island + nouveau Zelda + new Super Mario Bros qui m'a décidé à m'offrir la bête, mais en toute franchise,

  • j'ai regretté l'absence de Yoshi et de a plume dans NSMB tout en étant pas complètement convaincu par le mélange 2D/3D. Il n'aura pas pu détroner SMW (pourtant trop dûr pour moi) comme Mario le plus plaisant à reprendre.
  • j'ai apprécié le pixel art de Yoshi's Island DS mais la mise en scène était fatiguante et je n'ai jamais remis le couvert une fois mon niveau d'incompétence atteint. Aujourd'hui, je lui préfère son original.
  • j'ai été conquis par le level design du roi des mers, mais vraiment pas par le minimalisme de Phantom hourglass imposé par la contrainte des 2048 polygones. Par contre la DS m'a permis de jouer 'pour de vrai' à Minish Cap et je l'en remercie ^_^
  • La saga Mario & Luigi m'a bien plu aussi, mais soyons honnêtes: le look des adversaires de "Partners in Time" était loin d'être aussi chouette que "Superstars Saga" que je lui préfère
  • Kirby Squeak Squads était sympa, mais loin derrière Amazing Mirror dans mon estime.
  • Le nombre d'heures passées sur le homebrew de Giana Sisters explose largement celui sur le nouvel épisode.

Bref, vous l'aurez compris (ou vous vous en souveniez), les jeux exclu-DS qui m'ont conquis étaient plutôt rares. Il aura fallu attendre Shantae sur DSi pour que je m'enthousiasme vraiment. Enfin, il y a quand-même eu Professor Layton et Maestro: Jump in Music. Super PRincess PEach m'avait bien plû aussi, mais pas au point de me faire revenir une fois l'aventure explorée.

Wednesday, March 10, 2021

Oneliner to convert them all



fe -nx *.spr "perl ~/DS/SpriteEditor/bin/spr2png.pl %.spr ~/hobby/dspr/demo-%.blk.png --maxheight=256"
fe -nx *.spr "perl ~/DS/SpriteEditor/bin/spr2png.pl 
        %.spr ~/hobby/dspr/demo-%.spr.png
        --extra --maxheight=256"
Another oneliner to gather them all, and in HTML bind them...
(echo '<html><body>' ; 
   fe *.png "echo '<div style=@display: inline-block;
     background: grey; text-align: center;@>
     <img src=@%@ title=@%@ style=@display: block;@>
     <small>%</small></div>'" ;
   echo '</body></html>') 
   |  sed -e "s/@/'/g" > test.html

Why ? Because I need to know which are okay, which need to be recovered and which need post-processing.

And then I realize that I cannot 'compact' the alternate spritesets (draft and animations), and one possible explanation for that is that the 'free tiles' information for that pool is incoherent. Maybe my `sprck` tool could fix that, but to be honest, its output is so cryptic that I might need to run it in DDD to figure out. 

  • horizontal vertical tripes mean there's no pages using the block
  • vertical horizontal stripes mean there's a FREE entry for the block.
  • why is there so many FREE slots indicating that tile#0 is free ? (there's sprck_cleanup() to address that).
  • even after it 'repaired' the file, I seem to still have the same 
  • [done] fix spr2png --cleanup so that it works properly with --extra=1 and --extra=2.
  • [dont] ensure sprck is capable of dropping FREE entries when a block is used on a page. instead, we have to mark them free
  • [okay] ensure sprck can add FREE entries when no page is using a block - that's automatic in -repair mode.
  • [done] have fe and color.pl and whereami hosted in DS/bin (or DS/tools/ or wherever it fits) on Codeberg

Tuesday, March 09, 2021

SchoolRush, Armitage et 42

Si vous avez envie d'en prendre plein les yeux, passez donc faire un tour sur le site web d'Armitage, le dévelopeur belge de Métagolf... et qui me signalait sur twitter qu'en restaurant sa Nintendo DS, il a retrouvé une version de SchoolRush sur son linker AceKard ^_^

Alors en attendant que Outcast II sorte, je vous reposte sa photo. (ah oui, à l'époque, je n'avais pas eu l'occasion d'essayer Outcast mais j'étais tout à fait fan de l'idée d'utiliser des techniques de démoscèneur pour faire le rendu de la planète plutôt que de tout miser sur des gros polygones tout moches comme dans Tomb Raider ... Et j'avais la ferme intention de postuler chez eux une fois mes études d'informatique terminées si personne ne voulait me financer le développement de Clicker)


Sunday, March 07, 2021

Fezzy platforms

 Vous vous souvenez que j'avais joué à FEZ, hein ? Et pendant ce temps-là j'essayais aussi de voir si je trouvais des idées intéressantes pour Bilou, bien-sûr. Comme cette plate-forme qui fonctionne par paires, et qui se transforme en écrabouilleur sous certaines perspectives ou comme plate-forme inerte sous d'autres.

Bien chouette, mais comme Bilou ne peut pas changer la perspective, ça reste moyennement intéressant. (edit: à moins que ...) 

La deuxième (oui, je les fais dans le désordre par rapport à mes notes sur Boox) est déjà nettement plus exploitable.

C'est une sorte de mélange entre une plate-forme dont la taille varie au cours du temps (cf. SMW / Yoshi Island 3), mais avec en plus un effet 'répulsif' si on anticipe pas le moment où elle pivote. Et une phase où le saut de l'une à l'autre sera légèrement plus difficile vu que la hauteur augmente de 1 bloc.

Je trouvais que dans le thème de la pyramide, elle se serait assez bien déguisée en tête de crocodile. ça tombait assez bien: j'ai envie d'utiliser l'excuse de la pyramide pour introduire plus de plate-formes mobiles (sans avoir besoin de leur coller des ailes ou des réacteurs) et je n'ai toujours rien de crocodilien pour ma pyramide.

Mais pour en faire quelque chose de plus 'unique', je combinerais bien ça avec les plate-formes à dos pointu de Shantae. Sauf que comme Bilou ne sait pas souvent 'taper' dans quelque-chose, je pourrais utiliser un mécanisme "coup-d'boule" pour faire pivoter les plate-formes de 90° quand elles sont orientées "gueule en l'air".

ça pourrait être un défaut, mais en fait ça s'est avéré très inspirant. "et si les plate-formes étaient inter-connectées de sorte qu'en en cognant une, on en fait bouger plusieurs". "Et s'il y avait un 'pieu' dans le chemin de la plate-forme qui l'obligerait à faire 90° en plus si elle est dans le bon sens". "Et s'il y avait un switch pour faire apparaître/disparaître les pieux pendant que les plate-formes bougent" ... vous voyez le tableau ;)

edit: une variante qui fait un quart de tour quand on la quitte avec un saut (surtout pour le 'chemin des papas' à la demande de J.L.N qui vient de peiner sur qqch du genre dans Gris) et la possibilité d'attraper les montants verticaux avec le poing-lasso pour by-passer les challenges quand on a un power-up.

edit++: J'avais apparemment déjà fait une mise en image de plate-formes-croco basées sur les plate-formes de FeZ, mais avec une traduction plus litérale (et à mon avis moins convaincante)

Thursday, February 25, 2021

spr.more et sprdo

J'avais prévu de commencer par "Bon, ça commence à prendre forme", mais le temps que me mette à blogger, j'ai presque fini. L'idée est donc de montrer qu'il est possible de charger les sprites d'un jeu GEDS en deux fois, avec un morceau pour le personnage principal et un morceau pour les monstres, par exemple, histoire de pouvoir avoir des monstres liés à l'environnement traversé par notre personnage (comme dans quasiment tous les jeux assez longs).

Si je dis "les monstres" et pas "les blocs", c'est que dans leur cas, le fichier .spr contient aussi les animations, et que ces animations font directement référence à des numéros de page. Charger en deux fois, ça voudra donc aussi dire modifier à la volée les animations pour s'adapter aux nouveaux numéros de pages. C'est codé, mais pour le tester, il me faut des fichiers à fusionner. Or jusqu'ici, je n'ai pas énormément de fichiers .spr avec des animations. J'ai l'école, le personnage-easter-egg de la présentation de AnimEDS, peut-être un 'papa Noël' quelque part (mais où?) et peut-être un badman (mais où??).

Bref, j'ai fini par me dire que le plus direct, c'était sans doute de couper bilou+école.spr en deux fichiers bilou.spr et école.spr pour montrer qu'on pouvait les recombiner ensuite. Pour ça, ça m'a semblé utile de revenir sur un de mes outils de hacking de fichiers .spr: sprdo. Il s'agit d'un programme linux tournant en ligne de commande et qui utilise le même modèle de manipulation des .spr que le Sprite Editor lui-même. (mon collègue parlerait-il de code métier?). 

Un argument Lfilename.spr, et voici un fichier chargé. Un deuxième argument pk6, et on fait comme si on effaçait la page n°6. un p? et on voit des informations sur chaque page présente dans le fichier en mémoire. C'est un peu primitif, mais ça fait l'affaire.

Il fallait donc y ajouter une commande "montrer l'animation unetelle" puis faire en sorte que "supprimer la page unetelle" supprime aussi automatiquement les animations qui y font référence.

ça n'a pas été sans mal, mais j'y suis presque (reste à "nettoyer" les fichiers .spr de tous ces sprites qui n'ont plus de raison d'être, histoire de ne pas dépasser les 64K au moment de fusionner les deux. (normalement, j'ai déjà du code pour ça)

edit: on y était presque. Inkjet et les power-ups se sont chargés correctement. une partie de Bilou.cmd ausi, puis on arrive à une animation située sur la "deuxième page" d'animations avec Bilou (0311) et là bardaf: il n'y a plus personne. En compactant le spriteset les doigts dans le nez, sprdo m'a visiblement perdu certaines animations (la plus haute étant la n° 107 alors qu'il faudrait que j'aille jusqu'à la 129)

  • [done] use the right anim (the one using the right page) for the waves
  • [done] apply waves animation from the proper page (that also fix blinking of Bilou's limbs)
  • [done] pendat and blador use proper shared limbs page
  • [done] understand why the heal pick-up is gone
  • [done] proper animation when we pick up a bonus
  • [done] proper animation when we bounce on an eraser.



Thursday, February 18, 2021

github discussions / show-and-tell

 Je suis forcé de l'admettre: les discussions github, ça a de la gueule. On est vraiment très proche de ce que j'imagine comme idéal de présentation pour parler de développement. Mieux que mes tentatives de 'litterate programming', sans doute. Mieux en tout cas que le fait de devoir les accompagner d'un post sur un forum. Et mieux que ce blog (avec sa balise '<code>' et les liens vers les commits subversion / mercurial)

Si j'avais commencé avec github, avant que Microsoft (1,2,3) ne rachète tout je prendrais mon pied. Mais github est arrivé 2 ans derrière le blog, et mes tentatives d'utilisations de git n'ont pas franchement été très encourageantes. Ce n'est qu'en 2015 que j'ai délaissé SVN pour passer à Mercurial, poussé par les collègues au bureau. (Ouais, je suis pas franchement un 'early adopter' sauf quand je veux).

Il est probable que le fait de passer à github ne provoquerait pas franchement un afflux de collaborateurs ou d'enthousiastes: le ndsdev est devenu franchement anectdotique et le concept de 'faire des sprites dans le bus' risque de ne plus tenter grand-monde.

Il est probable que Microsoft ne fera rien de mal à tous les repos github, mais après l'abandon de Google Code, je ne suis pas trop tenté. Je préfère être hébergé par une organisation clairement dédiée à l'hébergement des projets open source (sourceforge) même si leur site web manque de réactivité.

Et puis malheureusement mon Boox ne sait toujours pas lire les certificats github. Bon, c'est plus un problème chez Boox que chez github, je le reconnais.

Plus important: qu'est-ce que je ferais de toute la partie "analyse de game design" ? Non, définitivement, ce n'est pas un candidat pour remplacer le blog. Par contre, le blog n'est pas le bon moyen de fournir de la documentation sur les outils, donc sans doute que les pages "manuel de l'utilisateur" seraient les bienvenues sur un github.

Monday, February 15, 2021

Your First Koopa ...

As I was enjoying my free week of Super Mario on Switch, I found it interesting to compare how we are introduced to Koopa Troopa mechanics in Super Mario episodes. Because, yeah, I'm fond of Koopas mechanics. 


Koopas are dangerous, but you can turn them back at their allies (same for dumbladors, you'd say). And you can dispatch many of them at once that way (unlike dumbladors) if you follow it closely enough. But then it can trick you if it bounces on a wall.

In SMB1, you're welcome to kick in and dispatch 2 goombas, then another 4 if you're running after the shell, but then it will bounce back at you. To some extent, your first experience with Koopa Troopa is the full experience. Dangerous/helpful/treacherous. You're warned: this is what the game has for you.

You'll have to clear about one half of that level before you can see your first koopa, though. And you can easily miss the only one of the level if you take the secret pipe.

SMB3 comes with something new for you. Koopas shells can now be used to unlock contents of question blocks that lay on the ground. This can be discovered from the very second screen of the first level!
 
Note how you can decide not to face it by sneaking under the green block or escalading the pink and white blocks to easily jump past it. Note, too, how the shell bounce on the question block may be harmless as it will be cleared out through that 'under green block' route, optionally dispatching a goomba. (That might possibly be a bit too much complexity packed into one first screen, but it surely offers you plenty of alternatives and replay value).
 

Weird enough, the first koopa in SMW is not in its shell. It falls towards you at the very start of the level, giving you only a few seconds to find the JUMP button. Its shell awaits you nearly half a level away, ready to let you discover you can kick things upwards. 

But we all know the real first level in SMW is Yoshi Island 2, where plenty of koopas await you, harmless unless you decide to face them, and a free shell ready to line them up for a free 1UP

When you do so, there is high chance that the shell will eventually slip past the edge of the screen and be discarded by the game engine. You're safe. pfewh. You'd have to race the shell for more than half a level before it eventually bounces on a solid stairs-like structure.

This, my friends, is the price to pay to have a 'first' level where you have no risk of falling into a pit before 3/4th of the level.