Demonstration des fonctonalités d'un jeu en 2D mené par Linked Data
April 3, 2023
Dans les postes précedentes de cette blog j’ai examiné des possibilités élargies des jeux décentralisés soutenu par le web sémantique. Depuis 2021 je expérimentais avec l’utilisation du Linked Data à permettre les jeux à partager le contenu et les fonctionalités en manière décentralisée. L’objectif à long terme est de construire un jeu en commun, avec qui je peux publier un personnage, où d’un rencontrer, puis de l’utiliser dans un jeux des cartes et trouver que en interagissant avec lui les expériences l’ont changé, également dans n’importe quel jeu dans la féderation. Il s’agit donc d’un écosystème de jeux qui s’appuient les uns sur les autres et choisissent de partager des éléments entre eux.
Dans cette démonstration j’ai créé un jeu assez simple - c’est un city-builder qui permettre le joueur d’emplacer les bâtiments et les personnages en utilisant les cartes. Puis le joueur peut transformer un de les personnages en Vampire, grace à une carte en Linked Data qui était lu et suit par le jeu. Voilà en GIF :
La partie vraiment cool de cela c’est que la carte jouée était directé éntirement en Linked Data. Ça signifie qu’elle aurait pu être découvert avec n’importe quel serveur - un serveur qui fournissent une tradition des vampires, par exemple, ou qui serve la tanière d’un vampire rencontré dans un autre jeu. Le jeu a trouvé la carte et l’action « Morsure Vampirique » du serveur et s’a adapté à ses instructions, et cela l’a permis à soutenir les fonctionalités des vampires sans avoir été explicitement développé avec ces actifs ou caractéristiques à l’esprit.
L’action « Morsure Vampirique » est disponible en JSON et décrit un action qui transforme le cible en vampire. L’exemple inclus les informations basics comme une description et une image, et les données indiquant que il pourrait être jouer en carte via le couple propriété-valeur implementsSpecification: playableCard
. Via playTarget
il indique que seulement les personnages sont les cibles valides, et avec patchesOnComplete
il défine comment changer l’état du monde afin d’effectuer l’action (comment transformer le cible en vampire).
Les prochains étapes seraient d’ajouter des restrictions aux actions via Shapes en Linked Data (ça veut dire de définir l’état qui doit être présent pour un action d’être valide - à faire une morsure vampirique l’acteur doit être lui-même une vampire). En plus les conséquences doivent être séparés de l’action donc ils peuvent varier avec la contexte (par exemple si un vampire boit le sang d’un mort ou d’un mourant, alors c’est le vampire lui-même qui meurt).
Le code est tous disponible open-source sur GitHub. Le jeu est un demo appellé Sim Polis, et le plupart de la spécification est défini de les vocabulaires Multi-User-Domain. Pour avoir de la contexte dans les vocabulaires veuillez lire les issues et le Wiki, et n’hesitez pas de me contacter.