Monday, January 18, 2021

spr.load+

Bon, prochaine étape significative pour le développement sur DS: faire en sorte que le game engine puisse charger les graphismes "en deux temps", en particulier pour les sprites. J'aimerais bien éviter de devoir répliquer le graphisme de Bilou sur plusieurs spritesets, tout simplement.

Et ouaip, j'étais prêt à lancer ça en début de congé de Noël, puis je suis laissé distraire par un 'to branch or not to branch', *deline m'a chipé la tablette pour lire du Ewilan, et moi je me suis mis à faire du déterrage de brouillons :-/

C'est ça, la quarantaine: ou bien tu code, ou bien tu blogges. Les deux, c'est niet.

Mais, allons. Ne soyons pas défaitistes: c'est pas que je n'aie rien fait sur DS pendant les vacances. Juste que je n'ai pas fait ce que j'avais prévu, et que j'ai complètement perdu de vue depuis ce que j'ai fait depuis ce moment.

Plutôt que de me lancer dans une nouvelle branche, j'ai stabilisé et consolidé les différents outils.


Sunday, January 17, 2021

Big Level Objects (take 64)

En jouant à Rayman Origins (oui, je continue le mois du déterrage de vieux brouillons), j'étais arrivé à la conclusion que les gros morceaux de niveau mobiles étaient devenu un élément incontournable du level design moderne dans les jeux de plate-forme.

Et le post de ce week-end de Ishi sur l'implémentation des bateaux dans son projet en cours: Leiliani's Island me rappelle (encore une fois) que je n'ai pas encore de solution convaincante pour faire ce genre de chose dans GEDS.

Calling them 'a new trend' would be a misnomer. Big Level OBjects are a major trait in many modern (post-3D) platformers. It is pretty obvious if you start playing Rayman Origins after playing the original Rayman game: the level is no longer split into a static grid of tiles versus few movable things on which you can walk anyway -- platforms. Now it looks like the very substance of the level may be moving freely. Movable objects may be significantly larger than your character and yet not looking significantly different from the rest of the level.

Having something large that you can walk on already existed in the original Rayman game, but you would have a clue that it introduces a temporary and distinct gameplay.

If you're in your level editor, you can easily make that cymbal look like 'here be cymbal' icon just like there are 'here be Robo Red' in Commander Keen's TED tool.

Pour moi, ces objets devraient être construits dans l'éditeur de niveau. Idéalement même en même temps que le niveau lui-même pour que les choses s'assemblent bien.

Et bien sûr, il y avait eu des précurseurs avant Rayman Origins. Le meilleur exemple étant peut-être les plate-formes qui s'enfoncent dans la lave et prennent feu dans la Marble Zone de Sonic 1.

Les BigLevelObjects sont plus gros qu'une simple plate-forme et s'intègrent normalement mieux dans l'environnement qu'une plate-forme mobile.

De par leur taille, ils sont à la fois plate-forme mobile, écrabouilleurs, du sol qui s'écroule

In contrast, when you add what I call a Big Level Object, you want the level editor to show precisely how big it is. You may also want to have the flexibility to change its look like you'd change the look so that the level doesn't look repetitive and artificial despite it's using lots and lots of Big Level Objects.

Having them integrate one key element, another one is that their function can no longer be described by a single trait. Platforms can be walked on, and that's it. The big moving rocks of Rayman Origins can be walked on, but they also block your path, they can be climbed on -- just like normal rock structure in the level --, and they can crush you.

They can host other decorative elements (the big palmtree) or interactive elements (the red thing), just like normal ground would do.

Notez aussi qu'ils peuvent être gros assez pour qu'on y mette des objets décoratifs (les palmiers) ou interactifs (le truc rouge).

Bien sûr, dans le code de Rayman Origins, il n'y a pas besoin de se demander si on va faire ça avec des sprites comme dans Sonic ou avec un plan de tiles dédiés comme dans le niveau-écrabouilleur de Super Mario World: que les blocs soient fixes où mobiles, ils sont tracés avec des polygones et il n'y a pas de raccourci possible avec une tile map (enfin, je crois) pour les collisions avec les blocs fixes.

Of course, part of the original 'structure vs. platform' split comes from the technical restrictions of tiles + sprites video hardware that prevailed in the 8-bit and 16-bit era.

There had some BLObs in 16-bit games too, though. Like those sloped ground that dip into lava in Marble Zone or the yellow layer in Donuts Plains 2. Likely, it was done with a dedicated second tiles plane that is scrolled up and down independently from the base tiles plane of Mode 1 and the yellow things doesn't seem to need more than 3 colors + transparency.

