PORTFOLIO
Overlay - JDR Cybernimos

Apercu général

VIDEO - Présentation de l'overlay JDR Cybernimos

Depuis peu, on joue (sporadiquement) à un jeu de rôle dans un univers qui mélange cyberpunk et animaux anthropomorphes. Nous sommes quatre personnages aux talents divers (bagarre, investigation, pilotage, hacking) à la recherche de petits boulots qui tournent souvent mal.

On joue le jeu directement sur une feuille de calcul Google partagée pour gérer les personnages et les jets de dés, ensuite un script permet de récuperer certaines infos et de les afficher sur l’overlay.

Tout cela m’a beaucoup inspiré et je me suis lancé dans pas mal d’expérimentations

CREDITS

  • Illustration des personnages : Randallflagg & Kobal
  • Création du JDR et de l’univers : Kobal

Maquette et prototypes

Je ne pensais pas que ca irait si loin au début, je m’étais juste contenté de faire quelques tests sur Figma, essentiellement des bandeaux avec les personnages et les noms.

Les premiers tests graphiques sur Figma

IMAGE - Les premiers tests graphiques sur Figma, des bandeaux pour les personnages

Bandeau de bas d’écran avec avatar et infos du personnage

IMAGE - Bandeau de bas d’écran avec avatar et infos du personnage

Une fois passée la première session de jeu, j’ai travaillé sur les premières maquettes de l’overlay : les scènes, les divers éléments d’overlays et les mises en forme des personnages.

Je suis passé par pas mal d’allers et retours pour trouver des idées, des couleurs satisfaisantes et des “gimmicks” graphiques. J’ai abandonné l’idée des mettre les webcams, ça prend trop de place et ça n’apporte pas grand chose.

Premiere maquette de l’overlay

IMAGE - Une première maquette de l’overlay, qui devait faire apparaitre à l’origine la webcam du joueur ou de la joueuse

Le maquettage final sur Figma

IMAGE - Sur Figma, les maquettes des différentes scènes, ainsi que les différents personnages

En ce qui concerne l’overlay, quasiment tous les éléments graphiques (hormis les illustrations) ont été codés en HTML/CSS/JS, et NodeCG sert d’intermédiaire pour gérer et rassembler tout ça.

Parsing des données

Côté pratique, le jeu est un “homebrew” (un jeu fait-maison), plus ou moins adapté avec le système de jeu “Powered By the Apocalypse” (PBtA), qui se joue principalement avec 2d6.

On joue sur un Google Spreadsheet partagé mis en forme par Randallflagg, où chaque personnage est détaillé (pv, armure, statistiques, compétences…) et un script permet de gérer les jets de dés.

Feuille de calcul google avec infos des personnages

IMAGE - Capture d’écran de la feuille de calcul avec les feuilles de personnage et les jets de dés

J’ai lié le Google Spreadsheet à l’habillage sur OBS avec l’intérmédiaire de NodeCG, un outil que j’utilise souvent. Cela me permet de gérer un script maison qui, grâce à l’API de Google Spreadsheet, permet d’aller chercher les valeurs de certaines cellules de la feuille de calcul.

  • Pour chaque personnage :

    • PV maximum et PV actuel (pour ensuite générer une barre de vie sur l’overlay)
    • Niveau d’armure
    • Le niveau des stats de base : Force, Dextérité, Intelligence, Sagesse et Bagout
    • Le nombre de 🥕Carotcoins (la monnaie du jeu)
  • Pour les jets de dés :

    • La date et l’heure du dernier lancer : pour être sûr d’afficher le dernier joué
    • Le personnage qui a fait l’action
    • La compétence engagée par le jet : Force, Voler dans les plumes, Hacker…
    • La formule du jet de dés avec le modificateur : 2d6 +2, 2d6 -1
    • Le calcul du jet : 🎲5 🎲1 🎲0 +2
    • Le total du jet de dés

Tableur Google et affichage des jets de dés sur l’overlay

IMAGE - A gauche, une partie du tableur Google avec une fiche de personnage et le script de jet de dés. A droite sur OBS, les détails du jets de dés s’affichent sur l’overlay.

Etant donné les quotas de requêtes limités avec l’API de Google Spreadsheet, je limite à une requête de données toutes les 2 secondes environ. Ca manque un peu de réactivité pour afficher les jets de dés mais ça passe.

Focus sur chaque personnage

Les scènes “FOCUS” servent à montrer un personnage en particulier.

Chaque scène ici est composé du personnage en version ‘holographique” (avec des shaders et des effets) ainsi qu’un écran qui récapitule ses infos : nom, points de vie, armure, statistiques directement mis à jour depuis la feuille de calcul Google.

Une scène Focus d’un personnage

IMAGE - Une scène Focus, à gauche le personnage, à droite un écran qui récapitule toutes ses infos

Les shaders, que ce soit via du code ou les plugins OBS, c’est rigolo et joli mais c’est gourmand en ressources. Au final j’ai du drastiquement réduire les shaders pour éviter de mettre le PC à genoux ¯\(ツ)/¯

Dans mon jargon, j’appelle ça des scènes “FOCUS” car c’est le mot-clé que je mets systématiquement au début du nom de scène sur OBS (c’est très important).

La liste des scènes sur OBS

IMAGE - La liste des scènes sur OBS

