Friday, January 17, 2014

Falling through.

Je voudrais faire en sorte que, lorsque Bilou marche sur la craie-qui-bloque le passage du niveau-anniversaire (appelons-le "la classe de sciences" une fois pour toutes ?), une sorte de figure grimaçante apparaisse, qui suggère au joueur qu'il est sur quelque-chose d'interactif et pas un "simple sol". Je voudrais aussi que lorsqu'on lui tombe dessus (mais pas assez fort que pour le briser), "chalkman" tire un peu plus la tête, histoire que le joueur soit guidé vers l'intuition "eh, si je tombe de plus haut, je devrais pouvoir ouvrir le passage!"

Playing "Bottle Grotto" level of Link's Awakening (once) again confirmed me that using a face on that "breakable chalk" is possibly the best way to hint the player that falling from greater heights might let him go through. Much more than having some subtle scribbling about Ep=Ek <=> mgh=mv²/2 -- despite the science-theme of that level.

  • Bilou must get in contact with the "solid" tiles so that it gets stopped
  • Chalk-man can easily test for Bilou's presence above itself, but it cannot receive stomps outside of its own bounding box. Having the "stomp box" of Bilou out of the "body box" would definitely help. Hopefully, a recent update to the game engine makes it possible.
  • But as soon as I say it can be stomp'd, it also means Bilou will slightly bounce on contact, and bounce higher when pressing (A), just like for any stompable monster. One of stompable monsters' internal variables can be used to indicate an additional vertical impulse (for bumpers and such). I can use it to avoid bouncing in some cases.


Mais ce n'est pas si simple que prévu à mettre en oeuvre. Il y a des interférence entre le bloc-qui-ne-laisse-passer-que-si-on-tombe-assez-vite et le sprite-qui-tire-la-tête-quand-on-lui-marche-dessus.

Et puisqu'on en est là ... Au départ, mon frère avait conçu cet endroit comme une "serrure", avec un interrupteur ou une clé (selon l'humeur) un peu plus loin. C'est en jouant à imaginer comment je pourrais transformer cette situation en un "challenge" basé sur les mouvements possibles de Bilou (s'accrocher, sauter, rebondir) que l'idée est venue d'en faire une porte-qui-s'ouvre-en-tombant. Bilou peut passer "par le haut" (les éponges) et directement être prêt à ouvrir la porte en contournant toutes les difficultés (crayons pointus, saut sophistiqué et louvoyer entre les gommes), mais pour ça, il faut maîtriser le saut-hors-de-l'éponge. Il peut aussi assurer ses arrière, éliminer une gomme, faire le "grand tour" et passer en s'accrochant à une seule éponge, puis tomber pour ouvrir le passage. Le joueur casse-cou peut rebondir sur une gomme et prendre assez de hauteur pour forcer le passage. De quoi permettre à chacun d'y exprimer son style propre.

I could go the easy way and make something that looks like a big, shiny keyhole, and put a key somewhere else. Everyone would immediately understand -- or check the console taste. That's how my brother initially designed the level, but I changed it into a challenge based on Bilou's core mechanic (JUMP) so that players could experience different ways to overcome it: take the "easy climb" at the right of the level, or use the "secret" chain of sponges to get early access to that strategic location. Or just be bold and do some recto/verso rodeo by bouncing on top of the jumping eraser with the right timing to gain speed and smash through. Now that the level is part of a larger game, I can start thinking about ways to undermine that challenge... Apple Assault's BigPunch(tm) and a "ground pound attack" could be funny alternative ways to crack the gate open.

Mais qui dit "challenge" suggère aussi la possibilité de contourner le challenge. Qu'est-ce qui peut jouer ici le rôle d'une fleur de feu ou d'une étoile d'invincibilité ?
Ceux qui ont joué à Apple Assault se souviennent du "gros poing", deuxième niveau d'attaque, qui s'applatit sur le sol. Avec un coup pareil, nul doute qu'on aurait assez de puissance pour éclater cette craie et forcer le passage. Autre possibilité, offrir l'équivalent de l'"attaque rodéo" de Yoshi's Island, bien sûr. Vous savez maintenant sur quels types de power-up je cogite :)


Wednesday, January 15, 2014

Adventure in 3D land: nsmb2

Mon frère m'ayant trouvé un plan-3DS pour pas cher, j'ai pu enfin essayer de façon un peu sérieuse New Super Mario Bros 2. Plus court que NSMB, j'étais pourtant assez curieux de ré-enfiler mon costume de raton-laveur.

Les Plus
  • Le costume de raton-laveur, même si j'avoue ne pas avoir pris mon envol aussi souvent que dans SMB3. 
  • Le retour des Koopalings, pour des boss assez sympas et qui jouent sur la plate-forme plus que sur un "combat" où Mario est vite fortement handicapé. Pour celui qui vient de finir NSMB-Wii, par contre, ça doit faire très "portage".
