Thursday, June 26, 2014

DarkneSs & Lime ?

Qui dit juillet dit matos qui foire. Je dois renvoyer mon Cybook en SAV (mémoire flash interne défectueuse, je pense), ma chaîne hi-fi ne veut plus lire les CD et mes deux DS lite "DarkneSs" et sa remplaçante "Green Lime" ont disparu dans un repli du sub-espace. J'avais espéré parvenir à re-formater une carte µSD 4Go pour remettre mon iPlayer en service ... même ça, ça coince >_<.

*sigh* Its hardware failure time. I lost the CD player of my HiFi system. I lost the storage of my Cybook. I cannot find back my development DS (green lime) neither its "backup" clone DarkneSs ... The SD-µSD adapter is failing me, I can't make the iPlayer work again with that newer µSD card ... *über-sigh*

J'ai le blues, là.


Wednesday, June 25, 2014

Rick Dangerous design documents

J'adore les documents originaux des concepteurs de jeux. Dans un article Pix'n'love, un manuscript sur le tapis, c'est automatiquement des étoiles plein les yeux. Simon Phipps, nous ressort les petits croquis utilisés pour présenter son concept de pastiche d'Indiana Jones à ses collègues ... Et là, je dis ÜberDanke!

The author of Rick Dangerous published some original design documents for his game. Exactly the format I love to discover, with sketches annotated with how-to-play, how-it-works and possible implementation. Within a few pages, we're introduced to the theme (character, locations, motivations) and the structure of the levels. Then you get primary (jump, gun, dynamite) and secondary (stick) mechanics. Thanks a lot

En quelques pages, il nous présente le thème du jeu (le personnage, les emplacements, les objectifs) et la structure des niveaux, puis les mécaniques primaires (sauts, pistolet, dynamite) et secondaire (le baton).
Le côté technique n'est pas en reste:
Simon appuye son concept avec les quelques éléments qui permettront l'intégration d'évènements scriptés qui mettront la mémoire du joueur fortement à contribution par leur caractère imprévisible mais facilement reproductible, qui prennent finalement la forme de "boîte de test" maintenant assez classiques.
Bonne lecture ^_^

Saturday, June 21, 2014

Et zou.

Cette fois, je pense que j'y suis. Il m'aura finalement fallu sortir l'ensemble de mes techniques pour que cette histoire de lancer de taille-crayons empilés fonctionne correctement. Pas de demie-mesure:

  • un nouveau contrôleur, "gobbit" capable de produire un évènement pour signaler le changement de valeur d'une variable -- désolidarisé donc du copycoords dans le plus pur esprit "micro-contrôleurs enchainés"
  • un modificateur, F_ATTached, pour que seuls les GOBs attachés au déclencheur de la collision puisse la recevoir. 
  • Les collisions sont toujours utilisées pour provoquer le jet de dumblador: c'est la seule façon de permettre de "passer" des arguments d'un GOB à l'autre. Les évènements "gobbit" ne sont là que pour forcer les deux -- lanceur et lancé -- à rester synchronisés quoi qu'il arrive. Bilou ne peut plus se retrouver "mains en l'air" alors que son taille-crayon s'est fait la malle, et ses "impulsions de jet" ou de ramassage ne risquent plus d'être mal interprétées comme des pieds baladeurs.
It's been a hard day's night. And I've been coding like a dog ... At last, I can safely pick up and throw bladors even though they're stacked up. I initially thought a few alterations to the copycoords controller would do it and I end up with a combination of an all-new test-a-bit-in-your-attach-target controller and a filter that makes areas only collide when Gobs are attached to each other. But at least, that allows me to keep both states synchronized and got me rid of those "not quite thrown, sorry, but you'll have to get hurt before you can use your hands again" glitches.

PS: J'imagine que ça va encore sembler "beaucoup de complications pour quelque-chose de simple", mais la richesse du gameplay que j'envisage repose beaucoup sur le nombre d'interactions possibles entre les éléments du jeu. De même que le fait de passer de dangereux (en marche) à inoffensif (dans sa carapace) puis à utile (lancée), puis de nouveau à dangereux (demi-tour) rend le Koopa-Troopa génial, c'est la richesse des états que peut prendre "dumblador" sur laquelle je parie pour faire de la school zone un niveau intéressant dans Bilou's adventure.

If that feels like much work for a small modification of the behaviour, I invite you to read the "interplay" posts of R. Terrel on the critical gaming blog. I expect higher interplay with monsters in the school zone to highly increase the interest of my game under progress.

