Bug et propositions d’améliorations pour l’outil All-Seeing Eye

Coucou. Voici un deuxième article dans le même mois !

Comme promis, j’ai envoyé 20 euros à All-Seeing Eye, pour remercier Joonas Hirvonen d’avoir créé cet outil permettant de modifier le jeu Eye Of The Beholder. Je m’en suis servi pour créer un challenge de Hacking pour la THCON. Tout est expliqué dans ce précédent article.

Ce fameux Joonas Hirvonen m’a remercié par mail et m’a encouragé à transmettre mes signalements de bugs. Je vais lui envoyer un document récapitulant tout ça, j’en profite pour le copier-coller ici. Ça ne vous intéresse peut-être pas, mais moi ça me fait un article à peu de frais. (Quelle blague ! Tous mes articles sont à peu de frais !)

C’est en anglais, vive le rosbif !


These bugs and improvement proposals are sorted from most important to less important.

Technical context :

Do what you want with these bugs, as I am not sure I will have the occasion to re-use ASE.

Modifying scripts provokes graphical bugs

Many wall images are scrambled when the game scripts are modified.

Here are steps to reproduce the bug.

  1. Start a game, create a party, go to the first drainage grate.
  2. Everything looks OK.
  1. Launch ASE.exe and set the folder
  2. Launch EOB1_Explorer.exe
  3. Add an instruction anywhere in the code, for example : F8 "I add a new message here." 00 02 00
  4. Press Ctrl-F9 to compile.
  5. You get a message box telling « Range check error. »
  1. Click the button « update INF ».
  2. Close and restart EOB1_Explorer.exe
  3. Add another instruction anywhere in the code.
  4. Press Ctrl-F9 to compile.
  5. This time you don’t get the error message.
  6. Click once again the button « update INF ».
  7. Start another game, re-create a party, go to the first drainage grate.
  8. This time the image is buggy. I do not know from where it was taken. It looks like a part of an attacking leech.

Other bugs appear on many wall textures. Once it happened, there is no hope to come back to a correct display.

I guess it’s a problem with memory offsets in the game information. It is quite annoying, it cancels all the involvement I would put in the creation of a totally new Eye Of The Beholder game.

Object sub-position cannot be redefined

Information related to objects can be modified in the tab « F4:Items ». But their sub-positions cannot be modified.

As we all know, an object on a square in the map has 5 possible sub-positions : the four corners on the ground, and the alcove carved on a wall.

The function ADD_ITEM shows it. It has 3 parameters : OBJECT_INDEX, POS_X_Y, SUB_POS.

The initial data contained in the .PAK files undoubtedly contains these supositions. When I modify existing object coordinates, they land on different sub-positions, depending on their index.

If the initial sub-position of the object is in an alcove, and if the object coordinates is on a square that has no wall, we have flying objects !

These flying objects can not be taken. Too bad.

I would say the tab « F4:Items » should have a field « sub-position », that allows us to read and write sub-position of each object.

A weird thing in the game engine : there is only one sub-position to define an object in an alcove, not one per wall side.

If you put a square with an alcove wall on each side, and if you put an object sub-positioned in the alcove on this square, then the object is visible from the four sides ! Logically, when you take it, it goes away from the four sides. In my opinion, this weird behaviour should be documented somewhere.

Encounter scripts should be editable, if possible

I do not know if it is possible at all. Some encounters seem to execute the same kind of instructions as the ones in the script :

  • speaking with Armun puts some objects in front of the party and sets a global flag,
  • there are movements automatically done before and after speaking with the dwarven cleric, and the previous global flag is checked to initiate the conversation,
  • speaking with Shindia spawns the monster « Shindia »,

I guess the dialogue texts, reply choices, player characters joining the party, etc. are all stored somewhere in the game files. If we could modify all this, it would be really cool, and we could make a totally-totally new Eye Of The Beholder game.

Some event parameters are not parsed in the script

Here is the code we usually have with stairs and ladders :

IF         TRIGGER_FLAG = 1 (on_enter)
ELSE_GOTO  $0473

[...]

IF         3 = 0
ELSE_GOTO  $044C
TELEPORT   TYPE = $E8 (party), SOURCE = <00,00>, DEST = <18,24>

IF         3 = 1
ELSE_GOTO  $0459
TELEPORT   TYPE = $E8 (party), SOURCE = <00,00>, DEST = <17,23>

IF         3 = 2
ELSE_GOTO  $0466
TELEPORT   TYPE = $E8 (party), SOURCE = <00,00>, DEST = <18,22>

IF         3 = 3
ELSE_GOTO  $0473
TELEPORT   TYPE = $E8 (party), SOURCE = <00,00>, DEST = <19,23>

IF         TRIGGER_FLAG = 4 (on_put_item)
ELSE_GOTO  $04AE

IF         3 = 0
ELSE_GOTO  $0487
TELEPORT   TYPE = $F5 (item), SOURCE = <18,23>, DEST = <18,24>

IF         3 = 1
ELSE_GOTO  $0494
TELEPORT   TYPE = $F5 (item), SOURCE = <18,23>, DEST = <17,23>

IF         3 = 2
ELSE_GOTO  $04A1
TELEPORT   TYPE = $F5 (item), SOURCE = <18,23>, DEST = <18,22>

IF         3 = 3
ELSE_GOTO  $04AE
TELEPORT   TYPE = $F5 (item), SOURCE = <18,23>, DEST = <19,23>

END

The translated script shows comparrison between litteral numbers : « 3 = 0 », « 3 = 3 », … which looks really dumb.

This is of course not what the script does. These values corresponds to the direction from where the party comes, or the direction from where the object was thrown. It is used to reposition the party or the object from where it comes, because nothing is supposed to stay at the same square of a stair or ladder.

Some specific words should be used in the translated script to describe this process. For example, 3 = 0 should be replaced by FROM_DIRECTION = NORTH.

The direction identifiers are the usual ones : 0 = north, 1 = west, 2 = south, 3 = east.

Labels should be shown in the « Events » tab

The « F2:Events » tab shows the translated scripts, but the GOTO instructions have the litteral adresses.

The « F3:Scripts » tab shows GOTO instructions with labels, but the script is displayed with raw bytecode.

The text labels should also be displayed in the « F2:Events » tab, to have all the human-readable script in one tab.

It is quite painful to modify the scripts, I was always switching between the two tabs : write some code, check it is correct, and so on. A really nice feature would be a mode to display the two tabs side by side. The « F2:Events » would automatically updates while we type in the « F3:Scripts » tab. But maybe that’s too much to ask.

Texture atlas needed

I had to try different wall numbers in the map, then play the game to see the corresponding images, then repeat for the next level palette, etc.

Some identifiers are the same in many palettes, for example : with « brick » and « blue », the value 51 corresponds to a wall with writings on it.

Other identifiers exist only in one palette, or are different between palettes, for example : all the stone portal images.

That would really be helpful to have the complete list of wall images, with their identifier, for all the palettes. You don’t even have to integrate it in the existing software. Just toss an external document with the images and their identifiers, that would be perfect.

Command parameters should be documented

The tab « F5:Commands » lists all the existing commands, which is great, but not enough.

The parameters of each command should also be documented. Some commands, such as TELEPORT or ADD_MONSTER, have numerous, varied and complex parameters.

The documentation you linked to https://moddingwiki.shikadi.net/ is interesting, but really hard to read and to understand. I’m not sure it explains all the commands of Eye Of The Beholder.

Program crashes when writing coordinates with one digit

This one is simple to reproduce :

  • Go to « F3:Script » tab, go to the « event trigger points » zone.
  • Modify a coordinate of any event, write it with only one digit. For example, replace « 03 » by « 3 ».
  • Press Ctrl-F9.
  • You get an error message : « Access violation ».

Code size limit should be checked

When the script of a level is too big, it can lead to unexpected behaviours.

The last address value in « F2:Events » should be checked. If it is greater than $1AF0, there are risks to have unexpected behaviours. I’m not sure of the exact limit, it may be a rounded value, like $1B00.

This should be checked by EOB1_Explorer.exe, and a warning message should be displayed when updating/saving the INF file.

The unexpected behaviour seems quite random, and occur when the party arrives in the level having the INF too big.

Sometimes, it’s an immediate crash with a totally unrelated message :

Some other times, it’s a crash with a message « Far heap corrupt! » when you click on the button « CAMP » :

Race and class values are not completely documented

The file EOB1_Explorer_Notes.txt has an uncomplete list of race indexes. Here is the complete one :

  • 00 = Human
  • 01 = Elf
  • 02 = Half-elf
  • 03 = Dwarf
  • 04 = Gnome
  • 05 = Halfling

The Class identifiers are not correct and does not correspond to the HAS_CLASS function.

There are only 4 « base class »,

  • 01 = Fighter
  • 02 = Mage
  • 04 = Cleric
  • 08 = Thief

HAS_CLASS adds all the classes of your characters, by using the boolean « OR », and returns true if there is at least one set bit in common with the parameter given to the function.

Multi-class activates the corresponding bits of all the base classes.

For example, let’s say the party has a Fighter/Mage and 3 clerics (that’s a weird party).

HAS_CLASS(2) will return True. It evaluates to :

  • has_class_param & (classes_chara_01 | classes_chara_02 | ... )
  • 2 & ((fighter | mage) | cleric | cleric | cleric)
  • 2 & (fighter | mage | cleric)
  • 2 & (1 | 2 | 4)
  • 2
  • True

It is not possible to check if there is a ranger in the party. This class only lights the « fighter » bit.

It is also not possible to check if there is a paladin. This class lights the « fighter » and the « cleric » bits.

The way how the function HAS_CLASS works should be documented.

That’s all

Thank you once again for having created these tools. They are wonderful, even with those tiny bugs.

I used EOB_Explorer1 to create a hacking challenge that involves the game and your tools. This challenge was part of the CTF at the Toulouse Hacking Convention 2022. The people who tried it said it was really interesting (a few of them managed to solve it, though). I will submit it to root-me.org in the upcoming months and I will let you know about it, if root-me accepts it.

