Thursday, January 14, 2021

Flexible!

I remember how adding bounciness to the erasers bumpers felt and how I immediately wanted to have some erasers all over the games to be bouncing as much as I could. So wouldn't it be a shame if the branches of the Green Zone were all static platforms while they could be slightly bouncing you higher instead?

Les gommes qui rebondissent, c'était bien gai. Surtout quand elles se sont mises à bouger en réagissant à notre présence, au point que j'avais envie d'en rajouter partout dans le jeu. Du coup, en repassant sur le level design de la green zone, je me suis dit que ce serait dommage que les branches des arbres restent raides comme des piquets alors qu'elles aussi pourraient nous propulser dans les hauteurs. Oh je ne parle pas d'un bumper à la Sonic, mais si ça pouvait nous faire monter déjà de 1.5 blocs de plus que le saut standard (3.5 blocs), ce serait chouettos.

 Note that I don't meant to change them into Sonic-like bumpers. I said "slightly higher", like your jump would be 5 blocks high rather than 3.5, but still high enough to make the trip fun, and the top of the trees higher to reach without cluttering the screen with leaves.

I don't know yet whether I can do that with animated tiles alone or whether I need to switch to sprites while animating, and then back to tiles à la Super Mario brick blocks.

And before I'll dig deeper into such technical thoughts, I wanted to check what it'd look like. Apparently, just lifting tiles up and down by 1 pixels would produce a decent effect. That was quite some month ago. (you can't notice it, but there are two frames (one full-low and one full-high) merged into that picture).

Après un petit essai en torturant une ancienne capture d'écran, la première question sur laquelle je me penche c'est "tiles ou sprites". En clair, la branche va-t'elle se comporter comme un 'monstre' fort peu mobile ou une pente un peu bizarre. Avec un effet correct rien qu'en décalant d'un pixel de plus à chaque prochain tile, que je n'ai malheureusement pas 'filmé'.

Depuis, j'ai eu l'occasion de faire un test avec AnimEDS -- beaucoup moins concluant -- et de recompter le nombre de fois qu'une telle "branche" est présente dans les différents niveaux déjà réalisés pour la Green Zone. A savoir un maximum de 4. A ce stade-là, je peux franchement tolérer une approche "100% sprites". Même pas besoin de passer d'une image "décor" à une image "sprites" à la demande comme pour les bloc-question de Super Mario quand on les bouscule. En tous cas, pour Bilou's Dreamland, je vais prendre le risque de supposer que je n'ai pas besoin de faire des optimisations là-dessus.

Last week, I did some more tests with AnimEDS but I couldn't come with a convincing animation for the branch (modeled as some set of green balls). Also, I counted how many such 'branches' I have in existing Green Zone levels, and there is at most 4 of them per level. So there is no real pressure to do this 'made of tiles' rather than 'made of sprites', so the upcoming Bilou's Dreamland game will be a test of whether doing such level elements with sprites is a working strategy.

Et du coup, si c'est du "tout Sprite", pourquoi ne pas se faire plaisir et coder quelque-chose à base d'une animation d'un 'squelette' qui indiquerait où placer les sprites plutôt que d'animer à la main ? Avec un angle égal entre chaque segment, on a un rendu assez fidèle de 'branche qui plie'. En variant la valeur de l'angle, on peut redresser la branche, etc. tout ça fait des schémas assez sympa à dessiner...

I think I'd also check whether such things can be animated based on a coded skeletton rather than with pre-built pixels. Or at least I could be tempted to do that, but it could turn out to be a bad move, despite it having some definitive appeal. Dedicated pixels could provide better motion that code-driven shifts of still pictures.

I mean, look at those neat diagrams where adding a constant alpha angle at each segment produces a nicely curved branch, and how applying a weight at the middle of the branch only curves one half, and let the other half unchanged. And how having a maximum-alpha threshold will affect how easily the branch bends with weight.

But ultimately, the object isn't that big. It might turn out that weight-at-the-edge only differs from weight-in-the-midle by a few pixels. And similarly, a 'big bounce' and a 'small bounce' might differ only by not using extreme frames.

Mais ce n'est pas forcément l'approche qui donnera l'animation la plus sympa. En particulier compte tenu du fait que la branche à animer n'est pas bien longue.

Cogitons un peu. Si je donne une pente d'1 pixel de dénivelé au bout de 8 pixels en avant pour le premier segment, le 2eme segment, devrait avoir un dénivelé de 2:8, puis on sera à 3:8, et ainsi de suite. Avec cette valeur de alpha, une branche de 6 segments de 8 pixels peut déjà s'approcher d'une pente à 45°.

Mais surtout, ça me donne une manière facile de tracer ce genre de courbe dans SEDS et de tester des animations de baguettes diverses (raides comme une latte ou souples comme une branche de sapin) à partir de 4 valeurs de courbure et une inclinaison maximum à 4:8 (valeur à partir de laquelle il faudra 'raccourcir' le traît de 10% pour tenir compte de sa diagonale).

No comments: