Démarrage d’un gros projet complètement à l’arrache !

Ce que j’avais prévu

1 : Faire les fonds de tiroir de mes activités créatives, packager proprement les trucs qui méritent de l’être, même ceux qui ne sont pas finis. C’est ainsi que vous avez eu Blarg sur github, Kawax, Pru-pra-prok, l’archivage de tous les articles du magazine 42, L’animation du tunnel pour l’UTBM, une grosse série d’article concernant mon dernier changement de crémerie, et tout un tas d’autres machins.

2 : Terminer en packageant mes très vieux programmes Pascal que j’écrivais au lycée et à l’UTBM, et les mettre à disposition ici.

3 : Écrire un article de blog émouvant dans lequel j’explique que je me sens prêt à démarrer un gros projet créatif. Expliquer que ça fait un peu peur, que jusqu’à maintenant, le peu de projets que j’ai réussi à mener jusqu’au bout étaient soit de taille moyenne, soit une succession de mini-projets (par exemple, tous les articles pour le magazine 42). Ajouter qu’il est fort possible que j’abandonne au bout de deux mois pour cause de découragement honteux, ou pour cause de découverte d’une toute nouvelle idée que je croirais encore meilleure. Terminer l’article en demandant à mes lecteurtrices, avec des trémolos dans la voix, quelques commentaires de soutien pour ce nouveau projet, même si je ne l’ai pas du tout décrit pour le moment. Insister sur le fait qu’un soutien inconditionnel de leur part serait une magnifique démonstration de fidélité, rappeler (toujours avec des trémolos) que ce blog existe depuis plus de 10 ans et que certains d’entre vous me suivent depuis plusieurs années.

4 : Espérer deux ou trois commentaires de soutien, pas plus, pour ne pas être déçu.

5 : Travailler pendant un mois ou deux sur ce projet secret.

6 : Écrire un nouvel article, montrer la première version du projet même si elle est bancale. Expliquer que c’est une plate-forme de création de mini-jeux web en 2D sur une grille. Annoncer qu’il suffit de savoir coder un peu en python pour créer des premières choses toutes simples. Ajouter qu’il n’y a pas besoin d’installer de logiciel ou de s’inscrire (mais il faut quand même un compte github pour partager ses jeux). Arguer du fait que, même si la plate-forme est simple, sa souplesse permettrait de créer des jeux très variés tels que des Match 3, un Laser Tank, voire des jeux de stratégie comme Advance Wars. Préciser tout de même qu’il ne sera jamais possible de placer des objets à cheval entre deux cases de la grille, que c’est un choix conscient destiné à assurer la simplicité. Donner l’exemple de Zelda sur la NES, qui ne serait pas recréable sur cette plate-forme puisque le personnage peut se trouver entre deux cases. Terminer sur un ton faussement humble en disant que je me suis inspiré de PuzzleScript, Drod et même ZZT.

7 : Écrire une doc, pas forcément complète ni bien peaufinée, mais qui expliquerait au minimum comment créer et partager des jeux. Espérer que quelques personnes commencent à s’y mettre, même si c’est rustique et pas du tout ergonomique dans un premier temps.

8 : Améliorer encore le projet pendant quelques mois.

9 : Participer au Ludum Dare (une compétition de création de jeu en un week-end). Ne pas s’attendre à un glorieux classement, mais utiliser cette participation pour montrer la plate-forme au plus de gens possible.

10 : Éventuellement, créer une vidéo ou un stream sur twitch montrant la genèse du jeu créé pour le Ludum Dare. Utiliser cette vidéo comme tutoriel et comme démo de ce qu’il est possible de faire.

12 : Donner rendez-vous aux prochains Ludum Dare, tous les 6 mois. Indiquer que l’on profitera de ces compétitions pour s’imposer des dead lines fixes, qui devraient apporter la motivation nécessaire pour produire régulièrement de nouvelles versions de la plate-forme.

13 : Continuer comme ça sur plusieurs années, et voir jusqu’où ça nous mène.

Pour l’instant, ça mène ici.