Friday, June 20, 2014

Petit voyage dans le temps.

Petite image de ce que donnait la School Zone en QuickBasic en 1997... Que dis-je "image" ! presqu'une animation.
Côté Pixel Art, on regrettera évidemment les briques rouges rendant le crayon-soldat quasiment invisible. Côté animation, c'était impossible d'accélérer la démarche du crayon. Je ne suis pas mécontent du progrès réalisé ces dernières années.

Look! That's what the school zone looked like on its first implementation, in QuickBasic for MS-DOS in '97. I'm glad I took time to digest advise from Pixelation folks. I swear I'll never use plain red as a background colour in later games.

Wednesday, June 18, 2014

Flat = Fun, Depth = Drama

Maybe you remember this mockup scene that showed up when I started working on the school zone. I couldn't get it working. People kept saying that they felt "attracted" to the Z dimension while the game is supposed to play along X and Y. Another interesting thought that made me dismiss it came from Facet's readings: Flat = Fun, Deep=Drama. A scene with exarcerbated perspective conveys a feeling of dramatic importance to what's happening, while something flat fits comics better.
Still not convinced ? Rayman to the Rescue!

fun level : flat background boss drama : exagerated perspective

Quelqu'un se souvient de ce montage réalisé pour la school zone présentant une sorte de de "cathédrale de livre" à l'arrière plan ? Elle n'a pas eu beaucoup de chances de survie. En fait, avec sa perspective plongeante, non seulement elle se met à contrepied du mouvement des personnages, mais elle est aussi en décalage avec l'ambiance. Le côté "comique" est mieux rendu par une scène "à plat" alors qu'une perspective forte transmet une tension, un côté dramatique... Ne vous étonnez donc pas si je la garde dans les cartons jusqu'à ce que les boss soient prêts.

Don't be surprised if the "Knowledge Kathedral" look is resurrected for SquareRoot's encounter.

Btw, how about some old-fashioned items in the Deep Ink Pit ?


Thursday, June 12, 2014

InspectorWidget could be more helpful ...

Ok, je suis toujours dans les ajustements supposés permettre à Bilou de soulever un taille-crayon dans un empilement. DDD, cybook, tout le monde y passe ... j'aurais bien aimé avoir un peu plus progressé sur l'Inspector Widget pour me simplifier la tâche, mais il faut faire avec ...

Après avoir envisagé la possibilité d'envoyer un message "à tous les objets qui me sont attachés", j'opte pour une approche plus pragmatique: une variable de la plate-forme que les objets transportés peuvent tester via leur contrôleur (on écrira donc onpath(when w7.1)) pour demander un avertissement si la 7eme variable de la plate-forme voit son bit 0 retomber à 0.

At last, Bilou can pick up any blador even when they're stacked up. One glitch fixed. I hope the same technique will allow me to have Bilou's carrying/non-carrying state more coherent. What technique ? Well, at first I thought collisions would be suitable to notify that one can no longer stand on a platform. E.g. when the platform fades into the background, I'd have a state with a collision area triggering a $STAND->$FALL (Detach) transition. But that's not working properly, because gobs might get collisions from another object that the one they're attached to. Tweaking areas so that the collision is properly received by all the gobs in all their states also turns into a sort of nightmare. 
Instead, I updated 'onpath' controller so that it optionally polls one of the target's variable and raise an event when this variable states "I'm no longer a solid platform, go away." That was the least resistance path. Plus, the polling is virtually free since we had to check that target for presence, position and speed anyway.

What about inspector widget and the picture ? well, it's an additional todo list to remember everything InspectorWidget should have been able to do to ease the (completed) debugging session.