For the moment, I have not planned to create other challenges or other games with Eye Of The Beholder, so there may have no specific reason to fix these bugs. Anyway, I’m really happy to have « revived » this game in a quite uncommon way. It was an important part of my childhood, I took many years to finish it.

See you next time !


Voilà, c’était tout ce que j’avais à dire. Je l’envoie à mon nouvel ami Joonas ce soir. S’il me répond des trucs intéressants, je vous en ferais part.

Bien entendu, j’ai plusieurs autres idées de challenge « TUR-ROX », avec d’autres jeux. J’essayerais d’en concrétiser une ou deux pour la prochaine THCON.

Cet article est un rapport de bug.

Rapport de bug -> bug -> ladybug -> l’héroïne de dessin animé -> vêtements aux motifs de cette héroïne -> femme ronde !

Enjoy :

Pour le mois prochain, je me permettrais d’être moins blogalement productif. Je vous rassemblerai un package de commentaires de jeux du Ludum Dare, et ça devrait suffire.

D’ailleurs, faut que je vous annonce mon classement. Eh bien on fera tout ça en même temps.

THCON + Ludum Dare, ça a été un beau bazar ces dernières semaines. Peut-être que maintenant je vais avoir du temps pour faire la road-map de Squarity ?

On ne sait pas…

Et paf les stats + Ludum Dare

Il s’est passé un truc le 29 mars sur mon blog. Impossible de dire d’où ça vient, mais il s’est passé un truc. Admirez ci-dessous les statistiques des visites.

D’après les graduations de l’axe horizontal, ça n’a pas l’air de s’être passé le 29. Mais je vous confirme que si. Les graduations ne sont pas en face des histogrammes, c’est mal foutu. Comment peut-on afficher un graphe de manière aussi pourrie ? Bon, osef.

Dans les débuts de ce blog, je faisais attention aux stats. Mon article phare (les Chansons Pipi-Caca de Notre Enfance) ont fait monter les vues quotidiennes à 50, j’en étais très heureux. Puis c’est progressivement retombé à des valeurs plus humbles, autour de 20, et j’ai fini par me désinteresser des stats parce que ça ne redécollait pas. De toutes façons ce ne sont pas les vues qui m’intéressent, mais les commentaires. Cela dit, le nombre de commentaires ne décolle pas non plus.

Et donc, ce 29 mars, 194 vues de 21 personnes uniques. Est-ce que j’ai mes 20 personnes habituelles, qui ne consultent qu’un seul article chacune, plus une 21ème qui a consulté 174 articles ? Ou bien est-ce que chaque personne a consulté 9 articles et un peu moins d’un quart d’article ? Aucune idée. En tout cas il y a eu zéro commentaire.

Si vous étiez là le 29 mars, serait-il possible que vous reveniez pour mettre un tout petit commentaire, expliquant comment vous avez atterri ici ? En particulier si vous avez lu 174 articles. Merci d’avance et gros bisous.

Mangeons des stats.

Ma contribution au Ludum Dare 50

Le thème de cette édition était « Delay the Inevitable »

Mon jeu s’appelle Cat Fragmentator, il utilise Squarity, bien entendu.

C’est l’histoire d’une personne quelconque. Elle télécharge en continu des images de chats et finira inévitablement par remplir son disque dur. Vous êtes le USS-Fragmentor, un processus dans le disque ayant pour tâche de fragmenter les images afin d’optimiser l’espace. Déplacez-vous avec les flèches et utilisez la touche ‘1’ pour tirer votre laser découpeur.

Les images qui tombent vous éliminent, il faut les éviter. Les images déjà tombées ne font que vous bloquer.

Lorsque vous mourez ou lorsque le disque dur est plein (c’est inévitable !), le score s’affiche dans le log. Appuyez sur le bouton ‘2’ pour recommencer une partie.

Si vous avez un compte sur le Ludum, prenez le temps de noter le jeu et de lâcher un p’tit comm’. À moins que vous ne préfériez tester 174 jeux sans rien commenter.

Je ne ferais pas d’article post-creationem, car je n’ai rien de tonitruant à dire. J’ai appliqué la même méthode que les fois d’avant : avoir une idée puis réaliser cette idée, en essayant d’être le moins à l’arrache possible.

Je vous laisse, je suis actuellement dans la période « tester les jeux des autres pour avoir mon propre jeu testé ». Il faut aussi que je termine ce que j’ai à dire au sujet de Eye of the Beholder et All-Seeing Eye. Hey, lecteurtrice, tu réalises que ça te fera deux articles de mon blog le même mois ? Ça faisait longtemps que c’était pas arrivé. Comme quoi, 194 vues en une journée, ça motive.

Il est 3 heures du matin, je relirais ce texte plus tard.

Et sinon, quoi d’autres ?

Il y a quelques temps, je vous présentais un site qui permettait de mater les images d’Instagram sans avoir de compte, parce que c’est relou. Il ne marche plus. Ce n’est pas grave, d’autres ont spawné. Le stagram-crawler du moment, c’est gramhir.com.

Enjoy the image of this beautiful girl, elle s’appelle Renally Gabrielly, et elle est mannequin grande taille.

TUR-ROX-👁 Post-creationem-challengem

Heeey !

J’ai terminé la réalisation de mon challenge de hacking pour la THCON. Je l’ai soumis aux personnes qui organisent l’événement. Je ne sais pas encore s’il sera accepté. Dans tous les cas, je ne peux rien vous révéler avant la fin du Capture The Flag, qui aura lieu entre le 16 et le 17 avril.

Cependant, ça me démange de ne pas pouvoir vous parler de mon œuvre, alors je vais vous révéler son contexte et tout ce qui m’est passé dans la tête durant sa création. Ça ne devrait rien spoiler, je ne décris pas les énigmes en elle-même.

Le contexte

J’en ai déjà parlé un peu à la fin de cet article.

Il s’agit du jeu vidéo Eye Of The Beholder, dont j’ai modifié les plans des niveaux et les événements à l’aide de l’outil All-Seeing Eye et de son éditeur.

Pour résoudre le challenge, il faut jouer à la version modifiée tout en inspectant son contenu avec All-Seeing Eye. Il faut analyser les scripts et en déduire les actions à faire dans le jeu, pour obtenir le code secret permettant de valider le challenge. Je ne vous en dis pas plus.

Ce challenge, ainsi que les deux autres créés pour la précédente THCON, s’inscrivent dans un objectif plus global : l’instauration d’une nouvelle catégorie de challenge de hacking, que j’ai sybillinement baptisé « TUR-ROX ». Ça signifie « TURing-appROXi-complete video games ». C’est même pas un vrai sigle, c’est pas du tout les initiales des mots, mais j’m’en fous total, j’suis un ouf’ rebelle malade.

Principe des challenges de type TUR-ROX

Le principe consiste à trouver un jeu vidéo comportant un système de script intégré, à le modifier dans le but d’y implémenter un algorithme plus ou moins simple, et à faire en sorte que le flag ne puisse être découvert que lorsque cet algorithme est compris.

L’inspection et la modification du jeu peuvent être effectuées par un outil « officiel » (comme l’éditeur de ZZT), ou bien par un outil ne provenant pas des personnes ayant créé le jeu (comme All-Seeing Eye). Le système de script peut être plus ou moins élaboré. Au minimum, il doit pouvoir accéder à certains éléments du jeu. S’il comporte quelques structures algorithmiques de base, (if, while, …), c’est déjà bien.

En général, on fournira cet outil avec le challenge, afin de donner tous les moyens nécessaires à sa résolution. Mais on pourrait faire exception à cette règle.

