Thursday, May 28, 2020

Twisted Dreams and the level designer contract.

As I'm going deeper into level design analysis, I realize that there should be a sort of "contract" between the level designer (hereafter denoted "I") and the player (hereafter denoted "you"). Something that will at least feature the following items:

  • Art. 1°: I will not tease you with collectibles that are impossible to collect.
  • Art. 2°: Whenever you will die, you will know that it was your fault.
  • Art. 3°: I will not put you in a situation where the only way to keep on playing is to die.
I'm afraid we can't do that.
Many earlier games infringe those rules, at least partly. Whoever has played Commander Keen IV has at some point wondered how one could collect all those 1-UPs in the deepness of the lifewater Oasis... or that impossible-to-grab diamond at the end of Level 2 in GGS.

When you do observe art. 1° of the contract, however, placing an item somewhere that looks out of reach can be perceived as the signal that the player is missing some nuance in the gameplay mechanics. This happened in Donkey Kong Country, but I wasn't aware of the contract before I forced my way through the lost levels of DKC2 and discovered the roll-jump move.

Yes, you can!

It happened to me when playing Giana: Twisted dreams, too. There are two modes in that game: punk or cute. The punk Giana can DASH (even mid-air) and the cute Giana can HOVER. Let me call "TWIST" the mechanic that switch between punk and cute.

Black Forest did merge both TWIST and DASH mechanic into one convenient action button. If you press that button, you DASH, and if you weren't punk, you TWIST as well. Same for the HOVER button. That makes them more direct than e.g. Mickey Magical Quest approach where you use L+R to select a power, then activate it with X and finally use it with B. What I had not discovered (and almost made me drop the game) when my brother let me try the game, was the trigger that TWIST without performing any action. When you look at this gameplay video, it also becomes clear that you can TWIST while HOVERing without losing the ability to HOVER ... which is pretty un-intuitive. It can however be suggested to the player by an appropriate layout of cute-gems and punk-gems.




Sunday, May 24, 2020

Toujours dans les pentes ...

Eh oui ... on a passé la mi-mai, et je suis toujours occupé à faire tourner ces tests automatiques des pentes et à corriger l'algorithme doslopes et son intégration.

J'avais introduit un mécanisme "maxMove()" pour pouvoir obliger l'algorithme doslopes à ne pas essayer d'aller plus loin que ce que l'animation permettrait. Dans le cas contraire, il y a un désaccord entre le mouvement vertical prévu et le mouvement effectué, ce qui conduit le personnage à finir en l'air ou encastré dans le sol.

S'en est suivi une refonte de selfmove pour qu'il puisse retenir s'il y a eu un maximum appliqué (et forcer le même maximum au moment de la lecture de l'animation). Puis je me suis rendu compte que tout ça ignorait superbement les décisions du type "il ne peut y avoir aucun déplacement là-tout-de-suite", avec à nouveau des déplacement incohérents. J'essaie de le corriger, et du coup tout bloque à la première pause.

Bref, J.L.N me demandait si j'avais déjà commencé à faire des niveaux pour la pyramide, mais j'ai l'impression que ce n'est pas pour tout de suite. 

Sunday, May 03, 2020

Tortoise Shelve

C'est le frère jumeau de "jigé" qui m'a fait découvrir cette fonctionnalité ultra-pratique qui dépasse de loin ce que j'arrivais à faire avec mercurial en ligne de commande et l'éditeur EMACS: l'opération "shelve" de TortoiseHg.

L'idée est de passer en revue le contenu d'un futur "commit", et de choisir, patch par patch, s'il doit être appliqué ou s'il doit être gardé pour plus tard.

Confinement oblige, c'est surtout ma fée qui utilise son PC portable en soirée, du coup, j'ai un peu perdu le fil des modifications que j'avais tentées (et qui n'ont pas marché), mais il y a quand-même de bonnes choses dedans.

Ici, je peux aller à la pêche aux bons plans (les anglophones appellent ça du "cherry-picking", mais bon, ils ont aussi le piggy-backing, donc...)

Et ... oh, bin puisqu'on est là à parler de mercurial. Je viens de tomber sur un article impressionant de détails à propos des conversions requises suite à l'abandon de mercurial au profit de git par BitBucket... 

Wednesday, April 22, 2020

vannes à encre

Il y a bien eu quelques "vannes à fermer" dans School Rush mais la plupart des autres niveaux avec des zones d'encre dont la hauteur est variable, l'idée est plutôt de provoquer un transfert d'une zone vers l'autre, ou de déclencher la montée de l'encre qu'il va falloir prendre de vitesse.

