JeuWeb - Crée ton jeu par navigateur
Générateur de background pour PNJs - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Générateur de background pour PNJs (/showthread.php?tid=2402)

Pages : 1 2


Générateur de background pour PNJs - Roworll - 12-02-2008

Dans le cadre de mon jeu, je cherche à mettre en place un système qui me permet de définir un background pour les PNJs. Evidemment, ce background doit se présenter sous une forme la plus littéraire possible.
J'avais déjà réalisé par le passé quelques petits générateurs bien limités qui se bornaient à tirer quelques phrases préfabriquées dans un ordre défini. Je cherche maintenant à aller un peu plus loin avec quelque chose de plus complet.

Prenons le cas des phrases présentant le personnage.
J'ai pour le moment plusieurs modèles.

- XXX a grandi sur [Lieux] [Qualificatif] [Emplacement]. Il/Elle [Relation parentale].
- XXX a vu le jour sur [Lieux] [Qualificatif] [Emplacement]. Il/Elle [Relation parentale].
- XXX est originaire d'[Lieux] [Qualificatif] [Emplacement]. Il/Elle [Relation parentale].
- Originaire d'[Lieux] [Qualificatif] [Emplacement] XXX [Relation parentale]
- Arrivé(e) tout droit d'[Lieux] [Qualificatif] [Emplacement] XXX [Relation parentale]
- Né(e) sur [Lieux] [Qualificatif] [Emplacement] XXX [Relation parentale]

[Lieux] peut correspondre à
- une planète
- un amas d'astéroïdes
- une station spatiale
...

[Qualificatif]
- agricole
- minier
- industriel
- pénitencier
...

Certains qualificatifs ne sont applicables qu'à certains lieux (pas d'amas d'astéroïdes agricoles par exemple)

[Emplacement] est composé de 3 parties.
Une intro
- situé(e) dans le/la/l'
- situé(e) au coeur du/de la/de l'
- gravitant dans le/la/l'
...

un lieu
- noyau central
- ceinture extérieure
- ceinture intérieure
- extrème bordure
...

un qualificatif pour le lieu
- de la galaxie
- des mondes habités
- de la zone de quarantaine
...
Même chose pour [relations parentales] et ainsi de suite.

Mon soucis est de réussir à obtenir (de manière élégante si possible) un générateur potable, grammaticalement correct (accords et construction des phrases) et cohérent.
Les quelques essais que j'ai fait sont d'une horrible complexité au niveau de l'organisation des données. Cela utilise une architecture en arbre pour obtenir des choses pas trop absurdes mais le résultat n'est pas asssez satisfaisant à mon goût (sans compter le fait que la gestion des accords masculin/féminin est un enfer : Un personnage abandonné sur Une planète dévastée avec Un père décédé et Une mère disparue). L'un d'entre vous aurait-il une idée pour m'aider à faire quelque chose de viable ?


RE: Générateur de background pour PNJs - Plume - 12-02-2008

Bonjour, bonjour.

Tout d'abord, un petit détail certes, quand tu nommes un lieu, il faut réussir à déterminer si d' ou de. C'est déjà tendu .. Une reconnaissance sur la première lettre :roll:
Je n'ai personnellement pas d'expérience sur les générateurs quels qu'ils soient mais je pense que générer une 'IA' parlante ça ne peut qu'être complexe Smile

Cordialement,


RE: Générateur de background pour PNJs - Roworll - 12-02-2008

Houla. bien loin de moi l'idée d'une IA parlante. Je cherche juste a construire des phrases selon un modèle prédéfini.
Ces histoires de de/du/d' sont déjà gérés (avec plus ou moins de succès) par mon arborescence.
Par exemple, pour la partie [Emplacement] j'ai trois "structures grammaticales" pour le lieu
- noyau central
- ceinture extérieure/intérieure
- extrème bordure

Selon cette structure, je détermine si je dois utiliser la, le ou l' dans le morceau de phrase précédent pour faire la liaison entre l'intro et le lieux


RE: Générateur de background pour PNJs - NicoMSEvent - 12-02-2008

ça me rappelle un truc que j'ai vu et qui s'appelait l'insultotron (générateur d'insultes aléatoires), qui se rapproche fortement (point du vue structure) de ce que tu souhaite faire, mais uniquement codé en JS. Je pense que pour chaque mot, tu dois stocker (dans un flag par exemple) si c'est un masculin/féminin, et accorder (ou stocker les 2 formes) du mot qui précède (ou qui suit) en fonction de ça.


RE: Générateur de background pour PNJs - Loetheri - 12-02-2008

LexLxUs a écrit :Je n'ai personnellement pas d'expérience sur les générateurs quels qu'ils soient mais je pense que générer une 'IA' parlante ça ne peut qu'être complexe Smile

tu te trompes ;-) Il existe une "IA" parlante depuis au moins les années 60 qui fonctionne très bien (Lola ? je ne sais plus ^^).

A priori, je serais plutôt pour utiliser un arbre. Mais peut-être pas sur la totalité. Je vais penser à ton générateur ;-)


RE: Générateur de background pour PNJs - nemesis_elite - 12-02-2008

Coucou, Smile

Tient ce sujet tombe à pic. Je compte également faire un système du même genre Smile
Je n'y ai pas encore vraiment songé, mais c'est une très bonne occasion pour commencer a y réfléchir.

NemeSiS_eliTe


RE: Générateur de background pour PNJs - keke - 12-02-2008

Coucou,

ton problème s'assimile à mes logs joueurs, et mes résultats de combat ... et c'est bien tendu ^^.

Pour la notion de de/d', ou simplement un/une/du, tu peux essayer différentes approches dont l'une est simplement de rajouter à ta table lieu/objet, une colonne article singulier et un article pluriel.

