Saturday, February 28, 2015

Checkpoint ?


Y-a-t'il besoin d'un point de sauvegarde à la mi-niveau dans School Rush ? On compte 26 écrans pour un (long) niveau de Super Mario World contre 16 seulement pour un niveau de School Rush... En réalité, pour Vanilla Dome 1, on arrive à la mi-niveau après une distance équivalente aux niveau de School Rush. Oui, mais Vanilla Dome, c'est presque la moitié du jeu. Et ce niveau est particulièrement long, une quinzaine d'écrans étant plus proche de la moyenne.



I was surprised that Kirby Kid asked for mid-way checkpoint in School Rush. I thought the levels were short enough so that it wouldn't be required. I barely need half a minute to beat one level ... I even picked randomly a level in Super Mario World, and it looked that the 16 screens long levels are precisely the distance from the level start to the midway checkpoint. But Vanilla Dome 1 is far longer than any other level in SMW.

Dans la première zone de Super Mario World, la taille d'un niveau est beaucoup plus proche de celle de School Rush, surtout si on prend en compte les phases "de répit".

Autre point-clé: ce premier niveau ne demande qu'une petite dizaine de saut obligatoires. Les plate-formes à travers lesquelles on peut courir permettent de proposer des actions amusantes à celui qui a suffisamment acquis la maîtrise du jeu.


Même plus loin dans ce premier monde, on compte 18 sauts nécessaires pour atteindre la mi-niveau, contre 24 pour pour couvrir la même distance dans le niveau 2 de Bilou.

Not only levels in Yoshi's Island (the area in SMW, not the SMW2 game) are almost the size of a School Rush level, but they also require much less jumps to clear the distance to level's mid-point. It is too early to decide whether I'll grant Kirby Kid's wish or not, and whether it will be featured in release 1.0 of the game, but it clearly means I have to think about it.

edit:oh, et je lis dans "l'histoire de Mario", que Miyamoto avait déclaré "20 écrans devraient suffire pour un simple niveau". Son idée, c'est qu'on puisse passer un niveau en 1 minute. Il faut environ une seconde au sprite pour traverser un écran vide, mais grâce aux nombreux obstacles dont [Miyamoto] veut parsemer les niveaux, le joueur aura besoin d'une bonne minute pour en voir la fin. Au final, le plus long niveau fait 32 écrans, mais la plupart, seulement une douzaine.

Wednesday, February 25, 2015

No floating for the S-team

They are N (14), A (13) and L (9) respectively. They have been asking for news about Bilou everytime we meet since about 5 years, now. At first, they would quickly ask me for another game, but nowadays, they will barely wonder whether there's something else than "School Rush" on my DS. They are the S-team.

I got quite surprised by how they reacted to the introduction of power-ups in the game, though. They essentially didn't care. They were focused on trying to beat the game at "normal" difficulty level. For that, they need to RUN, JUMP and GRAB from time to time. They are quite happy that ennemies are mostly things to avoid, apparently. They're not trying to take them out: that would simply expose them or slow them down. They welcome avoided battles.


La S-team ... 3 de mes neveux qui sont fans de Bilou, et qui se sont pris au jeu de parvenir à triompher du challenge de "School Rush". Je m'attendais à un engouement vis-à-vis de la possibilité de faire des vols planés avec les nouveaux power-ups, mais j'ai été plutôt surpris. Pour eux (en tout cas pour les plus âgés, 13 et 14 ans) , courir et sauter, c'est le principal. Les éponges sont un mal nécessaire, et si les ennemis ne sont que des choses à éviter, pour eux, c'est aussi bien comme ça. Tout l'inverse de leur cadette, en somme.

I chatted a bit with A about how I was surprised by her decision to ignore interplay with ennemies altogether. She replied she was focusing on her target. She had no time to toy with monsters: she wanted to beat the game.

Admittedly, doing a float-jump is quite demanding at the moment. You need to grab and carry a dumblador (that's quite easy, but may somewhat slow you down in some levels). Then you need to approach and dispatch a pendat with ballistic shot. With some luck (3 times out of 4), a power-up will be released, but you need to move without taking a hit until you reach the place where you can use it. Then you must remember to press (Y) mid-air -- and not during the ascencion phase of your jump -- to activate floating. Meanwhile, nothing is there during RUNs and JUMPs to remind you of your new power.


Je réessaierai après avoir réglé les problèmes de facilité de manipulation. Utiliser un troisième bouton, c'est réclamer un autre niveau de maîtrise du gameplay. Basculer entre (A) et (B) c'est passer son pouce de "ici" à "à-côté". Ajouter un 3eme bouton, c'est la situation où Super Mario World vous demande la première fois de retrouver le bouton qui fait le saut-toupie pour franchir un mur de blocs. Quand on y joue qu'une fois par semaine pendant une 20aine de minutes, ça veut dire qu'on a besoin de regarder la manette, trouver où est quel bouton. Ça veut dire qu'on devient vulnérable parce que découpé une fraction de seconde du monde virtuel dans lequel on s'était immergé. Ça veut dire aussi que l'on sera confus sur les boutons pour les quelques secondes qui suivent. Alors, il semblerait bien que mon idée [R] = roll, [L] = spin pour les mouvements complémentaires n'est pas compatible avec le gameplay de School Rush.

Bringing the game from 1.2 to 3 buttons is not a complete stranger to the issue. I recall those locations in Super Mario World where you had a vertical wall to break were leading me to misuse actions a lot. Would there be a mere goomba moving towards me in such a place, my chances to beat the levels within 3 lives became fairly slim. The reason was I would only play occasionally. I couldn't really learn where is which action with my bones. That would remain some "err... which button does what, again ?" as soon as I need to use more than "the one under my thumb, and the one just next to it".

For the next time, I will try to find some solution with e.g. double-(A) pressing. We shall see how L -- who has a more exploring gameplay -- will react.


Saturday, February 21, 2015

Float and Land

Passage à la maison de "Arkios", mon filleul fan de Bilou à qui on doit une grande partie de mes efforts de vulgarisation de l'éditeur de niveau. Cette fois, ce sera l'occasion de valider les nouvelles manipulations avec les éponges: rodéo simplifié, décrochage et "surf à vitesse d'escargot". Je gribouille par contre qu'il me serait bien utile de pouvoir utiliser l'éponge transportée par Bilou comme bouée en cas de chute imminente dans l'encre.

Knock, Knock! My godson steps in. He's a long-time fan of Bilou and we have plenty of points to discuss. I want his feedback on the improved collision areas and auto-pilot for riding spongebops. But it is also the opportunity of building together the gameplay of the first power-up. I had the script for releasing bouncing items when a pendat is dispatched written earlier in the week. I have bare bones for slowing down Bilou's fall ... let's get crackin'

Mais j'ai un autre tour dans mon sac. Cette semaine, j'ai trouvée une idée sympa, à base de ponctuation, pour que les Pendats assommés libère un power-up. Comme j'ai déjà une manipulation qui permet de ralentir sa chute, c'est l'occasion de la transformer en live en power-up digne de ce nom.
L'animation de transition "pirouette en l'air" est donc promue en un état à part entière. Un compteur à l'intérieur des variables de Bilou -- remis à neuf à chaque début de saut -- indique combien de pirouettes peuvent être réalisées (et donc la longueur du vol plané) avant de repasser à la chute standard. Et finalement, je maintiens la gravité pendant le vol plané, mais avec une "vitesse terminale" beaucoup plus faible.

Converting 'speed reducing spin' into some dedicated 'float' state for Bilou's behaviour works quite well, but mashing the L shoulder button doesn't allow us to use it when it is most needed. It would have been natural to press (A) again mid-air to trigger the float, just as in Rayman (PSX) or Mario 3 / Mario world. Unfortunately it doesn't work well with eraser bumpers. Something similar occured with Rayman 1, when using spring-clouds. pressing the button a bit too early would make you float instead of being thrown up in the air. I settle on holding L button, but this will have to be confirmed tomorrow by the S-team.

Reste le choix des contrôles. L'appui répété sur le bouton "L" était plus ou moins un résultat émergeant, mais c'est tellement difficile à exécuter qu'on ne pense pas à s'en servir pendant le jeu, même dans les cas où ça pourrait nous sauver la mise. Appuyer une deuxième fois sur (A) en cours de descente marche plutôt bien et c'est intuitif, mais on souffre alors du même problème que le premier Rayman face aux gommes-bumpers. Comment interpréter la pression sur (A) au moment du contact avec la gomme ? doit-elle faire rebondir (avec une impulsion fonction de la vitesse de chute) ou interrompre la chute et passer en vol plané ? Le jeu choisit trop souvent l'option du vol plané, rendant les bumpers imprévisibles. Ce sera donc une pression maintenue sur "L". À confirmer demain avec la S-team.

Par contre, il n'a essayé aucun des mouvements ajoutés de base. J'imagine que ça n'est pas surprenant, vu qu'il connaissait déjà en partie le jeu. Difficile de s'imaginer sans aide que les règles ont changé.

Wednesday, February 18, 2015

Quels bonus ?

While playing the latest Kirby and some other game lately (like "Child of Light") brought me to think again at how player and bonus interact in the game. I started categorizing them in either [grab on contact] (i.e. the player collects bonuses by merely moving) and [grab on action] (i.e. the player must actively grab or open the bonus). Although [contact] typically correlate with [known] bonus (e.g. Mario coins, Keen candies) and [action] usually works well with [unknown] bonus (chests, question blocks), this is not always the case. Rayman's electoon cages, for instance, have known content, but require an action (attack). Super Mario World features colored [!] blocks for which the player knows in advance what's hidden inside. And Kirby 3D's flowers may release any variant of your star shard.

ça brille ou ça gigotte ... C'est d'une jolie couleur qui met un peu de lumière dans ce monde de brute qu'est le niveau 1-1 ? C'est un bonus. Le modèle le plus élémentaire est le bonus "de contact". Il suffit de passer dessus pour en bénéficier. On peut le mettre en hauteur pour forcer le joueur à aller le chercher ... On peut le rendre mobile -- voire fuyant -- pour organiser une mini course contre la montre.

Ensuite, il y a les bonus enfermés. Ceux qui ne seront débloqués qu'à travers une action spécifique, parfois réservée uniquement à cet effet (ouvrir un coffre dans Monster World, souffler sur une fleur dans Donkey Kong Returns) ou en réutilisant un mécanisme d'attaque (coffres dans Shantae, cages dans Rayman).

It's also interesting that Donkey Kong Return's "blow-the-flower-to-reveal bananas" is just a better themed instance of "dedicated-action-that-opens-a-chest".  Along the same lines, Kirby's bushes and Zelda bushes works much like Rayman cages or Shantae chests that open with the "attack" mechanic.

Later platformers, like Donkey Kong Returns and Giana Sisters: Twisted Dreams also had something curious, where bonus moves along a path. To collect them all, the player simply has to maintain his position and wait for them to come. That is the exact opposite of NSMB "8 red coins" micro-challenges, and older secret rooms where you had to move to collect the coins.
Child of Light, however, had an interesting variant to this approach, where the bonus at the tail of the chain is worth twice the price. If you can read the trail pattern, and follow it with proper timing, you'll earn twice what you'd get by just standing and waiting.

Dans la catégorie des bonus-mobiles, on était passé dernièrement du classique bonus fuyant au bonus qui vient vers vous. Ou plus précisément du groupe de bonus qui se déplace de telle sorte que si vous en touchez un, vous les toucherez tous rien qu'en restant sur place. Les caves bonus de DK returns sont presque toutes basées sur ce principe, pourtant en totale opposition aux caves bonus de Super Mario Bros. Et je dois bien admettre que je trouvais ça plutôt décevant, mais une petite variation découverte dans le jeu Child Of Light m'a amusé. Comme dans Rayman Origins, on y trouve des bonus "dormant" et des bonus "éveillés", valant le double des premiers. Le truc consiste alors à mettre une ligne de bonus dont le dernier est éveillé, et réveillera le précédent si le joueur le ramasse, ainsi de suite. Si au lieu de rester immobile, le joueur cherche à comprendre le mouvement et à le suivre, il double son pactole.

Then came the interesting ideas. I loved bonus design in Qwak, where you open the path to some monsters when collecting bonuses, because bonuses also act as walls to monsters. Yet, I couldn't come with a valid reason for bonuses to repel monsters ... except in environments where bonuses would be made of something that is lethal to monsters. The obvious is "shiny" bonuses in a darkness world.

And finally, I got a nice inspiration about something that could hold bonuses and that you'd interact with mere jumps in Bilou's School zone. Erasers. Bouncing on them could release the last few letters they gathered. This will be today's final touch, as we're now approaching the perfection of SMB's question block.

Enfin, stimulé par la réflexion, j'ai enfin réussi à transposer dans le monde de Bilou les deux design géniaux de dispenseurs-de-bonus, à savoir les blocs-question de SMB (ici remplacés par les gommes des crayons) et les bonus-qui-enferment-les-monstres de Qwak (ici joués par des bonus brillants que les monstres des ombres évitent ^_^

Thursday, February 12, 2015

spongebop virtual walls.

One evening after the other, my "visual todo list" for School Rush is painting in green. Just like dumblador, Spongebop now has limits, including a virtual floor that will prevent Bilou from falling further when the Spongebop gets jammed. All you can do then is throwing it away to get loose.
L'avantage de cette carte des "todo", c'est que j'ai plus facile de faire une petite avancée chaque soir. Ce soir, c'est essentiellement la "cage invisible" qui empèche Bilou de s'écarter arbitrairement de l'éponge qu'il transporte.
Allez, je suis presque prêt à attaquer les power-ups.

edit: ... check, prêt pour les power-ups ^_^

Tuesday, February 10, 2015

2015, L'année Badman ?

Il y a 20 ans, en Mai 1995, naissait Badman. Un antihéros bien rondouillard masqué parti sauver la coupe du monde contre une intrigue louche. Il y a 5 ans, j'envisageais une version-anniversaire reprenant les 4 niveaux-clés du premier jeu (il y aura en tout deux jeux et une démo de 2 mondes du 3eme opus): les toits de Gettham City, Le manoir hanté, la prison et les cascades japonaises.

20 Years ago, in May '95 was born Badman, a masked, plumpy anti-hero who's the last line of defence to avoid soccer world cup to turn into a mass destruction weapon, although the actual nature of the threat was never very clear. 5 years ago, I was exploring tracks for an anniversary version reusing 4 key levels of the first game (Badman will eventually appear in 2 and a half games): Gettham city rooftops, a haunted mansion, a nazi (?) jail and Japanese waterfalls.

It's clear the former PPP Team would love to play the character again -- and he's likely one of the most popular character PPP Team ever animated -- but what should the game look like ? Ennemies in the first game are fairly limited, partly because we were still discovering the features of RSD Game-Maker. At best, they'll move a few step forward, and then some step backward. Badman's moves are fairly chaotic, and button mashing will often be required to clear some jumps. You can somehow climb along edges, although the engine is unable to let you "grab" them. Trying to produce a gameplay that could let you move along in original maps would be totally incoherent, I'm afraid.

My best offer would be something along the lines of "The Blues Brothers" by Titus. I could also get inspiration of some 2008 sketches where Badman gets more muscular by picking up batteries for his sauna belt. It could be used to create a sort of arcade shooter, somewhere between Bomb Jack and Super Crate Box.


Ça ferait sans doute plaisir à pas mal d'anciens de PPP Team de retrouver le personnage, mais pour quel jeu ? Les personnages du premier opus sont limités par les connaissances limitées du Game Maker de l'époque. 3 pas en avant, 3 pas en arrière ... et c'est tout. Les déplacements sont parfois un peu désordonnés, et il faut souvent bourriner les boutons de saut pour atteindre les plate-formes. On parvient plus ou moins à s'accrocher aux mur, à zig-zagguer dans l'air. Franchement, tenter de reprendre les maps d'origine pour refaire un jeu et tenter de reproduire quelque-chose qui ressemble au gameplay de base, ce serait galère.

Sans faire d'étude approfondie sur des gameplay intéressants avec les ennemis de d'origine, on pourrait imaginer quelque-chose ressemblant à un vieux Titus -- genre Blues Brothers.

Autre possibilité, qui s'inspire d'une petite série de croquis de 2008 où on voit Badman devenir plus dynamique après avoir ramassé une "super batterie mégaflash à placer dans sa ceinture (sauna)" et faire un simple "survival shooter" un peu entre bombjack et Super Crate Box.

edit: plus que quatre points à régler sur "Bilou: Rush to completion" ... peut-être bien que je pourrai faire un peu de Badman cette année, après tout ...

Saturday, February 07, 2015

Air Grab

On s'approche, on s'accroche ... Les travaux sur les zones de collisions contrôlées depuis l'éditeur d'animations portent enfin leur fruits. Il y a maintenant un état dédié dans le comportement de Bilou pour "je pirouette en l'air pour attraper quelque-chose".

At last, the track for controlling hitbox activation through animation is paying off. I have been able to give Bilou a dedicated state where he's checking three directions for something to pick or ride on. I intend to use that both to ease swinging on spongebops and allowing high-paced dumblador grabbing. In the "anniversary level", using spongebop to move along was planned as the hard path. The way that the skilled player would prefer because it leads to faster results as opposed to wandering on the ground. They still had that role when I added "*deline's level" as preliminary experience to the "true level" of the school zone, but the levels are definitely more fun to play when you mastered spongebop riding (left alone the 'sponge jump'). So I want to make more players try to use them.

  • Dedicated "grab-mid-air" animation and gameplay state makes it obvious to the player that something happen, and how it spans in space-time.
  • The animation itself is fun. J.l.n, my 2-year-old boy goes laughing when he realize he can press A/B buttons to make Bilou roll mid-air in a flash. And fun is important in a video game: that's our primary reward.
  • Moving from demanding hitbox (purple one on picture below) to welcoming hitbox (light-blue one) will make it more open to learning.
  • You'll still have to learn how your speed evolves with the swing if you want to reach high places or gain stupendous momentum. The potential for power-play is not lost.


Au-delà de la performance technique, l'idée est d'agrandir la marge de manoeuvre des joueurs qui veulent s'accrocher à une éponge. J'ai tenté de reporter sur l'image ci-contre la marge de manoeuvre avant (en mauve) et après (en bleu clair). En rendant le fait d'attraper l'éponge moins élitiste, j'espère -- selon les conseils de KirbyKid -- les rendre aussi plus amusantes.

Une chose, par contre, n'a pas changé: Bilou est toujours centré au-dessus de l'éponge quand il s'y accroche. Du coup, agripper une éponge alors qu'on arrive à côté d'elle produisait un décalage brusque de Bilou. Je tente donc un élément inédit dans le gameplay: une transition pendant laquelle Bilou, roulé en boule pirouette pour revenir par-dessus l'éponge mais dans une forme de pilotage automatique. Il est déjà lié à l'éponge et se dirige automatiquement vers elle, même si elle fait demi-tour et s'y accroche dès qu'il entre en contact avec elle.

I had one concern, though, about the immediate coordinates update that makes Bilou appear centered on top of the spongebop immediately after you hit its side with your hand. Piet and Pierrick, both co-author of the very first Bilou game, suggested that I should "cheat a bit with physics so that the game gets easier for the player", but I'm not confident with such approaches. Yet, it wouldn't be fun to get merely a bounce if you hit the spongebop from the side when trying to grab, so I give a try something new in Bilou's behaviour: temporary automatic control. When you'd expect Bilou to grab and climb the spongebop, he'll actually do it by a rolling bounce in the air where he'll mag(net)ically align to Spongebop position and start riding when reaching the proper position. Accelerations faster than what you could reach manually are tolerated in this state, and all you have to do is hold the (B) button down and hope for hitting no ceiling.

I'll submit that to the S-testing team tomorrow. That may be the biggest improvement since the release of "School Rush" game. Stay tuned.

Monday, February 02, 2015

Les limites du GobScript

Ramasser des éponges alors qu'on pouvait déjà ramasser des tailles-crayons ... ça n'aurait pas dû être aussi difficile que celà n'a été. Le fait que les objets soient numérotés plutôt que nommés empèchait toute possibilité de détecter les erreurs. L'autre, c'est que le copié-collé est le seul moyen de réutiliser une région substantielle de code.

Current GobScript is meant to be human-readable bytecode for the state machine. Yes, truly. The most obvious way to realise that is how everything is *indexed* rather than *named*. The upgrade introducing C pre-processor in the make process to avoid code duplication in the behaviour script has been generalized to all monsters of the School Zone.

Yet the recent modification of these behaviour show that it becomes quite tricky to maintain coherency when adding new features. For instance,

  • [done] picking up spongebops was missing triggers and repeated bugs about stuck carried GOB when hit.
  • [done] Pendat rushing don't hurt Bilou when stomping him because I haven't copied hitboxes when creating the new state
  • [done] Stomp-and-grab blador in one move kills Bilou's horizontal speed and creates bogus camera conditions.
  • [done] We may enter walls when trying to pick something on the ground, because of a missing 'stopper' micro-controller
  • [done] stomping a blador while doing a air-grab allowed to move through because of a missing hitbox.

All this claims that I should now work on a higher-level language for editing, where I could express that "SpongeBop allows carry_me" and "blador allows carry_me" and that would imply some new states added to state machines, specific hitboxes in other states, transitions and such. Don't be surprised if I take that excuse to practice some Haskell, as there is currenty a professional incentive to master that language.


Je me vois mal utiliser les macros du pré-processeur C pour reproduire un motif du genre "une zone de collision dans l'état X permet de passer dans un état $CARRIED puis dans un état $THROWN jusqu'à ce qu'on heurte le sol, ce qui nous ramène dans l'état Y." par la seule ligne "using CARRY_ME(X,Y)" ou quelque-chose de ce genre. Dans le meilleur des cas, celà reviendrait à définir CARRY_IN=X et CARRY_OUT=Y avant un #include "carry_me.cmd.h" ... pas franchement le plus élégant, mais sans doute préférable à une duplication du code...

Ne vous étonnez donc pas si je prends le prétexte d'un convertisseur d'une version "maintenable" du GobScript vers sa version "machine" pour mettre un peu d'Haskell en pratique dans les prochains mois, hein ;)