samedi, novembre 22, 2014

Les tiles ... du C64 à la NDS

Chose plutôt inhabituelle, après pas loin d'un an de bidouille, mon premier article sur le site de la BilouCorp est finalement en ligne. J'avais envie d'y faire une rétrospective sur ce qui a fait de certaines machines des plate-formes assez merveilleuses pour la programmation de jeux vidéos et de jeter un coup d'oeil à la façon dont leur caractéristiques techniques ont formatté les jeux qui ont tourné dessus. Le premier jet, c'est donc sur les les tiles, ces petits pavés graphiques qui m'ont accueilli sur le C64 dans "Space Mission" et que je reprogramme dans SEDS pour vous faire les jeux de Bilou. Bonne lecture.

Some of us read and listen to English fairly fluently. For those, watching a video like the making of ROM city rampage gives a nice overview of what happens inside an 8-bit, tiled game. Mechanism within 16-bit and even 32-bit tiled games are essentially the same, with variations on the limits. For those who don't, I took the time to write down a cover of essential mechanisms like palettes, MAP area and the like and have it hosted at BilouCorp website.

mardi, novembre 18, 2014

Economiser des pixels

Imaginons un instant que je tente de faire l'animation du crayon-soldat qui court derrière Bilou juste en pixel art ... Il me faudrait avant tout gagner assez de place sur mes planches de sprites. Heureusement, les "1002/1024 tiles used" sont un peu surfaits. Si je visualise le contenu de la VRAM, les sprites colorés en rouge sont ceux dont je n'ai en fait aucun besoin. Ceux en vert sont ceux qui pourraient bénéficier du système d'animation par copie qui est à la base de l'encre-qui-monte.

