Idées & Tutos

Du dialogue de jeu vidéo à la BD

Du dialogue de jeu vidéo à la BD

Mardi, 23 Juin 2026

Un projet plus "informatique" mais toujours artistique !

J’ai récemment eu envie de conserver des dialogues de Moonstone Island. Et une simple série de captures d’écran s’est finalement transformée en un projet créatif mêlant détourage automatique, illustrations personnalisées et mise en page sous forme de BD ! Ou quand l'inspiration vient de là où on ne l'attend pas.

Moonstone Island est une vraie pépite du jeu indépendant. Il combine tellement d'éléments qu'on pourrait croire à une recette improbable et c'est pourtant un savant mélange d'exploration d'îles flottantes, collection de créatures, combats de cartes au tour par tour, récolte, jardinage, artisanat, décoration de maison et relations avec les habitants ! Développé par le Studio Supersoft, le résultat est incroyablement cohérent et terriblement addictif.
Personnellement j'ai adoré, et j'y ai passé bien plus d'heures que prévu. Il est passé dans la liste de mes préférés ! Vous pouvez y jouer sur Windows, Mac, Linux (via Steam ou GOG) et Nintendo Switch (eShop et versions physiques éditées par Super Rare Games).

L'idée de départ

J'ai découvert au fil du jeu qu'on pouvait développer ses liens avec les habitants. J'ai commencé avec Tobin, le pêcheur, et j'ai réalisé des captures des dialogues. Allez savoir pourquoi : encore des fichiers à stocker... Bref je me suis vite rendue compte que ça tournait aux rancards mignons.

Et la présentation des dialogues m'a tellement faite penser à une BD, que mon cerveau de créatrice est parti en vrille jusqu'à l'étape de comment en faire la reliure 😅

Bulle de texte issue du jeu Moonstone Island

Le détourage automatique

C'était le plus gros obstacle. J’ai utilisé ChatGPT pour m’aider à créer un script Python permettant d’automatiser cette étape. Je ne suis pas développeuse. Je me suis contentée de décrire le résultat souhaité et l’IA m’a aidée à construire l’outil. Descriptif succinct :

  1. Création du "masque" : détourage manuel d'une capture sous Microsoft Paint (bords blancs à garder, intérieur noir à rendre transparent), élargissement des bords pour palier aux approximations des contours de mes captures d'écran.
  2. Enregistrement d'une capture de référence de la même taille.
  3. Élaboration d'un script par ia : coordonnées d'un point de référence (bande violette) sur l'image de référence, appliquées au "masque" (image détourée manuellement). Puis le script trouve les coordonnées sur la capture à détourer et pose le masque dessus.

Voici pour illustration : le masque et le script python.

"masque" utilisé par le script python
from pathlib import Path
from PIL import Image
import numpy as np

DOSSIER = Path.home() / "Desktop" / "Moonstone_detourage"

captures_dir = DOSSIER / "captures"
sorties_dir = DOSSIER / "sorties"
masque_path = DOSSIER / "masque.png"
reference_path = DOSSIER / "reference.png"

sorties_dir.mkdir(exist_ok=True)

def trouver_bandeau_violet(image):
    """Trouve le coin supérieur gauche du bandeau violet du nom."""
    img = image.convert("RGB")
    arr = np.array(img)

    r = arr[:, :, 0].astype(int)
    g = arr[:, :, 1].astype(int)
    b = arr[:, :, 2].astype(int)

    violet = (
        (r > 80) &
        (r < 170) &
        (g > 20) &
        (g < 100) &
        (b > 170) &
        (b < 255) &
        (b > r + 40) &
        (r > g + 30)
    )

    ys, xs = np.where(violet)

    if len(xs) == 0:
        raise ValueError("Impossible de trouver le bandeau violet.")

    x1 = int(np.percentile(xs, 1))
    y1 = int(np.percentile(ys, 1))

    return x1, y1

reference = Image.open(reference_path).convert("RGB")
masque = Image.open(masque_path).convert("RGB")

if reference.size != masque.size:
    raise ValueError(
        f"reference.png et masque.png doivent avoir la même taille. "
        f"Référence : {reference.size}, masque : {masque.size}"
    )

ref_repere_x, ref_repere_y = trouver_bandeau_violet(reference)

masque_arr = np.array(masque)

# Noir = on garde l'image originale
# Blanc = on remplace par du blanc
zone_a_garder = np.mean(masque_arr[:, :, :3], axis=2) < 128

for fichier in captures_dir.iterdir():
    if fichier.suffix.lower() not in [".png", ".jpg", ".jpeg"]:
        continue

    image = Image.open(fichier).convert("RGBA")
    img_arr = np.array(image)

    repere_x, repere_y = trouver_bandeau_violet(image)

    position_masque_x = repere_x - ref_repere_x
    position_masque_y = repere_y - ref_repere_y

    hauteur, largeur = img_arr.shape[:2]

    resultat = np.zeros((hauteur, largeur, 4), dtype=np.uint8)

    # Fond transparent
    resultat[:, :, :3] = 255
    resultat[:, :, 3] = 0

    masque_hauteur, masque_largeur = zone_a_garder.shape

    for my in range(masque_hauteur):
        y = position_masque_y + my
        if y < 0 or y >= hauteur:
            continue

        for mx in range(masque_largeur):
            x = position_masque_x + mx
            if x < 0 or x >= largeur:
                continue

            if zone_a_garder[my, mx]:
                resultat[y, x] = img_arr[y, x]

    sortie = sorties_dir / f"{fichier.stem}_detoure.png"
    Image.fromarray(resultat).save(sortie)

    print(f"OK : {fichier.name} → {sortie.name}")

print("Terminé.")

Mise en page

Dans Canva, sur un document A5 portrait. Et pourquoi faire simple quand on peut faire compliqué ? Alors pour plus d'harmonie visuelle j'ai retourné en miroir une bulle de conversation sur deux (en masquant et remplaçant le texte qui était à l'envers). J'ai également regroupé les lignes de dialogues correspondant à la même expression du personnage.

Et au moment d'intégrer les réponses qu'on choisi pour continuer la conversation : poser une simple fenêtre de choix aurait dénoté avec l'ensemble.

J'ai donc créé quelques bustes de mon personnage par ia pour rendre l'ensemble plus naturel.

Résultat

Extrait de dialogues de Moonstone Island, BD Fan art

Hé BAM ! Prend-toi ça Tobin 😂

Vous pouvez télécharger le fichier de Moonstone Island, BD fan art ici :

Tobin, chapitre 3 à la source chaude

Pas de commentaire encore
Recherche