Saturday, January 14, 2012

branch/companim

Rien de tel qu'un peu d'UML pour commencer la nouvelle branche du SVN "animation composée" (imho). Ah, mais peut-être voulez-vous un mot d'explication sur les "branches"? C'est l'équivalent pour un programmeur de "Dis, on va commencer par dupliquer la maison dans un univers parallèle avant d'attaquer les travaux pour la véranda. Comme ça, si on doit chercher les clés à un moment donné, on a qu'à le faire dans la copie de base. Et puis on peut laisser les enfants dormir dans celle-là, aussi: inutile de les envoyer dans la copie où on a abattu le mur du salon et où l'eau ne va plus jusqu'aux WC, hein ?"

Convaincus ?

I was quite confuse on where to start working on the compound anim support, so I just started by depicting the current situation into an UML blueprint, trying to precise which are the different phases of SimpleGob::play, which member variables where involved when, and where in the class hierarchy they stand. Part of my indecision came from the fact that the abstract class GameObject is designed to capture what controllers use, so I wasn't quite tempted to push up the state management there.

And to my suprise, that alone suffice to show me the right path to take: introduce a CommonGob class that capture what's not-in-GameObject but should be in all the technical variation of the animated objects.


Bon, première tâche dans cette branche, donc, c'est de refaire un peu l'état des lieux. Une animation composée, ça change essentiellement l'animation des GOBs, mais l'état, les contrôleurs, les collisions, tout ça reste identique. Ouais, sauf que jusqu'ici, tout ça est uniquement dans SimpleGob.

Une fois tout à plat sur ce joli "bluescreen" (excusez ma nostalgie d'ex-codeur en QuickBasic), la solution devient évidente: introduire une classe "CommonGob" qui regroupe tout ce dont SimpleGob et CompoundGob auront besoin dans leur fonctions "play" sans toucher au GameObject héréditaire endogène ... ce qui fera sans doute plaisir à BlockArea, accessoirement.

If you don't get a word of UML then ... well ... I guess the sketched-up version of a former, similar reflexion might help you to figure out what is this CompoundGob stuff all about.

Thursday, January 12, 2012

Pendant ce temps, dans le code ...

hey ? Why am I so *ugly* ? can't your new Staedler USB pencil do anything better ?Oh, pas de soucis: je n'oublie pas Bilou, malgré tout cet intérêt renouvelé pour mon perso Ubisoft favori... Mais comme les études de Rayman et de Shantae ont pour objectif de construire le synopsys lointain, comprenez que je garde ça "en réserve" pour plus tard... Il faut quand-même bien que vous ayez le plaisir de la découverte quand je vous proposerai 4 écrans par monde dans nuts'n'bolts, hein :)

Don't worry: I keep working on Bilou, even though it's sort of top-secret sketching of distant scenario ideas for whatever will happen beyond the green & school zones you already know. I'll start working on the integration of animations edited with AnimEDS into the game engine. Please allow me to keep my todo-list in French only and focus back to my soup now :P

