0

World of Gwans, ta vie devient un RPG

1. TLDR : concept

2. Proof of concept

2.1 Pré-requis

  • Un serveur domotique Home Assistant.
  • Des périphériques connectés ⌚ capables de remonter au serveur domotique des données physiologiques et une position GPS (un smartphone, une montre, une bague…)
  • Quelques connaissances en PHP, Jinja et AJAX.
  • Et le plus compliqué : des amis prêts à jouer le jeu 🫶 !

2.2 Avertissements

  • ⚠️ Le choix des partenaires de jeu est primordial car le jeu est intrinsèquement hardcore : il s’agit de partager sa télémétrie corporelle et sa position GPS en continu avec les autres joueurs.
  • Si vous avez des antécédents d’épilepsie et de convulsions, vous pouvez parfaitement jouer. C’est autre chose qui vous tuera in game 😉
  • [HARDCORE] Le jeu ne s’arrête jamais. Il n’y a ni pause ni sauvegarde. Chaque joueur a une seule vie : la sienne.
  • Les mécanismes quotidiens du jeu deviennent vite addictifs et indispensables si on veut survivre in game.
  • Enfin, il y a un véritable effet Risk version plateau : vous allez vous fâcher avec vos amis ! On vous aura prévenus.

2.3 Comment ça marche en 3 étapes

  1. HACK     Le serveur domotique Home Assistant est détourné de sa fonction de monitoring du domicile pour récupérer les positions GPS et les données physiologiques (rythmes cardiaque et respiratoire, lever et coucher, heures de sommeil, nombre de pas réalisés…) des joueurs. Il récupère aussi d’autres capteurs qui peuvent être utiles au contexte du jeu en temps réel (positions GPS, météo locale, capteurs de présence…). Tous les capteurs nécessaires au jeu sont rafraichis et exportés toutes les 30 secondes, et l’intégralité de l’historique est conservé.


  2. API REST     La domotique exporte ensuite les dernières valeurs de chaque joueur vers un serveur web qui sera plus à même de les afficher proprement. D’abord, on instancie les fichiers de sortie dans Home Assistant avec l’intégration FILE qui permet d’exporter des capteurs vers un fichier (1er choix, “Configurer un service de notifications“) ou l’inverse (2ème choix, lire des valeurs à partir d’un fichier) :

L’intégration FILE de Home Assistant

Instanciation des fichiers de sortie

Enfin, un script Home Assistant exporte les capteurs météo et le bestiaire vers le fichier “environnement” instancié précédemment :

Script HA

Il ne reste plus au serveur web qu’à lire le fichier, parser les valeurs et les afficher avec PHP. Sans trop d’efforts, ça a quand même plus de gueule que l’interface native de Home Assistant :

Récupération des données du joueur sur le serveur Apache en AJAX et affichage en PHP

Enfin, on fignole côté Apache : l’interface graphique est surchargée à la Diablo + une API REST et un mini-frontend JS rafraichissent la page web uniquement avec les données JSON modifiées depuis la domotique.

Profil du joueur Nico sur le serveur Apache

  3. WEBVIEW     Enfin, une simple webView app compilée en APK est envoyée à chaque joueur qui peut consulter le jeu et son profil en temps réel sur son smartphone.

Le jeu peut commencer !

APK pour Android

3. Le jeu

World of Gwans est un RPG persistant basé sur la vie réelle et un survival heroic-fantasy en PvE (joueurs contre environnement), où les joueurs peuvent interagir, s’aider et éventuellement s’opposer dans certaines circonstances. Il se joue dans la vraie vie, sans rien faire de particulier, 24h/24 et sans pause.

L’objectif est avant tout de survivre ! A chaque jour suffit sa peine. Ensuite éventuellement, être le premier au classement des joueurs les plus riches (marque d’investissement fort dans le jeu), ou obtenir les titres ou haut faits les plus rares. Un joueur pourrait aussi jouer un alignement chaotique et vouer ses journées à faire échouer les quêtes journalières des autres joueurs (c’est assez fun à jouer).

Les joueurs ont des caractéristiques inspirées de D&D (points de vie, charisme, expérience, taux d’alcoolémie…) qui peuvent être améliorées, un inventaire, des armes, des compétences uniques et un familier (avec ses compétences).

