Un petit système de dialogues "dynamiques"

Hello

Un petit truc pour avoir des dialogues sous formes de menus (comme dans Planescape Torment par exemple) où les répliques possibles sont numérotées, et changent en fonction du contexte du jeu - la difficulté étant ensuite de « comprendre » la réponse du joueur.

[code]World is a room. Pierre is a man in World.

A person can be beau or moche.

A person can be riche or pauvre. A person is usually pauvre.

A person can be réponseattendue. A person is usually not réponseattendue.

Pointsgiving is an action applying to one number. Understand « [a number] » as pointsgiving.

The QuestionNumber is a number that varies.
The NombreDeRéponses is a number that varies.

Before talking to Pierre :
now the QuestionNumber is 1 ;
now the NombreDeRéponses is 0 ;
say « [line break]QuestionNumber : [QuestionNumber] - NombreDeRéponses : [NombreDeRéponses]. » ;
say line break ;
[ LE JOUEUR ]
[ — beauté — ]
if a random chance of 1 in 2 succeeds
begin ;
now the player is moche ;
otherwise ;
now the player is beau ;
end if ;
[ — richesse — ]
if a random chance of 1 in 2 succeeds
begin ;
now the player is riche ;
otherwise ;
now the player is pauvre ;
end if ;
[ PIERRE ]
[ — beauté — ]
if a random chance of 1 in 2 succeeds
begin ;
now Pierre is beau ;
otherwise ;
now Pierre is moche ;
end if ;
[ — richesse — ]
if a random chance of 1 in 2 succeeds
begin ;
now Pierre is riche ;
otherwise ;
now Pierre is pauvre ;
end if ;
[ ---------------------------------------------- DIALOGUE ---------------------------------------------- ]
say « [QuestionNumber]. Salut, je suis Stef. » ; increase the QuestionNumber by 1 ; increase the NombreDeRéponses by 1 ;
say « [QuestionNumber + 1]. Quelle heure est-il ? » ; increase the QuestionNumber by 1 ; increase the NombreDeRéponses by 1 ;
if the player is pauvre and Pierre is riche
begin ;
say « [QuestionNumber]. Donne moi des sous, je suis pauvre ! » ; increase the QuestionNumber by 1 ; increase the NombreDeRéponses by 1 ;
otherwise if the player is riche and Pierre is pauvre ;
say « [QuestionNumber]. Tiens, mendiant, pour tes bonnes oeuvres ! » ; increase the QuestionNumber by 1 ; increase the NombreDeRéponses by 1 ;
end if ;
if the player is moche
begin ;
say « [QuestionNumber]. Tu as vu comme je suis laid ? » ; increase the QuestionNumber by 1 ; increase the NombreDeRéponses by 1 ;
end if ;
if Pierre is moche
begin ;
say « [QuestionNumber]. Tu es laid et je vais te casser la gueule. » ; increase the QuestionNumber by 1 ; increase the NombreDeRéponses by 1 ;
otherwise ;
say « [QuestionNumber]. Tu es beau et je vais te faire des bisous. » ; increase the QuestionNumber by 1 ; increase the NombreDeRéponses by 1 ;
end if ;
say « [QuestionNumber]. Bonne journée, Pierre. » ; increase the NombreDeRéponses by 1 ;
now the player is réponseattendue ;
say « [line break]QuestionNumber : [QuestionNumber] - NombreDeRéponses : [NombreDeRéponses]. » ;
stop the action.

Instead of pointsgiving when the player is réponseattendue :
let BBB be the number understood ;
if the NombreDeRéponses is 4
begin ;
if BBB is 1, say « Salut, moi je suis Pierre. » ;
if BBB is 2, say « Il est 14h. » ;
if BBB is 3, say « [if Pierre is moche]Salaud, je me défendrai.[otherwise]Merci, je suis fan des bisous.[end if] » ;
if BBB is 4, say « Pareillement. » ;
otherwise if the NombreDeRéponses is 5;
if BBB is 1, say « Salut, moi je suis Pierre. » ;
if BBB is 2, say « Il est 14h. » ;
if BBB is 3, say « La transaction se fait. » ;
if BBB is 4, say « [if Pierre is moche]Salaud, je me défendrai.[otherwise]Merci, je suis fan des bisous.[end if] » ;
if BBB is 5, say « Pareillement. » ;
otherwise if the NombreDeRéponses is 6;
if BBB is 1, say « Salut, moi je suis Pierre. » ;
if BBB is 2, say « Il est 14h. » ;
if BBB is 3, say « La transaction se fait. » ;
if BBB is 4, say « Oui, tu es atroce à voir. » ;
if BBB is 5, say « [if Pierre is moche]Salaud, je me défendrai.[otherwise]Merci, je suis fan des bisous.[end if] » ;
if BBB is 6, say « Pareillement. » ;
end if ;
now the player is not réponseattendue ;
now the QuestionNumber is 1 ;
now the NombreDeRéponses is 0.[/code]

Ce qui peut donner, en situation, par exemple :

j’aime bien la génération automatique des numbres, ce qui pourrait permettre de présenter les dialogues dans le désordre ou d’en intercaler si nécessaire, mais j’aime moins le fait d’avoir répété les réponses possibles (selon s’il y a 3, 4 ou 5 réponses). Peut-être qu’une possibilité serait d’utiliser les tableaux, d’associer une réponse à une question, et de piocher dedans selon les questions posées.

Oui, mais les choses peuvent être plus compliquées, par exemple si telle réponse entraine telle modification de variable.