This is the current content of the 64K of sprite sheet in the School Rush game. Sprites in red are unused and could be dismissed. Sprites in green are those who could benefit from the streaming technique (updating VRAM content as the frames advance. Given that I used only 6 16x16 blocks for the pendat so far, I could have the room for a pixel art running pendat, after all ...

mercredi, novembre 12, 2014

L'histoire de Rayman

*deline, très fière, vous présente le nouveau livre de Rayman.
Très chouette ouvrage de Michaël Guarné que nous offrent là les éditions Pix'n'Love. Plus aéré et aussi plus détaché que l'histoire de Mario mais quand heureusement plus consistant que le trop graphique "histoire de Sonic", je ne regrette pas ma pré-commande. Bien sûr pour celui qui avait déjà la bio de Michel Ancel et le mook contenant le dossier Rayman, il y aura des redites, mais l'intervention de nouveaux collaborateurs -- chose rendue possible puisqu'on s'intéresse ici à une série, donc avec les anciens épisodes vus sous différents angles.

Mais il y a tout de même quelques belles perles pour l'amateur de game design que je suis, à commencer par une double page dédiée à la "bible du game design", ce cahier graphique de Michel Ancel rédigé dans l'idée de faire passer son jeu au mieux auprès des frères à la tête de Ubisoft. Ça me rappelle très fort le genre de documents que mon frangin plaquait sur ma table à dessin entre '93 et '94, avant qu'on ne mette la main sur notre game-maker.

http://critical-gaming.com/blog/2010/12/31/about-that-indie-feel-pt2.html
"Mario Can't Grab" (Kirby Kid)
J'ai halluciné en découvrant le nombre de 15,000 caractères de code pour le comportement de Rayman dans Rayman Origins. S'il y a une bonne dose de mouvements dans ce jeu, on est quand-même pas dans un jeu d'échec non plus... Puis je suis retombé sur une petite image de Kirby Kid à propos de Super Mario Bros. Ici, pas de roulé-boulé ni de wall-kick, mais on retrouve déjà la petite différence entre un jeu qui a été discuté entre testeurs et joueurs ou un jeu fait "en aveugle": si un petit coup d'anti-gravité permet de continuer un mouvement plus à même d'aider le joueur, alors on donne cette anti-gravité.

samedi, novembre 08, 2014

Missing monster ?

Pendats dropping Power-ups, bladors stunning inkjets, all this had the objective to address Kirby Kid's most critical statement:
Most enemies are just things to avoid (lacking interplay). When I see enemies I don't get exciting to avoid them or take them out.
Most enemies were built around the idea that they are not aggressive, but still dangerous. This is built deep within the genome of Bilou's world: there is no invasion army we fight against, rather wild beast not appreciating that you disturb their business. Yet, it turns out that for a time attack side-scroller, we're missing something that would have wider range and somewhat chase Bilou (60px/sec when walking). I needed something that's mostly on the ground and dismissed with primary mechanic, but that moves faster than pendat (16px/sec) or dumblador (8px/sec).

Making Pendats Run?
That would be the easy way out. or should be. Design documents from 2004-2005 show pendats that charge Bilou with their spears. Even earlier, the comic show them knocking down stacks of books. Yet, this is hard to achieve -- if ever possible -- with today's pixel art pendat. To reach that, I will need the hybrid vector/bitmap animation editor I intended to use for BangBash.

Bangbash wouldn't help.
He's more than just dangerous. He's dangerous and quick to anger. Maybe that's not yet what makes you excited about facing an opponent, but at least, that should build up some tension.

Something a la Blues Brothers ...
That game from Titus is one where I could feel engaged in dispatching enemies. They weren't very developed, either shooting, wandering or wandering-and-shooting-if-spotting-you, but they were moving about as fast as yourself. If they weren't as smart as the pendat described above, they'd usually have a "knock you down" animation when they hurt you. They're also quite fast. If you find yourself out of crate, think twice before you revert direction because every pixel between you and the bad guy count. You won't outrun them as easily as a goomba.

So if you haven't guessed from the size-test picture, I'm opting for a staple remover. These things look hazardous enough in real-life, it's not a wonder why you can find some customized into T-Rex heads. I've endured countless buzzing of Nintendo's "Donkey Kong Jr." game-over as I got my feet chunked into bits by those living wolf traps and their klap trap derivative. It doesn't turn very easy to pixel, however.


vendredi, octobre 31, 2014

Les p'tits trucs du monde 16 bits ...

Je trouve assez instructifs les commentaires de Tool-Assisted Speedrun de Coeur de Vandale, RealMyop et leurs invités. Dans sa présentation, le jeune Got4n nous explique par exemple que dans son portage GBA, le moteur du premier Rayman ne teste pas toutes les collisions à chaque frame. Les collisions entre Rayman et les ennemis ne seront évaluées qu'une frame sur 4 alors que les zones plus larges (sortie de niveaux et autres déclencheurs) se relaient et sont évalués une fois toutes les 7 frames. Une ruse élégante pour continuer à faire tourner un jeu conçu pour PC à 90MHz sur un processeur ARM 33MHz (le hardware graphique du GBA permet de sauver pas mal de temps, mais tout de même ...)

About one year ago, a colleague pointed me towards a video where two French guys comment a tool-assisted speedrun completing Super Mario World in a couple of minutes. It is not quite "abusing game rules" where you'd play Megaman as if you were Neo in the Matrix. No. It's looking much more a hacker exploit where you force the program to jump to some place where you can distort content of the code memory. There is no limit to what you can achieve once you reach such a point. You can immediately launch "you won" credits, you can replace any monster's behaviour with some machine code of yours ... you can even play Snake rather than Super Mario.

Since then, I keep an eye on speedruns and tool-assisted speedruns as a way to pleasantly discover the little tricks inside major games. Things like "given maximum speed is 8px/frame, you only need to test for collision with block-size spikes once every 4 frames (Rayman GBA). Or that all the dungeons of Zelda: LTTP are located in the same map and that you can move from one to another provided that you can drill hole between them.


Dans les autres découvertes sympas, saviez-vous que tous les donjons de Zelda: Link to the Past partageaient la même map, et qu'il est donc possible de passer d'un donjon à l'autre en s'y prenant comme il faut ? Eh oui. Quand on doit faire la première grande aventure sur une cartouche 8Mbit, tous les coups sont permis ;)