On dirait bien que le problème est maintenant résolu. Glitch suivant: les mains de Bilou qui disparaissent dans certaines conditions (lancer un taille-crayon près d'un taille-crayon isolé, p.ex).

Sunday, June 01, 2014

Critical Link #3: la main de maître.

"La main du maître" est un excellent exemple pour comparer le design de Z:LTTP et de Z:LBW. Dans les deux cas, il s'agit d'un ennemi-surprise, dont on ne peut deviner la présence en entrant dans la salle. Dans les deux cas, aussi, il s'agit d'un monstre-revenant dont le joueur ne sera jamais quitte tant qu'il ne sort pas de la salle. Un élément de tension particulièrement efficace lié à l'anticipation de la perte de progression accomplie puisque si elle se saisit de Link, elle le ramènera au début du donjon.

Wallmasters are a perfect study case to compare Z:LTTP and Z:LBW. In both games, they cannot be spotted when you're standing at the door of the room: you'll discover them once you're trapped in the room. In both games, it is an undead monster that will constantly come back and can merely be stunned. You only evade them by leaving the room. They're also a very effective tension component, as you're anticipating the loss of progress if you get caught and brought back at the dungeon's entrance.

Z:LTTP doesn't let the player have any control on those damned hands. They can't be anticipated, they can barely be spotted (only revealed once they're locked on you) and cannot be defeated (they will respawn a bit later). Additionaly, your loss cannot be compensated (you don't have fairies, potions or hearts to recover lost progress), and I'd more likely use Angry Nerds' words than Kirby Kid when playing skull woods dungeon. This nineties-game isn't just stressing your skills: it's also getting on your nerves.


Dans Z:LTTP, il y a une absence totale de contrôle sur ce monstre imprévisible, invisible (que seule un ombre discrète trahit avant qu'il ne frappe) et invincible (puisque finalement, on ne fait que l'assomer). Face à une telle force qui -- en plus -- provoque une perte qui ne peut être réparée (aucune fée ou potion ne peut contrer un retour en arrière), je me retrouve plus souvent à utiliser le vocabulaire du JDG que celui de Kirby Kid. Le jeu des années des années nonantes n'est pas seulement techniquement exigeant: il tape sur les nerfs.

Z:LBW module cette oppression en permettant à certains moments de jouer avec la main-du-maître. Puisqu'elle traque le joueur, il peut choisir avec plus ou moins de précision où elle s'abat. Là où le monstre de Z:LTTP ne peut qu'attraper le héros, celle de Z:LBW peut aussi activer un interrupteur ou écraser d'autres ennemis.

Z:LBW modulates the wallmasters' oppression by allowing the player to exploit their behaviour. Here, we see it tracking the player somewhat before it attacks, meaning that the player has some control over the location where it will strike. Moreover, while Z:LTTP monster only interacts with the Hero, we're now facing a force that activates switches and damages monsters. It remains a threat, but may be temporarily turned into an allied thanks to the combined tricks of the level designer and the player. This has something pac-man-ish that makes it extremely satisfying.

De monstre redoutable, elle se trouve transformée en allié involontaire par la ruse combinée du level designer et du joueur. Un retournement pac-manesque extrêmement plaisant.
Si je souhaite (analyse critique oblige) ne pas faire intervenir le terme "amusant" (trop vague et trop personnel), il y a quelque-chose de plus universel dans cette façon de concevoir les ennemis (qui est aussi présent presque dans l'ensemble de la School Zone de Bilou): l'oppression est compensée par un (temporaire) sentiment de contrôle et de puissance. Une récompense positive obtenue en échange de la maîtrise des règles du jeu. D'adversaire tortionnaire inaccessible, le concepteur du jeu se permet de devenir complice du joueur.

 The fact that I find it funny (it echoes the kind of monster design I practice myself), isn't relevant for critical analysis, but we have something more universal than my personal fun, here. We have empowerment of the player as reward for mastering the core mechanics of the game. We have cleaner feedback on whether you're safe or about to get caught.
Another notable gameplay component that has been similarly revised ? Bushes-slashing. In any of the gameboy-powered episode of the series, slashing bushes give you a chance to recover hearts or earn rupees. In Z:LTTP, you may also wake up a soldier, an angry bee or a landmine. That makes it a two-sided action, randomly helpful or dangerous. The only reliable way to recover health is to purchase potions.
Z:LBW kept those two-sided bushes, but you can increase your chances of reward by turning aggressive bees into an ally that will hit monsters surrounding you.


On retrouve ce changement de façon plus profonde à l'extérieur des donjons. Les herbes et les buissons de Z:LTTP ne recèlent pas seulement des petits coeurs mais aussi des soldats, des mines et des abeilles en furie. Amère surprise pour qui espérait remonter sa jauge de vie. Z:LBW conserve ce côté "pile ou face" de la tonte de buisson (absent en revanche des autres épisodes sur console portable), mais offre la possibilité de faire changer les abeilles de camp. Elle deviennent alors l'équivalent d'un power-up assez semblable au "fragment de puissance" de Z:LA, avec en plus une touche de comique (un troll lanceur de bombes en déroute devant une simple abeille ... on aurait pu voir ça dans un Kid Paddle) qui permet d'évacuer le côté oppressant du monde des ténèbres et de ses poules mort-vivantes.