(that would mean that the parallax background of that level uses the same plane as the HUD and that an interrupt will have to change priority and scrolling on the fly, unlike what happens with other areas of the game).

Nowadays, with most games using polygons-based hardware, the distinction doesn't hold anymore.



Saturday, January 16, 2021

La bannière du désert

 

Ça fait un paquet d'années, maintenant, que cette bannière verte vous accueille sur mon blog, avec comme message "rendre le rêve réel". Et j'ai déjà expliqué à plusieurs reprises: voir ce pas-si-p'tit Bilou sur le point d'atterrir sur sa souche, ça me motive à continuer, jusqu'à ce qu'on puisse voir Bilou amortir sa chute sur Nintendo DS, que le Dumblador se mette à marcher ou qu'on puisse sauter d'un encrier à l'autre pour continuer son ascension.

I need to find daily motivation to bring life to the pyramid level in Bilou's Dreamland. I had no only little issues designing for the School Zone because it was easy for me to imagine talks and accidents featuring school supplies. Plus, any random errand could make me bump into some supply I hadn't thought about so far, which in turn triggers more game design ideas. But we're a bit short on lost temples and pyramids around here.

So given how many times the former, green banner pushed me forward making things become real, let's try to make a new pyramid-themed banner with what I already have and see whether that pushes me to make that level turn true, will we ?

Et bien que je sache depuis la fin de School Rush que c'est la pyramide qui m'attend, je n'ai pas encore vraiment démarré. Alors voilà: pour me donner du coeur à l'ouvrage, on va changer la bannière pour quelque-chose qui mette en scène les prochains objectifs: la pile-zombie, le serpent-de-sable et la possibilité pour Bilou de rester suspendu à des choses.

On verra bien si ça marche ou si la perte de verdure me fait fuir encore plus ...

Friday, January 15, 2021

Les démos

 Après la bafouille sur "Titanic Death by a Worm", vous avez peut-être l'impression que la démoscène, c'est une page que j'ai tournée depuis longtemps. Dans un sens, vous n'avez pas tort, mais n'allez pas croire que j'aie coupé tous les ponts pour autant.

Bon, d'accord, depuis 2005, je n'ai clairement plus un PC capable de faire tourner des productions récentes, et depuis que youtube a débarqué dans l'équation, j'avoue me contenter de regarder des vidéos des démos plutôt que les démos elles-même. Le fait que j'utilise mon PC aussi pour les paiements en ligne et qu'il tourne Linux n'y est pas complètement étranger.

J'essaie aussi de me tenir à la page, et de ne pas sombrer dans le nostalgisme à ne regarder que Heaven Seven ou Second Reality. Non, chaque année je creuse comme je peux pour essayer de trouver les pépites publiées dans l'année. Pour 2020, selon moi, c'était Apex par Bitbendaz

Je salue bien sûr tous les afficionados de l'Amiga et du Commodore 64 qui continuent à donner de leur temps pour que leur idole survive. Mais je dois reconnaître que ce n'est pas l'esthétique qui m'interpelle. En 2018, ma démo-fétiche, c'était par exemple "Reboot" d'Umlaüt Design.

Et la découverte de 2019, c'était "ninjadev" avec des titres plus exotiques les uns que les autres comme Construct (bravo les Légos), Flat shade society (bravo le jeu de mots) ou What are you syncing about (bravo la bande son)

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).

Saturday, January 09, 2021

Intrepid Izzy

 Bon, je vais devoir présenter d'avance des excuses au Senile Team: Intrepid Izzy n'est pas franchement un jeu dont j'attends la sortie. Ne vous méprenez pas, hein: ça a l'air plutôt bien fait, en plus c'est prévu pour être un homebrew dreamcast et c'est un jeu de plate-forme. Ils font même des vidéo devlog et ils ont même un blog. Donc, en fait, je devrais être fan de leur travail. Mais voilà: je n'y arrive pas.

Il y a un quelque-chose dans l'animation du personnage que j'assimile à l'époque des jeux flash, qui trouve aussi des échos dans certains choix artistiques comme les contours noirs autour de l'herbe ou les fleurs à la tige raide comme une baguette. Le fait d'avoir choisi une caisse en bois comme objet à pousser dans le temple perdu ... Je sais, c'est peu de choses par rapport au travail fourni et indéniable (regardez-moi ces rochers et ces sapins!). C'est bien pour ça que j'ai passé le truc sous silence jusque-là: le projet mérite qu'on le soutienne, pas qu'on en critique les petits détails perfectibles.

Alors pourquoi en parler maintenant ? Eh bien à cause de leurs couleurs pour l'environnement "temple/pyramide", évidemment!

#300030 + #5c2744 pour le mauve sombre dans la partie "morte" du niveau,

#532041 + #6d3046 + #5b2a39 + #915c51 pour les blocs servant de décor de fond à l'intérieur du temple, 

#ffc463 + #ce9362 + #7b4251 pour les blocs "solides" dans le décor.

Je continue à caler sur la conception de la zone du désert pour mon prochain jeu Bilou et quelques couleurs à essayer ne feraient probablement pas de tort.

Thursday, January 07, 2021

Titanic death by a worm

Petit retour sur une lecture de Cactuceratops contre Conquer (bad fur day), qui cherche à comprendre pourquoi les voix du personnage principal 'rippées' hors du jeu sonnent différemment. Pour info, c'est un des premiers jeux à utiliser de la compression MP3 pour les échantillons vocaux. Au milieu de ses investigations, elle met le doigt sur un fait intéressant: certains blocs de son dans le MP3 sont marqués 'copyrightés' et les autres pas. Si on retire les blocs 'copyrightés', le son est parfaitement normal.


Le bit de copyright est justement celui qui distingue de l’entête le plus fréquent celui qui apparaît seulement pour la voix de Conker. Son dernier octet est en effet égal à 0xC8 plutôt qu’à 0xC0 (les quatre derniers bits valant 1000 au lieu de 0000). 
Et ce quelque chose, c'est les mouvements de la bouche de Conker, ce qu'on appelle le “lip-sync”. Ces 9 octets ajoutés viennent de l'outil développé par Mike Currington pour faciliter le travail des animateurs et rattacher ses nombreuses expressions aux articulations de sa voix
En clair, les développeurs de chez Rare ont improvisé un fichier avec entrelacement audio/data en tirant parti du fait qu'ils avaient leur player "à eux" et donc l'opportunité de travailler avec leur propre solution de multiplexage. Et après avoir vu des formats .LBM qui embarquent leur aperçu dans une section .TINY, des .MODs avec des e-mails planqués dans le 6eme instruments, etc. Je me dis ... "c'est bien le genre de hack auquel j'aurais eu recours, si j'avais été dans la boîte".

En fait, je pense bien que j'ai déjà réellement voulu utiliser un truc pareil. Retour en '99

Début de l'année, je me suis acheté mon premier PC perso: un AMD K6-II, premier à avoir je ne sais plus trop quelles extensions 3DNow! auprès d'un étudiant quelques années au-dessus de moi, ci-dessous Gino. Comme il avait voulu attirer mon attention dessus, je fais au téléphone "oui, j'ai vu. Comme je code en assembleur, c'est le genre de chose que je note tout de suite". Et lui "ah!? Tu fais de l'assembleur! Tu vas à la Inscene, alors ?"

Et de fil en aiguille, on se retrouvera avec mon frère dans la voiture de Gino avec nos tours (plus ou moins grosses), nos écrans (pas plats), le synthé de mon frangin (iirc), des sacs de couchage et quelques blocs-notes. C'est là que sera présenté Crazy Brix et El Ritmo Latino.

Pendant que mon frère participe à toutes les compétitions-surprise de musique et graphisme, que Gino fait du photoshop et retouve des connaissances, moi, je suis plongé dans le code source Visual C++ de notre Grrand Prrojet: "Titanic Death by a Worm" qu'on avait largement pré-produit depuis la fin des examens.

Je m'étais déjà bien lâché sur les p'tits personnages, contrairement aux Worms qui sont tous les mêmes (mais auxquels on donne une personnalité), nous on leur a donné à tous un look perso et des attaques spécifiques.

Mon frère avait fait un .IT avec toutes les actions prévues dans le script (ou il avait fait le script dans Impulse Tracker, en fait. Je ne sais plus trop). Restait à trouver comment aligner les actions des pixels avec le replay du module. Eh bin, puisque dans un .IT, y'a moyen d'utiliser plus de 26 effets différents (arpeggio, glissando, vibrato ...), on aura qu'à se réserver un effet qui ne changera pas le son, mais qui pilotera l'avancement dans le script visuel.

Bon, par contre si vous avez déjà fait une game jam, vous devinerez la suite, hein. Avec à peine une coquille où on sait passer en 320x200 dans DirectX (merci Gino) et charger mikmod.dll au moment de monter son PC et qu'on bloque sur le choix de comment créer des classes dérivées à partir d'une classe de base et d'un script texte ... eh bin, je me serai beaucoup pris la tête, et il n'y aura jamais de pworms.exe ...