3 points par GN⁺ 2024-01-30 | 1 commentaires | Partager sur WhatsApp
  • Boardzilla est un framework qui permet de jouer à des jeux de société et d’en développer dans le navigateur, avec l’objectif d’abaisser la barrière à l’entrée de la création de jeux de société numériques
  • Le flux visé est que les développeurs puissent exprimer les règles du jeu, tandis que les joueurs consultent les choix possibles via une interface simple
  • Parmi les jeux d’exemple publiés figurent 7 Wonders Duel, Cursed, Dyngus Day, 27Panic, Hearts, Hex, Power Grid, Skirma et Stunt Kites
  • Le nombre de joueurs pris en charge varie selon le jeu, de 1 à 4 joueurs ; 7 Wonders Duel, Hex et Skirma se jouent à 2, tandis que Hearts se joue à 4
  • Les utilisateurs qui souhaitent créer leur propre jeu de société peuvent commencer le développement via la documentation fournie et la page de présentation

Ce que propose Boardzilla

  • Boardzilla est un environnement web conçu pour faciliter la création de jeux de société numériques
  • Il permet de jouer et de développer des jeux de société directement dans le navigateur
  • Il facilite l’expression des règles du jeu et présente aux joueurs les choix possibles via une interface simple

Exemples de jeux jouables

Comment commencer à développer

