Showing posts with label keen. Show all posts
Showing posts with label keen. Show all posts

Sunday, January 04, 2026

I must make some isocahedron gem!

This is a screenshot from @makeshifted, back in December 2022, that showed up in the last snapshot the Internet Archive could take of my twitter timeline. A repost with the annotation "3D was *that* awesome back in the Assembly 9x #demoscene days."

It showed up again a few times ago and I told to myself "you know, those stonekeys in Commander Keen ? Well, if I can make NDS 3D look that sleek, I won't need to pixelstudy them!

And it appeared again, posted by @benji__t this week-end while I'm doing my farewell tour on twitter.  

One possible system of Cartesian coordinate for the vertices of a regular icosahedron, giving the edge length 2, is: where denotes the golden ratio. -- https://en.wikipedia.org/wiki/Regular_icosahedron --

https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Coxeter%27s_snub_octahedron_from_octahedron.gif/100px-Coxeter%27s_snub_octahedron_from_octahedron.gif
Oh! look at that ...  

Take a tetrahedron of psi, split summit so that it turns into a 2-edge, and voilà! isocahedron !

- - - 

those words above were written around the 19th of February, last year. I haven't written a single line of DSGL to make it appear in the infinite pyramid, and while I initially thought of using it as keygems, I realise that what they really be are the "magic stones" that you collect after defeating bosses.

Friday, March 14, 2025

#20games

Bon, il y a 20 jours, j'ai décidé de suivre l'exemple de Sverx et d'essayer de poster chaque jour "un jeu qui m'a marqué". Je l'ai compris au départ comme "qui est une de mes sources d'influences dans les jeux que je conçois et réalise ... on y trouvera donc pas Link to the Past, même si c'est à son donjon des glaces que je repense chaque fois que je dois trouver la détermination d'envoyer un recommandé ou de renvoyer des couriers administratifs d'un bureau à l'autre du même bâtiment en passant par ma boîte aux lettres ^^".

J'avais dans le passé déjà voulu participer à un autre challenge du genre puisqu'il y avait jusqu'à hier un tag "10 games" avec 3 posts ...  Croyez-moi si vous voulez, le plus difficile aura été d'attendre chaque fois 24 heures avant de parler du jeu suivant ^^".

I've followed Sverx's example and try to identify 20 games that have been most influential to me as a gamedev. Having to wait for the next day before picking the next game turned out to be one of the trickiest part of the challenge to me ^^". The challenge also said "no explanation, no particular order", but it turns out the first four I picked were among games that I go back for reference very often.

