The Great Paper Adventure : Scripts

Finalement l’intégration d’XNA dans du WPF est compliquée et pas franchement utile. Après plusieurs heures perdues à essayer quand même, je me suis dit qu’il était plus intelligent de faire autre chose.

Je me suis donc pencher sur le système d’event, qui est un simple script à interprêter en fait.

Pour que tout ça marche il ya deux grandes étapes :
- Définir le langage de script
- L’interprêter dans le moteur

Définir le langage de script

Un tel langage est toujours un truc un peu fait maison, plein de bidouilles. Chacun peut le voir comme il le veut, le préfère. On peut imaginer un truc totalement textuel comme :

1
2
3
4
5
tag init
tag room1
spawn enemy 1 flag1
ifnotflag flag1 goto room1
tag end

Qui ferait quelque chose comme : Première pièce du niveau -> Ajouter un monstre -> Tant que le monstre n’est pas mort (car le monstre met le flag « flag1″ à sa mort), on ne passe pas à la pièce suivante.

J’ai repris ce système mais comme j’ai passé tous mes niveaux en XML, je me suis dit que j’allais devoir m’adapter. De même que mon architecture étant purement objet, il a fallu que je trouve un moyen de faire du script en OO.

Le script que j’ai choisi est composé comme cela :
- L’objet Map contient un tableau de « flags » (String) qui sont actifs pour le niveau.
- Il contient aussi une liste d’Event
- Un Event contient une liste d’actions et une précondition. Il définit aussi un « temps », dans mon cas une valeur de scrolling, qui indique le temps à partir duquel l’Event peut s’activer.
- Une action n’est qu’une méthode Run() qui execute ce que l’on veut

Interprêter

Le moteur parcourt tous les events du niveau courant. Si un event peut être activé (= le scroll requis est atteint), on le lance.

L’event regarde alors si la pré-condition est remplie (= si un flag est présent). Par exemple si le joueur tue un certain ennemi il peut déclencher un évennement extra-ordinaire, mais il peut aussi passer à côté.

Une fois cette précondition l’event appelle la méthode Run() de chaque Action qu’il contient.
A la fin de toutes ces exécutions, l’event est supprimé de la liste.

Une Action peut être l’apparition d’un ennemi, d’un bonus, d’un message, mais aussi une structure de contrôle comme une boucle While (tant que flag1 n’est pas saisi, faire apparaître des monstres).

Le fait qu’à chaque fois on utilise des classes donne une grande liberté, puisqu’on peut finalement mettre les paramètres et le corps de méthode que l’on veut.

Un autre problème est soulevé : comment écrire le script facilement ? Le plus logique mais le plus compliqué (surtout en XNA !) est de créer un outil qui permet simplement (et visuellement) de le faire.

Et les nouveaux niveaux, c’est pour très bientôt :)

Les commentaires sont fermés.