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 !!

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.