Ce qu’il s’est réellement passé

1 : Réaliser qu’il n’y a plus que quelques mois avant les grandes vacances, et qu’on aimerait avoir une première version du projet à ce moment là.

2 : Laisser en plan le packaging des vieux jeux Pascal.

3 : Réaliser une première version ultra à l’arrache de la plate-forme, afin de pouvoir la montrer aux potes qu’on retrouvera pendant les vacances.

4 : Ne pas oser parler de ce projet aux potes en question, parce que l’occasion ne s’est pas présentée et que j’ai toujours l’impression de passer pour un mendiant quand je quémande de l’attention aux gens, même quand c’est mes potes.

5 : Continuer de bosser sur le projet, pester intérieurement que, comme toujours, ça avance trèèès lentement.

6 : Au passage, créer une chaîne twitch et s’amuser à streamer des Clash of Code, même si ça n’a absolument rien à voir avec la choucroute.

7 : Réaliser que le prochain Ludum Dare est dans à peine quinze jours, que la plate-forme est à peu près utilisable mais pas du tout documentée, qu’on n’aura pas forcément le temps de la documenter d’ici là, et qu’on n’a rien annoncé pour l’instant.

8 : Jeter à la gueule de ses lecteurtrices le lien vers la plate-forme : http://squarity.fr.

9 : Leur jeter un autre lien à la gueule, en croyant que ce sera suffisant pour comprendre comment créer et partager des jeux : squarity.fr#fetchez_githubgist_darkrecher/bd49300f9c480b789a70315155571e9d/raw/gamecode.txt

10 : Espérer que l’on arrivera à faire quelque chose de pas trop pourri pour le Ludum Dare.

11 : Continuer comme ça sur plusieurs années, et voir jusqu’où ça nous mène.

Pour conclure, inévitablement

12 : Expliquer que le mot « squarity » signifierait « la carrétitude », puisque les jeux sont créés sur un quadrillage en 2D. Ajouter que le fait d’aimer les carrés n’empêche pas d’aimer aussi les courbes. Pour illustrer ce propos, insérer une image de Myesha Boulton :

13 : S’endormir sur son clavier parce qu’il est tard.

