J’attendais l’annonce des résultats et des pseudonymes pour l’annoncer formellement, mais j’ai participé à ShuffleComp: Disc 2 ! (la comp où l’on s’échange des chansons, dont on s’inspire ensuite pour écrire un jeu en un mois)
Mon jeu était Heading East, une histoire (courte, 2-3 scènes) d’ados pour qui c’est le dernier été avant de commencer l’université. (Hints et walkthroughs sur l’IFDB)
Il a eu deux reviews sur l’IFDB, peut-être qu’il y en aura quelques-unes de plus maintenant que la comp est finie, ça serait bien. Et si vous avez le temps, dites-moi comment vous le trouvez
En tout cas c’était un défi intéressant, pas évident (c’est pour ça que le jeu est court) mais assez marrant de devoir créer un jeu à partir d’une chanson (Vacant Night Sky, de Mecca Normal).
(Le jeu sera peut-être traduit en français, mais pas dans l’immédiat )
Il m’est venu à l’esprit qu’il y a deux-trois choses que je pourrais raconter sur la conception du jeu qui pourraient intéresser des gens. Je crois que les anglophones appellent ça un post-mortem.
Mais bien entendu, plein de spoilers, vous êtes prévenus Si vous lisez l’anglais, jouez-y et dites-moi ce que vous en pensez ! Ca dure 10-15 minutes, pas plus, et c’est super linéaire, vous devriez pas être bloqués - et y’a un walkthrough sur l’IFDB. Un jour peut-être je le traduirai, mais il y a beaucoup de texte (notamment pour la conversation avec un NPC) donc c’est du boulot.
Sur le débogage:
[spoiler]J’ai eu la chance d’avoir plein de bêta-testeurs avant la fin de la Comp - j’ai testé 2 jeux (Submerge et When the Land Goes Under The Water, tous deux bien chouettes) et j’ai eu 4 testeurs en retour (Juhana Leinonen, Jacques Frechet, Neil Butters, et Doug Orleans, qui a aussi fait une review cool sur l’IFDB.) Et heureusement, parce que j’en avais besoin : la dernière énigme n’a pas vraiment marché (cf balise suivante) et pour que le deuxième puzzle ne soit pas frustrant, il me fallait implanter TOUS les synonymes dans la voiture - c’est pas cool si le puzzle, qui est essentiellement ‹ qu’est-ce qu’il y a dans une voiture qu’on peut chercher ›, oublie des réponses valides. Enfin, résultat, j’ai eu 100 bugs, et je suis content parce que je pense que le résultat est plutôt pas mal implanté.[/spoiler]
Sur la dernière énigme:
[spoiler]La dernière scène est celle qui a le plus d’importance, et je voulais faire un truc super cool, mais ça n’a pas marché. Le protagoniste vient de fumer avec sa pote, et ils sont en train de profiter de ce moment, un des derniers avant qu’ils ne partent dans des universités différentes ; elle écrit des chansons, et ils en parlent et elle lui dit « aide-moi à finir les paroles ». Et là, je voulais faire un truc un peu comme Kentucky Route Zero, mais en parser ; c’est à dire qu’il y a ce moment super beau où le personnage est dans un bar, et la chanteuse chante une chanson qu’il connaît ; y’a des paroles qui s’affichent, comme si le personnage essayait de se souvenir des paroles avant qu’elles soient chantées, et il a toujours juste. Je trouvais ça intéressant et marrant, et je me disais qu’en parser ça aurait pu marcher encore mieux : Jane chante, te demande de finir les paroles, le joueur tape un truc cohérent, et y’a une réaction à ça, et le joueur fait ‹ ha, j’ai fini ses paroles, c’est cool ›. Sauf que 2 problèmes :
Réagir à n’importe quel input : ben c’est juste pas vraiment possible, sans compter que j’ai fait tout ça en une semaine, alors bon. Du coup, j’ai triché : quel que soit l’input du joueur, Jane sourit et fait ‹ ouais, ça marche ça. C’est cool ›. Et si il a tapé des bêtises, bah ils viennent de fumer un pétard, pas grave.
Faire comprendre au joueur qu’il faut taper quelque chose, et que ce quelque chose c’est ce que dit le personnage quand Jane s’arrête pour qu’il finisse la chanson. Ben rigolez pas, mais c’était impossible. J’ai essayé plusieurs choses : la version de base c’est les paroles de Jane en ‹ reverse video › et elles s’arrêtent à un moment, sauf que quand le curseur s’arrête, on fait quoi ? on tape entrée, et le jeu ne répond pas alors on n’a pas vu qu’il fallait faire un truc. Les paroles s’arrêtaient à « you must now » mais y’en a qui se sont dit ‹ bah, c’est une artiste, pourquoi pas ›. J’ai essayé un autre truc (je sais plus trop quoi, un truc sur les couleurs je crois - ou était-ce ajouter un prompt?), et j’ai fini par ajouter trois petits points, mais ça marchait pas non plus (i.e. un testeur tout frais ne comprenait toujours pas). Au final, j’ai remplacé ça par des variables : y’a 5 thématiques différentes, à chaque fois qu’on parle d’un sujet ça rajoute des points dans les thématiques différentes, et le jeu finit de lui-même les paroles avec des verbes qui sont liées à ces thématiques, que ça apparaisse comme influencé/cohérent avec la conversation qui vient de se dérouler (qui est timée). Donc voilà, 25 fins différentes que le joueur contrôle indirectement, et tant pis pour l’idée de finir la chanson au parser - de toute façon ça aurait été beaucoup de boulot.
[/spoiler]
Implanter des sujets compliqués en I6 facilement :
[spoiler]C’est une fiction très centrée sur le personnage de Jane, alors il fallait assurer niveau conversations. Et c’est dur, ces conversations, bon sang de bois. (J’ai pensé à un moment du développement « ouais, ça sera comme Galatea » - euuuuuh tu veux dire le truc qui a pris 9 mois à Emily Short et que personne n’a pu recréer depuis ?..)
Mais j’ai trouvé un super truc pour reconnaître des super sujets de conversation en I6. Je crois que dans le DM4, ce qui est dit c’est « bah tu fais ‹ ask X about topic ›, et topic c’est un mot du dictionnaire, et voilà ». Pour reconnaître des choses plus compliquées, je sais pas trop comment ils disent de faire (c’est pas dit qu’ils en parlent - Galatea c’est juste des mots individuels). Attention, ça vient aussi avec l’avertissement du « si vous voulez reconnaître des inputs compliqués, le joueur va penser que vous pouvez reconnaître tous les inputs compliqués, et ça va être dur » - c’est possible que ça soit une bonne idée que dans les jeux courts où y’a pas non plus des milliers de choses qui ont été définies. Bref. Ce petit bout de code, c’est page 233 du DM4 :
Ce code va vous permettre d’avoir des sujets de conversation qui sont des objets. Pourquoi faire ça ? Parce que ce bon vieux parse_name va vous aider et vous permettre de reconnaître des trucs compliqués. La version bête c’est :
Class Topic
with short_name "that",
has proper;
Object Topics;
Topic -> leavingfamily_topic
with parse_name [; etc
Mais le truc encore plus puissant, c’est de combiner ça à mon extension PhraseName pour accepter toute une variété d’inputs facilement. Ca devient :
Class Topic
with short_name "that",
parse_name ComplicatedParsing, ! this is why we copied-and-pasted instead of including
has proper;
Object Topics;
Topic -> leavingfamily_topic
with phrase_name 'leaving' 'her' 'family' '.or' 'parents' '.rest' 'behind' '.opt' 'her' './' 'leaving' 'your' 'family' '.or' 'parents' '.rest' 'behind' '.opt' 'you',
phrase_name2 'leaving' 'home' './' '.opt' 'her' 'parents' '.or' 'mother' '.or' 'father' '.or' 'family';
Avec ça, je peux reconnaître
et c’est pas totalement complet (leaving family behind, etc.) mais c’est super rapide et efficace, et ça fait des trucs assez puissants.
Le problème par contre, c’est que je sais pas si beaucoup de gens l’ont remarqué, tant ils étaient habitués à taper « ask jane about keyword » Mais j’étais assez content de moi. Donc voilà si vous voulez une astuce I6 pour les sujets de conversation qui permet de faire du code propre et réutilisable (ah oui, et après c’est juste un « life [; Ask: switch(second) { leavingfamily_topic: « truc »;} » pour faire la vraie conversation) et vous permet d’être subtils à faible coût, en voilà une [/spoiler]