Certaines actions de la vie réelle ont un coût en pièces d’or (manger, boire, stationner longtemps dans un centre commercial, d’autres activités…). D’autres actions auront des effets bénéfiques (ou pas) sur le joueur : dormir plus de 7h regénère un maximum de points de vie, boire de l’alcool fait monter le taux d’alcoolémie et le charisme jusqu’à une certaine limite, et engager un combat contre des gobelins quand on est fatigué et/ou saoul devient alors très périlleux…

Chaque jour, le donneur de quête Deckard Casagrande attribue à chaque joueur une mission unique : une occasion de gagner de l’expérience, de l’or et d’autres récompenses !

Des monstres issus d’un bestiaire sont susceptibles d’attaquer les joueurs en fonction de leurs actions et de leurs positions GPS (certaines forêts sont peu recommandables, surtout de nuit).

Chaque joueur bénéficie d’un scenario contextuel personnel et customisé, et partage avec les autres joueurs un scenario commun :

Génération du scénario du jour, personnalisé pour chaque joueur

Scénario commun (dans la domo)

Le jeu est éminemment truffé de easter-eggs et de private jokes (en particulier sur les quêtes journalières, les haut faits et les titres honorifiques).

Et l’IA dans tout ça ?

Toutes les statistiques du jeu sont calculées côté Home Assistant, par des automatisations ou des scripts (déclenchements dès qu’une zone géographique est traversée, ou à une certaine heure, ou périodiquement, ou encore en aléatoire…)

Tous les combats sont gérés de la même façon (scripts et automatisations dans la domotique)

Toutes les données de jeu et les historiques des joueurs sont stockés en base de données MySQL dans la domotique pour que Apache n’ait qu’à afficher des nombres sans se fatiguer.

La plupart des automatisations et scripts de Home Assistant nécessaires au jeu font appel à un agent IA customisé (le fameux chantre et chroniqueur Deckard Casagrande) pour personnaliser à la sauce IA chaque déclenchement. Par exemple, voici un extrait du script HA qui, à minuit, demande à l’agent IA d’analyser l’historique des joueurs pour s’assurer que la quête journalière a bien été réalisée :

Un conversation.process avec Deckard Casagrande

Et notre agent IA qui s’occupe de tout :

Deckard Casagrande, personnage non joueur géré par l’IA

Enfin l’IA incarnée par Deckard Casagrande a aussi pour rôle de générer des tonnes d’éléments narratifs. En particulier pour les résumés des combats automatiques (qui sont assez drôles à lire sur un smartphone quand on a été attaqué) mais surtout pour les Odyssées des joueurs (ces énormes bouquins qui retracent intégralement, minute par minute, les journées des joueurs, voir plus bas).

3.1 Les joueurs et PNJ (personnages non joueurs)

3.2 Les inventaires des joueurs

Les joueurs disposent de deux armes qu’ils peuvent choisir à leur gré, un familier qui les suit, des pièces d’or pour subvenir aux besoins du quotidien + des cristaux rares (autre monnaie), des potions de vie et philtres d’amour (pour remonter points de vie et points de charisme) et des marques de Deckard Casagrande (obtenues uniquement en récompenses de quêtes).

3.3 Les règles du jeu

3.4 Les lancers de dés

Les dés en question, parce que vous le valez bien !

3.5 Les compétences des joueurs (acquises et raciales)

Chaque joueur dispose de compétences particulières qui lui sont propres.

Compétences des joueurs in game

Les compétences peuvent être améliorées pour davantage de bénéfices. Les compétences raciales sont acquises d’office en fonction de la race du joueur. Quelques compétences :

3.6 Les quêtes journalières

Les quêtes journalières sont une composante essentielle du jeu. Elles sont instanciées à minuit pour chaque joueur par l’IA (incarnée par le PNJ donneur de quêtes Deckard Casagrande).

Le joueur a 24 heures pour réaliser sa quête (ou ne pas la faire foirer). A minuit le lendemain, Deckard Casagrande vérifie si la quête journalière est validée en consultant les historiques d’actions des joueurs pour la journée écoulée.

Les quêtes journalières de nos deux héros

Certaines quêtes journalières sont particulièrement compliquées à réaliser. Un joueur peut faire échouer la quête journalière d’un autre joueur, ou parier qu’il n’y arrivera pas : la quête journalière est alors coinchée !