J'étais franchement réservé sur les "nouveaux power-ups" introduits pour cet épisode très "toucher d'or du roi Midas". J'ai trouvé la tête-en-brique plutôt utile comme point de vie supplémentaire qui-protège-mon-vrai-power-up. La fleur d'or est surtout sympa à cause de son côté "explosif" et permet dans certains niveaux d'exploser un mur sans devoir prendre de risque à lancer une carapace de koopa dans un environement confiné.

I would keep NSMB2 as an example of a game with great level design (Levels themselves cannot be claimed boring or too easy) within a game design that reduce the interest of the experience. The excessive number of coins you can collect, the obvious hidden power-ups just before you reach a boss battle, the presence of "super-racoon-mario" to skip through any (?) level you can't beat makes it a game of patience rather than a game of skill. Still, from a power-up perspective, the "exploding flower" and the "brick shield" were interesting variations that provide a nice way to undermine specific challenges along the road.

While racoon-Mario was one of my favourite power-ups in the '90s, I can't say I've been convinced by its return. It seems to me that the level design in NSMB2 reduces its interest -- much like Yoshi doesn't seem that important in NSMBwii -- but I have to admit I strongly improved my run-jump-land skills compared to the '90s, so I guess a kid getting into platforming will find it much more handy as a way to increase control over your jumps and falls.


Comme prévu, les vies sont complètement dévaluées vu l'avalanche de pièces d'or. Je termine avec plus de 100 vies sans m'être forcé, avec un effet de "oh, tiens, un champi vert. mignon". La présence quasi-systématique d'un bloc-question caché contenant une fleur ou une feuille autour de la porte des boss y est pour beaucoup: rare sont les tours/chateaux que j'ai du refaire. Pourtant, d'un point de vue purement "level design", il m'est clairement arrivé de penser "mais c'est des malaaades! 0_0" pendant que je zig-zaguait entre les torches et les boules de feu. Je ne peux donc pas qualifier les niveaux eux-même de "trop facile".

Enfin, chose assez dérangeante et qui se produit pour la première fois dans un Mario: je me suis régulièrement heurté à des murs que je n'avais pas identifiés comme tels. C'est particulièrement fréquent (et agaçant) dans les forteresses où les briques grises, bien contrastées avec le décor vert-bouteille, sont entourées de briques vert-émeraude. Le rendu des couleurs de la 3DS étant parfois perturbé par l'effet 3D lui-même selon l'angle de vision, il faut parfois y regarder à deux fois. Très curieuse décision, donc, qui va presqu'à l'encontre de ce que les règles de lisibilité recommandent: augmenter le contraste sur les bords (interactifs) des zones qui forment les murs.

Autre point qui m'a semblé complètement hors-propos, ce sont ces blocs de pièces qui arrivent à un point A par une rotation quand on met le pied à un autre point B. Ce n'est pas une mauvaise  technique en soi, mais c'est tellement "non-mario" que je n'ai pas pu m'y faire. Les cascades/fontaines de pièces passent mieux.

Monday, January 13, 2014

Jump-bounce win.

Participation modérée, mais préférence marquante pour le Bilou-rebondisseur. J'ai moi-même refait le test de désactiver les rebonds et me refaire les différents niveaux. Le "niveau en longueur" devient plus nerveux mais dans le niveau à explorer, j'ai l'impression que Bilou se fait systématiquement "aimanter" par le sol au moment du contact. Rien à faire: j'ai intégré ce petit rebond au personnage lui-même -- introduit dans les toutes premières démos.

The poll is over, massively speaking in favour of "bounce", and a slight preference for the extra "jump". That's quite a relief: I couldn't get convinced by Bilou stick-landing after a fall ... I've seen him bouncing for too long ^^"

RCramiro said:
The current bouncing implementation (i.e. [BIG]) works well as it is. The only issue I have, though, is that it's hard to tell when a given jump will cause Bilou to bounce. I suggest you provide some sort of visual indication beforehand, à la "Kirby's Dreamland" (if Kirby is shown falling head-first, that means he will bounce when he hits the ground).
That sounded like a good idea, and the good thing was that increase/decrease controllers can be used to generate an event "you're starting to fall too fast", which was just perfect for an extra anim and alternate camera settings. However, that's of little use for the player to know he's about to bounce if there's nothing he can do to prevent it: unlike Kirby, Bilou has no floating ability.

Ajouter une autre anim ... c'était vite fait, mais pas très efficace: contrairement à Kirby, Bilou n'est pas capable de se mettre à voler pour éviter une chute. 

I like how dropping from high up has an auto bounce when you land. I found out that if you jump off a spring like an erasure that after the land-bounce you can jump in mid air for a mini-double-jump.
Kirby Kid, qui teste uniqement le bounce-jump accroche, sans explications aucune.