1 commentaires

 
GN⁺ 2024-01-30
Avis de Hacker News
  • Je ne pense pas que le message le plus visible de la landing page devrait être un appel à “rejoindre Discord”.
    Les exemples et les liens vers le code source/la documentation devraient apparaître en premier. Sur ce genre de projet, quand “rejoindre Discord” est trop mis en avant, personnellement, ça me donne plutôt envie de prendre mes distances. Je ne pense pas être le seul.

    • Pareil pour moi.
      Je déteste vraiment Discord, sauf comme plateforme de communication éphémère entre amis. Pourtant, les gens ont tendance à vouloir l’utiliser comme plateforme principale non seulement pour les questions de support, mais même pour la documentation. La recherche y est mauvaise et ce n’est pas indexé par les moteurs de recherche, donc quand il faut trouver une solution, c’est vraiment le pire.
  • Ça a l’air bien. Le périmètre fonctionnel est large, donc il doit y avoir beaucoup de pièces mobiles, et ça a dû représenter pas mal de travail. En tout cas, c’est appréciable d’avoir un moteur de jeu axé sur les jeux de plateau, sans se limiter uniquement au rendu.
    Cela dit, pour quelqu’un qui a rendu des jeux de cartes et de dés jouables en ligne en pur HTML/JavaScript, je ne vois pas encore très bien comment reproduire la même chose avec ce système. D’après la documentation, les cartes sont prises en charge, et les abstractions semblent assez générales pour convenir à toutes sortes de jeux, mais un tutoriel pas à pas aiderait beaucoup. Je comprends pourquoi des abstractions comme Actions, Flows, selections, conditions et prompts ont été choisies, mais sans les voir assemblées concrètement, j’ai du mal à sentir où intervenir pour modifier ce que je voudrais changer. Sans tutoriel, personnellement, je pense que j’aurais du mal à avancer beaucoup.

    • Dans le contexte des jeux de plateau physiques, le cœur semble reposer sur deux grandes classes principales. Il s’agit de gérer des objets qui sont en main ou qui se déplacent entre les joueurs (Player), et qui sont posés sur des espaces (Space) de la table : autrement dit des Piece.
      Les cartes et les dés sont définis en héritant de Piece, les joueurs en héritant de Player, et on peut aussi représenter une entité comme un donneur qui gère le paquet sous forme de Player. Ensuite, il faut réfléchir à la façon de disposer sur le plateau les instances de Space nécessaires aux règles. Les règles se trouvent dans une instance de la classe Game, qui contient le concept d’actions, sous forme d’instances de la classe Action. Ces actions prennent des paramètres qui définissent le prompt utilisateur, les conditions d’exécution légales et l’effet de l’exécution. En dehors de ça, il y a pas mal de fonctions utilitaires attendues pour trouver des pièces, les comparer, etc., et le reste dépend de la logique du jeu. À voir les exemples, il existe aussi des fonctions pour filtrer les Space et les Piece, ce qui semble permettre de créer rapidement la logique d’UI.
    • J’aimerais étoffer la documentation, mais cela prend beaucoup de temps. Je comprends qu’un jeu qui paraît simple puisse devenir intimidant quand il faut le transposer dans une API formalisée. Je ne sais pas si cela peut aider, mais j’ai enregistré une vidéo où je construis une partie d’un jeu.
      https://docs.boardzilla.io/game/creating-a-game
  • Il vaut mieux éviter de mettre *Zilla dans le nom du projet. Les détenteurs des droits de Godzilla sont connus pour traquer activement ceux qui veulent utiliser le suffixe “Zilla”. Mozilla aussi en a tiré la leçon il y a longtemps et a dû conclure un accord séparé.

    • Je n’en avais absolument aucune idée. J’ai aussi quelques autres noms de domaine assez corrects en réserve, donc il va peut-être falloir que je tranche maintenant.
    • Je ne vois pas en quoi cela aurait le moindre rapport avec Godzilla ou ses droits d’auteur. On est loin d’un gigantesque monstre nucléaire.
      Le seul procès de marque que Toho ait perdu concernait une entreprise de sacs-poubelle appelée “trashzilla”, notamment parce que cela ne représentait pas un risque pour les intérêts commerciaux de Toho. Édit : je n’avais pas vu le logo. Là, oui, ça peut clairement poser problème.
    • C’est assez surprenant. Je ne savais pas que les droits sur *Zilla étaient appliqués de façon aussi agressive.
    • Meta aussi fait activement valoir ses droits de marque contre les déposants de marques qui se terminent par “book”.
    • Revzilla et Partzilla ont eux aussi connu un long litige autour de noms en *zilla.
  • Vous utilisez TypeScript+CSS. J’espérais une prise en charge de Python côté serveur pour la logique de jeu. Le timing est bon : les développeurs et éditeurs qui utilisaient BGA s’inquiètent du modèle économique d’Asmodee.
    La stack BGA Studio, c’est JS/CSS + PHP (client et serveur) + MySQL [0]
    Yucata.de, c’est JS + HTML + .NET 4.5 côté serveur [1]
    TTS utilisait Lua ; en regardant, ça m’a semblé particulier et limité. Ce n’est même pas orienté objet, et je ne comprends pas pourquoi choisir un langage non orienté objet pour des jeux de société. La revue de sites/frameworks de 2021 « VassalEngine: Survey of other boardgame software » est également utile [2]
    Ce serait vraiment bien de pouvoir l’intégrer à Python côté serveur.
    [0]: https://boardgamearena.com/doc/Studio
    [1]: https://www.yucata.de/en/FAQ#t17
    [2]: https://forum.vassalengine.org/t/survey-of-other-boardgame-s...

    • Sur « pourquoi choisir un langage non orienté objet pour des jeux de société », Lua a longtemps été un choix assez populaire chez les développeurs de jeux. L’une des raisons est qu’il est facile d’embarquer ce langage de script dans un jeu.
      On peut faire de la programmation orientée objet sans classes [0]. Et il est excessif d’attendre d’un développeur qu’il porte et maintienne tout un projet en Python simplement parce qu’on ne veut pas apprendre un nouveau langage de programmation.
      [0]: https://en.wikipedia.org/wiki/Lua_(programming_language)#Obj...
    • Si le serveur n’est pas en Python, c’est parce que dans boardzilla, on ne représente pas le jeu deux fois, une fois pour le client et une fois pour le serveur. À la place, on l’écrit une seule fois en TypeScript, et ce code est réellement utilisé des deux côtés, serveur et client. Le client se comporte comme un serveur, simplement sans les informations cachées.
    • Je suis curieux de savoir pourquoi vous tenez autant à Python pour le backend. TypeScript s’exécute côté backend et sur divers frontends, donc c’est un choix assez logique. On peut l’utiliser non seulement sur le web, mais aussi dans des moteurs de jeu comme Unity. Et son système de types est meilleur que celui de Python.
    • Je me demande quel est le modèle économique d’Asmodee, et quel rapport il a avec BGA.
    • TypeScript en soi ne me pose pas problème, mais la partie React m’inquiète. Pour un frontend de jeu, ne voudrait-on pas quelque chose de plus léger que React, comme Svelte, Marko ou Solid ?
  • Très bien. J’ai énormément de prototypes de jeux de société que j’aimerais un jour transformer en jeux web, et j’avais donc commencé à écrire quelques fonctions de bibliothèque génériques pour la création de jeux de société. Je me suis arrêté à la génération de grilles, aux lancers de dés personnalisés, au tirage de cartes, aux fonctions de tournoi, à des tests montrant plusieurs scénarios et quelques autres choses, mais avec les autres projets en parallèle, je n’aurai probablement pas le temps d’en faire quelque chose de sérieux. Il faudra que je voie à quel point cette bibliothèque est facile à utiliser.
    Je suis d’accord pour dire qu’apprendre la plateforme BGA est assez pénible. 1) On est lié à la plateforme et on ne peut pas mettre son jeu ailleurs, 2) tout est en PHP, ce que je n’ai plus vraiment envie d’utiliser, et 3) la documentation est éparpillée à plusieurs endroits, avec même des présentations PowerPoint.

  • Si vous cherchez quelque chose de plus bas niveau, je peux recommander boardgame.io.
    [1] https://boardgame.io/

    • boardgame.io mérite aussi largement d’être recommandé. Nicolo est vraiment aimable et très serviable. Un autre projet à regarder : https://boardgamelab.app/
  • Ce domaine est vraiment difficile. Pour réussir, je pense qu’il faut soit avoir un jeu qui devient immédiatement un hit, soit fournir un énorme effort communautaire pour attirer des joueurs tous les jours, toute l’année.
    J’ai tenté ma chance avec https://acos.games aux débuts, quand il existait très peu d’alternatives à BGA. Je continue encore à le développer en arrière-plan quand je m’ennuie. Le plus gros échec a été l’UI/UX. Les gens ne s’intéressent pas vraiment à la belle technologie cachée derrière.

    • Ça a l’air extrêmement bien réalisé. La documentation est aussi très bien écrite. Je n’en ai pas l’usage tout de suite, mais rien que lire la doc pour voir ce qui est possible était intéressant. Les fonctionnalités de gestion d’état et de relecture de partie ont l’air chouettes. Je construis moi aussi ma propre collection de jeux, et rien que penser à rendre le système assez flexible pour que d’autres puissent l’intégrer me semble être un gros chantier. Le travail fourni est impressionnant.
  • Ça a l’air très sympa, et félicitations pour le lancement.
    Ce peut être excellent pour le prototypage, mais pour créer une alternative à BGA, il faudra obtenir l’autorisation des éditeurs pour implémenter/déployer les jeux. Comme BGA est énorme et appartient à Asmodee, ça risque de ne pas être simple. J’espère me tromper.

    • Je ne suis pas juriste, mais il semble que tant qu’on n’utilise pas les mêmes images de cartes/plateau ou qu’on ne copie pas le livret de règles mot pour mot, les mécaniques de jeu ne sont pas protégées par le droit d’auteur.
      « En résumé, les noms et logos peuvent être protégés par des marques, et les illustrations sont protégées par le droit d’auteur (le plateau lui-même peut aussi l’être en tant qu’œuvre graphique). Les mécaniques, procédures et règles ne peuvent pas être protégées par le droit d’auteur. C’est pourquoi il existe des clones de Monopoly/Scrabble. »
      https://www.reddit.com/r/gamedev/comments/10f2nov/comment/j4...
      Le commentaire renvoie ici à cette vidéo YouTube.
      https://www.youtube.com/watch?v=iZQJQYqhAgY
    • Je suis tout à fait d’accord pour dire qu’Asmodee a, de fait, empêché de vrais concurrents d’entrer sur le marché. Plutôt que d’affronter BGA de front, j’ai en tête l’idée de regarder du côté de jeux plus modestes d’éditeurs indépendants. Je ne sais pas à quel point c’est réalisable, mais je ne sais pas vraiment quoi faire d’autre non plus.
  • Ça a vraiment l’air super. J’ai hâte de l’essayer moi-même
    Je suis content de voir qu’il existe une commande de flux everyPlayer qui permet des actions simultanées. C’est une fonctionnalité qui manquait dans les autres frameworks de jeux de plateau que j’ai essayés
    [1] : https://docs.boardzilla.io/game/flow#everyplayer

  • Tous les jeux d’exemple génèrent une erreur
    Object.hasOwn is not a function. (In 'Object.hasOwn(e,A.from)', 'Object.hasOwn' is undefined)
    La trace de pile est la suivante
    su@https://www.boardzilla.io/build/_shared/chunk-ZEYFFM3P.js:16:114536
    Fs@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:9:128279
    Ch@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11:180657
    Il semble qu’il faille ajouter un polyfill

    • J’ai ajouté un polyfill. Ce serait bien de me dire si c’est corrigé
    • J’ajouterai bientôt un polyfill