Thursday, February 27, 2014

LEDS refactoring

I noted an annoying bug/missing-feature in LEDS that limits the creation of new maps: monsters list is unchanged when you start a new map. That doesn't please the game engine that may end up with a large number of GOBs that sits outside of the level limits, triggering high number of movement failures, etc.
Voilà. Je m'attaque à cet agaçant problème des monstres-hors-monde qui ralentissent à l'extrême l'exécution de RunME. Un cas qui ne se produit que lorsqu'on construit une nouvelle map (plus petite) à partir d'un modèle qui contenait déjà des monstres. Avant de procéder au "filtrage" proprement dit, j'ai réorganisé un certain nombre des classes à travers les fichiers: si je dois sortir cscope pour trouver quel fichier contient GobBlock, c'est qu'il n'est pas dans le bon.
L'écran de sélection des fichiers à aussi eu droit à sa restructuration pour rendre le fonctionnement par "modes" plus clair tout en évitant les accesseurs redondants.

I've gone through some refactoring of the "WelcomeWindow" code (the part where you pick which file you want to operate on), mostly giving each "state" a dedicated function for its specific processing. That introduce some level of redundancy, but it will make the doxygen-navigation through the code more comfortable, with smaller functions and more precises "called from" relationships. I'm also preparing a modification of the "Block-based parsing" of command: most the issues I'm encountering in the Monsters-to-GobBlock link comes from the fact that monsters are kept in a vector while they should be kept in a list. Once in a list, I can keep long-distance iterators e.g. so that you can delete one object when the user says so or when it's cropped out of the new map.


PS: Some UML for this finally got uploaded, a bit late, since I'm moving to a new office, and I've had plenty of cardboards boxes with O'Reilly books in the house, stacks of magazines that wait for being relocated and such. I don't want cheap-mobile-phone-shot for 

Tuesday, February 25, 2014