3.7 Les hauts faits et titres honorifiques

3.8 Le bestiaire et les combats

La qualité et le nombre des troupes est fonction du lieu où se trouve le joueur, de l’heure, de la météo et d’autres critères secrets (on est souvent attaqués la nuit en forêt ou dans les massifs montagneux par exemple).

Lorsqu’un joueur est attaqué, le combat est géré par l’IA de bout en bout (aux dés D6 à D20 façon D&D) et le compte-rendu du combat est envoyé au joueur (quelques lignes).

L’issue d’un combat est soit la mort du joueur, soit sa survie avec les loots récupérés sur ses assaillants morts (en général de l’or et/ou des potions/philtres).

Certains adversaires du bestiaire ont des compétences particulières, qu’ils peuvent utiliser en plus de leurs attaques physiques ou magiques. Exemple : voler des potions ou de la nourriture, empoisonner, fuir sans être anéanti…

3.9 Les familiers

Les joueurs peuvent adopter un animal de compagnie, appelé familier. Il faut le nourrir. Les bénéfices et compétences d’un familier s’ajoutent à celle du joueur. Pour ne pas faire de jaloux, les PNJ aussi peuvent avoir un familier, même si ça ne sert à rien.

Les familiers Yuka, Astro, Zolta et Phantom !

3.10 Les Odyssées

Le jeu garde une trace de tous les événements des joueurs (je veux dire, jusqu’au moindre battement de coeur) et rédige, chaque jour, avec un style lyrique de chantre et chroniqueur du moyen-âge, un compte-rendu de la journée de chaque joueur :

Ces comptes-rendus quotidiens sont ensuite compilés dans un recueil inspiré des “Livres dont vous êtes le héros” et agrémentés d’images générées à l’IA en rapport avec les actions quotidiennes des joueurs :

Un vrai livre dont vous êtes les héros

Couverture de L’odyssée de Nico, entièrement rédigée à l’IA et signée Deckard Casagrande, chantre et chroniqueur au long cours

Et à la fin, donc ?

3.12 Et pour gagner alors ?

L’idée n’est pas vraiment de gagner, mais plutôt de vivre une expérience originale. En comme personne n’aime perdre ou mourir dans un jeu (surtout en hardcore avec une seule vie), des mécanismes ont été mis en place, en amont dans la domo, pour que l’IA s’adapte toujours à la situation personnelle de chaque joueur et ne les tue jamais ! Théoriquement, on ne peut pas mourir de la main de l’IA. La seule façon garantie de mourir est de ne rien faire de ses journées : c’est gravement sanctionné par les algorithmes.

Le système de règles dynamiques

Concrètement, même si l’IA dispose d’une grande liberté pour les intrigues, les quêtes journalières ou les combats, un joueur en difficulté sera chouchouté et se verra par exemple attribuer des quêtes journalières plus faciles (comme faire 4000 pas dans la journée) et, bizarrement, gagnera presque tous ses combats en one-shot et sans blessure, tandis que ses victimes auront les poches remplies d’or et de potions de santé ! On est sympa hein 😉

Toutefois, l’IA pimente involontairement la sauce avec son côté imprévisible et un joueur n’est jamais à l’abri d’une décision farfelue de l’IA : elle peut décréter que lors du dernier combat, vous avez été désarmé ou que votre lame a été brisée. Vous n’avez plus d’arme à partir de maintenant !

3.13 Bonus

3.14 Remerciements

Vous pouvez évaluer cet article en un clic. Garanti sans gluten. Merci !
(Evaluations : 0 / Moyenne : 0)

Piregwan

Dompteur d'IA, machine prolifique à pisser du code de merde non commenté et pas opti depuis 1986, maître des traditions / maître-brasseur / grand malade à WoW, chasseur de gardiens à Ingress de 2014 à 2019, nerd sapiosexuel asocial monomaniaque et misanthrope, amateur de piments 🌶️ au delà de 300.000 Scoville grâce à Stéphane Pécaut et de pizzas maison 🍕 grâce à Marloin, j'apprécie particulièrement les 3C (les chats 😼, le code et les choux de Bruxelles 🥦) & la philosophie du CCC.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *