Ludum Dare 48 post-codem : Léon le python

Le nom complet de cette compétition de création de jeux vidéo est « Ludum Dare 48 », car elle se déroule durant 48 heures. Il y a donc eu le « Ludum Dare 48 numéro 1 », le numéro 2, etc.

Nous sommes arrivés au « Ludum Dare 48 numéro 48 ». Quelque chose de spécial avait été promis pour l’occasion, mais rien de précis n’avait été annoncé. Le jour J du week-end W, je n’ai rien vu de particulier. On s’en fout.

Ça date de plusieurs mois, certaines impressions et sentiments que j’ai eu sur le moment se sont évaporés. Je vais faire au mieux pour vous raconter tout ça.

Le thème était « Deeper and Deeper ». J’ai créé, en utilisant Squarity, un mélange de Snake et de Match-3, intelligemment intitulé « Snake Match ».

Comment ça s’est passé pour moi ?

Beaucoup mieux qu’au numéro 47. Dans les premières versions de Squarity, les messages d’erreurs python ne s’affichaient nul part. Une faute de syntaxe ? Une variable mal nommée ? Fallait se démerder tout seul. J’avais galéré comme un galérien et je flippais à chaque ajout d’une nouvelle ligne de code. Je suis beaucoup plus serein maintenant.

Très heureux d’avoir réussi à ne pas passer l’intégralité de mon week-end à créer le jeu. J’ai pris le temps de dormir à peu près comme il faut, de m’occuper un peu de mes enfants, de faire des trucs dans la maison, etc. Et surtout, j’ai fait tester le jeu auxdits enfants au fur et à mesure de son développement. C’est le plus important pour moi. Il faut montrer, donner et expliquer les étapes intermédiaires de création d’une œuvre (jeu vidéo ou autre). Ça incite et encourage d’autres personnes à créer leurs œuvres à elles.

Les sprites ont été dessinés à l’arrache et sont moches. J’avais prévu de les refaire en plus joli, s’il me restait du temps vers la fin. Ça n’a pas été le cas, comme la fois précédente. Pas de déception particulière sur ce point, donc.

J’ai streamé l’intégralité du développement sur Twitch. La plupart du temps sans caméra ni micro, pour ne pas déranger les gens qui habitent avec moi (j’ai pas vraiment de bureau, on vit ensemble dans une seule grande pièce, en mode « pécores du 12ème siècle »). Le samedi et le dimanche soir, après avoir couché tout le monde dans leurs lits respectifs, j’ai pu caméra-microtiser.

Un énorme merci aux ordispectateurtrices qui m’ont suivi pendant les streams et qui commentaient. J’ai vraiment besoin de ces petites attentions pour flatter mon ego et avoir le courage de continuer Squarity. Sinon j’aurais abandonné depuis longtemps. Encore merci. Et tant qu’on y est, merci à toutes les personnes qui ont joué à mon jeu et donné un avis sur le site du Ludum Dare. Merci en particulier à une copine qui l’a testé sur son smartphone et qui a lâché des comms sur mon Linkedin. Elle se reconnaitra si elle lit ceci.

Un serpent fait un câlin à des pommes

Quel résultat ça a donné ?

Vous avez certainement remarqué que l’expression « on va pas se mentir » est à la mode.

Eh bien on va pas se mentir, ce jeu n’est pas très fun.

Le serpent peut manger des fruits, ce qui permet de changer leur disposition, pour créer des alignements de 3 fruits identiques et les faire disparaître comme dans un match-3 classique.

Le serpent doit aller le plus profond possible, mais il a une longueur et une capacité stomacale limitée. Vous devez gagner des XP et monter de niveau pour augmenter ces deux limites.

On gagne beaucoup plus d’XP en matchant des fruits qu’en les mangeant. De plus, les matchs ne remplissent pas l’estomac. Je pensais que ces règles déclencherait un comportement : la personne qui joue essayerait de faire des matchs, même si ce n’est pas nécessaire pour avancer dans le niveau, car elle chercherait à gagner des XP.

De plus, comme dans tout bon match-3 qui se respecte, il y a des blocs de pierre, qui ne peuvent être détruit que par un match adjacent.

Eh bien ça marche pas. J’ai pas assez réfléchi à mes mécaniques de jeu.

Je m’en suis aperçu lors de mes tests finaux, alors qu’il ne restait plus que 2 heures. La manière la plus optimisée de jouer est d’aller tout droit, le plus profondément, comme un gros débile. De toutes façons, il y a des matchs qui se font automatiquement car les fruits sont placés totalement au hasard. Au bout d’un moment vous ne pouvez plus avancer à cause de la longueur limitée du serpent. Mais vous avez forcément gagné de l’XP. Vous redémarrez du début, en re-allant tout droit comme un gros débile. Et ainsi de suite.