11 réponses à “Démarrage d’un gros projet complètement à l’arrache !

  1. Lien vers la mini-vidéo de Myesha Boulton :
    https: //www. instagram.com/p/ByWB27xgmit/

    Allez, lâchez vos comms. Soyez pas chiens, quoi.

  2. Bonne idée quoi que « déjà vue ».
    Je n’aime pas trop les carrés, et d’ailleurs pourquoi des carrés…

    J’ai préféré l’espèce de truc qui scannait le contenu de l’écran et agissait dessus ; rappelle nous donc le nom (lien) de cette merveille) ; je présume que c’est plus compliqué, mais tellement plus original; le même paramétrable serait un top.
    Passe le bonjour à ta corporate team.

  3. Coucou roro !

    Pourrais-tu préciser ce que tu entends par « déjà vue » ?

    Les deux petits jeux d’exemple sont effectivement du déja vue. Il en existe des tas de ce genre, bien plus évolué que ça. Le jeu h2o est même un pompage explicite d’un jeu existant.

    Mais le système de création de jeu, c’est un peu moins du déjà vu. Il existe bien entendu beaucoup de logiciels de création de jeu (The games factory, Stencyl, Scratch…). Mais un système qui permet de créer et partager directement des jeux en python, dans ton navigateur web, j’ai encore jamais vu ça. À part PuzzleScript, mais celui-ci utilise un langage de prog spécifique que je trouve très mal fichu.

    Je reconnais que pour l’instant, c’est très rustique. Nous améliorerons ça au fur et à mesure.

    Concernant mes scanners d’écran, tu dois certainement parler d’un de ces deux là :
    https://github.com/darkrecher/Anti-Idle-Math-Solver
    https://github.com/darkrecher/Anti-Idle-Fish-Streaker

    Paramétrer un truc comme ça me semblerait très compliqué. En fait le paramétrage, c’est le code, tout simplement.

    La corporate team va bien. On a fait un espèce de séminaire y’a pas longtemps, mais personne n’était bourré. Tant pis.

    À plus !

  4. Bah tu veux faire un moteur de jeu (pour débutants); le partage peut se faire autrement sans grands frais.
    J’ai été voir tes liensJ’ai pris le zip: « idle Math solver »
    Et je trouve: – « Installez python (chez moi c’est la version 2.6.6)
    – Installez la librairie wx (chez moi : 2.8.12.1) ».
    Il me semble qu’en Python on peut faire des exécutables qui embarquent un Python et ce qu’il faut pour.Je présume que c’est le format « Git Hub » qui dépeçaille comme ça.
    Mais le « Read Me » est un modèle du genre; malgré ta grande folie tu es un maître pour présenter expliquer les choses. Chapeau!Alors oui, un truc comme ça, y a du potentiel(trading-dong et autre..).
    Le paramètrage porterait sur les choses à détecter et les actions à accomplir; c’est du gâteau, mais très sec et très dur, comme tu aime.
    Tu donne vraiment envie de se mettre au Python; mais moi, je dois être
    réfractaire, au bout de cinq lignes je ne sais plus qui est qui et qui fait quoi, ceci dit ce langage est génial (une vraie tronçonneuse de code, mais surtout de cerveau).
    Quand je suis arrivé aux « héritages » j’ai vu les dunes du désert et j’ai compris que j’allais crever; un bédouin m’a conseillé de retourner vers la ville; ce que j’ai fait, c’était y a longtemps.
    En fait, le pense que je n’aime pas trop les jeux, c’est un dévoiement de l’informatique on doit faire faire des trucs plus « intelligents » à un pc; mais ce n’est que mon avis.
    Lien pour lien: http://libertybasic.fr/forum/topic-457+ebauche-de-petanque.php
    Les modules, c’est bien, mais comment on sait qu’il y a un module qui fait ci ou ça, existe t-il quelque part une liste de tous les modules existants dans le monde ?

  5. Salut, j’me suis un peu amusé avec Squarity, j’aime bien le concept. J’aime fait une adaptation de Pacman trouvable sur https://gitlab.com/10kbis/pacman_squarity

    Le jeu a encore des petits bugs mais ça devrait être suffisant que pour le finir

    J’ai fait une liste des choses que j’ai vu a améliorer (plus ou moins triée par importance). Certaines sont peut être déjà implémentée, j’ai remarqué que le projet sur github a des commits récents. Certains points sont des questions qui me sont venues à l’esprit et qui mériteraient des éclaircissement dans une future doc

    – Il faut ABSOLUMENT des messages d’erreur, on perd vite beaucoup de temps à chercher les typos etc

    – Bug: La page scroll quand on appuie sur haut/bas (firefox)

    – Pouvoir fournir le tileset à partir de python (et le modifié au cours du jeu) et pas un json statique.

    – Pouvoir dev depuis son IDE, pas pratique du tout de le faire dans le browser
    Solution: fetch les ressources (python, tileset) depuis un serveur web
    Pendant le développement du jeu, le dev peut ‘python -m http.server’ dans le dossier de son jeu

    – Pour la distribution vers les joueurs: Fetch depuis un repo git et pouvoir encoder dans l’url le repo
    Ex: https://squarity.pythonanywhere.com?git=gitlab.com/10kbis/pacman_squarity

    – Pouvoir diviser le code en plusieurs fichiers python

    – Afficher des images à la place/au dessus de la zone de jeu (pratique pour le menu, le gameover, « cinématique »). L’idéal serait de pouvoir les empiler les unes sur les autres de la manière que les tiles

    – Expliquer que le code est compilé en JS avec Brython et qu’il tourne dans le browser, la différence avec la stdlib, …

    – La taille get_size() peut-elle changer ou doit elle rester fixe ?

    – Comment faire des timers et forcer un redraw ?

    – La map est entièrement redessinée à chaque fois qu’une action est effectuée par le player ?

    – Un système de score

    – Pouvoir ajouter des autres boutons que les flèches directionnelles

    – Avoir des interactions avec la souris

    – Abstraire encore plus: Avoir un moyen de représenter les tiles de la map séparément des agents qui se déplacent.
    De cette manière pas besoin de s’embêter avec des .append() et .remove() sur les tiles.
    Et du coup on peut se focus plus sur la logique du jeu.

    – Brython n’a pas de module random, c’est vraiment fort limitant pour les jeux.
    Du coup j’ai du importer Math de la lib javascript pour générer des nombres aléatoires.
    Sans savoir que c’est du brython et chercher pourquoi l’import de random ne fonctionne pas, c’est impossible de savoir comment faire
    L’idéal serait peut être de réimplémenter une version minimale du module random

    – La zone de jeu est très petite, avoir un système de zoom (dans l’idéal contrôlable par le joueur)

    – Support pour des dialogues avec choix à faire pour l’utilisateur

    – input() permet de faire rentrer du texte à l’utilisateur mais c’est pas très user-friendly

    – Un éditeur pour créer les maps à partir d’un tileset

  6. Coucou !

    Roro, je te réponds très rapidement. Désolé, je ne m’attarde pas, parce que j’ai une réponse bien plus longue à faire au commentaire de 10kbis qui est arrivé juste après le tien.

    Merci pour le compliment sur la qualité de mes docs. C’est effectivement quelque chose que j’essaie de faire bien, ne serait-ce que pour moi-même, pour les relire 5 ans plus tard.

    J’ai absolument rien de prévu concernant le paramétrage de mon truc d’automatisation d’actions. Je crois qu’il existe déjà des logiciels qui font ça, beaucoup mieux que moi.

    Les jeux, c’est pas forcément intelligent pour le PC (qui pourrait effectivement calculer des choses plus élaborées), mais ça peut rendre intelligent l’humain qui y joue. Et lui donner envie de comprendre comment est fait le jeu. Et lui donner envie de faire d’autres jeux. etc.

    Pour les modules :
    – un gros résumé ici de la lib standard python ici : http://sametmax.com/tres-grand-listing-des-libs-standard-partie-les-plus-utiles-en-python/
    – un gros résumé des autres libs ici : http://sametmax.com/tres-grand-listing-des-libs-tierce-partie-les-plus-utiles-en-python/
    – la liste exhaustive est ici, mais ça prendrait des millions d’années de tout lire : https://pypi.org/

    À plus !!

  7. Et maintenant, réponse à 10kbis.

    Déjà, un énorme merci de t’intéresser à Squarity, et d’avoir passé du temps à créer un premier jeu. Ça me fait vraiment très plaisir, et c’est exactement de ça dont j’ai besoin, pour trouver le courage de continuer à développer ce projet. J’espère que tu repasseras de temps en temps pour voir comment ça évolue !

    Un autre merci pour avoir listé toutes ces propositions d’améliorations. Tu es le tout premier à le faire (si je ne tiens pas compte de mes enfants qui veulent que « le magicien puisse lancer des boules de feu »), et ça mérite des réponses point par point. C’est parti !

    – Il faut ABSOLUMENT des messages d’erreur, on perd vite beaucoup de temps à chercher les typos etc

    C’est prévu, dans un futur que j’espère le plus proche possible. J’espère que j’arriverais à catcher tous les messages d’erreur et tous les types de plantage possibles.

    – Bug: La page scroll quand on appuie sur haut/bas (firefox)

    Corrigé mais pas encore mis en prod. Ce sera disponible d’ici ce week-end. Je ferais obligatoirement une mise en prod pour ce week-end, car ce sera la compétition du Ludum Dare.

    – Pouvoir fournir le tileset à partir de python (et le modifié au cours du jeu) et pas un json statique.

    Pas prévu, mais j’y réfléchirais.
    Dans un futur lointain, j’aimerais ajouter des effets spéciaux : éclairage, moteur de particules, shaders, …

    – Pouvoir dev depuis son IDE, pas pratique du tout de le faire dans le browser
    Solution: fetch les ressources (python, tileset) depuis un serveur web
    Pendant le développement du jeu, le dev peut ‘python -m http.server’ dans le dossier de son jeu

    Solution intermédiaire, prévue à une date indéterminée mais que j’espère assez proche : trouver une extension de navigateur qui synchronise le texte dans le browser avec un fichier sur le disque, que l’on édite depuis son IDE.
    Solution à très long terme : un IDE intégré dans le navigateur, comme Jupyter par exemple.

    – Pour la distribution vers les joueurs: Fetch depuis un repo git et pouvoir encoder dans l’url le repo
    Ex: https://squarity.pythonanywhere.com?git=gitlab.com/10kbis/pacman_squarity

    C’est déjà faisable, mais pas encore documenté. Pour la peine, voici un lien direct vers ton superbe pacman, que j’ai mis dans un github-gist :
    https://squarity.pythonanywhere.com/index.html#fetchez_githubgist_darkrecher/b5240940356e3bb7e59c8a2522c279d9/raw/pacman-10kbis.txt
    Attention, l’API va un peu changer d’ici ce week-end (les noms des fonctions). Mais je mettrais à jour le gist à ce moment là.

    – Pouvoir diviser le code en plusieurs fichiers python

    Pas prévu. Ce sera envisageable (dans un futur indéterminé), lorsqu’il sera possible de se créer un compte, d’enregistrer ses jeux, de forker ceux des autres, etc.

    – Afficher des images à la place/au dessus de la zone de jeu (pratique pour le menu, le gameover, « cinématique »). L’idéal serait de pouvoir les empiler les unes sur les autres de la manière que les tiles

    Prévu dans un futur indéterminé. Ça restera simple, car je ne veux pas me péter le cerveau à recoder tout un système de menu qui se dessine dans un canvas HTML.

    – Expliquer que le code est compilé en JS avec Brython et qu’il tourne dans le browser, la différence avec la stdlib, …

    Prévu dans un futur proche. La doc est en cours de rédaction, ici : https://github.com/darkrecher/squarity-doc/blob/master/user_manual/main_page.md

    – La taille get_size() peut-elle changer ou doit elle rester fixe ?

    Fixe pour l’instant. J’ai prévu de le rendre configurable dans un futur que j’espère proche.

    – Comment faire des timers et forcer un redraw ?

    Fait et prêt à être mis en prod. Ça arrivera d’ici ce week-end. Et la doc viendra en suivant.

    – La map est entièrement redessinée à chaque fois qu’une action est effectuée par le player ?

    Oui. Et je pense que je garderais ça comme ça. Sauf quand j’en serais à mettre des effets spéciaux.

    – Un système de score

    Prévu dans un futur très lointain et très indéterminé, quand on pourra se créer un compte. Il y aura des scores, des badges, etc.
    Le problème c’est qu’il faudra répliquer la logique du jeu sur le serveur, pour vérifier que les gens ne trichent pas. Et vu que la logique du jeu est définie par les utilisateurs, ça peut devenir un gros casse-tête : gestion des ressources du serveur, watchdog, protection contre les injections de code, …

    – Pouvoir ajouter des autres boutons que les flèches directionnelles

    Fait et prêt à être mis en prod. Ça arrivera d’ici ce week-end.

    – Avoir des interactions avec la souris

    Prévu dans un futur indéterminé. De toutes façons c’est indispensable pour faire des jeux qui seront jouables correctement sur téléphone mobile.

    – Abstraire encore plus: Avoir un moyen de représenter les tiles de la map séparément des agents qui se déplacent.
    De cette manière pas besoin de s’embêter avec des .append() et .remove() sur les tiles.
    Et du coup on peut se focus plus sur la logique du jeu.

    Prévu, je vais créer des fonctions et des classes d’outils, pour simplifier tout ça. Mais pour l’instant je n’y ai pas encore assez réfléchi.

    – Brython n’a pas de module random, c’est vraiment fort limitant pour les jeux.
    Du coup j’ai du importer Math de la lib javascript pour générer des nombres aléatoires.
    Sans savoir que c’est du brython et chercher pourquoi l’import de random ne fonctionne pas, c’est impossible de savoir comment faire
    L’idéal serait peut être de réimplémenter une version minimale du module random

    Bien joué le coup de l’import javascript. Je savais même pas que c’était possible !
    Brython possède une stdlib, reprenant le plus possible de la stdlib python (module random, module math, …).
    J’ai essayé de la mettre dans Squarity, mais ça a fait planter le site. Je vais me pencher sur la question.
    Bref : prévu, dans un futur que j’espère le plus proche possible.

    – La zone de jeu est très petite, avoir un système de zoom (dans l’idéal contrôlable par le joueur)

    Prévu dans un futur indéterminé, mais il faudra que ça reste simple. Et je pense que je laisserai le contrôle du zoom par le code, et non pas par le joueur.

    – Support pour des dialogues avec choix à faire pour l’utilisateur

    J’ai ajouté une petite fenêtre de log. Ça arrivera d’ici ce week-end.
    Pour les dialogues sélectionnables, rien de prévu pour l’instant. Mais je vais y réfléchir.
    Le but de Squarity est de permettre de raconter des histoires. Or dans les histoires il y a des dialogues.

    – input() permet de faire rentrer du texte à l’utilisateur mais c’est pas très user-friendly

    Ouaouh, je savais même pas qu’il y avait ça dans Brython !
    J’ai rien prévu de plus sur ce sujet pour l’instant.

    – Un éditeur pour créer les maps à partir d’un tileset

    Prévu dans un futur indéterminé.
    Je compte également permettre de définir les maps et niveaux du jeu via le json. Ça permet de séparer la logique du jeu et le level design, pour ajouter une manière supplémentaire d’utiliser Squarity : quelqu’un qui ne sait ni coder, ni dessiner, mais qui a de l’imagination, et qui va créer des niveaux inédits pour des jeux fait pas d’autres personnes.

    Bon, il est 3h du matin, je vais me coucher. Encore un très grand merci, et à ce week-end pour le Ludum Dare !

  8. Une question: Est-il très compliqué de remplacer les carrés par de l’image « photographique » (rochers murs Google earth…ect), ainsi que les « personnages » ?

  9. Ça devrait être faisable, mais j’ai pas encore testé.

    Tu indiques un tileset avec des grandes photos dedans (mais elles doivent toutes avoir la même taille, et être carrés).

    Dans la config json, au lieu de mettre la valeur 16 pour « tilesize », tu indiques une valeur plus grande : la taille de tes photos en pixels.

    Ensuite, tu définis tes objets avec les bonnes coordonnées dans l’image, puis le code de ton jeu.

    Par contre, même si tes photos sont très grandes, ça va quand même s’afficher en petit dans le jeu.

    L’aire de jeu prend à peu près 50% de l’écran, et affiche 20×14 cases. Du coup, forcément, c’est petit, et les photos s’afficheront en très réduit.

    Faut que je rende configurable la taille en cases de l’aire de jeu. Ça viendra très vite, je l’espère.

  10. Mise en prod terminée !!!

    Vous pouvez retourner sur http://squarity.fr . Si rien ne semble avoir changé, faites un Ctrl-F5.

    10kbis, j’ai réadapté le code de ton pacman pour qu’il fonctionne avec la nouvelle version. C’est le même lien qu’avant (voir mon commentaire d’il y a quelques jours). Ça marche, par contre ce n’est plus tout à fait le même code.

    J’ai l’impression qu’il y a un petit bug dans ton jeu, des fois ça plante. (Ça le faisait déjà avec l’ancienne version). J’essayerais de corriger ça si j’ai le temps.

    Je suis maintenant fin prêt pour le Ludum Dare qui arrive ce week-end !

    Amusez-vous !

  11. Pingback: Ludum Dare 47 post-codem | Réchèr : le Grand Tout

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s