Piek, lui, est plus terre-à-terre:
Oui... Le test... Comment dire ? Je surkiffe Mais je suis un fervent défenseur de la cause du No Bounce... Je trouve le gameplay déjà tellement riche que ce petit rebond, (admirable d'un point de vue technique d'ailleurs), provoque des situations infogramesques et nous fait perdre en pur contrôle...
Le contrôle ... tout est là. Il faut que le joueur puisse éviter un rebond-qui-tue, soit avec un rebond supplémentaire. C'était déjà l'idée du "bounce-jump", il me reste à la compléter. Première chose, faire rebondir Bilou quand il transporte un dumblador, ça donne moyennement. Je peux donc me permettre de passer en mode "no bounce" quand le joueur a trouvé quelque-chose à transporter. Il faudra donc choisir: garder le contrôle ou se débarasser du crayon d'en face.

Piek raised a significant point, though: the bounce is a loss of control. In tight situations in videogames, removing the control can lead to very annoying situations where the #1 rule of game design (whenever you fail, you know it's your fault) is left broken on the ground, and player has to try again with a scream of Infogramish frustration.

I can think of two ways to avoid that to become detrimental to the gameplay. First is to switch to no-bounce when Bilou carries something. Bouncing when you're carrying something as large as yourself ... even for a blue ball, that's excessive. Next, I added a small spin animation upon (L) button trigger coupled with the ability to "brake in the air".


Dernière touche, un p'tit bouton (L) pour faire une pirouette qui ralentit la chute ... on peut du coup aussi éviter un rebond malvenu ... ou l'accueillir avec sourire, presser à nouveau sur (A) pour rebondir mieux ou plus haut. Bien sûr, on est là au niveau du raffinement de gameplay. La bonne nouvelle, c'est que mes p'tits n'veux n'ont pas besoin de pousser jusque là pour s'amuser ni pour terminer les deux niveaux. J'ai gardé un oeil sur la partie, et je n'ai pas noté un seul faux pas lié à un rebond incontrôlé. Bien sûr, ils ont déjà pris le personnage en main depuis Toussaint.

Mais l'approche de Piek, combinée à sa proposition de faire plus de niveaux similaire au niveau d'intro, en distillant progressivement les nouveaux arrivants pourrait offrir un terrain idéal pour une entrée pour la NeoCompo 2014 (s'il y en a une).

Friday, January 03, 2014

Fixme list

"Don't Repeat Yourself" supported.
The few feedback I got for the "upgraded" school zone level provide some fairly interesting hint: some gameplay features will not be properly managed by players unless they're sufficiently pure. Give any reason for the player to believe that holding B could let him run and he'll fail to discover that he's got to hold R for that to work. So to get pure gameplay in Bilou, I still need:
  • [blador:ok] Introduce monsters/ink interaction
  • [MEDS] Dedicated animation when Bilou picks up something
  • [done] Never "randomly start running", no longer run-on-turn-back, only run-on-land when one had running speed in the air.
  • [done] no invisible ceiling to kill your jumps.
  • [done] visual clue to tell whether you'll bounce or not.
  • [done] visual clue that chalk may break when sufficiently stressed.
  • [wish, D.I.P] bouncy-idle-sponge vs. low-bounce-swinging-bops.
  • [patch] HUD with life meter. (and speed meter ?)
  • [wish, adventure] visual hint for dead ends (?)

Il y a une leçon qui réapparaît à travers les divers retours que j'ai reçu de ma démo de la school zone: les éléments de gameplay ne sont correctement maîtrisés par les joueurs que s'ils sont suffisamment purs (les éléments, pas les joueurs). Par 'pur', j'entends 'le mécanisme se déclenche sur base des inputs, à chaque fois et uniquement dans ce cas-là'. Qu'il y ait la moindre raison que le joueur puisse se mettre à courir en appuyant sur B et celui qui en arrive là lors de sa première partie n'essaiera pas de maintenir R enfoncé pour courir. Par contre, il nous indiquera que 'ouais, courir, des fois ça va, des fois ça va pas'.

Le même genre de leçon peut être tirée pour les animations: une action différente du personnage sur son environnement réclame une animation différente. Le joueur doit pouvoir "voir" que son personnage fait quelque-chose de particulier. Pas d'animation "essaie de ramasser" quand il n'y a rien à ramasser, et il n'y a pas de raison que le joueur essaie de ramasser un truc quand enfin il s'en présente un.

(old) non-symbolic gobscript

All this (and further introduction of power-up with more conditional state transitions) will require more work on the state machine for Bilou which is already fairly complex (32 states, 170 transitions 0_0). 

I don't want to make the parser smarter on the DS side (e.g. I still don't want symbol tables or function definitions) but it's truly time I adapt the Makefiles so that e.g. GCC's pre-processor can be used to produce the "compiled" state machine out of more symbolic description.

(new) symbolic gobscript

Mais pour pouvoir modifier tout ça, il va falloir que j'aille replonger dans la machine d'états de Bilou, qui est déjà pas mal complexe (32 états, 170 transitions).

Je n'ai pas trop envie de devoir augmenter aussi la complexité du parseur qui tourne sur la DS (pas de table de symboles ou de définitions de fonctions, par exemple). mais je pourrais arranger quelque-chose pour utiliser le pré-processeur C pour me convertir une description plus 'symbolique' vers le texte brut compris par le code DS...