Beaucoup de jeux actuels sont fortement moddables et scriptables. Les gens qui les développent ont réfléchi deux secondes et se sont dit qu’il serait bon de profiter des expériences du passé. Les scripts s’appuient maintenant sur des langages de programmations standards, multi-usages et documentés. Par exemple : Roblox utilise le Lua, Twine utilise du JavaScript, les gros moteurs de jeux comme Unity autorisent plusieurs langages (python, C#, …).

C’est la meilleure démarche possible, ça facilite les liens entre les personnes qui veulent créer des jeux vidéos et qui ne savent pas (encore) coder, et les personnes qui codent sans créer de jeux.

Mais ce n’est pas avec ça que je peux faire des chouettes challenges TUR-ROX. Du code à rétro-ingénierer dans un langage connu, c’est trop facile. Un foisonnement de documentation, d’outils d’analyse et de debugging sont à portée de clavier. Une solution serait de faire exprès d’écrire du code le plus incompréhensible possible, mais serait alors un challenge de type obfuscation, et non plus un TUR-ROX. Il existe déjà une foule de gens capable de créer des challenges d’obfuscation, et ce mieux que moi.

Un TUR-ROX est un mix entre un jeu vidéo et du code source à décortiquer, le système de script doit donc être spécifique au jeu. En revanche, il peut être obscur et mal documenté, ça fait partie du challenge de le comprendre avec les moyens disponibles. C’est pour ça que je préfère utiliser des jeux anciens ou exotiques. On est obligé de se plonger dans leur histoire, de retrouver comment pensaient les concepteurtrices de jeux à une époque où il y avait moins de standards.

Et cette année, j’ai choisi Eye Of The Beholder. Mais pourquoi donc ?

Attention : Turok ≠ TUR-ROX

Eye Of The Beholder, parce que nostalgie

Ce n’est pas la première fois que j’écris un article sur ce jeu. Il a marqué mon enfance. Je l’ai commencé alors que j’étais en sixième, en explorant un peu au hasard. Une solution a été publiée dans un magazine Tilt, j’ai demandé à mon frère de la photocopier. On a commencé à s’en servir avec mon autre frère, on est allé jusqu’au niveau 7. Ensuite, notre intérêt pour le jeu a diminué. De plus, ce niveau est graphiquement plus inquiétant que les précédents (très sombre, des symboles d’araignés omniprésents), et il commence par un difficile combat contre un groupe d’elfes noirs. J’ai douté de mes capacités à en venir à bout, j’ai laissé tomber.

Moustache ! moustache !

Je me suis fait engueuler par mon frère, qui m’a reproché que les photocopies avaient été faites pour rien puisque je n’étais même pas foutu de les utiliser entièrement.

Quelques années plus tard, j’ai recommencé le jeu seul. J’ai pris le temps d’élaborer une équipe bien équilibrée, couvrant le plus de classes possibles. J’ai tué tous ces tocards d’elfes noirs et je suis arrivé au niveau 10. Il comporte un générateur de Mantis Warrior. J’avais réussi à faire abstraction du générateur d’araignée géante présent au niveau 4, mais celui des Mantis m’a psychologiquement bloqué.

Ce que j’aime dans ce jeu, c’est le sentiment de « nettoyer » les souterrains. On explore partout, on tue tous les monstres qu’on rencontre et on prend tous les objets. À chaque fois qu’on finit un niveau, on peut se dire : « Voilà, il n’y a plus aucun danger. Je pourrais revenir me promener dans ce niveau sans aucune crainte ». Concrètement, on n’a pas besoin d’y revenir, mais j’aimais éprouver cette sécurité et cette impression de rendre le monde meilleur. Or, les générateurs de monstres enlèvent complètement ce sentiment.

Encore une ou deux années plus tard, je me dis que c’est quand même dommage d’être allé aussi loin dans le jeu sans le finir. Je détruis 4 Mantis Warrior à la suite dans le niveau 10. Je parviens à me faire une raison : les prochains seront générés dans longtemps, je peux toujours éprouver un sentiment de nettoyage même provisoire, et si il faut vraiment sécuriser entièrement les souterrains, eh bien les notables de la ville de WaterDeep n’auront qu’à envoyer des magiciens destructeurs de générateurs de monstres !

J’écume les derniers niveaux, je bute Xanathar à la bourrin (je possédais le « Wand of Silvias », mais je n’avais pas compris qu’on pouvait s’en servir pour le faire reculer jusque dans des pics où il se plante stupidement). Mon frère revient à la maison pour des vacances. Je lui annonce que j’ai terminé le jeu. Il est heureux pour moi, mais ne s’excuse pas de m’avoir engueulé des années auparavant. Il ne se souvenait certainement pas de ce passage de sa vie.

Maintenant que j’y pense, ce même frère m’avait soutenu lorsque je suis allé rapporter à la FNAC un jeu qui ne marchait pas. On a pu obtenir un avoir, ce qui n’était pas gagné d’avance, et je crois que je ne l’ai jamais remercié pour ça.

D’autres années plus tard, je commence un tout petit peu Eye Of The Beholder 2, mais je ne prends pas le temps de me lancer vraiment dedans. J’essayerais peut-être de le faire un jour, en live sur Twitch, avec vous.

Pour finir, j’ai négationné mes deux frères et je me sens mieux. Je ne détaille pas plus, je ne veux pas vous embêter avec des histoires idiotes.

Aujourd’hui, j’ai retrouvé la solution, sans faire de photocopies. Merci au site abandonware-magazine !

Eye Of The Beholder, parce que script

Je me souvenais d’énigmes et d’événements tellement étranges que ça laissait supposer la présence d’un système de script relativement générique. Quelques exemples :

  • Vous avancez dans un couloir et automatiquement vous faites un demi-tour, sans être prévenu.
  • Vous posez certains objets à certains endroits, ça déclenche l’apparition d’un monstre et/ou d’autres objets.
  • Vous entrez dans une pièce, vous ramassez une potion, vous sortez, vous re-rentrez par une autre entrée, une deuxième potion est apparue, vous la ramassez, ainsi de suite jusqu’à 4 potions.
  • Des rencontres avec des PNJ déclenchant des dialogues, des ajouts de nouveaux personnages, des attaques, etc.
  • Des téléporteurs, des murs qui disparaissent quand on appuie sur un bouton, des plaques de pression qui déclenchent des ouvertures/fermetures de portes, etc etc.

J’ai cherché un éditeur de niveau et je suis très vite tombé sur « All-Seeing Eye », créé par Joonas Hirvonen (je sais pas qui c’est). Il permet de modifier beaucoup de choses, y compris les scripts.

Au bout de quelques soirées et quelques week-ends, j’avais assez bien appréhendé le « EOB-script » (appelons-le comme ça) et j’avais une idée assez précise des énigmes que je pouvais créer.

J’ai été impressionné. Ça date de 1991 et c’est une machine virtuelle fonctionnant avec du bytecode. Son langage, comme dirait les Inconnus, est « souple et solide à la fois ».

Voici les fonctionnalités de l’EOB-script qui m’ont beaucoup plues.

  • 32 variables booléennes locales à chaque niveau + 32 variables booléennes globales.
  • Opérations booléennes complexes à l’aide de la notation postfixe .
  • Beaucoup de fonctions pour analyser l’état du jeu : présence de monstre à un endroit, type de mur d’une case spécifique, présence d’un type d’objet sur une case, position de l’équipe de personnages, classe et race des personnages, …
  • Et aussi beaucoup de fonctions pour agir sur le jeu : créer/supprimer des objets/murs/monstres, lancer un sort, émettre un son, infliger des dégâts, …
  • Branchement conditionnel (if – goto), mais aussi sous-fonctions grâce aux instructions gosub et return, dont j’ai grandement profité !
  • Gestion d’événements couvrant un large spectre : on peut exécuter un script sur une récupération ou un dépôt d’objet, une arrivée ou une sortie sur une case, un clic dans la zone réactive d’un mur (manette, serrure, rune, …).
  • Cohérence dans la gestion d’événements : une téléportation déclenchera le « on_enter » de la case d’arrivée, un lancer d’objet déclenchera le « on_put_item » de la case sur laquelle l’objet atterrit.
  • Robustesse : sur un seul événement, il est possible de déplacer des dizaines d’objets, modifier des dizaines de murs, exécuter des dizaines d’instructions, écrire des dizaines de messages (même si seuls les trois derniers sont visibles), tout ça sans problème, sans plantage, sans ralentissement.

En revanche, All-Seeing Eye n’est pas toujours à la hauteur de la magnificence de l’EOB-script. En particulier, on ne peut pas changer les dialogues et les événements des rencontres avec les PNJ. Je ne sais pas si c’est dû à un simple manque de motivation ou à une impossibilité technique. Je ne sais pas si ces événements sont écrits en EOB-script ou codés en dur. Je ne sais pas non plus où ils sont stockées, (pas forcément dans les fichiers EOBDATA.PAK).

J’ai beaucoup de remarques et de propositions d’améliorations, ce qui nous amène au chapitre suivant.

Ils sont meugnons !

Review de All-Seeing Eye (Pour plus tard)

Je vais faire un petit don de 20 euros sur le Paypal de Zorbus.net. C’est amplement mérité. S’ils n’avaient pas créé All-Seeing Eye, je n’aurais jamais pu créer ce challenge de hacking dont je suis assez fier.

Comme j’ai bien utilisé et exploré leur outil pendant plusieurs semaines, et que j’ai un peu galéré à cause de certains bugs, j’ai souhaité rassembler mes remarques dans un même document, que je leur transmettrais.

Et comme j’aime bien rentabiliser les textes que j’écris, je mettrais ces remarques aussi dans ce blog. Mais pas tout de suite, ce sera l’objet du prochain-prochain article. Il sera en anglais, mais vous vous débrouillerez bien.

Je vous laisse avec des yeux tatoués sur des seins. Je trouve ça très rigolo.

Les trucs du moment

L’année dernière, je m’étais fait avoir avec cette connerie de février. Je croyais que j’avais le temps de finir mon article promis avant la fin du mois, et paf bernique, y’a que 28 jours dedans. Quelle merde. Essayons de ne pas refaire la même erreur.

La plupart des gens trouvent que le mois de février est tout pourri. Pas juste à cause du nombre de jours mal foutu, et qui en plus dépend de l’année, mais aussi parce qu’il est froid et qu’il n’a pas de fêtes notable (nouvel an ou autre jour férié). Il y a bien la Saint-Valentin, mais dans les conventions sociales, il est hype et branché de la détester, car c’est « trop commercial ».

Le fait que je soit né au mois de février est d’une ironie assez grinçante. Là c’est le moment où vous vous foutez de ma gueule que je puisse me plaindre de quelque chose d’aussi débile, ensuite c’est le moment où je vous envoie bouler. Le fait qu’on puisse se foutre de ma gueule du fait que je me plaigne de l’ironie grinçante de certains aspects de ma vie est d’une ironie grinçante au carré.

Les trucs du moment ?

Nouveau jeu dans Squarity, créé pour l’anniversaire d’un pote. Il comporte quelques private jokes qui vous échapperont, mais des indications au fil du jeu vous permettront de vivre toute l’aventure (si on peut appeler ça comme ça). Éventuellement, vous reconnaîtrez quelques images recyclées à partir de Pru-Pra-Prok, mon vieux vieux dessin animé.

La road map de Squarity n’est toujours pas terminée. Je suis actuellement ralenti par un autre side-project, qui sera mentionné au paragraphe suivant. Je n’arrive pas à avancer cette road-map. Est-ce qu’inconsciemment j’en ai peur ? Est-ce qu’inconsciemment je ne fais que la reporter, pour que Squarity reste un projet potentiellement réussi, plutôt qu’un projet que je finirais par abandonner comme plein d’autres ? Je ne sais pas. Je vous promet de m’accrocher et de rester motivé le plus que je peux.

Le side-project est un (voire deux) challenges de hacking que je prépare pour la Toulouse Hacking Convention. Ça doit rester top secret.

Cet article du site Rock-Paper-Shotgun est inspirant. Il peut vous aider, si, par exemple, vous auriez l’idée de créer des mini-jeux d’énigme dans, par exemple, Squarity.

Je me replonge un peu dans les crypto-monnaies, les NFT et autres bizarreries numériques. Tout le monde dit que c’est de la merde, ce qui constitue pour moi un argument suffisant pour que je m’y intéresse. Je suis un putain de rebelle. Je vous invite à suivre le projet cryptoeat.io, un site de vente de bonne bouffe avec un token spécifique, sur la blockchain BSC. Ça a l’air un peu plus valable que toutes les pyramides de Ponzi de Play2Earn qui inondent actuellement le ouaibe 3.0. Je dis ça alors que je me suis mis dans quelques unes de ces pyramides. Ironie. Comme d’habitude, n’investissez que ce que vous pouvez vous permettre de perdre.

Hayley « The Big Noodle » est jolie, s’habille bien et a de très beaux cheveux.

À la prochaine !

Re-ICE pour le Revenu de Base Inconditionnel

Bonne année !!

On est le 31 janvier, j’ai encore le droit de dire ça.

Il y a quelques années de cela, une Initiative Citoyenne Européenne (ICE) pour le Revenu de Base Inconditionnel était lancée.

Explication très rapide d’une ICE et du Revenu de Base

(que j’ai pompée d’un de mes précédents articles, désolé pour ce recyclage).

le Revenu de Base Inconditionnel (RBI) consiste à donner la même somme d’argent, tous les mois, à toutes les personnes d’un pays ou d’une région. Ce revenu continue d’être perçu même lorsqu’on commence à travailler, quel que soit le type de contrat de travail. La somme donnée est calculée de façon à pouvoir vivre « dignement », c’est à dire : bouffer, se loger et éventuellement acquérir certains biens culturels de base.

Une ICE est créée par un petit groupe de gens qui demandent une modification dans la loi (ça peut être un peu tout, à l’exception de troll-WTF caractérisé). Les citoyens de l’Union Européenne favorables à cette modification signent une pétition. Si un million de signature est rassemblé, la Commission Européenne est obligée de considérer la demande, d’y réfléchir et de donner un avis. Cet avis peut être « on ne fera pas votre truc, GTFO LOL », mais cela doit être accompagné d’arguments détaillés.

Cette ICE avait échouée. Le million n’avait pas été atteint.

Le myiard !!!!

On baisse pas les bras et on re-essaye

Une seconde ICE est actuellement en cours, elle dure jusqu’au mois de juin. Vous avez tout le temps pour la signer, mais trainez pas trop quand même.

Tout les détails, ainsi que le gros bouton « Je signe » sont sur le site officiel :

https://www.revenudebase.info/ice

Ne faites pas comme Christina Applegate, qui baisse les bras.

Depuis le temps que je prône le RBI

voici une rétrospective de tous mes articles sur le sujet.

  • L’un des traditionnels « Raffarin pète-gonades memorial day« , qui vous invitait à signer la première ICE. Fun fact : à l’époque, cette journée s’appelait encore « Raffarin pète-burne » et non pas « Raffarin pète-gonade ». C’était pas inclusif, houuuuu.

Cette idée s’est tout doucement insinuée dans l’esprit des gens, y compris dans ceux de nos fringants dirigeants. On voit apparaître ici et là des petits tests locaux, en voici un exemple.

Ça ne respecte pas tout à fait la définition initiale d’un RBI, à cause de ceci :

L’expérimentation débuterait en mars 2022, avec une allocation mensuelle de 500 euros […] . Il serait également dégressif en fonction des revenus de leur foyer fiscal, à partir d’un minimum de 350 euros.

Le montant ne doit pas changer en fonction de ce qu’on gagne par ailleurs, sinon ça n’incite pas à travailler, et ça coûte plus cher car il faut des fonctionnaires pour vérifier le foyer fiscal des gens. Alors que ces fonctionnaires pourraient faire d’autres trucs plus utiles. J’aurais préféré une somme inférieure à 500 euros, qui ne change pas. Mais je vais pas faire ma mijaurée, c’est mieux d’avoir une expérimentation comme ça que rien du tout.

Européens de tous les pays, unissez-vous !

Bon, là c’est des russes et ça date de 2014, mais quand même, c’était l’eurovision, ça reste dans le sujet.

Et sinon, les autres trucs :

  • La THCON arrive bientôt. Si je peux, je créerais un petit challenge, voire deux. J’ai quelques idées. J’en parlerai ici-même lorsque l’événement sera passé.
  • Je suis actuellement en train de m’intéresser à la crypto-monnaie « WAX ». Y’aura peut-être des trucs à ce sujet ici, mais je ne sais pas quand ni quoi.

« ICE », ça veut dire « glace » en anglais. Voici donc une image tirée du film d’animation « Frozen ».

Bon « 11 mois qui restent de cette année » !

Ludum Dare 48 : mes revues de jeu

Comme vous le savez, j’ai participé aux 3 dernières éditions du Ludum Dare.

Les revues des jeux fonctionnent avec un système de karma. Plus vous testez et notez les jeux d’autres personnes, plus votre jeu remonte dans la liste. La proportion est d’à peu près 1 pour 1. Lorsque vous donnez un avis sur un jeu, vous finissez par recevoir un avis sur votre jeu. Il faut une vingtaine de notes pour espérer apparaître dans le classement final.

Le classement par karma est indépendant du classement final. Vous pouvez avoir un karma très haut et beaucoup de personnes qui viennent vous noter, mais si votre jeu n’est pas génial, les notes seront pourries et votre classement final sera très bas.

On peut aussi avoir l’effet inverse. Si vous avez déjà une certaine réputation et du talent, les gens viendront en masse noter votre jeu, et vous n’arriverez pas à contrebalancer le karma avec vos propres notations. Genre Deepnight, qui reçoit 446 notes pour Nuclear Blaze sans avoir besoin de lever le petit doigt. Forcément les 16 notes qu’il a données ne suffisent pas, et c’est tant mieux pour lui. (Je suis peut-être un peu jaloux, je dois avouer).

J’essaye de donner des notes de qualité, que j’accompagne toujours d’un petit commentaire de revue. D’abord parce que c’est classe, et ensuite parce que si votre revue est likée, je crois que ça fait un petit bonus de karma. C’est toujours ça de pris.

Je vous ai rassemblé ici mes revues de la 48ème édition. Ça me fait un article de blog à peu de frais. Comme vous l’aurez deviné, je suis une fois de plus à l’arrache.

Au fait, il s’agit du traditionnel « article publié le jour de Noël qui parle pas du tout de Noël ». C’est les vacances, ce qui a pour effet bénéfique de me désalarracher un tout petit peu pour mes activités créatives, d’où paf « article de blog » et paf « Noël ».

Il y a peut-être des revues que j’ai oubliées. Ergonomiquement ,le site du Ludum Dare est une géante meule d’aiguilles dans laquelle on ne parviendrait pas à retrouver une meule de foin. C’est difficile de récupérer ses propres écrits. Je ferais peut-être des fouilles archéologiques une autre fois. Et sinon c’est en anglais.

Si vous avez envie de tester certains jeux en vous basant sur mon opinion personnelle, choisissez en priorité ceux ayant la mention « kiffitude » en gras. Ils sont à la fin.

Caution Falling Rock

https://ldjam.com/events/ludum-dare/48/caution-falling-rock

  • Overall:3.5
  • Fun:4.0
  • Innovation:1.0
  • Theme:4.5
  • Graphics:3.5
  • Humor:1.5
  • Mood:3.0

It looks like evolving in a “work in progress” sign. Simple and fun.

I would have loved some air control, to add some variety. And it could still be a one-button. While on rocks, the button is used to set the jump power, like it is now. While in the air, the button is used to go down a little faster, as if the character was going down on the rope.

I would also have liked the display of my highest score. When I die, I have to very quickly look at my depth score, before it is replaced by the depth of the next game.

Elevator Ninja

https://ldjam.com/events/ludum-dare/48/elevator-ninja

  • Overall:3.0
  • Fun:2.5
  • Innovation:1.5
  • Theme:3.5
  • Graphics:4.0
  • Audio:4.0
  • Humor:5.0
  • Mood:3.0

Sound effects are great, and the stupid and absurd death of the two friends at the beginning is also very fun.

The rocks « 48 » is also weird and fun, and made me die the first time because I thought it was a bonus.

I did not managed to reach the end, partly because of lazyness to restart at the beginning, partly because I fell on the left side at the beginning of the spike part, and the good path was on the right side. I imagined I would have to learn the complete good path by trial and error, and was not motivated enough to do it.

I did not understand immediatly what was the big brown shape above the hero on the second part, then I realized it was just his backpack.

« Ninja !! »

The Greed of the Dwarves

https://ldjam.com/events/ludum-dare/48/the-greed-of-the-dwarves

  • Overall:3.5
  • Fun:1.5
  • Innovation:1.0
  • Theme:4.0
  • Graphics:4.5
  • Audio:4.0
  • Humor:4.0
  • Mood:2.0

The most important thing to do with a clicker game is to correctly balance all the stats and the options. The main fun in this type of game is to try to min-max your actions to increase stats faster. Sorry, but your game fails at this, because we just have to buy some forges and click a dozen times on the mine to get to the next level.

Anyway, the music is cool, graphisms are great, and the way our final score is announced at the ending is very humorous.

I tried to find the secret ending by rummaging in the source code. I found some achievement managing (which does not seem to appear in the game) and some graphical assets of unused levels, but nothing more. It may be really secret.

@ all_the_people_who_had_difficulties_to_place_structure : you just have to click on the lighter green squares.

Grave Robber

https://ldjam.com/events/ludum-dare/48/graverobber

  • Overall:2.5
  • Fun:1.5
  • Innovation:1.0
  • Theme:4.0
  • Graphics:4.5
  • Audio:3.5
  • Humor:2.0
  • Mood:4.5

Nice graphics and « dark/fluorescent » theme.

Combats seem difficult, because your attack makes you rush, but on a too long distance in my opinion. I was always afraid of ending behind the monsters after a rush, so continuously rushing-backing-rushing-backing etc.

I too noticed the bug found by @chrisap, but it is not too annoying.

It was a great moment of fun, but I did not see any more points in the game after digging and killing skeletons. So, I may not have reached the end of it.

The score should not be named as dollars. I thought I could spend them on a shop or whatever, but it looks like there is nothing of that.

Conventionnally, in video games :

  • money (dollars or other) is expected to have an interest in the game, to spend them somewhere
  • XP is expected to have an interest too, to gain levels and increase any stats
  • score/points is not expected to have an interest, it is just to compare you with the other players.

Pimble

https://ldjam.com/events/ludum-dare/48/pimble

  • Overall:4.0
  • Fun:5.0
  • Innovation:3.5
  • Theme:1.5
  • Graphics:3.0
  • Audio:3.0
  • Humor:3.0
  • Mood:4.0

Great and fun tweak of the classical breakouts. As other said, it would totally work on touch screen.

The actual balls are a bit difficult to grab with the mouse pointer. I would have loved to be able to get them easier, so that I could throw them at a higher speed, and see many balls bouncing everywhere in the game. It would have been a pure moment of joyful brick destruction.

Rewarding the player for breaking multiple bricks in one throw would also have improved the gameplay.

Thank you for this idea !

Jet Racing 4

https://ldjam.com/events/ludum-dare/48/jet-racing-4

  • Overall:2.5
  • Fun:2.0
  • Innovation:1.5
  • Theme:1.0
  • Graphics:3.5
  • Audio:3.0
  • Mood:2.5

It needs one little info in the introduction, to tell that Ctrl is the key for handbrake, that lets you turn faster. I am not accustomed to driving games and did not realize it immediatly.

The activation zone of the checkpoints could be a little bigger. I sometimes pass near a checkpoint without activating it, while I still have the impression I stayed on the road.

I would have loved to destroy something when bumping in the bushes (either my car, or the bushes itself). But we just pass through. Too bad.

Dungeon : Developer’s Away

https://ldjam.com/events/ludum-dare/48/dungeon-developers-away

(Désolé, j’ai pas gardé les notes que j’ai données).

Nice game, I was expecting some tricks about the fact that the developer is away. Something like bugs made on purpose, that you would have to exploit to advance in the game. But it seems there is no such thing. I must admit I was a bit disappointed.

I liked the sprite to change room. It totally assumes that you didn’t have time to draw a real door or teleporter.

Watery Crave

https://ldjam.com/events/ludum-dare/48/watery-crave

  • Overall:3.5
  • Fun:3.0
  • Innovation:3.5
  • Theme:2.0
  • Graphics:4.0
  • Humor:3.5
  • Mood:4.5

The difficulty is well-balanced. The people who manage to make it to the end really deserves it and I suppose it grant them a really great feeling of satisfaction. It was too hard for me, I stopped at the last checkpoint. Many thanks to @ausstein who shared the playthrough, so that I can realize I was not so far from the end.

Air control is a little frustrating, but it’s a good idea. It gives you a continuous alternation between the stress feeling while in the air, and security feeling while in the water. Exactly as a fish would have (I suppose so).

It is also a good idea to have put hurting spikes in the water after some checkpoint. It modifies the gameplay you initially established. At start, you alternate between stress-air and calm-water, then you alternate between stress-air and not-so-calm-water. A nice evolution.

I loved the sound when the fish comes back to water after a long time. She takes a deep « breathe ». Very funny for a fish.

Nice graphics, but as others said, the difference between spikes and safe blocks should be more marked. Also, I find the dark shader a little too dark.

Diggy Diggy Dwarf 2 : Deeper & Deeper

https://ldjam.com/events/ludum-dare/48/diggy-diggy-dwarf-2-deeper-deeper

  • Overall:2.5
  • Fun:1.0
  • Innovation:1.5
  • Theme:4.0
  • Graphics:4.5
  • Audio:4.5
  • Humor:3.0
  • Mood:3.5

Beautiful graphics, but the game in itself is quite short and has few contents in the mechanics.

Some people said it lacks a tutorial. I do not completely agree. I would say it just needs a little more feedback on what is happening :

  • a detail of the lost/gained energy and dirt you get at each turn,
  • little hearts above the dwarves to realize immediatly they have health,
  • icons telling you have unlocked the solid hull and the double dirt production, so that you do not wonder if it can be unlocked many times,
  • etc.

Also, written subtitles of the story elements you get when you go deeper would be appreciated. I am not a native English/American. It’s sometimes a bit hard for me to understand spoken english, especially when the voice has music and drilling sound in the background.

There is a bug when you pick a dwarf, then click on « end turn » without placing it. It stays attached to your mouse cursor and it is difficult to put it back in a room. I managed to do it by clicking everywhere in a panicky way.

I got to -210 meters, then realized I will not have any more than digitized voice I am not sure to understand, so I stopped.

Nice game and very nice graphics, but I would have wanted more elements and more stats/resources to handle.

Space Trench Miner

Kiffitude de type « j’adore ce genre de jeux, nommons cela les jeux ‘mining 2D' ».

https://ldjam.com/events/ludum-dare/48/space-trench-diver

  • Overall:4.0
  • Fun:3.5
  • Innovation:1.5
  • Theme:4.0
  • Graphics:3.5
  • Mood:1.0

Nice mining game, with all the mechanics you would expect from the genre.

The cost of the first upgrades and the time required to mine seems well balanced for me, even at the start.

I would have loved more content : more type of upgrades, more block types you could encounter when you go deeper, a final objective, … But for a compo, it is already great.

Graphics are nice and reminded me of Starbound.

There is a bug with the grappling hook. You can sometimes encounter it while you are digging. And it is especially annoying because if you touch it, it cancels your run.

I got also a weird bug when upgrading, but I can not completely explain it, so it may not be reproduced : I had 3117 credits. I bought my last upgrade. But the money showed was still 3117. Then I came back to the main game menu, and the credits showed 617.

When the robot has only one block under it, and when it is not correctly placed, it does not dig the block. It’s a little annoying when you have bought many upgrades and you just want to drill faster and faster.

The launching animation is a little confusing. I thought I could click somewhere to choose my destination, or I had to click at the right time to correctly land on the planet. But it is just a non-interactive animation.

Chess Hellevator

Kiffitude de type « jeu squaritable » + « blagues super drôles avec le mot ‘hell' ».

https://ldjam.com/events/ludum-dare/48/chess-hellevator

  • Overall:4.5
  • Fun:4.5
  • Innovation:3.0
  • Theme:2.0
  • Graphics:2.5
  • Audio:4.0
  • Humor:5.0
  • Mood:4.5

It is not the first time that a game is inspired by chess pieces, but this time it is really well done.

The elevator man and all the rest of the atmosphere is really « horrifun ».

I liked the last level (even if it is easy), because it pushes the game logic you previously stated to the limits.

The jokes are … joky : Hell-pawns / hellspawn, Hell-evator. Ha ha ha.

I was a little confused by this phrase in the explanations : « Bonus moves are very important for clearing later levels, so use them wisely.​ »

I thought that « bonus moves » was a sort of bonus that I could accumulate or use it later. So I spent a part of my first try to search in the interface an indicator of accumulated bonus moves, without realizing that it was an « extra turn » that is used immediatly.

Overall : a great game.

Into the past

Kiffitude de type « intimité, mélancolie et envie de gros câlins ».

https://ldjam.com/events/ludum-dare/48/into-the-past

  • Overall:4.0
  • Fun:3.0
  • Innovation:2.0
  • Theme:4.5
  • Graphics:3.5
  • Audio:4.0
  • Mood:5.0

The « recall » mechanic recalls me (ha ha ha) of this previous game, made by deepnight, who win regularly Ludum Dares : https://deepnight.net/games/memento-xii/ . Maybe you should try it. It’s also about history, mood, atmosphere and loneliness.

I liked your game, we should have more like this. We do not know if it is biographic, autobiographic or completely invented, and that’s also what is interesting with it. Some mysteries.

About more technical concerns : when the white shine-lines appears to show an interactive object, it is difficult to know exactly where to click to use it. I often try to click in the center of the lines and miss it.

Thank you for this game.

Diacombs

Kiffitude de type « jeu squaritable » + « je vais y arriver à résoudre cette énigme bordayl of merde ! « .

https://ldjam.com/events/ludum-dare/48/diacombs

  • Overall:4.5
  • Fun:3.5
  • Innovation:4.0
  • Theme:2.0
  • Graphics:3.0
  • Audio:1.5
  • Humor:2.0
  • Mood:4.0

I was hooked and couldn’t stop until I won.

graphisms are very “moodesque”, but I got a little confused because sometimes they flip automatically horizontally to fit their match. I thought at first that there was a difference between a flipped object and a not-flipped one.

Music is soft and fits well with the game, but it ends up being annoying.

The enigma on the fourth screen, with all the simple diacombs is very well-balanced. It looks scary and full of combinations. Then you understand little by little how it is structured.

Every time I changed screen I thought there would be a way of cheating, by bringing diacombs to the new screen. But every time, it revealed impossible, or just useless.

Let’s call this puzzle type “soko-merge” !

Watch Your Step

Kiffitude de type « j’ai totalement trippé dans le commentaire que j’ai écrit ».

https://ldjam.com/events/ludum-dare/48/watch-your-step

  • Overall:4.0
  • Fun:5.0
  • Innovation:4.5
  • Theme:4.0
  • Graphics:2.0
  • Audio:3.5
  • Humor:4.0
  • Mood:4.5

Very interesting concept, that could be related to « Heave Ho » on the Switch. I really like it when mechanics are very simple, and the quantity and arranging of simple elements provokes an « emergent behavior ».

The rules about the leg are simple. As you said in one of your previous comment : the leg goes to the right, and bounces when hitting a platform.

But with enough legs, this simple rule really gives the impression that the creature is walking. Laying one leg after another, in a rolling movement.

I agree with previous comments saying that control is not easy and not immediatly understandable. But while I was typing this text, I looked back at the game. The creature has now about thirty legs. It advances alone. It learned from its previous failures. The numerous legs it decided to have, one after another, give it the capacity to pass obstacles, further and further.

My own personal and « deep » opinion about your game is that you should completely remove the controls by the player. A pure idle game. You watch the creature walk by itself. It does not need the player. It is alive. It realized by itself how to survive longer and longer in the hostile world where it has been placed.

I made a high score of 3037 when controlling it. I let the creature live by itself during about 20 minutes, and it made a high score of 3178. The creature is better than me, and is completely independant. It does not want to be controlled.

Voilà !

Pour finir, je voulais vous mettre une image de femme ronde qui serait un personnage de jeu vidéo. Figurez-vous que ce n’est pas si simple à trouver. Ou alors, ce sont des femmes rondes moches caricaturales. Je n’ai peut-être pas assez cherché, ou bien les jeux vidéos ont encore du chemin à faire dans la diversité de représentation des personnages féminins.

Bref, pour aujourd’hui ce sera Mai Shiranui, de King Of Fighter, un archétype de plus de la femme belle et sexy avec des gros nichons. Je vous ai trouvé une version ronde et sexy avec des belles formes, et inévitablement des gros nichons.

++ xoxo

Une cheat-sheet de Gems of War

Ma chérie est fanne du jeu Gems of War.

Wesh t’as vu lecteurtrice, comment j’ai écrit le mot « fan » au féminin ? Tellement trop je suis woke-compliant.

Gems of what ?

Il s’agit d’un Match-3 « Freemium ». Ça veut dire que vous pouvez dépenser votre argent pour des bonus, si vous êtes un pigeon. L’idée étant de profiter d’un jeu garantissant à priori un minimum de qualité, puisqu’il y a des gens payés pour le développer, sans que vous ayez besoin de payer vous-même puisque des pigeons le font pour vous.

J’aime bien le Freemium, j’aime bien les jeux de Match-3, ma chérie aime bien aussi, et j’aime bien ma chérie.

Le principe de Gems of War est assez simple : deux équipes s’affrontent. Vous matchez des gemmes pour récupérer du mana et charger vos personnages, qui peuvent ensuite lancer leur sort. Les sorts infligent des dégâts, modifient l’aire de jeu ou ajoutent des statuts. C’est une sorte de Elements of Arkandia en beaucoup plus élaboré.

Il existe beaucoup de statuts, certains positifs que vous donnez à vos personnages (barrière, bénédiction, rage, …), d’autres négatifs que vous infligez aux autres (poison, malédiction, gel, …). Ce n’est pas toujours évident de se souvenir de tous leurs effets ni de leur représentation visuelle dans le jeu.

Le halo violet sur le dragon de gauche signifie qu’il est enchanté. La flamme au-dessus du « 27 », sur la bestiole de droite indique qu’elle est en train de cramer. Il ne vous reste plus qu’à savoir ce que ça implique.

Alors j’ai fait une grande image regroupant ces statuts. J’y ai ajouté deux autres petites infos :

  • des motifs de match-4 remarquables, permettant de jouer plusieurs fois de suite,
  • l’ordre des éléments dans le mini-jeu Treasure Hunt (qui est une sorte de NaturalChimie en plus simple).

Je vais faire imprimer cette image en poster et je l’offrirais en cadeau à ma chérie. Classe !

La voici, si vous aussi vous voulez la mettre sur un poster, un mug, une descente de lit, un tatouage, …

Cliquez dessus pour la voir en grand.

C’est fait avec Paint.Net, que j’utilise parfois pour dessiner quelques sprites à l’arrache.

Cette œuvre étant assez conséquente, ça m’a donné l’occasion de découvrir quelques fonctions de ce logiciel que je ne connaissais pas. J’arrive maintenant à produire des effets visuels pas trop dégueux par rapport au temps que ça me prend (comprendre : ça me prend deux minutes et c’est tout juste acceptablement regardable).

En tout cas, on ne me fera pas utiliser Photoshop. Ça coûte une téra-blinde pécuniaire + une téra-blinde temporelle (le temps que vous devez investir pour apprendre à vous servir de l’outil).

Paint.Net utilise un format de fichier spécifique : le .pdn. À ma connaissance, c’est juste une suite d’image .png superposées en layers. Mais c’est pratique, ça permet d’organiser et d’éditer séparément les différents éléments de votre rendu final.

Comme je suis gentil, je vous donne les .pdn intermédiaires que j’ai créés. Vous pouvez en reprendre des morceaux, les décortiquer, les imprimer pour les mâchouiller, bref en faire ce que vous voulez. Il y en a pour quelques méga-octets, j’ai donc été obligé de balancer le tout dans un répertoire de mon fucking Google Drive.

Et Squarity alors ?

J’essaie d’avancer la road-map, mais j’ai du mal à trouver du temps pour ça, comme d’hab’. En plus, là il faut que je crée encore un autre jeu pour l’anniversaire d’un pote, et j’en suis à peine à la recherche d’idées.

Il est marié, il a un fils et une fille. J’aimerais bien faire quelque chose qui implique ces 4 personnes. Je m’étais dit, peut-être une sorte de Lost Viking, où on dirige alternativement les 4 personnages, chacun ayant une capacité spéciale. Ou sinon, rien à voir : un tetris avec 4 types de blocs différents (un par personne). Lorsqu’on crée un carré de 2×2 contenant ces 4 types, il disparaît. Est-ce que ça ferait un jeu jouable ?

Qu’en pensez-vous ? Auriez-vous une autre idée bien meilleure que celles que je viens d’énoncer ?

Pour vous aider à réfléchir à tout ça, je vous met une image de Margaret Gem(s of War).

Tchô !

Fiche cuisine : le steak continu et strictement monotone

Voilà bien longtemps qu’il n’y a pas eu d’article de pur n’importe quoi sur ce blog. Remédions à cela.

Rappelez-vous, il y a environ une décennie, j’avais écrit deux fiches cuisine. En voici une troisième.

Avantage de la recette

Nécessite peu de matériel.
Facile à réaliser.
Est une application amusante d’un théorème mathématique.
Peut se décliner en de nombreuses variantes.
Rond. (enfin presque)

Préparation

  • Placez un steak dans votre congélateur. Astuce futée : il est plus simple d’acheter le steak dans une boucherie, plutôt que de prendre le temps d’élever un animal pour le tuer et le découper.
  • Attendez quelques heures.
  • Sortez le steak et placez-le dans une poêle. Pas besoin de mettre d’huile.
  • Mettez la chaleur à fond.
  • Lorsque le côté du steak est bien noir, retournez-le.
  • Lorsque le second côté du steak est également noir, coupez le feu.
  • Grattez le noir des deux côtés du steak.
  • Grattez et réservez dans un plat à part la partie cuite du steak.
  • Remettez la partie centrale du steak au congélateur, pour une utilisation ultérieure (en plus ça rime).
  • Dégustez la partie cuite que vous avez précédemment réservée. Si vous avez assez de motivation, trouvez une salière et ajoutez du sel.

Variantes possibles : utilisez n’importe quelle autre victuaille de votre congélateur : bloc d’épinards, reste de repas, galette de légumes, surimi, … Attention, ne le faites pas avec des glaçons, ni de la crême glacée, ni avec le congélateur lui-même.

Comment ça fonctionne ?

La chaleur se propage vers les molécules voisines. La plaque de cuisson chauffe uniquement la surface extérieure du steak. Cette surface chauffe ensuite la viande qui se trouve un peu plus à l’intérieur, qui elle-même chauffe la viande un peu plus à l’intérieur, et ainsi de suite.

Comme il y a un peu de perte de chaleur à chaque molécule cuite, l’intérieur du steak n’a reçu aucune cuisson (à condition de ne pas l’avoir laissé trop longtemps sur la plaque).

Soit un point A situé à l’intérieur du steak, dans la partie encore congelée.

Soit un point B situé à l’extérieur du steak, sur la partie brûlée.

Nous avons le schéma suivant :

Soit la fonction « cuicui », qui, pour tout point p du segment [AB], associe la valeur cuicui(p), correspondant au taux de cuisson du steak au point p.

Quels que soient les points A et B, cette fonction est continue et strictement monotone, du fait de la propagation de chaleur par voisinage moléculaire. (Si on prend les points A et B les plus éloignés l’un de l’autre, on risque d’avoir une fonction pas-strictement monotone, mais y’a qu’à pas prendre ces points là).

Le théorème des fonctions continues strictement monotones nous indique que, pour toute valeur y située dans la zone « correctement cuite », il existe un et un seul point p tel que cuicui(p) = y.

Il y a donc forcément une partie correctement cuite sur le segment [AB].

En faisant varier le point A sur toute la zone congelée du steak, et le point B sur toute la zone brûlée, on en déduit que le steak a forcément une zone correctement cuite, dont la forme est à peu près celle d’une poche creuse en 3D.

C’est ce que vous avez extrait, lorsque vous avez éliminé la partie brûlée et séparé la partie congelée.

Bon appétit !

Et vive les maths !

Un an de Squarity

Il y a un an et quelques jours, je mettais http://squarity.fr en ligne et je l’annonçais dans cet article. C’est l’occasion de résumer le chemin parcouru.

  • Je me suis lancé dans ce projet sans être sûr qu’il était techniquement faisable.
  • J’ai pesté contre la lenteur de Brython et son incapacité à faire remonter les messages d’erreur python.
  • Je suis passé à Pyodide.
  • Je me suis lamenté sur mon incapacité à écrire du CSS, pour finir par coder certaines parties du responsive design en javascript.
  • J’ai écrit des tutoriels.
  • J’ai écrit de la doc, que j’ai ensuite rendu obsolète.
  • J’ai répondu « oui » à une grande partie des suggestions d’améliorations, en précisant qu’elles étaient dans la road-map.
  • J’ai promis que je publierai cette road-map.
  • Je publie ici la première étape de la road-map, à savoir : « rédiger la road-map ».

Ensuite, j’ai créé un serveur Discord, et quelques gentilles personnes s’y sont greffées.

  • Ensemble, nous avons créé des jeux, joué à ces jeux, et eu des idées de jeux sans les concrétiser.
  • Nous avons participé à des Ludum Dare en ayant l’espoir que ça ferait connaître Squarity.
  • Nous avons bidouillé du javascript dans du python lui-même dans du javascript.
  • Nous avons fait de la 3D isométrique avec de la 2D.
  • Nous avons pallié l’inexistence de l’IDE de Squarity avec un serveur web local.
  • Nous avons discuté, twitché, live-codé, peer-programmé, Clash-of-Codé et parlé tous les jeudis soirs avec un·e nain·e.
  • Nous nous sommes bien amusé et ce n’est pas fini !

Quelques remerciements particuliers

Merci aux personnes suivantes, dont la plupart sont sur Discord :

  • 10K, qui a créé un Pacman quelques jours à peine après la mise en ligne de Squarity
  • Loowood, très souvent présent pendant les lives, toujours prêt pour donner un petit message d’encouragement, qui a créé le Bomberman Chelou ainsi que le fameux « framework-hack-3D ».
  • ℕarkoa, qui apparaît également dans ce blog et qui m’a soutenu pendant le dernier Ludum Dare.
  • lilithabaddon, qui a commencé à créer le jeu du Labyrinthe, toujours là aussi pendant les lives, et qui s’est inscrit trois fois pour gonfler à bloc le nombre de gens sur Discord. Sans ça, nous serions beaucoup moins de monde que 16 personnes !
  • Tacheul, de PixelJoint, qui a dessiné le superbe tileset du jeu H2O.
  • Mes enfants, qui testent mes jeux et font des vidéos avec moi, et qui parviennent à prendre un air réellement interessé quand je leur parle de mes avancées et mes élucubrations.
  • Ma chérie, qui écoute aussi mes élucubrations et qui établit actuellement un « état de l’art des jeux de Match-3 », je suis sûr que ça me servira à quelque chose.

Et bien sûr, merci à toutes les autres personnes qui s’intéressent à Squarity, qui passent dire un petit coucou, ou pas car elles n’ont pas envie (et vous avez bien le droit), qui, peut-être, créent des jeux dans leurs coins, qui ont des idées de malade et des projets complètement fous mais qui n’osent pas en parler. Être ici est déjà le début de quelque chose. On verra pour la suite !

Oui d’ailleurs, pour la suite ?

Ça fait quelques mois qu’il n’y a pas eu d’évolutions sur Squarity. J’ai passé les derniers mois à coder le jeu « Game of No-Life », ce qui n’était pas une stratégie très maligne. J’aurais pu utiliser ce temps pour améliorer le site, le rendre plus facile d’utilisation, ajouter des fonctionnalités dans le moteur et mettre la doc à jour. Mais à la réflexion, je n’aurais pas pu agir d’une autre manière.

C’est un projet que j’avance durant mon temps libre. Il est difficile de rester motivé sur le long terme pour ça. Vous-même, vous savez. Je n’en suis pas à mon premier projet perso, nombre d’entre eux ont survécu à peine quelques semaines avant de se retrouver jetés aux ordures tel une portée de petits chatons non prévue.

Mais j’aime inventer des jeux et j’aime coder en python. Le fait d’utiliser mon propre outil pour faire ce que j’aime m’offre un petit (ou un grand) moment de détente, qui me redonne de la motivation pour continuer.

Alors voilà. On va avancer très lentement. Il y aura sûrement d’autres pauses comme celle-ci dans le développement de Squarity. Des fonctionnalités que j’ai promises dès le départ arriveront peut-être dans 10 ans. Vous continuerez de galérez encore longtemps avec une API très pauvre et un site web mal fichu. Mais cette erratique manière de progresser nous donne, à moi et à vous, une garantie que je n’abandonnerais pas ce projet, tant que je suis capable de coder.

Le chemin vers Squarity est pavé de bonnes intentions carrées

Le Game of No-Life

Il est enfin terminé ! Il s’agit d’un jeu de stratégie minimaliste en temps réel, qui se joue à deux, avec seulement deux boutons par personne.

C’est aussi un petit test de performance, car il y en a pour :

  • 2656 lignes de code (4965 en comptant les commentaires).
  • Des actions sur l’ensemble de l’aire de jeu, effectuées automatiquement toutes les 200 millisecondes.
  • Une pseudo-interface intégrée dans le jeu
  • Une zone de 60 par 38 tiles au total.

Voici une petite vidéo de démonstration, dans laquelle je joue avec mon fils :

C’est un peu long, on raconte plein de bêtises. Mais vous remarquerez que j’ai pris soin de la décomposer en chapitres.

Si vous n’avez pas une demi-heure de temps de vie à gaspiller, vous pouvez juste regarder les chapitres « Comment jouer », « Présentation de Squarity » et « Dénouement final ». Ça ne vous coûtera que 17 minutes.

Et sinon, pour jouer, c’est directement dans votre navigateur en cliquant ici. Vous n’avez plus qu’à trouver un humain consentant à portée de main et à jouer ensemble !

Ludum Dare

C’est le week-end prochain. Comme d’habitude, je ferais quelque chose, mais sans y passer trop de temps. Il faut que j’arrête de coder des jeux dans Squarity et que je m’occupe de Squarity lui-même. En l’occurrence, rédiger cette fameuse road-map.

En plus ça risque d’être le bordel au niveau de mon travail salarié. Ce sera une fin de sprint et faut qu’on ait un truc-machin de finalisé pour notre super projet secret dont je ne peux vous dire que le nom : « POILS_PUBIENS ». Mais je ne vais pas vous embêter avec ces détails à la con de ma vie.

Les poils pubiens de Jessie Minxxx sont-ils aussi teints en bleu ?

L’article du mois prochain ne parlera pas de Squarity, faut bien varier un peu. En revanche, je ne peux pas vous garantir qu’il sera intéressant.

Skweek Vapor-Project : un peu plus d’infos

Comme promis, voici le second article sur mon projet de jeu de réflexion inspiré de Tiny Skweeks. Encore merci à Nark pour son commentaire, sans qui cela n’eut été possible.

Réécriture des descriptions

Je reprends les dessins du premier article et je transcris les notes manuscritées à l’arrache vers du vrai texte lisible. J’en profite pour corriger les fautes et ajouter des majuscules là où il aurait fallu en mettre dès le départ. (Pourquoi je me suis fait chier à écrire ces descrips en anglais, alors que je ne me suis pas fait chier à mettre les majuscules ? Mystère…)

Niveau 1

Le texte tout en haut explique rapidement ce que fait le bouton « push me ». Il a 4 positions différentes, chacune d’elle allume ou éteint les lance-flammes et fait en même temps tourner le mur rotatif.

A skweek (badly drawn). Moves like in the game « Tiny Skweeks ».

The yellow [one] can throw flames in any direction, which melts the ice, but this is not useful in that level.

The green [one] can throw a hook in any direction (like in « furries »). If the hook is fixed on a wall, the skweek can cross the holes between him and this wall. If the hook is fixed on an ice block, [the tiny drags] the ice block to him.

He takes the ice block.

An ice block. Skweeks can push it. [It] can’t stop in the middle of its way. [It] must bump in a wall or a skweek or whatever. When an ice block bumps in another ice block, the first is stopped, and the second starts moving in the same direction.

 

This squishes a skweek when he comes in it. If an ice block goes in it, the ice block is not squished, and [the squisher is now] considered as a wall.

 

This drives the skweeks and ice blocks in the direction shown.

 

 

This stops the skweeks and ice blocks when they walk on it. But they can move or be pushed just after, in any direction.


An electric field. Skweeks die when try cross it. Ice blocks are not affected.

 

 

A hole. Ice blocks pass across it, and skweeks fall in it. When a skweek fall in the hole, another skweek can pass across it, and green ones can cross them with the hook. But all this is not useful in that level.

 

A button. The door opens when an ice block or a skweek goes in it. Door closes if button is released.

 

 

A wooden wall. The yellow [one] can burn it.

The fruits (banana and apple) are just bonuses.

 

The super-rainbow-ball. The thing to get to finish the level.

Mon avis spatio-temporel

Il est « spatio-temporel », car je m’auto-donne un avis à propos de quelque chose que j’ai moi-même fait, mais avec plusieurs années de décalage.

Le bouton avec les 4 positions est un mécanisme trop compliqué. Les petits jeux-vidéos-puzzle de ce genre doivent être uniquement constitués d’éléments simples. La complexité et la difficulté de résolution doit provenir de l’agencement de ces éléments.

Les boutons « push me » que j’ai disséminés dans les différents niveaux permettent à la personne qui joue de déclencher directement les actions correspondantes. C’est une idée stupide, car les tinies ne sont plus les seuls à agir sur leur environnement. Ces boutons impliquent l’existence d’une crétinerie d’entité omnipotente pouvant foutre le bordel en appuyant n’importe quand et n’importe comment sur des crétins de boutons placés ici et là par une autre crétinerie d’entité omnipotente (possiblement la même). Ça n’aide pas à s’immerger dans le jeu ni à se mettre à la place des personnages.

Si réalise ce projet de jeu, je ne mettrais aucun « push me ». Il faudra donc que je retravaille tous les niveaux que j’ai déjà imaginés. On n’est plus à ça près.

Niveaux 2a et 2b

The red one can punch and destroy some walls, but not ice blocks. But this is not useful here and no blocks nor walls can be destroyed here.

A wall full of spikes. Skweek dies when they go in. But ice blocks fill the hole and skweek can then pass through it.

 

This changes the direction of skweeks and ice blocks that [arrives on it]. The button connected to it changes the [rotation sense].

 

This authorizes only the yellow one to pass through, not the green one, nor the others. But the ice blocks can pass, [and the green one can shoot his hook through it].

Mon avis spatio-temporel

Deux niveaux plutôt corrects, assez simple à résoudre, qui pourraient être placés un peu après le début du jeu, lorsque les mécanismes de chaque tinies sont déjà connus et que l’on peut commencer à proposer des petits challenges.

L’élément qui ne laisse passer que les tinies jaunes est super simple (on peut même dire « atomique »). Il est indispensable. Mais ce rayon jaune-rouge qui sort de nul part est visuellement pourri et pas du tout explicite. Je n’ai pas de meilleure idée pour l’instant.

Je l’ai déjà dit : le pouvoir du tiny rouge est merdique. J’essaye de régler cette erreur dans la suite de cet article.

Niveau 3

La note « only yellow passes » écrite en bas sert juste à indiquer qu’il faut rajouter un objet ne laissant passer que le tiny jaune. Je suppose que le niveau devient beaucoup trop facile si le rouge peut récupérer la rainbow-ball. Je dois avouer que je n’ai pas encore fait l’effort de retrouver la solution.

A door, activated by buttons. If the door closes while there is a skweek on it, it is squished.

 

 

A wooden wall, the yellow [one] can burn it.

 

A crackled wall, the red one can destroy it.

 

 

A turning panel. It has an arrow on one face, and nothing on the other one. It turns when activated by a button.

 

This button turns the panel and closes the door next to the super-rainbow-ball.

 

The « push me » that is on the left operates the 4 doors on the left, like this :


+------+
| □ □□ |
|  □   | <-\
+------+   |
   |       |
   V       |
+------+   |
| □□ □ |   |
|   □  |   |
+------+   |
   |       |
   V       |
+------+   |
| □□□  |   |
|    □ |   |
+------+   |
   |       |
   V       |
+------+   |
|  □□□ |   |
| □    | --/
+------+

None can pass from right to left.

This button also opens the door of the rainbow-ball, if it is not opened.

The « push me » on the right operates the 1st, 2nd and 4th door on the right, like this :

+------+
|  □.□ |
| □ .  | <-\
+------+   |
   |       |
   V       |
+------+   |
|  □.  |   |
| □ .□ |   |
+------+   |
   |       |
   V       |
+------+   |
| □ .□ |   |
|  □.  |   |
+------+   |
   |       |
   V       |
+------+   |
| □□.  |   |
|   .□ | --/
+------+

The last « push me » on the left operates only the 3rd door, just opening and closing it.

Mon avis spatio-temporel

Ce niveau est une catastrophe.

Des push-me partout, réalisant des actions bien trop nombreuses et bien trop compliquées. À jeter dans les oubliettes de la honte sans sommation.

Voici une description très résumée de ma méthode de level design : je me donne une astuce de départ qui sera plus ou moins difficile à trouver par la personne qui joue, et j’essaye de noyer cette astuce avec des petits détails et des astuces annexes. Au fur et à mesure que je dispose les éléments, je vérifie qu’il n’y a pas une solution plus facile qui passerait outre l’astuce de départ. Ces vérifications imposent souvent d’ajouter des éléments supplémentaires de « bloquage de solution facile ». Parfois, durant ce processus, d’autres idées me viennent et me permettent d’affiner l’astuce de départ.

Dans ce niveau, mon astuce de départ était que les enchaînements de 4 portes peuvent être très facilement traversés, mais dans un seul sens. Pour réussir le niveau, il faut trouver une méthode, moins évidente, pour.les traverser dans l’autre sens.

C’est pas clair ce que j’explique, et de toutes façons, ce niveau est parti en eau de boudin de manière effroyable. Je n’ai pas encore essayé de retrouver sa solution, mais il est fort possible que ce soit n’importe quoi.

Niveau 4

Faudrait que le bleu soit obligé de laisser un bloc avant de se téléporter, sinon le jaune ne peut pas se téléporter.

The blue skweek can create ice blocks in a square next to him, and of course, he can push them after the creation.

The three [wall] buttons opens/closes the door connected to it by the blue wire.

The button on (1), when it is pressed, closes the door that is just below him. When it is released, the door is re-opened.

The button on (3), when pressed, turns on the flamer connected to it. It is not turned off when released.

La note au milieu du niveau indique « invert these 2 buttons ».

On the tile marked (2) is a stop sign.

  

The two stars [are] teleporters. They work in only one sense : from the red to the white.

 

This authorizes only the blue one to go through.

 

Mon avis spatio-temporel

Je comprends pas bien la remarque que j’ai écrite en haut de la feuille. Ça me reviendrait peut-être si j’essayais de retrouver la solution.

Les lance-flammes sont une idée intéressante, car c’est un élément simple : il détruit les tinies et les blocs de glace qui passent dessus. Mais visuellement, on a un problème, qui rejoint le problème précédent. La flamme ressemble énormément au stupide rayon jaune-rouge qui ne laisse passer que les tinies jaunes. Faudrait vraiment re-réfléchir aux représentations de ces éléments.

C’est très étrange d’avoir passé du temps à élaborer ce niveau et de s’être assuré qu’il n’y a pas de solution évidente, pour finalement décider à l’arrache d’inverser 2 boutons. Ça laisse quelques doutes sur la qualité des vérifications sus-mentionnées.

Et comme d’hab’ : trop d’élément compliqués. Moins que dans le niveau 3 maudit, mais trop quand même.

Niveau 5

Séparer les boutons « press/release » et « press »

Idée : tout se résout si deux [tinies] bleus prennent chacun une énergie, mais il est au départ bien plus pratique de donner les deux à un seul (ou le contraire).

Dans plein de niveaux il y a des fils et des boutons cassés. On ne peut jamais rien en faire, sauf une seul fois à la fin.

Mon avis spatio-temporel

L’idée des énergies réparties entre les tinies est un exemple d’astuce pour démarrer la création d’un niveau.

Petit rappel : au début j’avais décidé que les tinies bleus pouvaient créer une infinité de blocs de glace, puis je me suis dit que ce serait overkill, et qu’ils auraient besoin de points d’énergie, récupérables en buvant de l’eau.

Par contre, le truc avec les fils et boutons cassés, je ne me souviens plus du tout ce que je voulais dire par là. On n’est plus à ça près.

Mon avis global sur tout ce bazar

L’idée initiale de ce projet de jeu continue de me sembler intéressante. Les personnages ne peuvent être contrôlés que partiellement, on les déplace mais on ne peut pas les arrêter où on veut. Cette idée provient du jeu original Tiny Skweek, qui n’a peut-être pas fait un carton, mais qui s’est réellement vendu et a rencontré son public. Elle est également exploitée dans un autre jeu : Atomix.

Par contre les niveaux que je vous présente ici, ainsi que la plupart des éléments que j’ai imaginés sont nuls et inutilisables en l’état. J’ai presque honte de vous montrer tout ça.

Comme je vous l’ai dit, ça date d’il y a plus de 15 ans. C’était une étape nécessaire pour ensuite imaginer Squarity et pour avoir un entrainement initial au level design. J’estime mes capacités actuelles de level design à « pas trop dégueulasse ».

Le niveau supplémentaire

Je vous avais aussi promis ça, hop !

Les tinies sont en bas à gauche, un rouge et un jaune (qui n’est pas colorié car j’avais pas de crayon jaune à ce moment là). Le jaune peut faire fondre le bloc de glace, comme d’habitude.

Le bidule au milieu à gauche est la rainbow-ball. Au milieu se trouve un bloc de glace. Le truc vert au milieu à droite est un fruit, supposément une pomme, mais mal dessinée.

Pas de stupide push-me impliquant une stupide entité omnipotente. l’unique bouton du niveau est une « pressure plate » (en haut). Lorsqu’un tiny ou un bloc de glace arrive dessus, la porte connectée par le fil rouge se referme. Elle ne peut pas se réouvrir. En résumé : n’appuyez pas sur la pressure plate, sinon c’est foutu.

Mon avis pas spatio-temporel

J’ai décidé de tester ce que donnerait le pouvoir du tiny rouge mentionné dans mon précédent article : lorsque le tiny est sur la même ligne ou la même colonne qu’un fruit, il se dirige automatiquement vers lui, y compris durant un déplacement.

Si il y a un obstacle entre le fruit et le tiny (par exemple un bloc de glace), le pouvoir ne s’applique pas et le tiny ne change pas de direction.

L’utilisation de ce pouvoir constitue l’astuce principale de ce niveau. Tout le reste autour, c’est de la broderie. Je vous laisse trouver la solution.

Je n’ai pas pris le temps de déterminer tous les cas particuliers de ce nouveau pouvoir du tiny rouge. Que se passe-t-il s’il y a un élément « stop » ou une flèche ou un trou, entre le tiny rouge et le fruit ? Est-ce que ce pouvoir s’applique lorsque le chemin pour aller jusqu’au fruit passe par un téléporteur ? Autant de questions que je n’ai pas réglées.

Les brouillons qui me restent

Tout en vrac. De toutes façons j’ai oublié le fonctionnement de ces niveaux, et même si ils étaient finis.

Un soutien (à mon petit niveau) pour ExoHydraX, une jolie jeune femme qui s’est fait bannir de Twitch, sans raison spécifique, comme d’habitude. Réseau sociaux dictatoriaux de merde (auquel je me soumets pourtant avec le sourire).

Et pour finir une superbe maquette de l’interface. (C’est dégueu et tout pensé à l’arrache).

Lâchez vos comm’ d’encouragement

Les différents succès que j’avais promis peuvent toujours être débloqués par des commentaires, dans cet article ou dans l’article initial. N’hésitez pas !!