Le challenge disait "pas d'ordre particulier" (avoir Goodbye Galaxy en #1 ne veut donc pas dire qu'il s'agit du meilleur jeu ou du plus important), et surtout "pas de commentaire". Mais sans grande surprise, j'aimerais maintenant revenir sur chaque choix et contextualiser.

"Commander Keen in Goodbye Galaxy", donc, qui a été _le_ jeu utilisé par mon frère pendant qu'il dessinait les premiers niveaux de Bilou. Sans oublier les imports aux monstres de "Secret of the Oracle" pour les ennemis de la Green Zone. Il est probablement aussi parmi les jeux dont j'aimerais le plus mettre la main sur le code source. Même s'il y a les sources de "Keen Dreams", le moteur de GG est plus abouti, ça se sent manette en main...

Some of the games I mention on this blog are so influential they even get their own tag in the cloud! That's the case for Commander Keen, the game that formatted my brother's level design and monster rooster, but also for Fury of the Furries, where *I* draw inspiration during so many levels revival and where I've truly learnt pixelart. 

"Fury of the Furries", que ce soit les graphismes, les musiques, le thème, le level design, ce jeu revient tout le temps dans mon esprit dès que je travaille sur mes propres jeux, donc bin ... évidemment, c'était le n° 2. Lui aussi, j'aimerais sacrément tomber sur son code source... la physique de l'eau, du sable, la corde ... vraiment curieux de voir comment les gars s'y étaient pris. (note au passage: il y a toujours le projet FuryStudio à étudier et les infos sur shikadi.net ). C'est aussi le premier jeu que j'ai pu utiliser comme référence pour le pixel art vu que tous ces graphismes étaient des .LBM.

Vient ensuite Prehistorik 2, qui reste une référence pour moi en matière de bonus, de cachette ... et de comment faire une démo d'un niveau capable de captiver une bande de gamins/jeunes pendant tout un après-midi. Comment Bilou.BAS faisait tomber les pommes pour le décompte du score à la fin du niveau ? Prehistorik 2. Comment le niveau-anniversaire essaie de vous pousser à faire un 100% sur un unique niveau un peu corsé quand-même ? Prehistorik 2. La révision des éponges pour les pendre au bout d'un fil ? Encore prehistorik 2. Lui ... trouver son code ... je ne sais pas trop. Ce serait peut-être un sacré travail de l'étudier si jamais il faisait surface, vu les stratégies "tout assembleur" si chères à M. Zmiro ... Mais on a toujours le site mine.nu et sa page sur le format des niveaux. (Il y a une réécriture SDL2 en C, cela dit ... )

The next two may not have their own tag, but their impact on game mechanics and how to make a compact game interesting over the long run are still fundamental. They are also two of the games for which I'd definitely like to see the source code, and figure out what design choice the developers have taken.

Et Pharaoh's curse. Il a beau être simpliste au regard des précédents, c'est peut être le meilleur exemple pour moi de rapport qualité de gameplay / quantité de contenu. Ceux qui lisent ce blog depuis assez longtemps n'auront pas manquer de noter que je finis régulièrement par revenir à des mécaniques tirées de ce jeu C64 ... et j'espère toujours voir débarquer la version remasterisée de notre ami Lazycow ... Notez que pour ce jeu-là, le code source, c'est de l'assembleur, donc plus facile à reverse-engineerer. Et quelqu'un s'y est déjà attelé.

Friday, March 04, 2022

Shikadi Walk

There's 120 ms between two frames of the Shikadi walk. They cover 1 full block in one full step (2 frames -> ~240ms for a full step). 

En gribouillant quelques idées de level design, voilà qu'apparaît la possibilité que les piles-momies de la pyramide de Bilou puisse déclencher des pièges sur leur passage. Par exemple électrifier des piliers qui soutiennent les plate-formes que Bilou emprunte. Mais il ne faudrait pas qu'elles fassent ça trop vite quand-même, histoire que le joueur ait le temps de réagir... voyons ... Omégamatic ?

Comparatively, the 'wander' state of the zooming bot (Sparky) covers 32/20th of that distance.
And keen runs at 37/20th of the shikadi walk speed. Almost twice as fast. Since I'm considering giving UndeadCells the ability to trigger electricity sparks when they reach some level elements, I'd like to ensure I at least don't make Bilou a game harder than Commander Keen in the Armageddon machine ...

Ah, and by the way, the dumblador (currently the slowest hazard in Bilou) needs 880ms to cover half a block. When walking, Bilou takes 8/60th second (133ms) to do the same. And he can run twice as fast.

J'ai donc ressorti Keen5.exe et tenté de recalculer la vitesse de déplacement des Shikadis -- ces personnages fait d'électricité -- qui ont un comportement similaire à l'approche d'une de ces barres auxquelles Keen peut s'attacher. Eh bien on est à 240ms pour un bloc de l'éditeur de niveau, soit 90% de la vitesse de marche de Bilou et 54% de la vitesse à laquelle Commander Keen se déplace.

ça reste relativement lent par rapport aux autres ennemis du jeu. En mode 'surveillance', le robot Sparky ne met que 150ms pour couvrir un bloc (et non, je n'ai pas mesuré la vitesse de Sparky en mode 'attaque').

Tuesday, January 18, 2022

Keen sur Switch!

Oulah! On se calme tout de suite, les gars. Je vous vois déjà bondir sur le store, cartes visa dehors ... Il ne s'agit que de Keen Dreams, le poussin noir de la couvée. Le lost-levels 3.5 qui marque la transition entre le classique "invasion of the Vorticons" et le cultissime "Goodbye Galaxy".
Mais bon en promo à 2 euros, même si c'est le seul épisode pour lequel j'aie jamais dépenser un cent (bin oui, les épisodes 2,3,5,6 étaient introuvables dans mon rayon d'action et les épisodes 1 et 4 étaient redistribuables librement :-P), même s'il est affublé d'un scénario discutable, de graphismes meilleurs-mais-un-peu-à-l'arrache et d'un gameplay franchement perfectibles, je tente.

K1 : classique.
KD : meh.
K4 : cultissime

Allez, je remets un petit comparatif pour ceux qui étaient ailleurs dans les années '90. La première trilogie, c'est un personnage de taille modeste dans un environnement aux graphismes minimalistes: à-plats de couleurs, perspective frontale, décor épouillé ... mais c'est le tout premier jeu de plate-formes à scrolling sur PC alors on se l'arrache.

Overview: There are gems of game design in the 'Commander Keen' franchise. Okay, likely fewer of them in the 'Keen Dreams' episodes. And unfortunately, this is precisely the one for which we can find sources on the Internet and a port on the Nintendo Switch game store. It could have been a nice idea, but given how the original material was processed, it should rather have "crime scene ** do not cross **" banners around.

La suite "Goodbye Galaxy" prend le pari d'une perspective pas-complètement-cavalière (influence de Prince of Persia ?), offre un personnage plus grand et des décors nettement plus riche. Elle amène aussi une musique de fond et des effets numérisés (K1 devait se contenter de bruitages au PC-Speaker. Oui, ça fait mal aux oreilles).

Au niveau du gameplay, passer de K1 à K4, c'est un peu comme passer de MegaMan à MegaMan X: de 2 directions de tir, on passe à 4. On ajoute des pentes, la possibilité de s'accrocher aux rebords des plate-formes et de monter/descendre à des barres de pompier. Le jeu gagne ainsi énormément en souplesse. On rajoute aussi un saut plus ou moins haut et qui réagit au millipoil. Le saut minimum couvre les 2 blocs au-dessus de Keen. Le saut maximum (sans pogo) en prend 3 de mieux. (Keen faisant lui-même 2 blocs de haut).

Si graphiquement, on pourrait pardonner à Keen Dreams d'être un cran en-dessous du niveau de K4, le fait qu'on ne sache pas encore s'accrocher au bord des plate-formes fait nettement plus mal. En introduisant une perspective ou le sol apparaît presqu'aussi large que le personnage n'est haut, on introduit aussi une incertitude sur notre capacité à atteindre une plate-forme donnée. Comme en plus on nous a retiré le pogo, ça donne un jeu où on va souvent rater ses sauts. De plus, si KD réagit aussi au millipoil, il n'a qu'une hauteur de saut (peu s'en faut) à l'instar du classique "Invasion of the Vorticon". On ira donc souvent se manger le plafond ou finir dans les pieds du monstre situé au-dessus de nous, sur une plate-forme jump-through. Vérification faite: le jeu d'origine n'a pas ce problème (il y a 1 keen de différence entre le saut le plus bas et le saut le plus haut), pas plus que Keen 1. Avoir forcé une seule hauteur est une spécificité de la reprise sur switch.

#SHOOT: commander Keen's primary mean of defence is to shoot at baddies, in all episodes. 'Keen Dreams' shots significantly differ from all other episodes' neural stunner shots, though. They're affected by gravity rather than shot straight, but most of all, their effect is temporary. That wouldn't be so hard to stand if we had not such a limited stock of amno. The switch port of the game makes that even worse by resetting the amno counter when you enter a level. No more way to use the first levels to hoard amnos so you've got more shots allowed in a later, harder level.

Let's make it a lesson learnt for Bilou Dreamland: if you permanently consume something by shooting, then the effect of shooting should be permanent as well. As often as possible.

La dernière grosse différence entre Dreams et le reste de la série, c'est qu'ici Keen n'a pas un pistolet, mais qu'il lance des pastilles-fleurs affectées par la gravité. Vu le nombre d'années depuis ma dernière partie de Keen "canoniques", on va dire que je devrais m'y faire. En revanche, leur effet est limité dans le temps. A l'époque, ça m'avait valu quelques morts évitables. Ici, ce sera l'occasion de voir ce que les joueurs de Bilou: Dream Land ressentiront. Verdict: des munitions limitées avec un effet temporaire = panne sèche assurée. On veillera donc à ce que Dreamland garde "munition consommée = effet permanent" tout comme SchoolRush.

Que dire de l'adaptation sur Switch, donc ? Eh bien, figurez-vous qu'ils nous ont ajouté des musiques. Si si. En gardant un style assez proche des sonorités adlib de l'époque (bien), mais assez moyennement inspirées sur les thèmes. On est plus dans l'ambiance de Keen 6 que de Goodbye Galaxy et ses thèmes inoubliables, selon moi. Il nous ont aussi rajouté des petites bulles de texte ça et là, avec des polices de caractères improbables ou des menus avec des icônes douteuses. Jugez plutôt! Mais sinon, à part le fait que les vies semblent illimitées, on est dans une adaptation assez fidèle du titre original ils ont complètement ruiné l'intérêt principal du jeu.

Je m'explique: le coeur de Keen Dreams est de s'assurer qu'on a assez de bombes pour affronter le boss final, insensible au FlowerPower. Ces bombes sont cachées dans des recoins des niveaux (de certains niveaux, en fait). Et comme on ne peut visiter chaque niveau qu'une fois sur une partie, se ruer sur la sortie n'est généralement pas la bonne option. Pourtant, dans certains niveaux, atteindre la sortie est assez simple, voir trivial.

Je peux comprendre que les éditeurs du 'remake' aient décidé que les niveaux soient librement revisitables, mais avoir 'sucré' purement et simplement l'objectif premier, c'est à se demander pourquoi reprendre le jeu.

#game design: The ultimate goal of the original Keen Dreams episode is to find and collect Boobus Bombs. There are a few in many levels (but not all) and a warning is shown when you enter the level. If you've already played enough to reach the final boss' castle, most likely you've realised that you were short of those bombs, and that they were the only thing that could affect the boss. You can more or less start the whole game anew and be more careful not to rush for the exit of bombs-featuring levels.

Granted, this is an arguable game design choice by 202x's standard. It already was when I played it after DKC! But it is the keystone of the whole game. Levels in Keen Dreams aren't SMB-like course to complete left-to-right. They aren't either key-and-locks mazes of earlier "Invasion of the Vorticon" episodes. You may have a tall waterfall level where the exit is a few hops ahead to the right, but that has depth and heights to explore for you to find the precious bombs.

The switch review allowed levels to be re-visited freely, killing the thrill of not finding enough bombs. It revealed secret passages with a changed color. Worst of all, it adds a 'RUN' mechanics that means some of the jump-puzzles were you where teased with bombs but then had to figure out how to reach them got completely undermined. Oh. And they screwed the *JUMP* mechanics.

Autre point douteux: l'ajout d'une mécanique de "course" ... à savoir la possibilité pour le
personnage de doubler sa vitesse, ce qui casse évidemment certains puzzles basés sur les sauts. Dans la ville des patates, par exemple, on pouvait voir assez facilement la position de ces bombes, mais elles sont hors d'atteinte. Pour les choper, il va falloir aller jusqu'à la fin du niveau, remarquer une libellule-plate-forme parmi les autres libellules, grimper jusque tout en haut et réussir un sans-faute dans un enchaînenement de sauts. Puis revenir.

Comme si ça ne suffisait pas, tous les passages secrets vous sont révélés. Oui, vous m'avez bien entendu: alors que les passages cachés (et où vous êtes invisible) sont une des pierres angulaires de Goodbye Galaxy (et donc de Dreams), ici, on a marqué leur emplacement par du sol plus clair. Plus aucun mystère, du coup.

#COLLECT: Keen games have always featured lot of sweets to pick up. ultimately, they would grant you 1-UPs, and with a game where any hasard means insta-death, 1-UPs are key to success. That was balanced with 1) perma-completion of levels 2) exponential target (next 1-UP will cost higher) and 3) positioning of high-value sweets in dangerous spots. The switch edition breaks this completely. Levels can be re-visited at will, but there is no 1-UP any more (they aren't even replaced with something else) because you've got infinite stock of retries. The only thing you could earn for picking a sweet is ... increasing the completion meter for the level. This is actually frustrating because of the high-value (lost) high-danger (preserved) hidden sweets: you'll get something more only if you find 100% of the sweets in a level, but even a 10-years-old can see that goal is actually unreachable (especially since the level doesn't remember collected sweets if you die).

Est-ce qu'il y a encore quelque chose à dire ? Circulez, m'sieur-dames: y'a rien à voir.
oui! Les munitions! j'ai déjà expliqué en quoi la combinaison tir-qui-assomment et munitions-limitées font mauvais ménage. La réponse de gamer à ce problème épineugle est d'utiliser les premiers niveaux pour maximiser son stock de munitions tout en contournant les ennemis, évidemment. Une grande partie des maps des niveaux qui ne contiennent pas des bombes ont des cachettes à 'graines de fleur' en dehors du chemin principal, histoire de quand-même récompenser la récolte. Mais dans cette version sur switch, votre compteur de munitions est remis à 10 chaque fois que vous entrez dans un niveau. Aucun intérêt, donc.

Resterait-il les bonus-à-points ? même pas! Ils servent normalement à gagner des vies, mais on l'a vu: les vies sont ici illimitées (et donc les 1-UPs retirés des maps). On pourrait se dire que 'c'est pas grave: ce sont des gougouilles, ça reste sympa de juste essayer de les attraper toutes. Oui, sauf que chez ID, ils aimaient bien mettre une part de gateau derrière un obstacle bien chaud, et comme on a qu'un seul point de vie, on est en réalité invité à décider si on se sent capable de prendre le risque ou pas. Tenter le 100%, c'est la mort assurée. Du coup, même J.L.N s'en rend compte: c'est nul.


Tuesday, October 22, 2019

Ori and the Fantastic Beasts

Je crois avoir trouvé ce qui me dérangeais dans le bestiaire d'Ori. Ori lui-même et les deux NPC majeurs (sa 'mère adoptive' Naru et Gummo/Gollum) sont fortement exotiques à nos yeux. Et quelque part, ça a créé chez moi l'anticipation de jouer dans un monde onirique et exotique (au sens différent de tout ce qui m'est familier). Ce caractère est rencontré par certains des monstres, mais pas par la majorité de ceux qu'on rencontre au début de l'aventure. Les oiseaux et les araignées, notamment, sont à mon avis trop proche de ce qu'on peut avoir dans notre monde.

Ensuite il y a les blobs. Ils sont effectivement absent du monde réel, mais ils sont tellement présents (et cliché) dans les jeux vidéos que j'ai l'impression qu'eux aussi ne collent pas avec l'effet exotique attendu.

It took me time to pinpoint what was bothering me with the monster design in Ori and the blind forest, but I think I finally figured out. Ori, his "mother" Naru and Gummo-the-Spidey-Gollum have strongly exotic design -- by exotic I mean far away from what we could find in our world. Maybe "alien" would be a better term. Some monsters share this exotic trait, but others don't and tend to take me out of the "wow ... another world" feeling. Sometimes (e.g. for birds and spiders), they feel too close from what we can find in our world. Sometimes it is because they are too cliché (especially the blobs).

L'effet exotique est rencontré par contre dans les "frogillas / fronkeys", mélange de deux animaux tels qu'on pourrait le voir avec les pégases. L'effet est malheureusement réduit par le fait que cet ennemi est souvent vu "ramassé", en embuscade.

L'effet est maximal avec l'espèce d'orbe qui sert de mini-boss dans l'arbre et qu'on retrouve dans le volcan. Là, on est complètement dans un autre monde. L'effet est réussi aussi avec l'espèce de micro-rhinocéros auquel on peut faire perdre la carapace (si on découvre qu'il peut la perdre) et avec l'espèce de grenouille-cracheuse, parce que si elle gonfle son ventre comme une grenouille, elle se promène la bouche vers le haut, vers ses quatre patte telle une sorte de plante mobile. Mais tous ces personnages sont arrivés bien plus tard face à moi, et à part dans le "col du chagrin", ils restent minoritaires.

The most exotic ones are likely the shooting orb in the fire areas (and met once in the tree, for some reason --  This one even almost feel alien to Ori's world -- and the fronkey / frogilla, an efficient pegasus-like merge of two existing animals. The effect on the frogilla is however diminished by being too hard too read when crouched.

After closer analysis, what initially looked like "just a rhino" turned exotic when you realise you can make it lose all its armor (which only occured after I completed the game once), and when you note that the other frog-like monster (the one that spits at you) looks like a flower bulb on legs...


Even the crows were actually quite alien with their four eyes (spotted on some artwork). But honestly, who did notice that while playing ?

Je constate à posteriori qu'ils avaient dotés les "corbeaux" de 4 yeux (+exotique) mais c'est malheureusement indistinguable à la résolution choisie pour le jeu: on dirait juste des yeux obliques fâchés.

Dans l'ensemble, le jeu reste grandiose. Et si l'apparence des monstres a pu être décevante, la variété des interactions n'a rien à envier à commander Keen

C'est une image que j'aurais dû blogger depuis des années, où les monstres de "Shadowland" ont été triés selon leur niveau de résistance au tir de Keen (horizontalement, gauche = facile, droite = impossible) et de leur mobilité (verticalement. Haut = presqu'immobile, bas = peut occuper de très nombreux emplacements différents).

Deux coins y sont vides:  le supérieur gauche qui correspondrait à un ennemi quasi-immobile et éliminé en un tir -- donc inintéressant au niveau du challenge proposé. Ils sont pourtant présent dans Ori (via des blobs immobiles et passifs) et font office de cachette-à-bonus en début de partie. Le coin inférieur droit correspondrait à un ennemi invincible et succeptible de suivre le joueur dans toute la map. Un cauchemar, quoi. On pourrait y caser le "dopefish", celà dit, et c'est uniquement sa taille et sa lenteur qui permettent au joueur de s'en accomoder.

So finally, some monsters could have benefit from less detailed but more readable design, and only the blobs are truly lacking distinctive look. Unfortunately the blobs are from far the most ubiquitous monsters. Good news is that the design space for the interactions is varied enough. Some chase you, others don't. Some have a weak point to some of your other techniques, other don't. Some shoot things you can bash, other shoot spikes you *must* avoid, etc. I don't have yet a map to show all that as cleanly as with Commander Keen 4, but it still convinced me.
 
(that Commander Keen map had mobility on the vertical axis and stunnability on the horizontal axis: top-left corner = limited mobility and stunnable: given that SHOOT can be done from 4 directions at screen distance).

When I did the monster analysis of Keen, I noted the lack of monster in the "does not move, can be stunned" area. Such monster would offer no challenge, and the correspondant design space is thus empty in Keen. There is such monsters in Ori, though, and they serve as "coin blocks" and destructible walls. bottom right corner = free mobility and invulnerability, usually empty except ... Oh yeah, there should be the dopefish. Only its large size and slow speed make it manageable.

Wednesday, April 12, 2017

De plus en plus long ?

Ai-je raison de penser que les niveaux de jeux de plate-formes sont de plus en plus long, et donc infaisables sans avoir une demi-douzaine de checkpoints au minimum et des vies infinies ? 

pirez in Bilou : School Rush (1'30") P

SMB 1-1 à l'aise (1'20") NES
SMB 4-1 à l'aise (1'20") NES
Commander Keen, perilous pit (4'00") SNES
Commander Keen, perilous pit (0'45") -- world record. SNES
DKC, Millstone Mayhem (1'20") SNES
SMW, Donuts 1 (1'15 en prenant son temps) SNES
DKCR -- level 2, 100% (7'30") WII+
DKCTF -- level 2-6, no collectible (2'40) WII+
Rayman Origins, level 2-1, 3 cages (4'30") WII+
Splasher, level 2 (speedrun) (1'30") WII++
Splasher, level 7 (speedrun) (1'50") WII++
Giana Sisters Twisted, level 1-6 (speedrun, no boss) (4'35") WII++

La minute' trente de Pirez pour finir le parcourir le niveau 1 de Bilou: School Rush est donc assez bien dans la moyenne. Ce n'est pas un niveau court, mais ce n'est pas un niveau long non plus. Il y a bien des jeux qui ont des niveaux beaucoup plus longs (la palme revient à Giana Sisters, talonné par les Donkey Return/Tropical freeze si on essaye de récupérer les items).

Sometimes, I got the feeling that levels in platformers are up to 10 times as large as they used to be. That feeling grew up as I played/watched some Tropical Freeze and culminated with the strolling in the amethyst mines of Giana Sisters: Twisted Dreams. But is it accurate ? Above is a list of youtube power plays / speedruns of some of my reference games. I picked the second level most of the times, or the first level orf world 2 ... or some particularily memorable level I want to compare against.

It looks like I'm not completely wrong, but biased by the amount of side-action that exists in latest Rayman and Donkey Kong games. Splasher, on the other side, seems to have a more standard 1:30 average run-through time. Just like Bilou: School Rush :P
.

Splasher, par contre, reste dans un timing habituel. C'est uniquement parce qu'il s'agissait d'une "blind race" que j'ai eu l'impression que les niveaux étaient beaucoup plus longs que le "niveau standard"

PS: non, ne cherchez pas Keen 4 sur NES. C'est un jeu PC. Je le mets dans "SNES" en fonction de son époque et de sa technologie (CPU 16 bits, peu de mémoire, son FM). Idem pour les "Wii+" et "Wii++".

Ah oui. J'expliquerai un peu plus tard le lien avec Splasher.

Saturday, January 10, 2015

Keen: ClipToWalls()

Pour éviter que Keen ne passe à travers les murs ou ne reste bloqué en bas d'une pente, les niveaux attribuent à chaque bloc de 16x16 pixels un ensemble de propriétés. C'est la technique des "tiles" bien connue de la plupart des lecteurs. Ce qui est particulier dans le moteur d'ID software, c'est la possibilité de définir séparément l'animation, la pente de sol, le comportement en tant que bloc spécial (valeur du bonus, couleur de la clé, etc.) et la polarité du mur.
Plus fastidieux à définir que le simple remplissage en tant que bloc solide de mon éditeur de niveau, mais heureusement, dans Keen, il y a presque systématiquement correspondance entre graphisme et propriétés, et l'éditeur de niveau peut automatiser tout ce qui n'est pas passages secrets.


Levels in Commander Keen are build out of tiles -- 16x16 pixels squares combining a graphic content and some in-game properties. In ID's engine, the tile number (*map) is used to index a set of arrays that are present in game definition, and read at game startup into tinf. NORTHWALL, in the snippet above, is the offset to the array holding information about how the tile behave as a floor. Is it sloped ? can we move through if we're sliding down a pole ? tinf[NORTHWALL+*map] tells you that. And only that. If you'd like to know whether there's a bonus of some value, you should definitely check another "slice" of the tinf array.

Interestingly, the behaviour routines won't immediately react to wall/floor/ceiling collision. Oh, well, character will immediately be _clipped_ to that wall. Aligned, if you prefer, so that it doesn't enter a rigid structure. But the alignments that were performed are saved into four boolean variables: hitnorth (floors), hitsouth (ceilings), hiteast and hitwest (walls). Behaviour routines like KeenAirReact use this information to adapt the current state (stop falling when reaching the ground, for instance).


La notion de "polarité des murs" est intéressante. Lorsque le personnage se retrouve partiellement dans un mur, c'est cette polarité qui décide si Keen est repoussé vers la gauche ou vers la droite. On aura donc jamais de situation comparable au "zipping" des jeux NES où Megaman se met à traverser le niveau à vitesse super-sonique lorsqu'il rentre dans un mur simplement parce que les programmeurs se sont contenté de "si on est dans un bloc solide, on repousse Megaman sur le tile suivant". Evidemment, ça suppose que les murs font toujours au moins deux tiles de large.
A Zipping technique in Megaman. Propelled at 1 tile/frame or so.

Another interesting thing is that walls have polarity. They're either left wall or right walls. And they're not plain ground either: you could fall through a wall if there were no floor on its top to prevent you from entering there. And it's actually more resilient against zipping through walls. Unlike Megaman, Keen wouldn't be propelled to the (arbitrary coder decision) right if he ends up into the wall from the left while heading left. A wall on Tuberia knows whether it is an east wall, no matter the direction, speed and age of the Commander. And if it's an East wall, it will push you to the East, back where you're supposed to belong to. That makes ID software's collision handling the perfect opposite to Epic Megagames' cando() function.

C'est intéressant de voir que ID software a choisi ici une technique radicalement opposée à celle d'Epic Megagames. Pour Jill of the Jungle et Xargon, Epic faisait en sorte que le personnage n'entre jamais dans des tiles qu'il ne peut pas traverser (grâce à la fonction "cando"). Pour Keen, think() peut potentiellement faire rentrer un personnage dans un mur, mais le déplacement via ClipToWalls() le repoussera automatiquement dans la bonne direction, sans risquer de se faire piéger par un demi-tour de dernière minute comme dans Mario Bros.

Sunday, December 28, 2014

Keen ClipToSprite()

This is the code snippet for the ClipToSprite() action that results in pushing monster/keen interaction when the monster stands on the left. The code adapts characters expected motion (which differs from its computed speed and is transient) so that intersections between characters hitboxes remains empty.

The condition highlighted with yellow puzzled me at first. In fact, we'll note that leftinto == xmove (the difference between characters speeds) when they were exactly side by side at the previous tick. Would there be 1 pixel distance between them at the previous tick, we'd end up with leftinto == xmove -1. So what it really implies is that we won't get pushed at high speed if we fall down just on the left of a carrot running to the right with a large leftinto value (e.g. if we fall on carrot's head and move down through it).

Une seule fonction -- ClipToSprite -- permet à Keen de s'aligner sur d'autres objets en définissant un nouveau mouvement qui s'exécute en plus du mouvement prévu par la fonction think(). Le principe de base est de calculer de combien de pixels les deux personnage s'interpénètre et de repousser celui qui n'est pas solide par un déplacement opposé.

Il est important pour comprendre ce code de se souvenir que le moteur de jeu travaille en plusieurs passes et que tous les personnages ont déjà leur nouvelles coordonnées quand les tests de collision ont lieu. Les valeurs originales de xmove et ymove ont donc déjà été appliquées. Par la "condition jaune" (leftinto <= delta_xmove), on s'assure que Keen ne sera repoussé par le bord d'un objet que s'il n'avait pas déjà dépassé ce bord à l'étape précédente (mais sans que la collision n'ait lieu parce qu'il était au-dessus du chariot, par exemple).

The ID keen engine is multi-pass. That means when ClipToSprite() is invoked as result of keen/courier contact, setting keen.ymove=0 doesn't prevent keen from falling, because he already moved down in the previous step. Instead, it prevents him from moving down again as result of the carrot collision. This design avoids issues with moving platforms without requiring a re-ordering of the objects evaluation.
This is also made possible because objects have a separate react() function to align against level structures.


Pour les plate-formes, des tests verticaux font suite aux tests horizontaux également présents dans les "monstres pousseurs" comme la carotte véloce. S'il est surprenant que le déplacement horizontal de Keen soit exactement celui de sa plate-forme (et pas Keen.xspeed + Cart.xmove comme le voudrait la physique), c'est qu'un premier mouvement a déjà eu lieu. Il ne reste plus qu'à appliquer le mouvement de la plate-forme à Keen, le repousser vers le haut et surtout s'assurer qu'au moment de l'appel à KeenAirReact, la logique du jeu pense qu'il y avait un bloc solide sous Keen. C'est le rôle de la variable hitnorth qui conserve le type de tile qui a interrompu le personnage lors de la phase de déplacement.

Characters that push you but you can't ride ends after those horizontal tests. For carts, platforms and Keen4e's bouncing red ball, you'll also process the "bottominto" test. Note that since we already moved Keen according to the direction keys, setting keen.xmove=cart.xmove and invoking ClipToWalls() again -- which includes applying (xmove,ymove) to (x,y) coordinates of Keen -- combines cart's move with Keen's own move as expected. Hacking the hitnorth member will make KeenAirReact() function believe that some solid ground was found during move/clip step.

Monday, December 22, 2014

Keen's Inception

Coincé entre deux générations de "game engine" de la série commander keen, on trouve un jeu étrange, faisant presque figure de "lost levels": Keen Dreams. Une grande part du design global de l'excellente série "Goodbye Galaxy" est présent: décor en perspective cavalière, personnage de 40 pixels de haut, environnements variés et son SoundBlaster. En revanche, keen se promène en pijama et en pantoufle et ne dispose ni de son neurolaser, ni de son célèbre pogo. A la place, Keen peut lancer en cloche des mines transformant les ennemis en fleurs à leur contact. Le gameplay demande donc beaucoup plus de précision que dans les autres épisodes, d'autant plus que les ennemis ne resteront pas transformés éternellement. Ça n'est pas sans rappeler le lancer de taille-crayon dans Bilou, je l'avoue, mais si je vous en parle, c'est surtout à cause de ses sources, ajoutées sur github début septembre, et que je suis occupé à analyser. Les sources sont essentiellement en C avec quelques blocs d'assembleur en ligne, chose plutôt rare pour l'époque.

Bien sûr, j'aurais préféré que Javier et Chuck nous proposent le code de Goodbye Galaxy, notamment à cause de l'absence de pogo dans cet opus, mais c'est le premier Keen à proposer des pentes, ce qui n'est déjà pas si mal.

Keen Dreams' source code has been released last September. I wish it was the code for one of the Goodbye Galaxy episodes, of course, as it is one of the games I played the most, and the one with the richest features set -- pogo, gun, moving platforms and shooting ennemies -- which isn't crippled with clipping bugs. Anyway, Keen Dreams has slopes and shooting/pushing ennemies. The map design with its "info layer" suggests that most of the engine has been kept between Keen Dreams and Goodbye Galaxy. The character's moves (jump, run and pole-climbing) are direct translation of GG spritesheet. The pogo is missing, and I will have to define how the lone "canteloupe cart" can be ridden. 

Rather than stunning gun, Keen throws "flower power" seeds that are affected by gravity somehow like my dumbladors. Gameplay-wise, I cursed that decision quite often. Aiming for those fast-moving, aggressive vegetables with something that follows an arced curve, bounce on the ground and only stuns for a limited amount of time made imho this episode almost the hardest of the series. So far, I haven't found arced curve of bladors that hard to use, but on the other hand, monsters in Bilou's Schoolzone don't kill you instantly on contact.

N² with high N could turn Nightmare.
En plus de leur calques "graphiques", les niveaux possède une couche "info" qui indique quels monstres créer au chargement du niveau (scaninfoplane et HandleInfo). Les monstres de l'ensemble du niveau sont conservés dans une liste liée, mais seuls sont "actifs" ceux qui sont assez proche dans l'écran. Leurs collisions sont gérées par un parcours imbriqué de la liste (N²) -- rien d'équivalent à mon système de "castes", donc --  mais vu le nombre réduit de monstres par écran dans le level design, celà ne pose pas de réelle difficulté, sauf peut-être dans le niveau des vignes.

Compared to my own engine, code for managing collisions looks quite simple. There is no Hero/Ennemy casts, nor collision masks. The engine checks every pair of "objects" for intersection of axis-aligned bounding-boxes. That could easily turn into programmatic nightmare in a game with heavy number of monsters like Apple Assault (up to 10,000 checks per frame), but here, the test is skipped as soon as one of the monsters is off-screen (active is false), and there quite little places where the screen shows more than a handful of ennemies at once. 

Funny enough, although everything may have its own contact() function and both are invoked when two objects come in contact, there is no passive/active role... yet, monsters typically don't use their contact() function at all, and whether Keen should die or be granted more points is all encoded in Keen's own contact() function, and contact() function for the flower-power seeds has knowledge of which monster can be stunned and which object shouldn't be affected.

Casts make it linear and scalable
On a une fonction "contact()" pour chaque monstre qui régit les changements en cas de collision. Pas non plus de notion de "actif/passif" mais une organisation où "PowerContact" (pour l'arme de Keen) transforme tous les objets en fleurs et KeenContact() mêne à la mort de Keen presque systématiquement. Ces fonctions contact ont la possibilité de faire n'importe quels tests (on est dans du code C), y compris aller tester l'étape d'animation de l'objet avec lequel on est entré en contact ... ce qui permet de concentrer toute la logique de collision dans quelques objets. Pour les monstres, il n'y aura en fait aucun code pour les contacts.

Ça vaut aussi la peine de regarder de plus près le système des "ticks" qui règle le comportement des personnages. Ce type de code est le plus souvent absent sur console. La vitesse du CPU est connue et la mise à jour de l'image à l'écran assez rapide vu la structure choisie pour le processeur graphique. Mais on est ici sur (vieux) PC, avec une vitesse quelque part entre 6 et 40MHz pour le processeur principal et un système de rafraîchissement de l'écran passablement complexe. Le jeu ne tournera certainement pas à 60 images par secondes, ni même à 30 ou à 12. On aura plus que probablement un temps de rendu (entre l'instant où la logique du jeu a fini sa mise à jour et le moment où la nouvelle image est effectivement visible à l'écran) variable.

The game logic is built around the notion of time ticks, which are a virtual equivalent to video frames on a game console like the Nintendo DS. However, unlike a console, the PC (ranging from 6 to 40MHz by that time) cannot guarantee we'll have a new frame rendered every 1/60th of second -- maybe not even every 1/12th of second. It's much more likely that the framerate will be irregular, depending on bus availability for memory transfers and complexity of the current scene. ID software developers thus measure how much time elapsed since the last rendered image and deduce how much game logic _ticks_ corresponds to this time. The StateMachine() function then compensates by stepping the characters by (xspeed,yspeed) the appropriate number of time, invoking the think() function when needed. Rather than experiencing slow downs, we'd experience a drop in the frame rate, but no kid on earth would complain about that from a shareware

The code logic deciding whether think() should be called or not is quite complex, allowing some part of monster behaviour code to indicate "do not think for N ticks, and slide me at constant speed" or "only invoke think() when time is ready for the next animation frame", etc. The benefit is that most of the code that accommodates for "process N ticks at once" is in that generic logic, and the monster-specific code remains as simple as updating speeds, not moving coordinates. Another function will then react() to the new position of the character on the level (does it still has ground under its feet ?)

L'idée (toujours présente dans les Quake modernes, pour ce que j'en sais) consiste à mesurer le temps qui s'est écoulé depuis la dernière demande d'affichage et à exécuter k "pas" (les ticks) de la logique de jeu, où k * durée_d'un_pas = temps_écoulé. Ainsi, la fluidité varie mais le timing du jeu reste constant et on ne perçoit pas de réel "ralentissement". Ce qui témoigne de la qualité du design, c'est le fait que le code du comportement des personnages peut être écrit sans devoir se soucier de ce mécanisme: les fonctions DoActor et StateMachine prennent intégralement ce comportement en compte et sont capables de gérer une transition d'état au milieu du laps de temps à simuler sans pour autant faire N appels aux fonctions think() des personnages. Autre élément qui se retrouve aussi dans les FPS d'ID software: la fonction "think" n'est pas forcément appelée à chaque moment. Selon les besoin, elle peut être invoquée sur les étapes d'animations, à intervalle régulier ou aléatoire.

Dernier traît intéressant dans les grandes lignes de l'organisation du code: la fonction think() d'un personnage ne se préoccupe généralement pas des collisions avec les murs. Elle se contente de lire l'état du jeu et de décider de la direction/vitesse/animation à suivre. Une deuxième fonction, react(), associée elle aussi aux états du personnage, sera appelée après que le déplacement ait eu lieu et s'occupe d'aligner un personnage qui aurait rencontré un mur. J'y reviendrai dans le volet prochain.

Saturday, July 13, 2013

Level interplay

onAu beau milieu d'une forteresse (ou d'un chateau ?) de Super Mario World, je tombe sur ce genre de situation: Idéalement, il me faudrait passer en une fois ces sauts, et si je loupe mon coup, je me retrouve en réalité enfermé par des blocs invisibles. Une porte me ramènera alors en arrière pour que je puisse réessayer. 
Somewhere deep in a Fortress, a feeling of dejà-vu. Falling into a pit seems easily recovered, but as I jump to escape, I find myself actually trapped by invisible coin blocks. It's tempting to establish the link between this situation and the more common under-way that brings you back to a "bad luck, try again" spring. There's a significant difference, though: thanks to the presence of the invisible blocks, the player who failed once can undermine the challenge and avoid failing a second time by transforming the level to her advantage. 

Ce serait tentant de se dire "bah oui, c'est fréquent. Combien de fois on a pas vu un niveau avec sauts difficiles et un sol pour me rattraper, un bumper pour recommencer plutôt qu'une mare de lave ? Pas de quoi en faire un plat. En réalité c'est plus subtil que ça: ici, le deuxième passage sera simplifié par le pont que le joueur a créé en tentant de sortir du trou à son premier passage! On module donc de nouveau la difficulté du jeu à travers ses actions.

The next question is "do we actually need invisible blocks for this to work ?" There are other approaches that would work equally well. A Keen-like switch could enable a additional platform ... or just Rayman-like magic and you're done. Quite true. Yet, I find something elegant in how the invisible blocks managed to trap you while you thought you'd easily escape and *meanwhile* unwillingly undermine the challenge. True, the [?]-block is purely abstract, but the function it has is marvellously fitting the use of JUMP here ...
"Pas besoin de blocs-question pour ça!" ... peut-être pas. Dans Keen, un interrupteur aurait fait l'affaire alors que dans Rayman ... bah, y'a des trucs qui apparaissent et qui disparaissent à tout bout de champs, de toute façon. Un de plus ou un de moins, quelle différence ? De nouveau, ce n'est pas tout à fait pareil. Avec la version Keen, le joueur n'essaie pas de sortir du trou quand il active le switch. C'est une action différente. Dans la version Rayman, il n'a même pas le choix: le défi s'auto-détruit qu'il l'ait souhaité ou non. Il y a quelque-chose d'architecturellement élégant dans la façon dont le bloc-question permet ce type de piège (tout en étant au départ prévu pour tout autre chose)
C'est une recette qui date au moins de SMB3 où un saut raté est compensé par un bloc invisible au bord du mur pour permettre l'escalade... et qui dans tant d'autres situations permet au joueur de transformer le niveau au fil de son passage en offrant un certain niveau d'interaction avec des éléments inanimés.

I tried to find other platformers that had equivalently powerful item in their design. Many were ruled out (James Pond, Giana, Mickey) because they simply duplicated Mario's block. Then you've got a collection of platform/action games (Duke Nukem 2, Keen, Shantae, Nikita) where you wouldn't use such an item because JUMP is not such an important mechanic.

My best suggestion so far is thus the bouncing plum of Rayman (PSX), which provided interesting, organic way to transform challenges, but also a high degree of interplay (you can ride it either when it's resting or when it's bouncing) and reaction to gravity (it will not easily climb up hills). The fact that it may even transform ennemies is the ultimate plus: Rayman 1 wouldn't have been the same (and would have lost lots of its fun) if the plums were removed.


A défaut de bloc-questions, le premier Rayman offre un élément-inanimé-interactif bien intéressant avec les "prunes sauteuses". Plate-forme y compris pour traverser l'eau (fatale à Rayman), mais qui rebondit moins haut si Rayman reste dessus. Elle peut avancer lorsqu'on lui donne de la pèche, mais sur une pente, elle accélère/ralentit pour repartir dans le sens de la pente. Comble du raffinement, elle peut transformer certains ennemis en plate-forme mobile. Avec un élément de ce genre dans le niveau, on peut se mettre à l'affût des combinaisons inédites alors que même Rayman Origins reste relativement plat à cet égard pour autant que je m'en souvienne.

A late public voting saved Commander Keen 2/3's Vorta-Cola can. Although it offers only half the interplay of the [?]-block, it is a platform when you walk on it, but you can collect it from the side or from below.

(J'avais en tête qu'on pouvait marcher sur les cannettes de soda dans Keen 1, ce qui en faisait aussi un élément de "niveau transformable" dans un jeu ou la majorité des modifications passent par des switchs -- pas de magie ou d'invisibilité dans le monde de Billy Blaze -- mais c'était dans les épisodes 2 et 3: le Vorta-cola.)



Tuesday, January 31, 2012

When ID software is keen to hide ...

There's an interesting thing with this "tunnel" level of Keen Commander V, that reveals the way ID software did conceived secret passages as rewards for exploration to players. Exploration is a key part of Keen games: you're not supposed to zoom through levels, as many keys and doors will require you to take detours. In small corners, you might find hidden by-passes and hidden bonuses (like just above the blue rays on 1st figure). But here, they did a different approach. A huge, black door teases the player. You see there's something there, but how to get in ? is that supposed to be input or output ? It's a miracle you've got the time to think about that just after you avoided being zapped by Robo Red ! But no matter how hard you may try to get in, you're not in the right place yet (level is played right-to-left here).

C'est une idée intéressante qu'ID software a utilisé dans ce niveau de Keen5.exe : au début du niveau apparaît une porte mystérieuse -- une chose assez peu courante, dans les Keen. Apparemment, aucun moyen de l'atteindre. Et tout autour, c'est assez dangereux de traîner, avec Robo Red et tout ces shelleys ...

So good luck. Keep going. If you feel like exploring again when approaching the door from the left somewhat later, beware the smart bomb that will jump off the platform (oh ... just like an Appleman ? ... no: this one means death-on-contact and explodes into deathly bits when it hits the ground). Do you feel like rushing instead ? too bad: you're actually missing the entry to something ... you don't know what yet.

Only when approaching the exit door, you'll be shown what you've missed: a 1-UP. A pretty precious thing in Keen, but no: hollow walls around only give you a few bonuses. Will you head back for the hidden door and search more ? Or will you save the current life and exit ?

Ce n'est qu'à la fin du niveau que le joueur aura le fin mot de l'histoire: une vie, bien visible mais inaccessible. Ding, le franc tombe. Le joueur qui avait jeté l'éponge va sans doute retourner en arrière pour parvenir à atteindre la 1ere porte. Je pense, ceci dit, que Tom Hall aurait pu faire encore mieux. Primo, une seule porte, dans un niveau qui n'en contient aucune c'est louche. D'autant qu'il n'y a rien d'autre que la porte à cet endroit. Quelques gros bonus auraient pu faire croire au joueur que c'est une arrivée, pas un départ. Deuxio, il n'y a finalement pas de grand challenge à repartir en arrière, à ce stade, la plupart des dangers étant situés dans des embranchements latéraux ... ou ont été éliminés lors du 1er passage.

That's where imho the design becomes a bit weak. I'd have personally ensure that there is a significant risk in back-tracking to the access door ... Something like Robo Red, moving spikes, or a combination of shooting lasers and moving platforms (since normal monsters do not respawn in Keen). The only challenge here is a set of shooting lasers, but on solid ground, so you can move through that without too much trouble.

Voilà. Bon anniversaire, Piet ;)

Thursday, September 15, 2011

run, you fools!

Mario, Sonic, Rayman ... chacun d'eux peut courir, mais l'impact sur le gameplay est chaque fois différent. Voilà un petit dessin-du-dimanche pour refaire le point. L'élément intéressant (pour un platformer) n'est pas tant qu'on va plus vite en courant, mais plutôt la manière dont on va exiger plus de maîtrise de la part du joueur quand il doit affronter "un saut plus compliqué".

It's not that much about going faster, but rather about clearing longer holes with a jump. In most platformers, this is achieved through the RUN mechanics ... but not all. Check out my scribbled notes for details ^_^

Dans SuperMario, il faudra gagner en vitesse, donc essentiellement contrôler l'absence d'obstacles. Le "triple saut" des épisodes du nouveau millénaire poussent cette contrainte encore plus à l'extrème.

Rayman, en comparaison a un bouton de course "binaire". Un seul bloc suffit à faire un saut long. Par contre, le jeu est beaucoup plus pointilleux sur le timing du saut (point-test unique contre deux tests pour Sonic, peut-être ?).

Keen, lui ne court jamais (ou tout le temps, c'est selon), mais l'activation du pogo permet de faire des sauts plus longs (mais ici aussi, il faut faire d'avantage attention au timing et à l'environnement). Fury est un peu un mélange de Keen et Sonic: on court de plus en plus vite, et on saute d'autant plus haut qu'on enchaine les sauts (il suffit de garder le bouton enfoncé).

Saturday, July 23, 2011

Entering the Shadowlands ...

Episode 4 of Commander Keen is not far from fascinating me. That's likely the game I played the most (excluding beta-tests of PPP Team productions), and likely the game I'd love the most to replay once again. Of course, I'd love that some people would once say that about Bilou adventures as well, and somehow I hope I can learn something from CK4 that would help me reaching that goal.

Si je reprends la carte de Commander Keen 4 et que j'y reporte les différents éléments, on se rend finalement compte qu'il n'y a que 2 niveaux "gratuits" (c.à.d. qui n'apportent rien au niveau de la quête). Autre élément intéressant, dès les 2 premiers niveaux passés, la quasi-totalité du reste du jeu devient immédiatement accessible. Et ces deux premiers niveaux peuvent être franchis d'une traite par le joueur habitué tout en servant d'introduction à la majorité des mécanismes du jeu pour les autres. Une chouette manière d'éviter les "tutoriels".

I think one interesting aspect of CK4 is its overworld. It's mostly a select-your-level menu, and your goal should be to focus on those levels where a Guardian of Wisdom is being held captive. Of course, you don't initially know where they are, so there's some exploration dimension. The overworld is large enough so that you'll rarely see more than 3 levels on screen, but small enough so that you can travel it end-to-end in something a dozen of seconds.
During some spare time, I lost some time plotting which levels contain what "quest items". Guardians to be saved (red wizzrobes), hints from Floating Princess Lindsey that ultimately guide you to the Mighty Foot of Travel which can take you to the Pyramid of the Forbidden -- the otherwise unaccessible level. The major item is the swimming suit, hidden in Miragia, the disappearing desert city, which unlocks access to the three islands. Only the Isle of Tar and Sand Yego are "free fun levels" where you've nothing to earn (quest-speaking), not even a lot of lives or ammunition. They're rather an extra challenge, with fun-but-dangerous elements.

Beside this "swim lock", there's two gate levels (villages) at the start of the game, that can imho be seen as the frontier between basic skill acquisition and real danger. Both can be zoomed-through by the experienced player (just move to the left, hop over some monsters or spikes and you're done). It's interesting to see how the novice player is even -guided- through the sandbox area either by a friendly slope or an open door vs. a set of spikes.

For the novice players, they're a great introduction to the basic mechanics of the games, in a free-exploration fashion. Poles, doors, shots, switches ... everything is there, except key gems. It's interesting to see that a sandbox works as well as a tutorial to that regard. Of course, Commander Keen does not learn new moves during the game (vs. Rayman) and his move set is nuanced (ultra-pogo jump or rope-hop-while-blasting-downwards being examples) rather than complex (vs. Yoshi's Island or Super Princess Peach -- complexity arising from the number of possible actions and negative rewards from doing the wrong action at the wrong time).


Tout qui a joué à un Keen sait qu'un niveau ne peut être visité qu'une seule fois par partie. Sortir d'un niveau sans avoir trouvé le secret qu'il contient, c'est perdre définitivement ce secret jusqu'à ce qu'on recommence le jeu. Evidemment, pour éviter de bloquer le joueur, les mages seront le seul moyen de sortir d'un niveau quand ils s'y trouvent. Ce ne sont donc que les indices de Lindsey et le méga-pied-transporteur de la pyramide de la lune qui pourraient être loupés. Mais le résultat, c'est qu'on aura d'avantage tendance à explorer les moindres recoins du jeu, là où, dans Super Mario 3-*, j'ai davantage tendance à filer vers la sortie dès que les choses se compliquent, entre-autres parce que je sais que je pourrait refaire ce niveau-là plus tard (avec un meilleur power-up ou un peu plus de vies ...). Pourtant c'est bien Keen 4 le "platformer" auquel j'ai le plus joué et celui auquel je serais le plus succeptible de refaire une partie prochainement ^_^

Through the Commander Keen series, levels can be completed only once in a game: you never re-enter a completed level. That means if you complete a level holding a secret without finding it, you won't have the chance to get that secret before you replay the whole game. Imho, this is a key component that puts the player in an explorative mood, while you'll rather play a SuperMario game trying to zoom to the exit as soon as you don't feel easy in the level. The overworld reinforce that explorative mood by being itself open (once you've complete the two gates level at the start, 11/14 remaining levels become immediately accessible).

The overworld of the next opus -- the armaggedon machine -- is much stricter, with virtually every level being a gate to something else. There's very little room for exploration, just sufficient alternate ordering between the tunnels/balls pair to allow the player who faces a challenge beyond his skills at one place to try something else somewhere else. I spot that the two "mission-less" levels of Commander Keen 2 are also the ones where important plot/gameplay hints are unveiled. I'll investigate that further on another time.

Thursday, November 26, 2009

En attente de commentaires ...

I'd like to do a second pass on the pixel art of Bilou game. Here are a few references i collected.

Une scène du niveau "Chameleon Sting" de Mega Man X. Alors que j'ai tendance a avoir le même éclairage sur tous mes blocs de terre, les artistes de Capcom rompent la monotonie en changeant la quantité de lumière que les rocs reçoivent. Certains sont plus dans l'ombre, d'autres bien éclairés, etc.
A noter aussi qu'ils se sont simplifiés la vie pour le "roc de fond" en utilisant une couleur sombre et unie de laquelle ils font simplement ressortir quelques détails, et bien sûr avec un soin particulier apporté aux "bords" de cet environnement.
Enfin, la "machinerie dévoilée" joue le même rôle que les slugs juniors endormis dans Commander Keen: attirer l'attention du joueur afin qu'il ne cherche plus la répétition du reste des blocs.
Chameleon Sting's level in Megaman X wasn't really convincing for his trees, but it has an interesting approach for rocks. I tend to give all the rocks of a wall equal amount of lightning, but the artists here advantageously altered the "depth" of indivudal rock by varying their shading. One will also note single-color cave background that is compensated through higher level of detail at the edge. The unveiled machinery plays a role similar to the sleepy slug in Commander Keen : focus the player's attention on an usual part of the background and make him forget that the whole rest of the scenery is repetitive.

Tout autre genre, un morceau de "pekka-kana", que j'aurais presque tendance à utiliser comme contre-example. Trop flou, usage abusif des filtres, un arbre dont le tronc ressemble à un mur, etc. Pourtant, j'avais été assez séduit par les feuilles en blocs dans la jungle de Kirby Squeak Squad. On verra bien si mes "plate-formes feuillage" donnent de meilleur résultats, mais personnellement, j'aurais tendance à éviter. Ceci dit, ce sont des screenshots de la version 3, toujours en développement, donc pas forcément qqch qui sera conservé.
I once thought (after playing Squeak Squads) that applying a leaves texture on the shape of a tree could make it look like a tree while providing easier to use gameplay elements (regular platforms). Peka-Kana demonstrates how wrong i was. I take it as a counter-example.

Une approche simplifiée, pour un jeu d'arcade que je ne (re)connais pas: c'est le level design qui prime avec des "rampes" boisée et quelques troncs dans le décor pour faire bien. On cherche tout juste à donner un thème, pas vraiment à placer le joueur dans un environnement virtuel crédible. Le choix de couleurs est intéressant, ceci dit. Les "boules" répétées le long des "rampes" amènent de la variété, sans être très convaincantes.
In arcade games, you might end up with trees that are just "abstractly suggested" rather than actually represented. In this (unknown) game, they pushsed it to the extreme with ramps of green-and-wood texture (nice textures, actually) that exactly fit the needs of the gameplay. Everyone knows no tree behave like that, but you all know there aren't flame-throwing slugs around, don't you.

Et ici, la forêt dans Blork Carnage. Avec les arbres-palissades, le cushion-shading et les dégradés abusifs. Bref, tout - mais alors absolument tout - ce qu'il faut éviter. Ca ne vaut rien. Nada. Que dalle. Et je sais de quoi je parle: c'est moi qui l'ai "pixelisée" il y a 13 ans :P
Just to make it clear, this one is *not* reference material. It is the worst "woods" i've ever drawn in a freeware game dubbed 'Blork Carnage' some 13 years ago. A piece of nostagly to remind me "the errors that shouldn't be reproduced".

Tiens, ben voilà Keen, justement. Quand on parle du loup...
Pour de l'EGA, ça reste impressionnant, comme résultat. Je regrette un peu l'absence complète de vert, personnellement. Mais il y a quand-même le "désaturage" des couleurs quand on s'éloigne de l'avant-plan. Et un décor pareil, en parallaxe, ça serait difficile à gérer. Mais il faudrait que j'essaie de parvenir à quelque-chose de semblable juste pour l'exercice, tiens. Au moins une fois.
Noticed how Commander Keen artists managed to have trees de-saturating when they're far away ? okay, maybe it would have looked even better with something else than plain black, but that was EGA palette. Though such backdrop is a technical nightmare for parallax scrolling, i should try to do something alike at least once, for the sake of the exercice.

Autre ambiance, sur un mockup de Ben2theEdge pour une forêt sombre, presqu'en décomposition, où les racines vont servir de plate-formes. A noter à l'arrière plan un feuillage particulièrement réussi et particulièrement économe en couleurs. J'ai tendance à souhaiter une symétrie dans les détails en haut et en bas des zone de feuilles, mais en fait, c'est l'inverse que je devrais faire!
Sudden mood change, with a mockup drawn by Ben2theEdge. Dark woods, almost falling in pieces. Note that here, the "ramps" that fit the need of the gameplay can immediately be identified as giant roots. I also love how efficient the foliage of background trees is for a reduced set of colors. I tend to draw trees with an equal amount of details upwards and downwards. Ben proves here that this is not necessarily the way to go. I hope one day SEDS will be able to let me work on background like these.

Doremi Fantasy, plus pur style "chambre de *deline", avec le classique (presque stéréotypé) sol géométrique, des troncs bien verticaux et éloignés de sorte que l'on puisse sortir le grand jeu du parallaxe sur les différents plans de verdure.
Ca a beau être simpliste à l'extrème, je ne cesse de m'émerveiller du rapport effort/résultat que ce genre d'artiste parvient à obtenir.
Okay, definitely at the other side of the spectrum, Doremi Fantasy provides the stereotype of geometrical ground, fully vertical trunks and parallax-friendly layers of "green hills" that suggests you're somewhere between two layers of the Master Forest. I'm impressed by the effort/return ratio such artists achieve.

Le summum dans le genre est sans-doute atteint dans "Trip World" sur game boy. Rarement vu une forêt aussi bien rendue sur cette petite console. Le jeu étant exclusivement à scrolling horizontal, ils ont pu se permettre un feuillage sur une seule bande (mais qui s'assemble admirablement bien, je le reconnais).
And if you apply it to the monochrome display of the Gameboy, "Trip World" is likely the best you can get. I've rarely seen such a nice forest on that little beast.

Tout autre style: un projet en cours de St0ven, sur pixelation.
Si je ne suis pas terriblement fan de l'approche "sol monochrome", je dois admettre que St0ven maîtrise particulièrement bien le genre et, de par l'ouverture plus importante du reste du décor, s'en sert pour planter une ambiance plus opressante. pour le reste, la taille de l'image et le niveau de détail en fait presque une peinture. Ici, arbres et rochers sont hyper-réalistes. Aucune chance que je parvienne jamais à ce niveau, mais le choix des couleurs m'avait paru particulièrement intéressant.
In a very different style, here comes a mockup by st0ven (found on pixelation). I must confess i'm not a big fan of the "single-colour-ground" approach, again, but the way it is used here to improve the "oppressive" mood has something that definitely deserve respect. Every tree is unique and realist. I even expect something like a FlashBack gameplay. I doubt i could ever achieve that level of perfection at the scale of a videogame, but i especially loved the colours choice.

Pas vraiment dans la forêt, mais "green" quand-même : les Giana Sisters sur DS, premier monde. J'avais été agréablement surpris, au moment des "previews" du jeu par la variété amenée dans les rochers, jouant sur deux niveau de profondeur pour amener de la variété dans le décor. On remarquera aussi qu'ils ont optés pour un look "passerelles à peine en équilibre" plutôt que "masse de terre ferme", ce qui offre en fait bien plus de possibilités pour rompre la monotonie ...
The DS version of Great Giana Sisters brings in some interesting mix in level structure. While the original game was essentially made of "bricks world (and the game play haven't changed much), they gave the "non-playable ground" a very organic look by introducing holes of varying shapes.

Ambiance proche de "chaos engine" pour un mutant de AlexHW (aka. "Final Redemption").

A nice "Chaos Engine" look in this mockup by AlexHW. Not very comfortable with that technique of having the middle of the tree "plain dark", even if I admit it lets you build the tree the way you want with quite few tiles ... a technique vierbit mastered impressively.(previously on pixelation)


Dan Fessler, dans un remake hypothétique du (lamentable) jeu NES "Bible Adventures"... avec une utilisation intéressante de rochers presque "multi-couches" qui forme des plateformes plus pyramidales que rectangulaires. Dan opted for quite rocky ground, rather than just "dirt", which provides quite an interesting design of "stacking" rocks -- pyramidal platforms rather than just parallelipipeds, in some sort. First layers (near the top of the platform) are very close to each other and highly darkened, then they'll get more and more spaced as you take your distance (also, it's less and less "interesting" and shouldn't draw the attention too much in that area). You'll note that despite one would usually draw rocks with a grey tone, Dan opted for a reddish tone with yellow highlight and purple shades -- the usual choice for pixel artists who will reinforce gradients with a hue shift. Bunches of leaves are interleaved with more regular "falling grass" to form the border of the green platform. The "flat" area could still be improved, but it already gives a good look. Note that the same bunches of leaves will be reused for the trees, more or less. Note, too, that the foreground is mostly a "generic green-and-rocks" tileset: ony the huge tree on the second plane and the background define the area as a forest. Dan did a stunning job on that tree, using scarves to give it character and providing volume without falling in the usual "wooden snakes" approach. Maybe one could regret the over-angular look of the roots. I think they echo nicely the angular look of the rocks.



Et enfin, un mockup de Henk Nieborg, le maître incontesté de la discipline, pour la version DS (en cours de préparation) de Shantae. Diversité, Précision, Raffinnement. Il a également utilisé des plate-formes en roc surplombées de végétation basse, avec des teintes plus "classiques", mais s'offrant le luxe de rehausser de plusieurs groupes de fleurs et deux "niveaux" de végétation. Les "touffes de feuilles" font 16x16 ou 32x16 à vue de nez, le "pattern" sur les rochers un bon 64 pixels de large.
Nieborg rehausse son niveau d'éléments plus larges et non-jouable (colonnes et figure de pierre)