Wednesday, May 26, 2021

Je tiens mon "goomba"

J'ai pas mal galéré à trouver un design sympa de "goomba" tout en restant compatible avec l'idée de la Pyramid Zone de Bilou. Par "goobma", j'entends l'ennemi de base, qui avance en marchant, pas trop difficile à éliminer mais qui encourage quand-même à tenter une manoeuvre un peu plus risquée pour en éliminer plusieurs d'un coup (ramasser une carapace de Koopa et leur lancer dessus, par exemple).

Introducing a koopa-like monster in the pyramid is nice, but if there's no incentive to throw koopa-like shell, what's the point ? So I've been looking for a nice design that could play the role of goomba-like monster. Some that could have simple-enough behaviour (just walk), be easily dispatched (stomp by falling) but still hurts so it is worth throwing a shell when there are many at once.

Ce crocodragon, résultat d'une tentative de m'entrainer un peu au dessin de dragons, on peut l'éliminer en lui sautant sur la tête. Le mouvement de base pour Bilou. Oui mais attention quand-même, hein: un saut un peu trop long et vous finiriez sur sa queue pointue où l'atterrissage est tout de même beaucoup moins confortable. Et quand je vois ce long museau bien droit comme un plongeoir, je ne peux pas m'empêcher de trouver un ou deux trucs amusants à rajouter

Granted, 'undead cells' or even 'sandworms' could be dispatched by a shell, but they are a too strong threat. If you have no shell when facing them, you'd better look for an escape route. Even the potential ninja-cats wouldn't work. Not the way I envision them, at least, which would make them too unpredictable, stressing your ability to REACT rather than your ability to PLAN and SYNCHRONIZE.

Mon frangin n'était pas très chaud au début: trois zones de contact différentes pour un ennemi "de base", chacune large d'un Bilou à peine ... Lui verrait bien deux types de crocos (un 'nez court/queue longue' et un 'nez long/queue courte') pour "simplifier". J'ai l'impression que ça devrait passer comme je l'ai prévu, mais on validera ça par un peu de playtesting.

Well, I suppose you have guessed by now: the crocodile-shaped crawler is my new-and-best candidate to play the goomba role. You cannot expect it to jump or climb. You can expect it to hurt with its fang and all, but its head looks like a safe place to land. Actually, I might even use its nose as a trampoline (still to be validated by play-testing). And it is defenseless against spinning shells.

One nice twist, though: with spikes on its tail, it will stress your ability to aim your land a bit more than a level-1 appleman.

Thursday, May 20, 2021

PatchedReader

 ça fait un moment que le projet me trotte en tête. Des années en fait: faire un éditeur de texte pratique pour Nintendo DS. Pas pour écrire une 2eme thèse avec, mais simplement pour pouvoir corriger facilement les scripts quand RunME me râle dessus. Il y a quelques jours, j'ai pris conscience que je n'avais pas nécessairement besoin d'un éditeur de texte complet: un patcheur de ligne pourrait déjà être bien utile. 

Que je m'explique: le ScriptParser lit notre texte ligne par ligne et lance une exception quand la ligne ne lui plaît pas. Actuellement, je dois alors sortir mon laptop, avoir le même fichier .cmd, trouver la ligne défectueuse, écrire une version corrigée et la ré-uploader sur la DS pour faire un deuxième test.

I had the idea of making a convenient text editor for Nintendo DS trying to find its way out of my head for some years. Not something you'd use to write a novel, but at least to patch game scripts when RunME spots something wrong instead of having to do WiFi transfers back and forth until things are fixed. But a few days ago, I realised maybe a full editor wasn't needed : what I actually need (since my parser processes things line-by-line) is a way to *patch* those lines if they're wrong.

Bon, pendant mes tests, je me suis mis en place un runME-autorun.nds qui permet de répéter les choses sur ordi à moindres frais, mais pour peu que ce soit les nouvelles animations ou qqch comme ça qui coince, je suis bon pour re-télécharger des .maps et autres .sprs avant de commencer à étudier le problème.