J’utilise toujours le même préfixe pour ce genre de scène, car j’ai codé un script sur NodeCG qui me repère et liste toutes les scènes qui commencent par ce mot-clé. Ainsi, dès que je change d’overlay de JDR, hop la liste se met à jour et je peux m’en servir comme télécommande.

VIDEO - Affichage des chaînes Focus via NodeCG

Le Codec

J’appelle ici “Codec”, le module qui permet d’afficher deux personnage à l’écran.

Je me sers de cette scène pour des phases de jeu où l’on se concentre sur une discussion de deux personnages ou pour illustrer des conversations à distance. Chaque personnage dispose également de sa propre barre de volume (faite avec le plugin Waveform).

Le codec sur l’overlay

IMAGE - Le codec sur l'overlay

Côté technique, j’ai codé un petit panneau d’administration sur NodeCG pour pouvoir ensuite décider de qui je place dans la colonne de gauche et qui je place dans la colonne de droite.

VIDEO - Affichage des personnages via le module Codec de NodeCG

Pour la référence, je me suis directement inspiré du codec des Metal Gear Solid.

Le codec de Metal Gear Solid

IMAGE - Le codec tel qu’il est représenté dans Metal Gear Solid

Affichage des jets de dés

Une grosse part du travail a été de savoir comment techniquement et graphiquement, j’allais afficher les résultats des jets de dés faits sur la feuille Google vers l’overlay.

Affichage des jets de dés sur l’overlay

IMAGE - Affichage des jets de dés sur l’overlay

A chaque nouveau jet de dés sur la feuille de calcul Google, toutes les informations sont consignés dans une feuille à part. Le script va ensuite piocher les informations de la dernière entrée.

Les logs des jets de dés sur le Google Spreadsheet

IMAGE - Les logs des jets de dés sur le Google Spreadsheet

L’animation est encore un peu bancale et ca manque de réactivité mais ca fonctionne plutôt bien.

VIDEO - Les jets de dés (à gauche), déclenchent l’affichage sur l’overlay (à droite)

Cybernews

Durant la seconde session, l’idée est venue avec le MJ de faire un bulletin d’informations afin de donner des petits indices sur les intrigues aux joueurs et aux joueuses en cours de partie.

L’écran de télévision d’Inter Terrier News qui affiche les informations en cours

IMAGE - L’écran de télévision d’Inter Terrier News qui affiche les informations en cours

Ainsi j’ai repris et réadapté une petite animation en GSAP comme intro de chaîne de télé (Inter Terrier News), puis codé un faux écran de télé avec les divers éléments en place.

J’ai pas mal travaillé sur les bandeaux du bas et l’affichage des diverses illustrations. J’ai pour cela (encore) crée un module avec les divers bandeaux à diffuser à la volée.

VIDEO - L’introduction avec le logo de la chaine de télé, le module à droite permet de changer le bandeau et l’illustration

La scène principale

La scène principale qui récapitule les infos pour les personnages

IMAGE - La scène principale qui récapitule les infos pour les personnages

Enfin, la scène principale qui récapitule les infos des personnages. On y retrouve les hologrammes des personnages et j’ai décliné pour chacun et chacun-e un mini écran de statistiques avec uniquement PV, Armure et Argent.

Indicateur de voix

Je ne suis pas particulièrement fan des overlays de JDR qui affichent les caméras des joueurs et des joueuses. Souvent, ca prend beaucoup de place, ca n’apporte pas grand chose ou ça rend l’habillage assez rigide.

Ici, j’ai voulu tout de même intégrer des indicateurs vocaux pour indiquer quand telle ou telle personne parle.

Un personnage avec un indicateur vocal qui s’affiche lors de la prise de parole

IMAGE - Un personnage avec un indicateur vocal qui s’affiche lors de la prise de parole

Tout d’abord, j’ai crée un salon vocal commun sur VDO Ninja, mais à partir duquel je peux récupérer les pistes voix de chacun et chacune séparément grâce à des liens personnalisés.

Dans une scène dédiée sur OBS, je rassemble chaque voix dans une source “Navigateur Internet”, ce qui me permet de les avoir séparément dans le mélangeur audio.

Une scène OBS qui rassemble toutes les sources voix

IMAGE - Une scène OBS qui rassemble toutes les sources voix.

Le mélangeur audio avec toutes les voix

IMAGE - Le mélangeur audio avec toutes les voix

Je joue ensuite avec deux plugins : Avanced Scene Switcher et Waveform.

  • Avec Advanced Scene Switcher, un plugin d’automatisation sur OBS, j’ai crée et j’applique une macro qui s’applique pour chaque voix :

Si le volume du micro est supérieur à un certain seuil pendant au moins 0.5s, affiche l’icône de l’indicateur vocal, sinon masque-le

La micro d’affichage de l’indicateur vocal sur Advanced Scene Switcher

IMAGE - La micro d’affichage de l’indicateur vocal sur Advanced Scene Switcher

VIDEO - L’indicateur vocal s’affiche et se masque selon la voix de la personne

  • Avec le plugin Waveform, j’ai crée une forme d’onde audio par personne et que j’active selon la personne qui parle dans la scène “Codec”.

En choisissant d’afficher un personnage avec le module NodeCG, cela affiche donc l’avatar, le nom et la waveform associée.

Une barre de volume apparait quand le personnage parle

IMAGE - Une barre de volume apparait quand le personnage parle sur le codec