Constatant cette catastrophe, j’ai ajouté à la va-vite des lignes complètes de blocs de pierre, à des profondeurs prédéfinies. La personne qui joue est donc obligé de matcher des fruits pour détruire des blocs et se créer un passage. Ça ajoute un peu d’intérêt au jeu, mais ça ajoute aussi du potentiel de rageage.

Ligne de blocs de pierre pour sauver l’intérêt du jeu

Souvent, les fruits présents dans l’aire de jeu ne permettent pas les matchs nécessaires à la destruction des blocs. Il n’y a pas d’autres choix que de redémarrer du début. Ces échecs sont uniquement dû à un manque de chance. Vous n’avez aucun moyen d’augmenter la probabilité des matchs. C’est du « pas-de-bol and retry ». C’est chiant. Moi-même je trouvais ça chiant en le testant. À 2 heures de rendre sa copie, c’était trop tard pour retravailler les mécaniques du jeu. J’ai pris un peu de temps pour doser la quantité et la disposition des lignes de blocs de pierre, et j’ai tout envoyé à la zob’.

Voici mon classement, sur un total de 1145 participations dans la catégorie « Compo » :

  • Overall: 723ème (3.042)
  • Fun: 743ème (2.792)
  • Innovation: 440ème (3.229)
  • Theme: 533ème (3.438)
  • Graphics: 824ème (2.5)
  • Humor: 516ème (2.25)
  • Mood: 819ème (2.15)

Par rapport au Ludum Dare précédent, il y a du mieux et du moins bien. Mon Overall a descendu. Mais je suis dans la moitié haute pour le thème et l’humour, ce que je n’avais pas réussi avant.

Un peu déçu par mon classement en Innovation, même si il sort du lot. La dernière fois, je m’étais facilement placé dans le premier quart, alors que là j’arrive péniblement après le premier tiers.

Je m’attendais quand même à un peu mieux, car je me suis senti beaucoup moins à l’arrache et en galère durant tout l’événement. Pas grave, l’important c’est de s’être amusé à créer un jeu !

Après le requin-marteau, le serpent-banane

Qu’est-ce qu’on va faire après ?

Concernant Squarity

Le but de ces participations aux Ludum Dares est de tester « en conditions réelles » la création de jeux avec Squarity, pour déterminer les améliorations du moteur et du site web qui seraient les plus urgentes. Le but est aussi de faire connaître Squarity, mais vous le saviez.

Ce qui m’a un peu manqué, ça a été la possibilité d’écrire du texte dans l’aire de jeu. J’aurais aimé pouvoir afficher un petit cadre d’infos, indiquant la longueur actuelle du serpent, combien de fruits il peut encore manger, ses XP et son niveau. J’étais parti pour une solution de secours : mettre des bar-graphs sur un côté de l’aire de jeu. Pas eu le temps. Les fonctions de texte, si elles avaient existées, m’auraient permis d’implémenter ça beaucoup plus rapidement. Et les infos affichées auraient rendue plus claires les mécaniques du jeu.

Autre manque, qui s’est fait sentir bien plus cruellement : des petites classes et fonctions python à importer, pour aider au développement du jeu.

  • Une classe contenant un quadrillage de trucs (lesdits trucs pouvant être n’importe quoi : string, liste, classe custom).
  • Une autre classe stockant les trucs sous forme d’une matrice creuse, c’est à dire une liste de tuple (coord_x, coord_y, un_truc).
  • Des fonctions pour passer d’une classe à l’autre, pour fusionner deux quadrillages, pour extraire un sous-quadrillage, etc. On pourrait s’inspirer de numpy.
  • Indexation des quadrillages par adjacence, par ligne et par colonne.
  • Des fonctions pour gérer les mécaniques de jeu qui reviennent souvent : distance de manhattan, gravité, détection de lignes/colonnes de Match-3, pathfinding, propagation d’un truc sur des cases adjacentes, dijkstra, …
  • Sans oublier des tutoriels et des mini-exemples pour illustrer ces classes et ces fonctions.

Tout ceci est dans la roadmap. Ha ha ha.

Version actuelle du moteur de jeu Squarity

Concernant Snake Match

J’essayerais de reprendre ce jeu et de corriger ses mécaniques pourries. Cependant, j’avais annoncé la même chose pour Loops in Pools et Soko-punk, et rien n’a avancé. Alors je préfère ne rien promettre.

En vrac, des idées de pouvoirs spéciaux :

  • Le serpent tire la langue, attrape le premier fruit devant lui, et le rapproche d’une case. Ça peut permettre de décaler des fruits horizontalement, pour les matcher.
  • Le serpent vomit devant lui le dernier fruit qu’il a mangé.
  • Des fruits randoms tombent du haut de l’écran.
  • Vision de loin : l’aire de jeu scrolle vers le haut non pas quand le serpent est tout en bas, mais un peu plus haut.
  • Pousser des blocs de pierre.
  • Le serpent entoure un bloc de pierre pour le détruire. (Comme un super-boa constrictor).

En vrac, des idées de quête et de mode de jeu (chacune pourrait débloquer un pouvoir spécifique) :

  • Manger une séquence de fruit définie, plus ou moins longue.
  • Manger une certaine quantité d’un fruit spécifique, en une seule partie.
  • Détruire une certaine quantité de blocs de pierre, en une seule partie.
  • Matcher en une seule fois une certaine quantité de fruits.
  • Matcher, avec des réactions en chaîne, une certaine quantité de fruits, ou une séquence de fruits.
  • Détruire entièrement une disposition prédéfinie de fruits et de blocs de pierre (avec ou sans certains pouvoirs spéciaux, sinon il y aura des solutions non prévues).

Idées d’achievement, si jamais on fait des achievements :

  • Terminer un niveau avec à la fois l’estomac plein et la longueur max du serpent atteinte.
  • Terminer avec la longueur max atteinte, et un estomac très très vide (on a avancé en faisant pratiquement que des matchs)

Peut-être aussi que les montées de niveau devraient se faire uniquement par rapport au score max de toutes les parties. Et donc ça ne s’appellerait plus des XP mais du score. La personne qui joue pourrait donc faire une partie pour monter son score max, puis une autre pour réussir une quête, etc. Ça donne un peu de replay value.

Certaines quêtes seraient associées à un mode de jeu spécifique et à son score max. Le niveau dépendrait de la somme des scores max de tous les modes de jeu. Moui, une idée intéressante.

Je laisse ces idées en vrac pour l’instant. On verra plus tard si j’ai le temps et le courage d’en faire quelque chose. La priorité actuelle, c’est de finir le jeu « Game of No-Life », puis de réattaquer quelques petites améliorations du moteur du jeu (il en a besoin) et aussi de formaliser pour de vrai la roadmap. Paf !

Les serpents aiment les femmes un peu rondes.

Elle, c’est Alexandra Shcherbakova.

Ludum Dare 48 : Snake Match

Comme promis, voici ma participation au Ludum Dare 48.

C’est par ici pour y jouer directement.

Et par ici pour la fiche du Ludum Dare.

Vous êtes Léon le python, vous mangez les fruits et vous les alignez pour réaliser des Match-3. Parviendrez-vous à aller suffisamment profond pour retrouver votre créateur, le « Guide on Van-Random ? »

Le nom du créateur est bien évidemment un jeu de mot bancal avec « Guido Van Rossum », le vrai créateur du langage python. Littérallement, ça veut dire : « le guide sur un van (une voiture) aléatoire ». Si vous parvenez jusqu’à lui, vous verrez qu’il y ressemble effectivement.

Quelques conseils de jeu :

  • Si vous êtes bloqués (serpent trop court, blocs qui barrent le passage, …), remontez votre serpent jusqu’en haut pour repartir du début. Vous conservez vos points d’expérience.
  • Au début c’est important de gagner des XP pour monter de niveau, car votre serpent ne peut pas aller très loin. Après on s’en fiche, vous pouvez bourriner la flèche du bas pour aller le plus profondément possible. C’est mal équilibré, je sais.

Si vous n’arrivez pas à atteindre le Guide on Van-Random, vous pouvez tricher. Dans le code du jeu, (zone de texte à gauche), vers le début, se trouve la ligne suivante :

DEEP_WON = 248

Mettez un nombre plus petit (par exemple : 20), puis cliquez sur le bouton « Exécutez » au milieu de l’écran. Vous devriez parvenir à atteindre votre créateur.

J’ai twitché l’intégralité du développement du jeu. Si ça vous intéresse, regardez-le assez vite. Dans une semaine, ça va disparaître dans les limbes de twitch. Y’en a pour 14h de vidéos quand même.

Pas plus de choses à dire que ça pour l’instant. Y’aura un article post-codem, mais peut-être moins long que celui du LD47.

Et maintenant, go création du challenge pour la THCON. À plus tard tout le monde.

Pour l’image de femme ronde, j’ai hésité entre faire une référence au thème de ce Ludum Dare : « Deeper and deeper », ou faire une référence aux fruits de Snake Match.

C’est plus difficile de trouver des images de femme ronde avec des fruits qu’avec du « Deeper and deeper ». Vous constaterez donc que je passe du temps, parfois plus que nécessaire, pour rester dans la décence et la sobriété.

Pourquoi je crée Squarity ?

Lors d’une enième conférence de coaching en création de startuffe, un quelconque corporate-bullshiste officiel a dit : «start with ‘why’, not with ‘what’ or ‘how’».

Ce n’est pas ce que j’ai fait avec Squarity. J’ai starté with « on-va-d-abord-s-assurer-de-la-faisabilité-technique-de-l-idée », car compiler du python en live dans un navigateur web, c’était pas gagné d’avance. Maintenant que je suis à peu près sûr que ça fonctionne, je peux continuer with « why ».

Vous trouverez dans mon repository de doc le texte officiel détaillant ce why et les spécificités de Squarity par rapport à d’autres moteurs de jeux.

Il y a d’autres raisons, plus intimes, provenant de l’adolescent immature que je suis. Je ne les ais pas mises dans le texte officiel, car ça pourrait dérouter des personnes qui ne connaissent ni moi, ni Squarity.

Mais si vous êtes sur ce blog et que vous ne vous êtes pas encore enfui, il est fort possible que vous me connaissiez déjà un minimum, donc que mes bêtises plus intimes ne vous choquent pas. Ce qui nous amène à :

« Pourquoi je crée Squarity ? » version adolescent immature

Les raisons sont à peu près classées de la moins bizarre à la plus bizarre.

Puzzlescript

Le déclic a été provoqué par PuzzleScript. En découvrant cet outil, je me suis dit que son potentiel était énorme, mais qu’il manquait tous les à-côtés : un espace d’échanges, une doc plus fournie avec des exemples commentés, un système de débug plus élaboré, des tests unitaires, des vraies images pour les sprites, etc.

J’étais parti pour forker/contribuer au projet et apporter progressivement ces à-côtés. Mais je me suis aussi souvenu de cet article de Sam et Max, expliquant que créer des « Domain Specific Language » est souvent une idée à la con, et qu’il vaut mieux créer une API sur un langage existant (au hasard le python). Ce que je suis en train de faire.

Un DSL pour tous les serpents (pas que les pythons)

Anna Anthropy et ZZT

Souvenir de mes années collèges.

Je joue à Jill of the Jungle. Un petit readme publicitaire y est inclus, mentionnant le jeu ZZT et son éditeur de niveaux. C’est du mode texte, ce qui est techniquement cheap, même pour l’époque. Je remise ce souvenir au fond de mon cerveau pour un éventuel rappel ultérieur. Je passe à d’autres choses, principalement : mater les seins de mes camarades de classe.

Il y a deux ans, alors que l’idée de Squarity commençait à germer dans mon esprit, je tombe sur la collection de livres « Boss Fight Books ». L’un d’eux, écrit par Anna Anthropy, a pour sujet ZZT. Je me fait offrir ce livre pour mon anniversaire, dans le but de parfaire ma culture concernant les jeux dotés d’un éditeur de niveaux.

Je découvre Anna, les histoires qu’elle a traversées, son engagement pour la diversité culturelle et la fanzinicité des jeux vidéos, la foisonnance de mondes ZZT que des adolescents déversaient sur les serveurs BBS. Je me sens bizarre en lisant l’histoire de Drako et son « Edible Vomit », je me vois dans le trou qui aurait pu être comblé « if only you had committed more », j’ai une petite larmichette à la dernière page où elle se remémore avoir échoué à récupérer 5 symboles de Venus violets.

J’aimerais avoir le soutien de Anna Anthropy pour Squarity. Je n’ose pas la contacter pour l’instant, car le projet n’en est qu’à ses débuts. Plus tard, peut-être.

J’ai récemment fini « Caves of ZZT » et je m’attaque à « Town ».

Nostalgie de ma renommée Turbo Pascalienne

Au lycée, je créais des petits jeux et des animations en Turbo Pascal. Je vous en ais parlé, et j’ai publié une partie de ces vieux trucs.

Je les mettais sur des disquettes et les distribuais à mes potes. Ils trouvaient ça génial. J’ai donné des cours à certains d’entre eux. J’étais une putain de re-sta. Auprès d’une catégorie très restreinte de lycéens, certes, mais une putain de re-sta quand même.

Il faut donner le plus de moyens possibles aux ados actuels d’expérimenter la démarche de créer des choses en informatique et de les partager. Ce ne sera pas sous forme de disquettes ni de programmes Pascal, mais si ça peut être sous forme de jeux dans Squarity, ça me rendrait très heureux.

Renommée, renommée… Qui es-tu, renommée ?

Augmenter ma capacité à finir mes projets

Comme vous le savez, j’ai un historique créatif assez fourni : jeux, dessins, textes, … Cependant, mon ratio « projets vraiment terminés / projets envisagés » est très peu glorieux. Je ne me fais plus d’illusion, je sais maintenant que j’ai du mal à m’investir dans un projet personnel sur du long terme. Mes plus hauts scores ont été le dessin animé Pru-Pra-Prok et le jeu Blarg, qui ont chacun duré une année (pour un résultat hautement discutable). Ma participation au Magazine 42 a duré plus longtemps, mais je considère ça comme un enchaînement de petits projets, et non pas un seul gros.

Face à mes difficultés à rester motivé sur du long terme, j’ai logiquement décidé de me lancer dans un gros projet de long terme, dont la finalité est de m’aider à créer des petits projets de court terme, à savoir, des jeux dans Squarity.

Comment ça, c’est pas logique ?

L’hôtel Ryugyong : un projet pas fini, mais lumineux.

L’amour, bordel ! L’amour !

Souvenir de mes années lycées.

Je suis amoureux d’une fille. Je passe plusieurs mois à penser à elle sans rien oser faire. Puis je lui écrit une lettre d’amour. Une envolée lyrique classique, mais franchement pas dégueue. Avec le mot « princesse » dedans.

Sauf que je n’ose pas venir lui en parler. Je ne lui montre aucun signe d’intéressement. À tel point qu’elle se demande si ce n’est pas une blague, si ce n’est pas un crétin random qui a écrit cette lettre pour se foutre de ma gueule et/ou de sa gueule à elle.

Il faut que j’en parle à mes potes (ceux mentionnés précédemment, qui me considèrent comme une re-sta), mais même ça, je n’ose pas le faire.

Alors je crée un jeu, sur le même principe qu’Atomix, en 3D iso et avec plusieurs étages. Je place une lettre du prénom de mon amoureuse sur chaque étage, puis je construis un niveau à partir de ça (du level design de dingo !). Je montre ce jeu à mes potes, qui découvrent la vérité.

Quelques jours plus tard, j’envoie l’un des potes révéler à cette fille que ce n’est pas une blague et que je suis vraiment amoureux d’elle. Encore quelques jours plus tard, dans un ultime boost de courage, je vais moi-même lui parler. Comme vous vous en doutez, elle me congédie poliment.

On n’est pas sorti ensemble. Puis j’ai perdu les fichiers du jeu. À moins que je ne les ais consciemment effacés. Je ne sais plus.

Un jeu vidéo n’est qu’une solution parmi d’autres pour révéler un amour, directement à la personne concernée, ou par pote interposé. La seule solution dont j’étais capable à l’époque. J’aimerais que Squarity soit un moyen pour plein de gens d’exprimer plein de choses.

Elle était magnifique comme ça.

Ma dépendance à la création de jeux

J’ai une dépendance légère au jeux vidéos, mais aussi une dépendance à la création. Je suppose que ça provient de mon indécrottable désir d’auto-flattage d’égo, et peut-être aussi d’une certaine envie de pouvoir suprême. La première fois que j’ai compris le concept de la programmation (alors que je ne savais pas programmer), j’ai réalisé que ça pouvait faire de moi un Dieu. Un Dieu d’un monde limité à un écran, mais un Dieu quand même.

Alors j’ai pris tous les outils de création de jeux qui me tombaient sous la main et j’ai fait tout et n’importe quoi avec. J’ai …

  • dessiné des décors de Saphir,
  • fait de l’Ascii Art sur un TO7-70,
  • modélisé un début de château avec 3D Construction Kit,
  • créé un cosmo-shoot et un casse-brique-Metroidvania avec Klik’n Play (les sauvegardes se corrompaient toutes seules, ce logiciel est une arnaque),
  • architecturé des niveaux de Doom (la compilation plantait avec le message « nodes will be inaccurate », DoomCad est une arnaque),
  • organisé des enchainements d’événements improbables dans Incredible Machine,
  • produit une suite complète de niveaux de Logical,
  • bidouillé des maps de Warcraft 2,
  • imaginé un gigantesque jeu dans le style Tiny Skweeks, avec des dizaines d’éléments,
  • level-designé un niveau de Jama-Jama (jeu qui a disparu de l’internet),
  • raconté un début d’aventure épique dans Drod,
  • conceptualisé un langage universel permettant de formaliser des règles de jeu de Match-3,
  • programmé des jeux en Pascal, en Delphi, en C++, en python, en PuzzleScript, en slip, en fer, en enfer,
  • j’en oublie.

Alors voilà. Squarity est l’aboutissement de tous ces trucs, en même temps que le démarrage d’un tas d’autres trucs. Venez, on va s’amuser !

Tout a commencé dans une piaule de cet acabit.

Squari-tutoriel !

À l’arrache ce mois-ci pour l’article de blog. Mais j’ai quand même du contenu à proposer. Comme on dit dans les basse sphères le la société : « chose promise, con tenu ».

Une fois de plus, c’est à propos de Squarity.

Voilà, j’ai fait un petit tutoriel, qui vous accompagne dans la création d’un sympathique petit jeu de soko-ban.

Vous n’avez pas besoin de connaissances en python pour le suivre. Il est assez long, mais super facile. Il suffit de copier-coller des bouts de code. Il y a parfois des questions, dont la réponse arrive peu de temps après, pour ne pas bloquer les gens. Ça ne vous apprendra pas le python, mais avec un peu de chances, ça vous donnera envie de programmer des jeux dans Squarity, et par ricochet, d’apprendre le python.

J’ai essayé de destiner ce tutoriel à des jeunes (collèges, lycées). Mais je ne sais pas du tout si c’est adapté et si ça marcherait avec une population de ce type. J’ai pas de collégiens/lycéens à portée de main. À une époque, je donnais des cours de python à un petit groupe, et à des stagiaires de découverte d’entreprise. Ça passait plutôt bien. Mais bon, je vais pas vous raconter ça maintenant. Peut-être dans un autre article, si je le juge digne d’intérêt.

Et vu que ce tutoriel permet de créer un soko-ban, je me suis dit, mettons ce jeu directement à disposition ! Ainsi fut fait.

Un format enfermant

Le sachiez-vous ? il existe un format de fichier pour décrire les niveaux de soko-ban. Que j’ai bien entendu respecté : un dièse pour un mur, une arobase pour le personnage, etc.

Il y a juste un truc qui m’embête : le format préconise d’entourer le niveau par des murs. Je suppose que ça part d’une bonne volonté, ça permet de bien délimiter la zone de jeu, et de ne pas obliger à spécifier ses dimensions. Mais je trouve ça dommage.

Comme vous le voyez sur l’image ci-dessus, le niveau a une ouverture en bas. Les 4 niveaux que j’ai mis dans mon jeu en ont une. Ça ne respecte pas le format, et c’est inutile. Si vous vous déplacez jusqu’au bord de l’aire de jeu, il ne se passe rien.

Mais ça modifie un tout petit peu la narration et le ressenti pour la personne qui joue. Le personnage n’est pas enfermé. Il n’est pas condamné pour toujours à pousser des caisses. Avec cette ouverture, on imagine que le personnage arrive, pousse des caisses, puis repart vers de nouvelles aventures. Ça laisse plus de place à l’imagination qu’une stupide prison hermétique.

L’une des choses que j’ai vraiment aimé dans le jeu Drod, c’est le monde ouvert. Vous avez des énigmes à résoudre, indépendantes les unes des autres. Mais elles sont toutes connectées ensemble dans une grande aire de jeu. Vous vous promenez où vous voulez et vous avez une certaine liberté dans l’ordre de résolution des énigmes. Je me serais beaucoup moins amusé si Drod avait été une simple succession de salles à réussir dans un ordre imposé.

Je suis actuellement en train de découvrir « Caves of ZZT ». On y trouve cette même idée de monde ouvert, qui me donne toujours envie d’aller dans les salles autour « juste pour voir », puis de résoudre la salle dans laquelle je suis, juste pour avoir accès à d’autres salles, et ainsi de suite.

Le level design, même pour des jeux aussi simplistes qu’un soko-ban, est super important. Il ne faut pas se contenter de placer les objets nécessaire à l’énigme. Il faut essayer de raconter une histoire, fut-elle si petite qu’elle tiendrait dans un quart de tweet.

Carte complète de Plankton, un jeu fait avec ZZT. Cliquez sur l’image pour en avoir plein d’autres

Michèle Tore !

Jeudi dernier, j’étais en train de faire l’andouille sur ma chaîne twitch et de me la péter avec mon tout nouveau tutoriel. Au cours de la discussion avec des ordispectateurtrices, on m’a demandé de faire un soko-ban « comme dans un niveau de pacman ». J’ai dit : « Ah ba ça, ça tombe bien alors ! on a déjà un pacman dans Squarity, je vais copier-coller la carte du niveau et tu l’auras dans le soko-ban ».

Après quelques modifications hasardeuses et un adaptation des caractères définissant le niveau, nous sommes arrivés à nos fins.

Et là, l’ordispectateutrice de tout à l’heure me précise que le terme « comme pacman » avait pour intention de signifier « quand le personnage va tout à gauche il se retrouve à droite et vice-versa ». Cette personne voulait un univers en tore bidimensionnel. J’avais mal compris.

Qu’à cela ne tienne, après quelques modifications supplémentaires, le soko-ban atterrissait dans un univers bidimensiotorique. Et moi qui dissertais tout à l’heure sur l’intérêt des mondes ouverts et l’importance de mettre une entrée/sortie, même fictive, eh bien là, le monde se retrouvait horriblement fermé puisque replié sur lui-même. Argh !!

En attendant, c’est plutôt rigolo, et ce serait super chouette si de gentilles personnes me créait des niveaux qui utiliserait cette particularité bidimensiotorique. J’ai partagé cette version du jeu, vous pouvez y jouer directement par ici.

Vous en avez peut-être marre de Squarity ?

Ça fait 6 articles et 5 mois que je ne parle que de Squarity dans ce blog. Peut-être que ça vous incommode, que « c’était mieux avant » quand je vous parlais de tout et n’importe quoi.

Désolé. C’est mon gros projet du moment. Il est possible que ça monopolise une grosse partie de mon temps libre des années à venir. Alors forcément, je le raconte ici.

Voici une proposition pour limiter un peu la squaritification de ce blog : pour le mois de février, je vous fait DEUX articles ! Un concernant Squarity, et un concernant tout autre chose. Ce sera sur un sujet qui me tient à cœur et que j’ai déjà mentionné une paire de fois : les nichons.

Et puisqu’il y aura deux articles, je vous propose une photo avec deux belles femmes : les jumelles Rocio et Lucia Mais. Pour le coup, c’est pas vraiment sur les nichons qu’il faut porter le regard, mais elles sont quand même magnifiques :

C’est à 9 secondes dans la vidéo d’origine.

À bientôt, puisque le mois de février, c’est dans bientôt.

Le serveur Discord de Squarity

Joyeuses fêtes. Comme d’hab’, le moment de Noël-Nouvel an est l’occasion d’avancer mes projets, because vacances, et c’est bien cool.

J’ai créé un Discord pour Squarity. C’est ici : https://discord.gg/D5SYnk8u3j .

Je m’en servirais pour publier les annonces de mise à jour. Il y a aussi divers espaces pour montrer les jeux que vous faites, poser des questions techniques, ou tout simplement parler de n’importe quoi.

C’est un début.

Si vous avez déjà un compte Discord, ce serait super sympa de venir, même si vous n’avez rien à raconter. Juste pour montrer qu’il y a des gens qui s’intéressent à ce projet.

J’ai également créé un compte sur un serveur mastodon, histoire d’avoir une bonne conscience auprès des libristes :
https://mstdn.io/@recher

J’annoncerai les mêmes choses sur le discord et sur mon compte mastodon. Vous pouvez vous raccrocher à un seul des deux, celui que vous préférez.

Hypothétiquement, il y aura un jour un vrai forum et des vrais comptes où on pourra enregistrer ses jeux, mais ça c’est pour une date indéterminée.

Un peu de couleurs pour finir l’année, avec Romekia Brown.

Iodification du python squaritien

Coucou ! Quatre fois n’est pas coutume, je viens encore vous parler de Squarity.

J’ai réussi à régler le problème de lenteur. J’ai lâché la librairie JS Brython, pour la WebAssembly Pyodide.

Argh, du code binaire !

D’aucuns-et-d’aucunes considèrent que les WebAssembly sont le mal absolu, car, tout comme le code binaire des fichiers exécutables, c’est non lisible par un humain. Ça va à l’encontre de l’un des dogmes du web, qui énonce que tous les composants d’un site doivent être analysables, même si cette analyse peut être compliquée. Le HTML, le javascript, le CSS, le JSON sont écrits avec des mots, et non avec des nombres. C’est en partie en raison de ce dogme que les navigateurs vont définitivement virer la technologie Flash.

J’oblige donc votre navigateur à exécuter du code que vous ne pouvez comprendre aisément, ce qui fait de moi un vilain.

Ce à quoi je répondrai : « Mouiimmpfboapf, ça va bien. Le code source de Pyodide est disponible sur internet. D’autre part, avez-vous tous les codes sources de tous les exécutables que vous lancez sur votre machine ? ». À mon avis, la seule personne qui peut vraiment le prétendre serait Richard Stallman.

(TODO : insérer ici une photo à poil de Richard Stallman, pour équilibrer par rapport à la quantité de photos de femmes rondes à poil qu’il y a dans ce blog)

Heuwargl, le chargement est lent !

L’exécution de code python dans un navigateur est plus rapide par Pyodide que par Brython. J’ai fait quelques benchmarks au doigt mouillé, en particulier avec le jeu Loops in Pool. La propagation de la boue et de l’eau sont maintenant beaucoup plus fluide.

Dans la version précédente de Squarity, j’avais testé avec un délai de 1 milliseconde entre chaque propagation, et c’était quand même lent. Alors j’ai mis 400 millisecondes pour ne pas surcharger la machine. Dans la nouvelle version, j’ai re-essayé 1 milliseconde, l’animation s’est accélérée significativement. Je l’ai laissé ainsi, youpi.

Cependant, l’initialisation de Pyodide est très lente. Il faut télécharger 20 Mo de bazar, alors que Brython tient en moins de 10 Mo (et c’est déjà beaucoup pour du javascript !). Ensuite, le navigateur doit interpréter et démarrer la WebAssembly, ce qui prend encore quelques secondes.

« Dans le monde dans lequel on vit », tout doit aller très vite. Une dizaine de secondes d’attente peut décourager certaines personnes. Ce choix de Pyodide me fera donc perdre une base potentielle de user-client-partner. Mais je préfère décourager définitivement un petit nombre, plutôt que ralentir continuellement tous les futurs fidèles qui utiliseront Squarity.

Je mettrai une barre de progress la plus précise possible. On accepte plus facilement d’attendre lorsqu’on voit un décompte qui avance. Actuellement, le progress n’est qu’une liste de 8 étapes, dont 6 sont pratiquement instantanées et 2 sont très longues. C’est pas du tout suffisant.

Prototype d’une barre de progress avec estimation de temps incertaine.

Si je pouvais éviter le re-téléchargement des 20 Mo une fois que ça a été fait, ce serait top. Je sais bien que le navigateur a un cache, mais celui-ci a une fâcheuse tendance à se vider. On a le droit de stocker des WebAssembly dans du local storage ?

J’ai également testé sur smartphone. Ça fonctionne (j’en n’étais vraiment pas sûr), par contre l’exécution reste super lente. Les fuckings millenials de la génération Ÿ écoperont des deux inconvénients : lent à l’initialisation ET à l’exécution. Je laisse comme ça pour l’instant, tant pis. De toutes façons, le premier truc à régler concernant l’utilisation sur smartphone serait le responsive design cradingue. Et dans un futur très lointain, on pourrait carrément imaginer une app.

Il suffira juste d’accepter le postulat qu’une app mobile exécutant du code python arbitraire ne constitue pas une faille de sécurité. Ha ha ha. Je ne suis même pas sûr de ce postulat concernant les sites web. Re-ha re-ha re-ha. Bref : y’a du boulot.

En tout cas, Pyodide est beaucoup plus simple à intégrer que Brython. Pour exécuter du python, j’ai une fonction à appeler, avec le code en paramètre. On peut directement lire/écrire les variables javascript, les exceptions python sont automatiquement remontées, avec traceback et message. J’ai tout ce qu’il me faut.

Avec Brython, je devais pré-placer mes variables d’échanges dans un truc à la con, mettre mon code dans une balise script, lancer une fonction sans paramètres, prier pour que la portée des variables ne se vautre pas toute seule, et lire les données de retour dans le truc à la con sus-mentionné. Je ne vous (re)parle même pas de la récupération des erreurs où j’ai eu recours à des astuces tellement tordues que mon cerveau a préféré les oublier !

Vive Pyodide. De plus, je ne désespère pas que dans quelques siècles, si l’humanité n’a pas entièrement crevé pour une raison quelconque, les navigateurs web soient nativement dotés d’un interpréteur python. Que l’on ait enfin une alternative sérieuse à ce javascript de merde.

L’ancêtre de Pyodide sur smartphone

Qui veut dessiner un beau tileset ?

Mon jeu-phare, les aventures de H2O, mériterait bien un petit coup de polish (dans le sens polissage, pas dans le sens polonais). Mais je ne suis pas un dessinateur assez doué pour ça.

Alors j’ai posté un message chez la communauté PixelJoint, pour leur demander qui serait assez gentil pour me redessiner le tileset de H2O, en mieux.

Je me suis fendu d’une explication détaillée de toutes les tiles.

Si vous élevez des pixels chez vous, n’hésitez pas à vous manifester sur le forum de PixelJoint. Il s’agit d’un concours en mode bisounours, dans lequel tout le monde gagnera. C’est à dire que je ne prendrais pas le meilleur tileset, mais je ferais une version du jeu H2O pour chaque tileset qui sera proposé.

Pour l’instant, je n’ai eu qu’une seule proposition, via message privé. Je peux m’en contenter, le pixel-artiste m’a fait un super boulot. Vous le verrez très bientôt lorsque j’aurais mis à jour le jeu.

Pour le bon plaisir de ce projet Squarity, j’ai dû me créer un compte Twitch, un compte Ludum Dare, un compte GoDaddy, un deuxième compte pythonanywhere et maintenant un compte PixelJoint. Tellement populaire, tellement social.

Il y a de jolies choses sur PixelJoint

À propos de social

L’une des prochaines grosses étapes de Squarity sera de créer un lieu d’échange et de contenu. Ça me permettra de recenser les jeux existants, de publier les release notes, d’ajouter des articles et des tutoriels, d’aider les codeureuses en herbe, etc.

Je ne sais pas encore sous quelle forme je ferai ça. Le plus simple serait un serveur Discord, mais j’aimerais éviter d’être trop dépendant d’un réseau social existant, quitte à payer un petit peu. Peut-être que ça se finira avec une instance Mastodon et un CMS à l’arrache.

Mais j’aimerais aussi éviter d’obliger les gens à se créer un enième compte sur un enième site. J’essaierais peut-être d’intégrer des authentifications tierces : les boutons « sign in with Google », « sign in with Github », etc.

Bien évidemment, je ne connais pas grand chose dans ce domaine, ça risque donc de me prendre du temps et d’être un beau bordel. On verra bien. Peut-être que dans trois semaines, j’écrirais un article de blog larmoyant expliquant que c’est trop compliqué, que j’abandonne tout, et que je préfère encore utiliser tout mon temps libre à zapper en continu sur Twitch.

(TODO: insérer ici une image prise sur Twitch de gens pixelisés déguisés en serpent qui font passer des arcs électriques dans de la vapeur d’eau pour voir si ça la disperse et qui ensuite font de la peinture sur corps).

À propos de corps

Petit rattrapage de tous les précédents articles n’ayant pas d’images de femmes rondes.

Voici Nicole Nurko, dont je vous ai précédemment parlé :

Ainsi que Kim Manana :

Et la sublime-bling-bling Gabriella Lascano :

Pro-tip : lorsque vous voulez parcourir un compte Instagram (d’une femme ronde ou pas) et que vous ne voulez pas vous inscrire car, comme dit précédemment, vous en avez marre de vous créer des comptes de partout, vous pouvez remplacez dans l’url « instagram.com » par « imginn.com ». Vous aurez toutes les photos sans les pop-ups lourdingues.

À la chopraine, comme on disait dans les années 1990.