Donc, et si au lieu d'interrompre violemment l'évaluation du script, on basculait de la CmdWindow (qui exécute le script) à la PatchWindow, qui nous remontre la ligne ayant posé problème, nous permet de l'éditer et éventuellement de retourner dans CmdWindow ?

I gave myself a 'runme-autorun.nds' derivative of the real 'runme' that can start tests faster, but as soon as issues are with poorly defined animations or specific to the data files hosted on the NDS, the need will be back.

The idea would be to switch to the edition window as soon as the parser fails (instead of killing the whole level). With help from a new sub-class of InputReader, I should be able to serve the patched line of text instead of the original one.

Rather than trying to insert new lines into a single-block of memory, PatchedReader would maintain a patches lists, each replacement lines associated with their position in the file and either serves lines from the original source or from one patch line, depending on where we are.

Pour permettre ça, on introduirait une classe dérivant de InputReader qui suivrait la ligne en cours et la remplacerait par une chaîne présente dans sa liste de patch si on a effectué une édition. On aurait la fonction nécessaire sans devoir s'embarasser à scroller dans un fichier potentiellement longuet, avec un besoin réduit de fonctions de recherches, et une gestion de la mémoire simplifiée par le fait qu'on a jamais besoin d'insérer des caractères au milieu d'un bloc-mémoire existant...

C'est plus ou moins là que j'ai laissé le développement NDS avant de me faire ré-avaler par le royaume d'Hyrule.

Evidemment, si je veux que ça donne un jour quelque-chose, il faudra que j'accepte de ne pas utiliser tout de suite le système de reconnaissance d'écrite manuscrite, mais plutôt de partir vers un clavier virtuel un peu dans la veine de celui envisagé pour l'éditeur d'expressions à l'intérieur de LEDS.

edit July '21 ... get a first draft with better error reporting including word wrapping ... that almost works.


#OneTagPerWeek

ça n'existait pas encore, donc je le prends pour moi, en espérant que prochainement, d'autres feront la même chose. Je fais le tour de mon blog, un tag par semaine, pour les followers twitters qui sont arrivés après SchoolRush et qui n'ont pas le background qu'un CJ, un Gilles ou un Cyril aurait (voire un Piek, s'il est toujours sur Internet de temps en temps).

--3D 26/2
Adventure 12/3
Allocation 19/3
Amiga 26/3
Badman 1/4
C64 9/4
Dev-fr 16/4
Evolution 23/4
Fail 29/4
Gadgets 7/5
Homebrew 11/5
iGobController 19/5
Jkeen 27/5
Let's try 3/6
Mario 10/6
NewCollide 16/6
OAM 25/6
Palette 2/7
QR4 9/7
Scripts 15/7
Testpoints 6/8UGM 14/8Video 19/8
Walk 26/8
XYZ?

Bon, vous l'aurez noté, assez rapidement je suis passé d'une énumération systématique de mon tag cloud à "on prend un tag par lettre, on fera une deuxième passe si nécessaire" (parce que bon, les posts "Androïd" juste après "Amiga", ça allait finir par être long), puis "on est pas obligé de prendre le premier tag de la lettre de la semaine" en arrivant à dev-fr (parce que Rick Dangerous juste après C64, ça faisait aussi redite). 

Et pas d'inquiétudes, vous les fidèles du RSS: vous y gagnez aussi. Parce qu'à chaque fois, je fais le tour des posts, je traduis (souvent vers l'Anglais pour l'instant, mais les francophones auront leur revanche au bout de 6 mois avec le #TagDeLaSemaine), je vérifie les liens, je répare les images cassées à coup d'archive.org quand c'est possible, etc.

(et bon, oui, entre ce petit jeu et Breath of the Wild, ça ne biloute plus beaucoup)