http://www.explodingrabbit.com/forum/threads/whats-needed-to-finalize-the-current-flash-version-of-smbc.15500/page-3
A la base d'un Tool-Assisted Speedrun, il y a un émulateur dont on utilise à fonctions d'inspection de la mémoire pour trouver où sont conservées les vitesses, les zones de collisions et tous ces petits détails croustillants qui permettent de définir la trajectoire idéale. On s'autorise aussi à envoyer à la console n'importe quels signaux d'entrée, même quand ils ne sont pas humainement possible avec une manette normale et des (gros?) doigts, comme relacher le bouton et le réenfoncer en 1/30 de seconde précisément avant de faire faire Gauche+Droite au D-Pad dans le 60ème de seconde suivant.

Allez, la prochaine fois, je vous explique comment on manipule les boss.

mardi, octobre 28, 2014

Couper les cheveux en quatre ?

J'hésitais à introduire le contrôle des boîtes de collisions dans mon éditeur d'animations. J'hésitais encore plus à ce qu'on puisse activer ou désactiver certaines de ces boîtes au fil de l'animation. Tout ça me semblait plutôt relever de la machine d'états et des gardiens de transitions. Et puis Shantae m'a fait changer d'avis.

So far, I have been able to keep hitboxes on a per-state basis. Anything more subtle was resolved either by spawning new GOBs (Apple Assault) or splitting the animation (inkjet). I was growing the conviction that it wouldn't be enough for new grab-in-the-air mechanic, Shantae's move pushed the definitive argument: *any* punch or kick-like move has build-up and recover phases, and the hitbox shouldn't be active by then. Splitting the animation in such cases ? That would quickly turn into a nightmare!

At this point, not adding edition of hit boxes in the animation editor would strongly reduce my chance to have form-fit-function ...


Lors de l'animation d'un coup, on peut distinguer trois phase: la préparation, l'action et le retour. Idéalement, seule l'action correspond à une hitbox offensive. Selon la longueur de la préparation et du retour, enfreindre cette règle (qui dérive du "form fits function"), c'est produire des effets incohérents et du coup rendre beaucoup plus complexe l'apprentissage du système par le joueur. Je n'ai pas eu le problème dans Apple Assault parce que les coups de poing étaient en réalité des sprites indépendants. J'ai contourné le problème avec inkjet en tronçonnant l'animation en deux parties et en faisant en sorte que Bilou ne puisse réagir qu'au moment précis de la transition entre les deux tronçons. Mais soyons clairs: faire la même chose avec tous les mouvements "power-up" prévus serait un véritable cauchemar.

samedi, octobre 25, 2014

GobAnim::isJedi()


jump, twist and roll!
That's quite amazing, how I manage to postpone an upgrade of the game engine for days and then have two of them implemented in a couple of hours simply because I used doxygen-on-cybook to brief myself on what's around and what is the most straightforward path for implementing them. I have now a way to instruct that a specific transition animation has priority over the running one, which is mandatory for your "air-grab" to have any visible effect when you're turning back or reaching the top of your jump -- in a word, for a consistent behaviour. It also allowed me to give "float-land" a first attempt.

Et voilà: j'ai pu indiquer que certaines animations peuvent "forcer" la main à certaines animations de transitions, comme prévu, mais plus facilement grâce à mon cybook-qui-garde-mon-code-sous-la-main. Comme quoi, je ne regrette pas son passage par le service-après-vente ;). Du coup, on peut déclencher l'animation "attraper en l'air" à n'importe quel moment. Je me suis aussi amusé à modifier l'autre "pirouette en l'air" pour lui donner un aspect de "je descend en planant", même si on ne peut pas dire que Bilou soit un très bon planeur jusqu'ici. Il faudra voir ce que ça donne avec une vraie DS en mains, par contre. Au clavier desmume, c'est assez moyen et on commence à bien s'embrouiller entre la course, le saut, le grab et la pirouette/vrille...

Allez, si ce n'est pas encore fait, profitez-en pour voter pour votre power-up préféré ;-)