Décevante Tablette

    Vous vous souvenez peut-être que j'avais rejetté l'idée d'un iPad assez rapidement. Trop cher. Inutilisable. Pourtant, une fois le "contenu" de Bilou's Adventure créé, ce serait assez sympa de pouvoir le présenter sur de ces systèmes androïd qui seront bientôt incontournables. Une tâche de fond surveillait donc les équippements ARM-powered pour dégotter le petit système sympa mais pas trop gourmand, avec juste les interconnections qu'il faut pour devenir le processeur du programme qui fusionnera le rendu son/lumière de desmume avec le moteur de jeu GEDS en un seul composant natif appelé depuis la couche Java.

    So there's now a tablet at home. It's not mine: I offered it to my fairy. She saw the lack of configuration, the over-simplified interfaces as features, so the tablet perfectly fitted her need for "something simple enough that I can use to check e-mail, share pictures and browse online shops". For at least 10 other blogging-related tasks, it failed me. Not that it's un-usable, but what it comes with (a web browser and that's it) is completely unsufficient.

    J'ai finalement acheté une tablette, mais pour ma fée. Un modèle Polaroïd. Parce que chaque
    fois que je présentais un inconvénient (pour moi) des tablettes, il se transformait pour elle en avantage. Vous noterez qu'après les tests de stylet pour écrans capacitifs, je n'envisage même plus l'édition de niveaux sur tablette: la DS restera l'outil le plus pratique pour ça, mais j'avoue que l'espace d'un instant, j'ai cru que ça me permettrait de blogger mes avancées plus confortablement ou de simplifier les petites tâches satellites si cruxiales au développement d'un jeu vidéo. J'ai déchanté. Je me suis donc mis à rassembler la liste-des-dix-chose-qu'on-ne-sait-pas-faire-avec:

    Etre facile: avec le "play store" Androïd qui n'est pas préinstallé (au profit du service concurrent d'Amazon), je n'ai accès qu'à un sous-ensemble des applications tablettes.
      Etre bloggeur: pas de chance, même une fois le playstore activé, l'application Blogger est refusée sur ce type d'équippement non-compatible. Quoi, il faut un quad-core pour taper du texte, en 2014 ?
        Ecrire des posts: le clavier bluetooth fourni avec ? Belle blague! il n'est détecté qu'une fois sur deux. Retourner changer un mot précis ? Bonne chance! Supporter les mots anglais dans un texte français (sans même parler de faire des posts bilingue) ? Je me marre !
          appréciez la qualité de la photo ... ou pas.
          Illustrer des posts... Vous aviez cru qu'un capteur optique, une interface tactile et le WiFi aurait fait de cette tablette l'outil-magique-pour-illustrer-les-posts? Rêvez pas. Qualité d'image très approximative (seulement moins pire qu'un petit GSM), absence totale de mise au point, impossibilité d'envoyer directement l'image vers un post blogger (il me faudra passer par un google drive, puis télécharger et ré-envoyer depuis un PC).

          Regarder des vidéos en faisant la vaisselle, qu'il s'agisse de la dernière des piano guys ou du longplay de Mario World Wiiu, je dépose par-ci par-là mon laptop dans la cuisine pour un peu de youtube. Oublie, avec la tablette: la réception Wifi est tellement mauvaise que la vidéo s'interrompt toutes les 10 secondes. Ce que je n'explique pas aisément, c'est la différence perçue par les deux appareils (à moins de supposer que les gens de chez Polaroïd ont mis une antenne de qualité LIdL ou qu'il l'ont noyée dans une cage de farraday, bien sûr).

            Etudier les graphismes des "pros" de deviant-art. Avec chaque page qui prend plus d'une minute à s'afficher, la gallerie des téléchargements qui se vide en cas de redémarrage de la tablette et un service de flux RSS qui décide à ma place si je veux voir ou pas les posts plus anciens que son installation, celà relève plus du combat que du confort. Je passe sur le dossier "téléchargements" qui est apparemment vidé à chaque redémarrage et le fond d'écran qui disparaît définitivement du système une fois qu'on en choisit un nouveau.

            Etudier du pixel'art, c'est encore pire. Le navigateur installé ne permet pas de faire du redimensionnement d'image sans y aller de  son flou quadratique lissant.

            Retourner voir quelque-chose dans le SVN de Bilou ... ça serait bien pratique, non ? "j'avais une référence ou un pointeur, dans LevelMonster, au fait ?" ... ha! bien essayé. La navigation sera tellement ardue sans la saisie de mot-clé à retrouver qu'il vaut mieux que je ressorte mon Cybook. La lourdeur du service en ligne de sourceforge n'y est peut-être pas totalement étranger.

            Editer un p'tit script de Bilou pourrait-il passer mieux ? Après tout, le port micro-SD me permettrait de compenser le fait que je n'ai toujours pas d'éditeur texte convaincant sur ma DS. Bin il faudra sans doute que je refasse un tour sur le amazon-shop, parce qu'il n'y a aucun éditeur texte pré-installé (la dernière que j'ai vu ça, c'était sur C64, mais là on avait un BASIC) et que le fichier .txt téléchargé par le navigateur n'est pas de type connu et ne peut donc pas être affiché.

            Payer les factures, ne serait-ce que pour se libérer du temps pour le reste. Bin non. La "sécurité" de l'application bancaire se résume à un mot de passe lié une fois pour toute à l'appareil (hautement volatile, faut-il le rappeler). On n'aurait pu imaginer une façon plus sûre de me faire fuir à toute vitesse.

            Et malheureusement, le projet eInk-A4-stylus de Sony n'est pas à la hauteur des attentes que le NoteSlate m'avait instillé.

            Thursday, February 20, 2014

            Lost levels: the Clicker era

            Et puisqu'on est dans une phase "déterrage de vieilleries", voici un mock'up de ce que j'espérais atteindre avec mes éditeurs de jeu ultimes aux alentours fin 1998, une fois que l'environnement Clicker serait suffisamment complet. Assez loin de SEDS, hein?

            Allow me to chain to another oldies-digging: some mockups of what the Ultimate Game Maker should have looked like if Clicker was already working in 1998. The blue-balls background reuse some graphics I used for my very first website, The font is the default one for Deluxe Paint II. I guess that's before I get seriously into 3D modelling with moray, given the icons look, but we can already see the side handles for pull-menus discussed with one of my brother's musician contact who should have collaborated to the creation of the sound tracker.

            Un tournant majeur du projet aura lieu en octobre 2001, lorsqu'Eugenia Loli-queru sur OSNews.com dresse la liste de tous les projets alternatifs à l'occasion de la sortie de Windows XP. Clicker32 y apparaîtra 2eme, derrière SkyOS et juste devant RDOS, provoquant 11436 visites en un jour (j'en avais jusque là une trentaine).

            Chose amusante, c'est parce qu'un autre développeur d'OS amateur avait trouvé sympa le petit Bilou qui servait de curseur souris à la version 0.9.x de Clicker 32 que je m'y suis remis.


            Vieux coups de crayon...


            2005
             En vrac, quelques petites illustrations bilou-esques qui s'étaient glissées parmi mes documents de doctorant, et qui correspondent justement à la "zone creuse" de Bilou: L'encrier en 2005 pendant que je reluquais surtout les graphismes de petitcarreaux.fr pour améliorer mon trait,

            I think I mentioned that idle timeslice between 1998 (Badman III) and 2006 (the pencil and the sharpen-her), where I mostly focused on operating systems design. While cleaning up my office, I dug a small collection of easy-to-date sketches of Bilou-related characters. 
            2006
            We see an inkjet from 2005, while I was attending a conference on grid computing, some pendats covering empty space between some IXP microcode in March 2006 (PhD years, just before starting the comics, afaik) and some standalone emotions of Verso-the-eraser which I would date from 2002 (or possibly late 2001 when I was finishing my master thesis ?)

            2006
            Un de ces crayons qui peuplait les ébauches de level design dans l'ambiance "bibliothèque 3D" de 2006 (pendant ma phase BD-couleur-photoshop). En mars de la même année, j'avais essayer de l'imaginer se déplacer en 3D avec du "tilting" pour la marche et de la rotation pour la course.
            2002
            Plus vieux (à mon avis vers 2002), quelques réactions de "recto-verso" dont les gags ne voulaient pas prendre, marquant ainsi la fin du "Bilou's Book".

            2003
            2004 ?
            2003
            Et pour clôturer, malgré leur arrivée tardive, voici enfin quelques gribouilles de Bilou et d'autres personnages de la School Zone datant avec précision de 2003. Curieusement, Bilou se remet à faire des grimaces qu'on ne lui connaissait plus depuis les années '90.

            Plus délicat à dater, une tentative de mise en page du retour-éclair de Bilou dans la Green Zone où il devra "recharger les pouvoirs de la gemme dans le deuxième monde". Rien que ça. Le croquis est tracé au dos d'un document présentant Reiser4 (paru en '2004, et j'ai des raisons de penser que je suis tombé dessus assez rapidement après sa sortie). Côté scénaristique, ça ne marche pas suffisamment, et je reste donc calé du point de vue "Bilou's Book".


            Thursday, February 13, 2014

            runme3D

            Toujours aussi tendu dans --IRL, au point que j'ai fait les modifications il y a bien une semaine mais que je n'ai toujours pas eu le temps d'en parler. Assez curieusement, j'ai des triangles flashy blancs qui apparaissent dans tous les sens quand je m'approche de l'emplacement d'une éponge sur DS, chose que je ne parviens pas à reproduire dans l'émulateur... et qui ne se produisait pas avec la version intégrée "SchoolTest.nds" ToT

            So runme theoretically now support 3D layer when running a game. Theoretically as in "it works in the emulator, it crashes the real hardware, and I have to find more time to figure out why". It has been initialized somehow, since it starts displaying random triangles when one approaches a spongebop, but either I'm dumping incorrect coordinates to those triangles or something was mis-initialised.

            Wait a minute. If I download back the copy that's ready-for-self-update, it doesn't display anything 3D in the emulator, while the version I have rebuilt this lunchtime do display it fine. Looks like I'll have to double-check I'm indeed testing my latest build on the RealThing... It sounds like I should have set a stronger separation between "introduce 3D" and "change the web host for self-update" phases ...



            Another interesting update on the "broken bonus" issue. I had already noted that only the screen content was bogus. If you move far enough and come back, the bonus are completely removed. I noted this lunch time that we could see some *other* location being cleared. In other words, clearblock() function might not properly handle odd-tiled blocks that sits on the seam of the onscreen texture. Restoring the original screen location to the left of the level makes the bug disappear.

            Je pense bien avoir mis le doigt sur ce qui provoque ce curieux bug de bonus-à-moitié-disparus, par contre... et à reprendre le fichier construit proprement, la 3D passe aussi dans runme. Cafouillages de téléchargements, j'imagine. Il faut dire que le "nouvel hébergeur" (le site web de sourceforge) est d'une lenteur affligeante à l'heure des CDNs. Il va falloir que je trouve un autre plan B ou que je parvienne à prolonger mon occupation du serveur qui marchait si bien jusque là.

            Wednesday, February 05, 2014

            Le point sur Bilou


            Je pense que j'ai plus ou moins fait le tour des mises à jours et autres améliorations à apporter à ma démo de la School Zone. Les bases de "Bilou: rush to completion" sont plus ou moins jetées, et ça pourrait être sympa de commencer quelques graphismes pour les niveaux complémentaires.

            J'ai tenté à deux ou trois reprises d'ajouter le support "marcher sur les taille-crayons", mais les paramètres --IRL ne m'ont pas permis d'aller bien loin. Je devrais sans-doute refaire un .doxygen pour mon cybook avec la dernière version de mes sources.

            J'ai numérisé quelques notes sur l'encre qui monte et qui descend, élément essentiel de Deep Ink Pit, Rush To Completion et du "niveau-de-rémi". Celà dit, d'un niveau à l'autre, l'approche souhaitée n'est pas la même >_<. Donc, je vais juste retaper mes notes et on verra en fonction du jeu qui sort le premier quelle approche j'implémente.

            Sur la version "beetle" avec la map la plus récente, j'ai de curieux effets sur les bonus qui ne disparaissent plus qu'à moitié.

            L'éponge arrive aussi plus près du "tableau", mais un p'tit pallier supplémentaire pour attraper l'éponge serait le bienvenu.

            J'ai quelques correctifs pour les programmes de développement,
            • [done] intégrer le rendu 3D à runME,
            • [todo] éliminer les monstres hors-niveau lors d'un changement de map dans LEDS,
            • [done] permettre de passer à la "page d'animation suivante" lorsqu'on essaie de sortir des 6x8 cases visibles dans AnimEDS.
            • [done] ajuster la mise à jour autonome vers le nouvel hébergement.
             Oh, et pendant ce temps-là, Piek nous finit le premier boss de Bilou: origins :) Alors moi, je reprends mon script d'analyse de spriteset pour qu'il génère automatiquement les "data" compatible avec son moteur de jeu (enfin, j'espère), histoire qu'il puisse passer à la zone suivante ^_^

            Tuesday, February 04, 2014

            Adventures in 3D Land: DKC Returns

            http://zeezeezeez.wordpress.com/2011/01/06/sammy-hall-donkey-kong-country-returns/Donkey Kong Country est le premier jeu que je suis parvenu à terminer sur Super NES (grâce à l'entrainement de Julien). DKC2 est le jeu pour lequel j'ai installé mon premier émulateur. DKC3 celui qui a failli me coûter mes vacances d'été en '98 ... et je me serais sans doute passé de 3DS si je n'avais pas appris par Piek l'existence de DKC returns 3D. On a ici droit à un véritable portage du jeu Wii sur console portable, avec l'effet stéréoscopique pour celui qui insiste, un coeur supplémentaire par joueur et quelques soucis de prise en main.

            J'y vois rien!
            C'est le gros hic de cette version. Pas de ralentissement-sur-le-rail en ce qui me concerne, mais une série de situations où le héros et les éléments-clé du gameplay sont tout simplement illisibles. Entre les phases de jeu où un zoom arrière est utilisé pour rendre la scène "plus épique" (niveau sur rail du monde des dinos), les fois où c'est nécessaire pour avoir une vue d'ensemble (dans la forêt sur la photo ci-dessus), et celles où les développeurs ont trouvé que ce serait rigolo qu'on joue à l'arrière-plan pendant une petite minute avant d'être renvoyé sur l'avant-plan, nos yeux sont mis à rude épreuve. Regardez plutôt: Bilou, avec ses 24 pixels de haut (la taille d'un sprite C64) est plus grand à l'écran que Donkey Kong -- d'ailleurs à la limite de l'invisible sur fond de vieux tronc brun foncé.

            Die & Retry.
            Nombreux sont les recoins du jeu où il est impensable de passer du premier coup. Plutôt que d'attaquer le coeur du problème, on nous met alors ici et là un ballon 1-UP juste après un point de sauvegarde. S'ils passent techniquement sans ralentissements, les niveaux en tonneau-fusée ou en charriot minier restent extrêment éprouvant pour les nerfs, avec des obstacles imprévisibles en fin de niveau, alors que vous venez de faire preuve de maîtrise et de concentration pendant la première moitié. Ce serait tolérable si on pouvait garder sa fiole-de-protection (achetée chez Cranky) pour la fin du niveau, et s'il ne fallait pas compter près d'une minute de chargement entre les niveaux pour aller s'en racheter une. On ne manque pas de vie, c'est sûr -- ce ne sont pas mes 406 pièces bananes qui me contrediront (7 vies pour 10 pièces, sauf erreur de ma part), mais ce genre de niveau est généralement fini avec Super Kong parce que j'en ai trop marre, surtout qu'ils aiment apparement nous en mettre deux ou trois  coup-sur-coup. Ce ne serait pas si grave si on pouvait se dire "ok, c'est de ma faute, je n'ai pas fait attention à ..." mais avec tous ces effets pyrotechniques ajouté autour du gameplay, ça tourne franchement au "vraiment trop injuste".

            Souffler n'est pas jouer ?
            Il m'aura fallu presque tout le premier monde pour m'adapter à l'inertie des sauts de DKC. C'est très certainement de bonne guerre, et le nombre de ballons, tonneaux et coeurs proposés fait que, si j'ai raté des sauts plus (surtout pour assommer des tiki) plus souvent qu'à mon tour, j'arrive tout de même au boss sans avoir fait descendre significativement mon stock de vies. J'aime toujours autant les mouvement complémentaires "frapper au sol" et "souffler", utilisés essentiellement pour activer les subtils équivalents des "blocs-questions" contenant bananes, vies, etc. Très chouettes, parce qu'à l'instar du "abaisse-toi pour trouver les passages secrets" de Titus, ils ne permettent d'explorer qu'en marquant une pause dans les enchaînement de sauts. A cogiter. Par contre, je dois bien admettre que j'ai fini par laisser tomber le "roll-jump". S'il offrait une technique ultime pour les épisodes SNES, il va conserver ici son inertie horizontale, de sorte qu'il m'est arrivé très régulièrement de louper mon atterrissage tout simplement parce qu'il ne fallait pas faire de roll-jump à cet endroit, même pour des sauts relativement longs. Comparativement, l'opus sur SNES permettait de faire un saut *vers la gauche* même au milieu d'une roulade vers la droite, avec un côté "oh, bin non, je ne vais pas tomber dans le trou, finalement, je reviens sur ma plate-forme".

            Et la 3D?
            Non, merci, sans façons. La majeure partie du jeu sera affichée "plus profond que la vitre" (dans l'écran), ce qui est certainement préférable à perdre l'illusion de 3D à cause d'un objet qui deviendrait invisible lorsqu'il arrive au bord de l'écran alors que vos yeux le percevaient plus proche que la vitre. Par contre, vu la quantité d'éléments d'avant plan, celà implique que les personnages, ennemis et autres éléments interactifs ne sont quasiment jamais avec la même image pour les deux yeux. Le hic, c'est qu'avec le niveau de détail relativement réduit que les 400x240 pixels de la console permet et l'absence d'anti-aliasing, on obtient des effets très désagréables où l'oeil droit soutient qu'on voit nettement les deux yeux du singe alors que l'oeil gauche, lui, en voit un plus court ou déformé. J'ai été tenté de la réactiver dans les niveaux qui jouent sur "avancer/reculer sur l'axe de profondeur", espérant qu'il serait plus facile d'estimer les distances de saut de ce donkey-plus-petit-que-Bilou avec l'effet 3D, mais non. C'est juste pire, vu les reflets et la perte de luminosité dont j'avais déjà parlé.

            Au final, le jeu reste bon, et c'est sans doute un des rares (hum) bon portage d'un épisode de DKC sur console portable. J'apprécie tout particulièrement la reprise de la bande son des années '90, qui est apparemment la seule chose dont ma fibre nostalgique avait besoin pour me faire oublier l'absence de Funky Kong, d'Espresso, de Dixie, des kremlins (il faut admettre que les tikis ne leur arrivent pas à la cheville, graphiquement parlant) et des ballons verts et bleus.

            Par contre, si un petit quart-d'heure de (new) super mario avait le chic pour me déstresser et m'aider à relativiser les problèmes, me remettre de bonne humeur, je constate que DKCr aura plutôt tendance à me rendre agressif, contrarié, et un peu râleur. Curieux.

            Monday, February 03, 2014

            Undermining challenges.

            "31 years of Power-Up by

            TheBourgyman

            Is there still something to be said about power-up in platformer games ? I mean, since someone in Japan thought "How Popeye/Brutus strength ratio is reversed by a mere can of spinach is just genius, let's reuse that", it has been declined in so many variants ... all sort of moves, transformations, sidekick, projectile size, patterns and numbers: they cover a poster just for the Mario Series.  I initially thought of power-ups as something that enables some actions through which you unlock somme parts of the game. But that's not what they're best at (that's the role for a key).

            not a chance you can collect the 3rd "golden coin"
            (in level 1-2) before you beat the boss of world 4 :P
            Les power-ups. Si simples en apparence et pourtant tellement cruxiaux dans la conception d'un jeu de plate-forme, au point qu'on tolère de Mario qu'il parcoure les même 4 ou 5 mondes génériques (feu, eau, glace, sable) depuis 20 ans pourvu qu'il y ait de nouveau items dans les boîtes-question... Pourtant, au depart je les voyais surtout comme une façon de verrouiller une portion du niveau. Le Bilou initial avait sans doute l'approche la plus agaçante qui soit de ce point de vue-là: ne permettre l'entrée à une zone d'un niveau X que moyennant l'utilisation d'un power-up qui serait acquis *plus tard* dans le jeu.

            Et pourtant, le vrai potentiel des power-ups n'est pas là: il s'agit bien au contraire de permettre au joueur d'ajuster le niveau de difficulté du jeu. Pas en évitant les passages difficiles, mais en changeant un brin les règles pour permettre au joueur de "passer comme dans du beurre", ou presque, de lui permettre de se sentir "à l'aise", de défier la force implacable qui se dresse contre lui. C'est toute la différence entre un boss de Zelda qui insiste pour qu'on utilise tel ou tel objet lors du combat et les boss de Mega Man qui peuvent tous être vaincus uniquement avec le tir de base, bien qu'ils aient chacun un point faible à exploiter.

            Playing Cave Story and Kirby Amazing Mirror in 2005 made me realise that there was a significant added value to power-ups that may be _lost_ when the hero gets hurt. By tuning where you offer the power-up, where you make it behave as a key and what you put in-between, you create a sub-challenge "can you cross this path with only one hit-point ?"

            Following both Mario and Cave Story approach, you may lose those abilities when you're hurt. Late 2008, I have scribbled somewhere "let's have all the features available from the start (unlike in a Rayman game) and power-up would widen the allowed timing from user input". That is, you could always grab a ledge to climb it, but with more "fist power", you could stay hanging for as long as you want. Same for wall-kicking: foot-power would loosen the constraint that "JUMP button should have been press just when we're hitting the wall".

            This means that power ups are no longer keys to progress, but comfort unless you gain the skills the game really require. In other words, they don't just "make the impossible possible" but they mostly "make the possible easy". I'd add today that we can also offer alternate ways to complete a specific challenge depending on whether the player currently holds the power-up (smash the ground) or not (climb up, dodge ennemies, and then fall through)

            Et si disposer du power-up pour finir le niveau devient accessoire (mais utile), on a alors le droit de confisquer l'accessoire à tout moment. Le joueur plus prudent/attentif/doué se verra récompensé par le fait qu'il conserve son power-up plus longtemps.