Aide pour Inform 6 %!options: --toc --outfile ../articles_inform6.php %!includeconf: configifiction.txt %!include: ""warningt2t.txt"" = Aide pour Inform 6 = %%toc //[Consulter la source de ce document au format txt2tags txt2tags/%%infile]// ----------------------- === Gérer les objets du décor === Il y a 4 manières d'aborder la question (la dernière étant la plus performante) : ==== Nouvel objet ==== la plus compliquée est de créer un nouvel objet à chaque fois. Outre le fait que cela prend énormément de temps pour rien, cela a le désavantage de risquer de mettre le joueur sur une fausse piste, en croyant que l'objet est important pour le jeu. ==== Référence implicite ==== la plus simple est d'indiquer la référence à l'objet dans l'attribut "name" d'un objet plus générique. Ainsi, si on tape le nom d'un objet sans importance, on retrouve la description générale. En gros cela signifie au joueur : circulez, il n'y a rien à tirer de cet objet. Mais on prouve que l'on y a pensé, et on évite le frustrant : "cela n'existe pas ici", alors qu'on en a parlé juste avant. Par exemple ici : ``` Personnage Garde "garde" place3 with name 'garde' 'molosse' 'armure' 'plastron' 'hallebarde' 'cotte' 'mailles', description "Le garde est grand, avec un heaume qui masque complètement son visage. Il porte un plastron métallique et une cotte de mailles sur le reste de son buste. Il tient en main une grande hallebarde.", ``` Ce n'est pas la peine d'implémenter ici une hallebarde à ce niveau de jeu, sauf si on fait un JDR et qu'il est possible de tuer le garde et de lui voler son arme. Au moins ici le joueur en voyant que la référence à la hallebarde se retrouve vers le garde, il ne va pas perdre son temps à essayer de distraire ce garde pour lui prendre sa hallebarde... On pourra rétorquer qu'il est possible pour le joueur de discuter avec la cotte de mailles ou le plastron. Selon le contexte cela pourra passer, par ex : ``` >parler hallebarde ``` Vous commencez à discuter avec le garde qui ne bouge même pas. ``` >attaquer plastron ``` Vous frappez le garde ==== Objet spécial pour le décor ==== une méthode intermédiaire est d'utiliser ce truc qui permet de ne gérer qu'un objet inform pour plusieurs références : ``` Object ObjVillage "objets divers" with number 0, parse_name [ i ; self.number = 0; while (true) { switch (NextWord()) { 'alentours', 'alentour', 'environs', 'place', 'extérieur', 'village', 'batisses', 'maisons', 'batiments', 'batiment', 'constructions', 'toits', 'murs', 'maison','chemin','port' : self.number = 0; i++; 'paysage', 'environnement', 'région' : self.number = 1; i++; 'montages', 'collines', 'montagne' : self.number = 2; i++; 'forets', 'arbres', 'foret', 'forêt' : self.number = 3; i++; 'femmes', 'hommes', 'monde', 'gens' : self.number = 4; i++; 'ouvertures', 'entree', 'ecritures', 'niches' : self.number = 5; i++; 'bateau', 'bateaux', 'quais', 'pontons', 'camelots', 'vaisseaux', 'mer', 'dedale' : self.number = 6; i++; default: return (i); } } ], description [; Look, Examine, Search: switch (self.number) { 0: << Look >>; 1: "La région est un peu humide, mais fraîche en cette saison. Des forêts immenses entourent la ville, et des montagnes lointaines bordent celles-ci."; 2: "Les montagnes sont de la couleur des fleurs de lilas, et leurs formes arrondies ajoutent à la douceur des teintes de l'atmosphère."; 3: "Vous ne voyez qu'une partie de la forêt en restant dans la ville, même si celle-ci se trouve dans une sorte de dépression."; 4: "Leur vie grouille un peu partout dans le port et le village, pour le commerce, le retour de la pêche et les simples curieux. Vous comprenez à peine leur langue dans ce vacarme."; 5: "Certains traits caractéristiques de ce temple vous rappellent ceux de votre pays."; 6: "Les bords de mer et l'activité qui va avec ne vous emplissent pas d'autant de nostalgie que les montagnes mystérieuses et dures, mais ce spectacle est plaisant malgré tout."; } default: "Le décor de l'aventure."; ], name 'description' 'du' 'village', found_in [; return (location ofclass Village);] , has pluralname scenery; ``` il doit être possible également d'utiliser d'autres verbes, comment écouter ou sentir. ==== scenic ==== Mais depuis peu, il existe une meilleure méthode, avec l'utilisation de scenic5sens.h à inclure dans l'aventure. Voir notre forum à ce sujet : http://ifiction.free.fr/taverne/viewtopic.php?t=282 il suffit d'ajouter par exemple : ``` scenic_look 'flot' 'flots' 'eau' 'eaux' 'riviere' 'fleuve' 0 "Alors que regarder l'eau couler avait jusqu'ici toujours eu un effet apaisant sur mon esprit, cette eau là avait sur moi un effet différent : étrange, presque effrayant." ``` === comment changer de lieu en utilisant un objet === dans inform6, on peut déplacer le jouer avec la commande playerto(lieu) par exemple pour un objet on peut utiliser cette partie qui déplacera le joueur dans un nouvel endroit : ``` before [; Take, Touch: print "J'ai enfin pu prendre possession de cette flûte.^" ; move flute39 to Player ; score = score + 3 ; PlayerTo(incabane) ; rtrue ; ], ``` === Comment utiliser le système de score et débloquer certains lieux et objets selon le score === il suffit d'utiliser soit l'attribut scored à la fin des objets : ``` has scored animate female; soit d'utiliser dans le corps d'une procédure : score = score + 1 ; etc (voir l'exemple plus haut) pour débloquer une action en fonction du score, on peut tester la valeur de la variable "score" : ``` if (score > 6) { print "Vous changez de niveau." ; move ArmureDeGrosBill to Player ; rtrue ; } ``` === Gérer les conversations === //par Stormi// http://ifiction.free.fr/taverne/viewtopic.php?f=3&t=627 [b][i]1. Les actions de communication issues d'inform 6 en anglais[/i][/b] Ces actions sont gérées dans la propriété "life" des objets ayant pour attribut 'animate' ou 'talkable'. Référence à ce sujet dans le DM4 (Inform Designer's Manuel, en anglais) : http://www.inform-fiction.org/manual/html/s17.html ainsi que le chapitre suivant. - [b][color=#0000FF]Tell[/color][/b] : ça c'est quand on parle d'un sujet précis à un personnage : "Parler du loup des bois à toto". L'action Tell est envoyée à l'objet toto, avec comme "topic", sujet de conversation, les mots "loup des bois". A nous de traiter ces mots qu'envoie le joueur et de gérer les différents sujets qui peuvent être abordés et leurs diverses formulations. - [b][color=#0000FF]Ask[/color][/b] : son fonctionnement est identique à Tell ! Sauf que c'est l'action envoyée par les verbes permettant d'interroger les personnages ("Interroger toto sur le loup des bois"). Cela permet de différencier le fait de parler d'un sujet avec celui de questionner sur un sujet. - [b][color=#0000FF]Answer[/color][/b] : comme son nom ne l'indique pas, c'est l'action d'envoyer n'importe quel texte libre au personnage. C'est la plus difficile à gérer. Si je dis "dire comment ça va au personnage", le personnage va recevoir une action Answer avec le texte "comment ça va". Derrière, il faut que le personnage 'comprenne' ce texte et fasse une réponse appropriée. Pour ces trois actions, le plus difficile si on veut réellement les exploiter est le traitement de la chaîne de caractères envoyée par le joueur comme 'topic'. Ce point est décrit ici dans le DM4 : http://www.inform-fiction.org/manual/html/s16.html (le chapître parle de la consultation de quelque chose, une livre par exemple, au sujet de quelque chose, mais c'est exactement pareil que fonctionnent les actions Tell, Ask et Answer). [b]Attention[/b] : dans le chapitre 17 du DM4, un exemple est donné où au lieu d'analyser le sujet donné aux actions Ask et Tell, c'est simplement la variable 'second' qui est analysée. En anglais, ce fonctionnement est correct si on ne lui en demande pas trop. En français ce n'est pas efficace, car 'second' contient tout simplement le premier mot qui n'est pas 'the'. Mais si le joueur tape "parler de la lune à toto", second ne contiendra pas le mot lune, il contiendra le mot la ! Il est donc préférable d'analyser la chaîne "la lune", quitte à en retirer éventuellement les mots inutiles (c'est ce qui est fait dans Ascenseur avec la fonction ElimineMotInutile), afin de n'avoir pas à gérer à la fois 'la lune' et 'lune' dans l'exemple présent. [b][i]2. Ajouts dans la version francophone[/i][/b] - [b][color=#0000FF]ParlerSansPrecision[/color][/b] : dans la version anglaise, il n'existe pas d'équivalent au verbe parler dans le sens "parler avec quelqu'un", sans préciser le sujet de conversation. La bibliothèque francophone ajoute cette action, nommée ParlerSansPrecision. Cette action est appelée sur la propriété life des objets 'animate' ou 'talkable', tout comme les trois actions Ask, Tell et Answer, mais sans aucun sujet de conversation. - [b][color=#0000FF]Answer[/color][/b] : en plus de la formulation "dire {n'importe quoi} à {personnage}", la bibliothèque francophone envoie aussi l'action Answer si on écrit "demander {quelque chose qui n'est pas un objet du jeu} à {quelqu'un}". Cela permet de gérer lorsque le joueur veut "demander" une chose qui n'est pas modélisée dans le jeu ou qui est immatérielle (l'heure, de l'aide...). [b][i]3. Comment gérer correctement ces actions sur les personnages[/i][/b] Ces quatre actions sont la base de la conversation avec les personnages en Inform 6, version francophone. Cependant, il n'est pas rare qu'un auteur souhaite procéder autrement : - en donnant la même signification aux actions Ask et Tell par exemple : que j'interroge toto au sujet du loup des bois ou que je parle du loup des bois à toto, je veux la même réponse, ce qui m'importe c'est le sujet loup des bois - en supprimant totalement la gestion de Ask, Tell et Answer pour se contenter de réagir sur ParlerSansPrecision. Cela simplifie énormément les choses. Cela appauvrit la discussion avec les personnages (impossible ici de les interroger sur un sujet précis), mais limite aussi considérablement les possibilités d'incohérence. C'est une méthode à privilégier si on n'est pas prêt à s'investir dans des personnages à la conversation poussées. Mais il ne faut pas oublier de mettre tout de même un message standard en réaction aux autres actions Ask, Tell et Answer. - en remplaçant toute conversation par un système de menus (chose que je ne détaillerai pas car je ne la maîtrise pas, mais si quelqu'un veut le faire...) - etc... [i]L'important c'est de préciser dans l'aide du jeu quelles sont les formulations à utiliser pour s'adresser aux personnages, et d'avoir prévu une réponse cohérente pour chaque action[/i]: - Ask (interroger sur un sujet) - Tell (parler d'un sujet) - Answer (dire tout ce qui nous passe par la tête) - ParlerSansPrecision (comme son nom l'indique) Voici une méthode très simple pour faire une classe de personnage qui ne réagit qu'à l'action ParlerSansPrecision. Les autres actions avertissent le joueur que la formulation à utiliser est "parler avec personnage". [code] Class PNJ with life [; Ask, Tell, Answer : "[Pour converser avec les personnages, utiliser la formulation 'parler avec (personnage)']"; ], has animate; [/code] Pour les objets de la classe PNJ, il ne sera plus utile de se soucier de Ask, Tell et Answer puisque c'est géré au niveau de la classe avec un message standard. Pour des PNJ plus complexes, il faut toujours gérer ParlerSansPrecision (pour mettre une réponse standard ou personnalisée), mais aussi gérer Ask, Tell et Answer (ou juste Ask et Tell et mettre une réponse bateau mais crédible pour Answer qui est le plus compliqué à gérer. Dans Ascenseur, j'ai en fait géré Answer exactement comme Ask et Tell mais c'est un choix personnel.). Pour cela je vous invite à lire les liens ci-dessus vers les chapitres 16 à 18 du DM4, et à consulter/compiler/bidouiller la source du jeu Ascenseur. [i](Le jeu Ascenseur, dont le code et le binaire sont disponibles ici : http://ifiction.free.fr/telechargement/stormi/ascenseur/ a été conçu comme un exemple d'utilisation des actions de communication avec les personnages.)[/i] [b][i]4. Autres actions liées aux personnages.[/i][/b] [b]Les ordres[/b] : les formulations telles que "personnage, manger" (malheureusement l'impératif n'est pas reconnu dans ce contexte) ou "demander au personnage de pousser le bouton" envoient un ordre au personnage. Le chapitre 18 du DM4 traite de ce point. Si on ne le gère pas on obtient le message par défaut "(Le personnage) a mieux à faire." [b]Demander un objet[/b] : il existe une action AskFor, qui en fait envoie l'action Give à la propriété life d'un personnage. Cela permet de gérer lorsqu'on demande un objet présent dans le lieu (ou possédé par un personnage). Le message par défaut est "(Le personnage) a mieux à faire." === Donner des ordres à un NPC === //par TheSmallGamers// ``` object piece "piece" with description "une piece", name 'piece' has light; object machin "machin vivant" piece with orders [; Give : move noun to player; print_ret "essai reussis";], name 'machin', has animate; object objet "objet" machin with description "un objet", name 'objet', has ; ``` AskTo est une redirection vers orders. Toute grammaire d'AskTo est considéré comme orders. A partir de la 6/11, "Machin, donne objet" ou "Demander a machin de donner objet" marche pareillement (grâce à AskTo dans FrenchG.h). Quand a la grammaire, pour qu'elle fonctionne, il faut que ce soit du genre : ``` Extend 'forcer' replace * creature 'a'/'à' topic -> AskTo ; ! * 'à'/'a'/'au'/'aux' creature 'de' topic -> AskTo; Extend 'ordonner' replace * creature 'de' topic -> AskTo ! "ordonne-lui" * 'à'/'a'/'au'/'aux' creature 'de' topic -> AskTo; ``` === Kit de démarrage débutant === [Notre kit de démarrage débutant fichiers/inform6_kit_debutant.zip] //(compatible windows et linux)// Les instructions se trouvent à l'intérieur. === Un environnement de travail similaire à Linux, sous Windows === Si pour diverses raisons vous souhaitez pouvoir profiter des outils que l'on trouve sous linux pour continuer à travailler sous windows, vous pouvez utiliser ces solutions : - [Cygwin http://cygwin.com/] permet d'avoir l'environnement de travail du shell linux, ainsi que de nombreux outils unix, aidant à la compilation et aux scripts notamment. - [KDE http://windows.kde.org/] permet d'utiliser l'éditeur de texte Kate (avec coloration syntaxique pour Inform), le navigateur Konqueror, et beaucoup de logiciels efficaces du projet KDE. - [Ulteo http://www.ulteo.com] permet d'utiliser tous les programmes linux conjointement à windows.