Je bosse sur la syntaxe des fichiers des zones de jeu.
Ma première version utilisait l’XML. Le problème est que je passais plus de temps à écrire les balises qu’à écrire le scénario. J’ai alors penser à utiliser un éditeur XML voir un éditeur en HTML. Le problème c’est que cela restreignait grandement la possibilité d’écrire du code scénaristique … ( si ouvre la porte, alors … )
Une conclusion de ce premier essai est que le format de zone doit permettre de passer plus de temps sur l’écriture proprement dit que sur le balisage et la syntaxe du langage. Elle doit être simple au possible pour permettre à un non programmeur de l’utiliser.
J’ai donc regardé la syntaxe des informs. J’ai décider de privilégier inform6 au profit du 7 car je trouve que la syntaxe en langage libre du 7 me semble
- cosmétique
- plus complexe à reprendre pour un analyseur.
Qu’en penser vous ?
Cependant, utiliser des séquences en langage libre pour clarifier l’objectif d’une section du fichier de zone m’a paru intéressant. J’en suis donc arrivé à écrire ce petit exemple.
Zone -> orphalyss_lonely_tower
# Commentaire
world 1 , idnum 3 ,
name_fr "La tour abandonnée de Nardell" ,
name_en "The lonely tower of Nardell" ,
desc_fr "Une tour abandonnée à la sortie de Nardell. On la raconte hanté par le fantôme d'un chevalier." ,
desc_en="An lonely tower near Nardell. It is rumored haunted by a knight ghost." ;
#
# Section de description des pièces
#
In orphalyss_lonely_tower, Rooms are
Room -> entree
idnum 1 ,
name_fr "Devant une vieille tour" ,
name_en "in front of an old tower" ,
desc_fr "Une vieille tour de pierre s'élève en bordure du chemin. Elle s'élève à une dizaine de mètre au dessus du sol."
"La construction est dans un état de délabrement avancé. De nombreux débris des étages supérieurs jonchent le sol."
,
desc_en "An old stone tower has been built along the path. It rise about 10 meters above the floor."
"The building is in poor shape. Several stones fallen from the upper floors lie here."
"The entrance is an heavy and massive door."
,
Exit -> entree_de_la_tour
door use instancied orphalyss_lonely_tower.porte_entree ,
actions_fr "est, entrer [[dans] [la] tour], passer [la] porte" ,
actions_en "east, enter [[the] tower]" ,
to_room 2 ;
;
Room -> hall
idnum 2 ,
name_fr "Hall de la tour" ,
name_en "Tower Hallway" ,
desc_fr "L'entrée de la tour occupe toute la base de la construction formant ainsi une large pièce."
"Les peintures des murs sont maintenant délavées mais laissent suggérées que la pièce fut autrefois décorée avec soins."
"Trois escaliers sur les cotés mènent à trois portes de pierres." ,
Exit -> sortie de la tour
# c'est une sortie type 'porte' et son descriptif est dans l'objet porte_entree
use as door instancied orphalyss_lonely_tower.porte_entree ,
actions_fr "ouest, sortie [de [la] tour], passer [la] porte" ,
to_room 1 ;
Scenery -> peintures # partie intégrante de la pièce avec la quelle on peut interagir
already_in_desc , # deja dans la description
use orphalyss_lonely_tower.peintures_hall
;
Scenary -> chevalier_dans_la_peinture
already_in_desc , hidden , # l'objet n'est pas accessible à l'interaction tant qu'il n'est pas révélé
use orphalyss_lonely_tower.peintures_hall ,
;
;
In orphalyss_lonely_tower, items are
Door -> porte_entree ,
idnum 1 ,
closable , # la porte peut être fermée
dc_break 30 ,
name_fr "une massive porte de bois"
;
Scenery -> peintures_hall
name_fr "des peintures" ,
desc_fr "Les peintures sont délavées, et par endroit, ont totalement disparues. "
"Cependant, vous comprenez qu'elles représentent des scènes de batailles mettant en scène"
"les forces du bien et du mal. Parmi les combattants, un chevalier attire particulièrement votre attention." ,
Scenery -> chevalier_dans_la_peinture # un sous objet de l'objet peintures_hall
name_fr "un chevalier" ,
desc_fr "Ce chevalier en armure porte l'antique blason de Nardell. Ce doit être le chevalier de la tour. "
"En dessous, brodé dans un encart, vous lisez un nom: 'Siegnurd'"
after_exa [
execute actor.quests.lonely_tower.know_the_name ; # execute le script know_the_name de la quete lonely_tower
]
;
;
When orphalyss_lonely_tower is instancied
CreateDoor -> la_porte_entree # nom de l'instance de la porte
use porte_entree ,
as entree.entree_de_la_tour identified as inside , # cette porte correspond a l'entree de la tour dans la piece 1
as hall.sortie identified as outside , #et a la sortie dans la pièce 2
closed ,
;
;
Mes conditions sont:
- pouvoir mettre des commentaires
- permettre d'inclure la description en anglais ( ou autre langue ) , donc que les chaînes de caractères doivent supporter des suffixes _fr, _en, etc ...
- les idnums sont nécéssaire pour les sauvegardes de positions. Comme le monde est dynamique ( patch, ajout de zones), je ne peux pas faire un dictionnaire identifiant => numéro qui sera assuré de ne jamais changé.
Cette étape me semble la plus importante dans la réalisation d’un mud IF car c’est le format qui donnera les possibilités du jeu en terme d’immersion.
Si vous avez des opinions sur le sujet …