Entre-temps, il va falloir que je voie à intégrer les animations complexes générées par AnimEDS dans le moteur de jeu, sinon, c'est moins rigolo :P

  • le GameScript pourra se servir des informations de anim[i] pour décider de créer un SimpleGob ou un CompoundGob (j'ai déjà une super-classe, ici)
  • pas de bloc "anim%u %x { ... }" pour les animations composée, donc pas d'appel à parse(). Je pourrais soit détourner "state%u :anim%u { ... }" avec "state%u :spr%.anim%", soit pré-déclarer les animations "anim%u = spr%.%" -- l'idée étant d'autoriser des "pages d'animations" et d'avoir de préférence une page par fichier de commande.
  • j'ai des commandes générales et des commandes "d'affichage" dans les anims. Est-ce que ça vaut la peine d'essayer de ne conserver qu'une seule copie des commandes générales ?
  • Dès que je vais vouloir utiliser des déplacements automatiques, il me faudra de l'état par composant, ce qui rend moins attirant l'inclusion du code qui gère case ANIM_SET_SPR au sein de GobAnim ...

Wednesday, January 11, 2012

Origins band land



"Je suis arrivé au 2eme monde: la musique" me dit mon frère. Il venait de lire mon éloge du premier monde de Rayman Origins, mais il était un peu déçu par ce nouveau monde "c'est tout creux, vide quoi. Un peu mort aussi". Je souris: je viens de refaire le "Band Land" du Rayman d'origine, "Band Land" signifiant à la fois le pays des groupes (de rock/jazz) avec un jeu de mot sur "Bad Lands", les terres arides et rocailleuses ... Mais une fois la manette en main, je dois bien reconnaître qu'il n'a pas tort: les mêmes instruments tordus encore et encore, quelques tambours-tremplins ...

Il faut dire que le 1er monde avait placé la barre assez haut. Retournons voir les images trouvées ça et sur Internet ...

Non seulement c'est beau et détaillé, mais un plus, c'est particulièrement varié. On passe, l'espace de quelques niveaux, d'une forêt sombre et dense à une caverne moussue, puis une sorte de plage avant de partir à l'assaut des montagnes. Rien de ce genre (ou presque) dans le niveau musical. L'action a beau être variée, le niveau "des angry birds" reste un monologue visuel. Même dans les passages secrets où l'on délivre les électoons, on reste en environnement ouverts (moi, j'aurais bien vu ça à l'intérieur d'un tambour ou d'un saxophone :P).

Mais entre les câbles électriques, le planage le long des mélodies et les niveaux venteux, on ne s'ennuie pas jusqu'au monde des desserts glacés, qui -- je l'espère -- nous remettra une deuxième claque graphique pour enfoncer le clou ;)

Evidemment, dans Rayman version PSX, on a pas du tout cette idée de "désert" pour la zone musicale, vu qu'il était conçu comme "Ciel Chromatique" par une équipe franchement francophone.

Sunday, January 08, 2012

The Art of Rayman

So I've got new Copic markers and a freshly downloaded Rayman for DSi. Neat. Just what I need to do some graphics analysis the same way I did for Shantae, although it's clearly non-pixel-art, but rather converted and carefully fixed painting.

Armé de mes Copic et de ma DSi sur laquelle j'ai fraîchement installé le Rayman de mon adolescence, j'entamme le même genre d'analyse du graphisme du jeu que ce que j'ai fait pour Shantae. Bon, évidemment, le graphisme de Rayman est en grande partie de la peinture retouchée, et pas du Pixel Art, donc je ne sais pas en tirer le même genre d'enseignements ... n'empèche...

C'est étonnant de voir qu'il n'y a plus ou moins aucun arbre "normal" dans tout le premier monde. Des troncs-champignon, ça oui. Avec même des "mains" qui vous supportent. Pourtant, les couleurs et la texture sont celles du bois, et donc, on voit du bois.

Étonné, aussi, de voir que certains éléments de décor peuvent être allongés ou raccourci, malgré leur complexité. Chapeau! Les troncs couchés et les "palmiers", notamment. Il est rare d'avoir un même objet de grande taille plus de 2 fois dans un seul niveau, mais par contre, beaucoup moins rare d'avoir un objet repris à moitié découpé sur le bord de l'écran en début ou fin de niveau, où l'impression de "copié-collé" sera moins forte.

Autre grosse différence avec ma "green zone": Pas de terre dans la forêt primordiale de Rayman. Des cailloux, oui. Des entrelacs super-serrés de lianes, aussi. Mais de la terre, schnoll. Nada.

Pour pouvoir construire leurs niveaux, les p'tits gars d'Ubisoft n'ont pas hésité à utiliser un truc courant (mais souvent mal utilisé) chez les pixel artists: le contre-jour. En-dehors des pierres détaillés, certaines zones plus sombres sont tout simplement d'une couleur unie, souvent au bord des zones.

Each level in the Dream Forest features one or two "large background element" that gives it a unique style compared to the generic "green & rocks & water" template that has been seen in so many games. Some of them are interactive (mushroom trees), other are purely decorative. It's rare to see them repeated more than twice in a single level, but it's frequent to see them repeated (but only partially) near the begin or the end of the level.

It's also surprising to see that, despite the "wooden" colours and textures of some components, we never see a real "tree" in the foreground in that forest. Are these vegetal tentacles ? Are these mushrooms-on-branches ? It's just some fantasy. Rayman Origins is much more conventional, to that regards.

Another impressive thing: the way the artists managed to create variations of some relatively complex element. That's especially visible with that sort of "palmtree" seen during the "bzzit fight". Here, they strip a part of the full-size tree. There, they duplicate a part to extend it. Simply thanks to a bumpy detail that makes the seamless connections possible. Well done, dudes.

PS: thanks fly to the maintainers of the raywiki: some of the screenshots they have were quite useful.

Saturday, January 07, 2012

Climb up, and start the ro .. nevermind.

Voilà bien le genre de "mini-cave" cachée dans le monde de Shantae qui m'aura fait souffrir ... (et qui renforce mon impression que le jeu tient presqu'autant du "zelda" que d'un jeu de plate-forme classique, au passage). Pourquoi ? parce qu'il va falloir sauter de chaîne en chaîne jusqu'au coffre ... et retour. Et assez curieusement, dans Shantae, s'accrocher à une "corde" verticale en cours de saut est assez délicat.

Grab a "rope", climb up, hop, grab the next rope, climb down a bit, hop, grab, hop, grab, climb ... This is sure nothing new. I think even Pharaoh's curse had a screen that was designed along that rule. And you'll sure face it a couple of time in the armaggedon machine as well. So why is it so tedious to perform it right here ?

Pour s'accrocher, il faudra que le joueur presse le DPAD en direction "haut" pendant qu'il saute (vers l'avant, de préférence). Et on dirait bien que sur la DSi, ce genre de manipulation est assez peu pratique. On passe un tout petit peu trop facilement de la diagonale "haut-droite" à la position "juste vers le haut", auquel cas Shantae s'immobilise presqu'immédiatement et tombe si le joueur n'a pas bien estimé la largeur de la zone de collision de la chaîne.

Well, first, I'm playing Shantae on the DSi, with a DPAD, while I mostly grow my platforming skills with a keyboard, where there's no such thing like a "diagonal" position. And apparently, holding the DPAD in a diagonal position is not so easy. As Shantae quickly loses her horizontal velocity if you release the "right" direction in-air, you're better have a very precise understanding of how wide the collision area for those "ropes" is, or you might end up to instruct the game to "climb" when that cannot be done (not yet), and just start falling where you are. I'll have to keep that in mind when I'll implement vines-climbing in Bilou.

Keen demande lui aussi que l'on presse vers le haut pour s'accrocher aux "barres verticales". Mais ayant majoritairement joué sur clavier, ça ne me posait aucun problème.

edit: Super Princess Peach, de son côté, à une étape d'alignement aux échelles bien visibles et progressive (donc, au départ, on se déplace en diagonale puis verticalement).

Wednesday, January 04, 2012

symbol 240,60,126,255,254,255,126,60,62

Premier passage de Pierrick chez moi, en 1993. Il attrape une feuille au hasard sur mon bureau pour me montrer comment il réalise des personnages sur son Amstrad CPC, à l'aide de la commande "SYMBOL" qui reprogramme les caractères graphiques. La feuille était en réalité le dos du plan du premier niveau de Calimero ... ce petit croquis a donc voyagé dans le temps jusqu'en 2012 ^_^

Heh. That one survived too, on the back of a level map that my brother had with him at school: the bubble-shaped character that Pierrick used as hero for small flip-screen platformers on his CPC. I've long time wished that reprogramming characters on the C64 basic was as easy as SYMBOL x,... but even for sprites, it was a PEEK/POKE nightmare, so almost all my C64 games attempts were merely using PETSCII.

Celà se passe sans doutelégèrement après que mon frère ait dessiné la page d'introduction de "Bubule Warrior", sans doute parce que Pierrick dessine depuis longtemps des personnages tous ronds autour de ses feuilles de cours.

Sunday, January 01, 2012

Happy New Year !


En guise de carte de voeux, une "fractale du temps" de toutes les "releases" de mon projet sur DS depuis 2006. J'espère la compléter dans le courant du mois avec les "choix stratégiques" sur le moteur de jeu, etc.


Maybe a fractal timeline is too geeky for my audience, but at least, it allows me to tile all the downloadable material released on this blog since 2006. Let's pretend it's my new year's wishes card for 2012