Je m'y suis assez mal pris à l'époque et je ne compte pas tout changer dans mon code, mais si je devais le refaire, c'est ainsi que je procèderais.

Par ailleurs, j'avais vu à l'époque ou j'étais encore joueur, un 'diablo like' en mode texte tour par tour (en anglais) du nom de ANGBAND, où ce type de problème devait inévitablement arriver, et pourtant je ne l'ai jamais rencontré. Le jeu contenait un background aussi pour chaque personnage, il il fallait un certain temps pour qu'il y ai de la redite à la création de son personnage.
Le source de ce fameux jeu doit être disponible sur le net et je pense même (merci google image) que des versions plus graphiques du jeu sont disponibles ...

kéké (tiens, mais magdales ressemble à Angband ! Hallucinant ! Ha non ... j'ai tout de même mes spécificités et mes bugs ^^)


RE: Générateur de background pour PNJs - Plume - 12-02-2008

Loetheri a écrit :
LexLxUs a écrit :Je n'ai personnellement pas d'expérience sur les générateurs quels qu'ils soient mais je pense que générer une 'IA' parlante ça ne peut qu'être complexe Smile

tu te trompes ;-) Il existe une "IA" parlante depuis au moins les années 60 qui fonctionne très bien (Lola ? je ne sais plus ^^).

A priori, je serais plutôt pour utiliser un arbre. Mais peut-être pas sur la totalité. Je vais penser à ton générateur ;-)

Que ce soit en 60 ou pas, cela ne veut pas dire que ce n'est pas complexe, si ?

Je vais sûrement suivre ce sujet avec assiduité, voir ce que ça donne Smile

Cordialement,


RE: Générateur de background pour PNJs - Loetheri - 13-02-2008

LexLxUs a écrit :
Loetheri a écrit :
LexLxUs a écrit :Je n'ai personnellement pas d'expérience sur les générateurs quels qu'ils soient mais je pense que générer une 'IA' parlante ça ne peut qu'être complexe Smile

tu te trompes ;-) Il existe une "IA" parlante depuis au moins les années 60 qui fonctionne très bien (Lola ? je ne sais plus ^^).

A priori, je serais plutôt pour utiliser un arbre. Mais peut-être pas sur la totalité. Je vais penser à ton générateur ;-)

Que ce soit en 60 ou pas, cela ne veut pas dire que ce n'est pas complexe, si ?

Je vais sûrement suivre ce sujet avec assiduité, voir ce que ça donne Smile

Cordialement,

Cette intelligence artificielle est relativement courte. Je crois qu'elle tient en moins de 1000 lignes de codes (au départ). Son nom est ELIZA (j'ai retrouvé ^^).
Le fait que cela ait été créé dans les années 60, veut dire qu'il y a beaucoup de chances que cela ne soit pas si complexe ni très long ;-)


RE: Générateur de background pour PNJs - Roworll - 13-02-2008

J'ai avancé un peu sur le sujet et j'ai tenté de faire un découpage en bloc.
Je vous rappelle que l'idée est de construire un background (ou un récit) en suivant un modèle pré-établi.

Voici pour commencer le bloc d'intro
[Image: intro.jpg]

On y voit la structure de plusieurs phrases tournées différemment.
La première partie utilise deux phrases pour associer l'origine du personnage et sa relation avec ses parents, la deuxième partie met tout en une phrase.
(nom) et (pronom) sont des constantes défini par les attributs du personnage (son nom et son sexe).
les valeurs entre {} représentent un bloc, un élément de la phrase dont le contenu sera déterminé aléatoirement
un [] placé dans un bloc indique avec quel élément le contenu du bloc doit s'accorder
{location [planete]} indique que le contenu du bloc résultat doit s'accorder en fonction du contenu du bloc {planete}.

{Planete} est un bloc avec une arborescence.
Chaque résultat entraine donne le choix entre des qualificatifs spécifiques pour éviter des incohérences.
[Image: planete.jpg]

L'indication [F]/[M]/... détermine la règle d'accord avec les blocs dépendants (masculin, féminin, etc.)

Le {Location} introduit plusieurs règles.
[Image: location.jpg]

{accord} note que le mot doit s'accorder avec le bloc en référence.
Dans l'intro, est noté {location [planete]}. Le mot sera accordé en fonction de l'indicateur renvoyé par le bloc ([M]/[F]).
Le bloc Location est composé de deux listes. Ces listes peuvent poser des problèmes au niveau des articles effectuant la liaison.

Pour éviter cela, chaque élément de liste contient un indicateur de liaison placé soit en sortie ([x] en fin d'élément) soit en entrée ([x] en début d'élément).
Grace au bloc Article, on sait alors comment faire la liaison.
[Image: article.jpg]

Le Bloc {relation} est basé sur une structure plus simple.
[Image: relation.jpg]

Il inclus les deux derniers blocs nécessaire de cette explication
{parents}
[Image: relation.jpg]

et {evenement}
[Image: evenement.jpg]

Tout ceci est un travail préparatoire, un brouillon soumis à vos idées observations et critiques.

Ne serait-il pas plus judicieux par exemple de remplacer le gros bloc {planete} en 4 blocs plus petits ?
- {planete_type} (qui définit si c'est une planete/astéroide/station)
- {planete_activite} (La liste des activités propres au 1er groupe / planetes)
- {astero_activité} (La liste des activités propres au 2e groupe / astéroides)
- {station_activité} (La liste des activités propres au 3e groupe / stations)

Même chose pour {location}. Ne serait-il pas plus intéressant de multiplier les blocs pour éviter la gestion des articles ?
Un truc du genre
[Image: locationv2.jpg]

J'espère avoir été clair dans cette tentative d'explication de mes recherches.