J'aurais bien pris un mécanisme à la Fury of the Furries (un bloc à tirer pour créer un passage), mais il ne s'agit pas d'eau ici, mais d'encre-qui-blesse. Le plus prometteur serait d'utiliser un "accident" provoqué par un pendat qui se serait mis en chasse de Bilou.

Le retour de Bangbash ?

 Il y a eu un "grand absent" dans les niveaux de la School Zone jusqu'ici : Bangbash. Pourtant, il avait plus ou moins été le pillier central du redesign de la School Zone jusqu'en 2010.

Mais au contraire des pendats, jusqu'ici j'avais pensé qu'il me faudrait obligatoirement utiliser des modèles 3D pour pouvoir les afficher. Pourtant, pour "dreamland", j'aimerais bien pouvoir en mettre quelques-un dans le "niveau de rémi". Mais est-ce que les polygones sont vraiment indispensable pour son animation ?

Maybe you still remember BangBash ? If you do, I sure owe you something for it's been nearly a decade that it's been collecting dust. Back in 2010, BangBash was more or less the cornerstone of the SchoolZone redesign. Unfortunately, I had planned to use 3D meshes to render it, in a sort of New Super Mario Bros style, but neither the game engine nor the DS game tools have evolved to a point where that would happen. And it's quite a shame, because it means none of the "newer" levels can be used as planned.

idée d'animation de 'recovery' après une attaque.
La motivation principale pour un bangbash en 3D, c'était le mouvement où il attaque par rotation autour de son point. Appelons ça l'attaque latérale. Elle était essentiellement intéressante dans l'optique d'un jeu en 2.5D où elle pouvait applatir Bilou contre un mur ou l'envoyer sur un plan de jeu plus proche ou plus lointain, permettant de prendre volontairement des dommages pour rejoindre une zone secrète.

The signature move of bangbash is the front bash, where it tries to smash directly what is in front of him. The reason why I had planned 3D was that the whole game was supposed to be 3D when Bangbash was first introduced (2006). And because it had a secondary -- spinning -- attack, which would be tricy to render in 2D. But the only "interesting" game mechanics I could think of based on this spin attack was to throw Bilou into a more distant layer.
l'attaque frontale (image d'archive)

Bon, tout d'abord, c'est discutable au niveau du game design -- similaire à des faux-pics ou de la fausse-lave. Je serais tenté de dire, avec le recul, que si le "damage boost" est une technique valide en speedrun, ça ne devrait pas faire partie de l'expérience de jeu "normale" de se faire volontairement toucher par un adversaire.

But by today's gameplay standards, I don't think it would be a good idea to ask the player to take damage in order to progress -- or even to find a secret location full of goodies. That would be no different from fake spikes, which I decide I'd no longer use. So maybe I should just do it in plain pixels. After all, pendats were also supposed to be made of 3D models, and they work quite well with mere sprites. The thing will be to ensure that BangBash is sufficiently interesting while being 'only' 2D.

Ensuite, conditionner la technique du moteur de jeu pour juste une idée de passage secret, c'est franchement douteux comme équilibre effort/retour. Surtout si on projette de faire son propre éditeur de modèles 3D en plus.

Bref, Bangbash devrait pouvoir rester un adversaire intéressant même si il ne peut faire qu'une attaque frontale (ou il frappe droit devant lui, dans le plan de l'écran). Je dois faire des essais d'animation pour trouver le rythme de mouvement qui colle. A partir de là, on verra bien si le support des rotations de sprites est utile ou pas pour l'animation.

Bangbash's movements are sufficiently different from pendats, bladors and recto/verso (bouncing erasers). It moves around by hops. I've been sketching some interactions with bladors -- now the major mechanics for the SchoolZone -- including the possibility that Blador might turn back bladors at you if it see them coming.

Je dois aussi trouver une place correcte dans l'espace des comportements possibles pour BangBash. On sait qu'il peut faire trembler les crayons et certains livres au point d'en faire tomber Bilou. On sait qu'il marque un temps d'arrêt avant de frapper.

Sa vitesse de déplacement n'est pas aussi élevée que celle d'un pendat qui court et la hauteur de ses sauts n'est pas comparable avec celle d'une gomme qui saute.

Unlike other "monsters in the school zone, I also plan to make BangBash a permanent baddie. You may stun it, but I wouldn't let it be dismissed and leaving the level like you can do with pendats. That's its defining trait: BangBash is strong.

Son atout (et son "originalité") tiennent dans sa résistance. Au moment du design de BangBash, il n'était pas encore question lancer de taille-crayon. C'est devenu un des mouvements-clé de la School Zone. Il serait logique qu'on puisse mettre BangBash hors-jeu d'un coup de taille, mais ce serait aussi sympa de réduire le champs des attaques possibles. Par exemple en permettant à BangBash de nous renvoyer un taille-crayon qui serait lancé de face.

Autre élément possible: ne pas permettre l'élimination complète de BangBash, uniquement la possibilité de l'assommer pour quelques temps.

Finally, one thing that I must make sure I implement is BangBash's ability to shake some parts of the level -- up to the point where Bilou could fall from them and becomes exposed to BangBash again. Unlike the 'spinning attack' that was sketched, but never used in any levels I designed (unsurprisingly, since level design happens on paper :-P), there are a couple of places in some levels where BangBash is placed in such a way that it "protects" some lone pencils. Those would stop being interesting gameplay elements if BangBash was to be replaced by e.g. a pendat there.

Sunday, April 19, 2020

3 ... 2 ... 1 ... Smile!

C'est tout simplement énorme. Je lance le décompte. Okay, ça fera sans doute pas le poids contre le kit 'dream(s?)' sur PS* et on a 8 ans de retard par rapport à 'Petit Computer' prévu pour les stores DSi.

Mais ce coup-ci, l'Europe a accès à la chose. Merci aux contacts des Taikenban et la communauté des cartmodders pour avoir attiré mon attention là-dessus. On en reparle, promis.

J'attends ... entre impatience et excitation. Ce sera peut-être le premier langage de programmation que je vais acheter. Incroyable, non ?
PS:

  • SmileBasic 4 a quand-même quelques nouveauté syntaxiques par rapport au MS-BASIC des années '80 ('70?), comme la possibilité de récupérer plusieurs valeurs en une commande avec le mot-clé OUT.
  • SmileBasic était le langage/interpéteur utilisé dans PetitComputer. Il reste des "Petit" à gauche et à droite dans certains exemples
  • Il y a une sorte de 'guide de l'utilisateur' dans les programmes téléchargeables, en plus des mini-tuto intégrés à l'outil. Et une documentation en ligne (encore un peu légère par rapport au SmileBasic de la 3DS).

Saturday, April 18, 2020

Link's Awakening -- un nouveau regard sur Koholint.

Je croyais tout connaître sur Koholint, à l'exception peut-être des techniques de speedrunners. Mais les enfants sont maintenant équipés de palmes Zora et J.L.N. s'est retrouvé sans que je ne m'y attende dans la région du "temple du nord", celui qui donne la clé-masque (pour le donjon 6) alors qu'il sortait à peine du donjon 3 (la cave au clés). En temps ordinaire, ça se serait terminé par un demi-tour mais ce serait compter sans la détermination d'un gamin de 7 ans qui a farmé 999 rubis dans le village (et quelques coffres) au point d'affronter le génie dans sa grotte l'arc à la main. Sans jamais avoir volé quoi que ce soit au village.

Il a donc traversé le dédale des Armos et s'est retrouvé face à face à un boss bien trop dur pour lui. Vu l'effort accompli pour y parvenir j'ai fait une entorse à la méthode de la tortue et j'ai affronté le boss pour lui. Puis c'est *deline qui est entrée "par erreur" dans le donjon 5 alors qu'elle cherchait le collier de la sirène.

D'ordinaire, quand vous terminez le donjon 4, vous ne savez pas enchaîner directement sur le 5 parce qu'un fantôme vous hante jusqu'à ce que vous terminiez une mini-quête. Rien de ce genre ici...

J'avais recolorié la carte de Koholint pour montrer quel item permet d'aller où, pensant en réalité "quel donjon permet d'aller où". Mais avec le non-conventionalisme des loustics et mon entraînement tout frais à évoluer avec un nombre réduit de coeurs je me rends compte qu'en réalité, dès la fin du donjon 3, on est en mesure de faire des rush dans les donjons pour chiper l'item-clé, ressortir sur la carte et débloquer le donjon suivant. Et oui, j'ai poussé jusqu'à aller chercher la baguette magique dans le donjon 8 alors que je n'ai encore vaincu aucun boss au-delà du donjon 4 (ce serait le 3 si je m'y étais pris plus tôt).

J.L.N était un peu déçu de ne pas pouvoir conserver le toutou pour continuer au-delà de la prairie... l'idée d'utiliser le coq volant pendant la plus grosse partie du jeu semble lui plaire, à défaut de faire des bomb-jumps comme dans le marathon caritatif de l'automne dernier.