Saturday, January 04, 2025

Et bash!

Et bang! Petite scéance de gamedev avec mon fiston ce soir, pendant que nos dames nous ont laissé la maison pour nous tous seuls ... je venais de terminer d'ajuster le déplacement de Bangbash, il avait envie de pouvoir *interagir* avec Bangbash. J'avais déjà des animations esquissées, le temps de produire l'animation, d'ajuster les coordonnées des boîtes de collisions et de transférer tout ça... il a un peu d'expérience en Scratch et je venais de lui proposer de jeter un oeil à mon agenda/journal/42 pour voir un peu ce qu'il comprenait du GobScript (pas si simple) et de lui expliquer un peu à quoi tout ça servait...

There. Now bangbash is bashing too ... That was a "requirement" from my son, and tonight was dad-and-son evening, so after suggesting he could read the 'gobscript' entries of my notebook (bujo?), after cleaning up animations with AnimEDS and my Nintendo DS (and telling him that, yes, those are programs I wrote myself too, and no, that Nintendo DS is not modified in any way, only the game cartridge it uses is special), came the time to put that together on the PC.

Bon, il est resté plutôt sagement sur la chaise à côté de moi tandis que j'ajoutais un état $BASH ici, puis une zone de collision pour que l'état assomme Bilou, puis que je rallonge l'animation "assommé" le temps que Bangbash fasse demi-tour (histoire d'éviter le pilonnage systématique), etc. jusqu'à réactiver un dumblador dans le niveau démo et qu'on puisse se débarasser de bangbash en lui lançant le taille-crayon.

Il me restera à rendre bangbash solide et faire en sorte qu'il blesse Bilou pendant son saut dans les 2 sens et puis finaliser les graphismes de l'attaque et de Bilou assommé...

(petit moment de fierté au passage quand mon fiston réalise que les outils qui me permettent d'éditer les animations sur la nintendo DS, c'est aussi moi qui les ai programmés ^^)

He has been pretty attentive and quiet while we were going through the steps of 'animation plays, but nothing happens' and 'will you stop bashing, now ?' ... and of course he then asked for the ability to dispatch bangbash with a blador, which wasn't too tricky to do either. Bed time, son: making sure we cannot simply zoom in front of Bangbash will be for another evening ;)

PicoDriller fait des vagues.

 

A côté de ses productions principales (lunark, castaway), Johan Vinet nous a aussi proposé un petit fangame sur pico8 d'un jeu où il faut creuser plus vite que son ombre, sorte de croisement entre Tetris et Boulder Dash.

Je dit "petit", mais la qualité du gameplay et de l'habillage est tout à fait remarquable. C'eut été un homebrew sur NintendoDS, vous pouvez être certains que je serais resté scotché dessus!

Mais ce qui m'a frappé au point de le reprendre dans ma récapitulation de 2023, c'est la vague géante de l'écran titre. Monochrome, avec au plus un creux à l'écran, elle est tout à fait dans les contraintes techniques de la SNES: on coderait alors les vagues en reprogrammant les "window" à grand coup de HDMA, et ça débloquerait le principal frein à une adaptation de SchoolRush sur la reine des 16 bit ... 

Alors autant vous dire qu'à plusieurs reprises au cours de 2024, je me suis posé la question "mais comment savoir quelles valeurs donner, ligne par ligne, à Wstart et Wend pour qu'ils définissent la zone sous une sinusoïde ? et comment coder ça efficacement ? Et est-ce que ça tiendrait dans le budget CPU d'une frame SNES ?"

Et pour bien commencer 2025, je me suis dit "eh, mais si on partait du sommet de la vague et qu'on suivait la pente pour élargir la zone noire masquant l'image ?  Après tout, la dérivée de sinus, c'est le cosinus et le cosinus, c'est le sinus déphasé d'un quart de tour !

Jayenkai (platdude, blockman et tant d'autres) trouvait que ça faisait trop de calculs pour une snes et m'a aiguillé vers un basic-en-ligne pour m'illustrer une approximation quadratique très 6502 ... 

C'était juste ce qu'il me fallait pour tester rapidement le bidule, donc j'ai recodé la génération de la table de lookup (grandement simplifiée par la présence de cos() et arcsin() dans le basic) puis la 'simple' accélération/décélaration de la descente par accumulation, un accès à la lookup table par ligne

Bin je dois dire que ça donne plutôt bien ^_^

Bon, ce qui fait tout le sel de l'effet de pico driller, c'est avant tout la variation d'amplitude appliquée sur la sinusoïde, qui va jusqu'à en inverser la polarité. Le fait d'avoir doublé l'effet avec une "ombre" est très stylé, mais incompatible avec le hardware SNES que j'envisage de piloter. 

Il me semble aussi que le "niveau 0" monte et descend légèrement au fil du temps suivant une autre sinusoïde. Ce qui serait stylé, ce serait qu'il suive en réalité une sinusoïde de très basse fréquence (moins de 45° par écran), mais ça nécessiterait pas mal de calculs en plus ... pas sûr que je puisse me le permettre ici ...