Lieux Communs :: Pour les beta-testeurs

oui tout à fait. C’est à l’étude. J’avais laissé un msg en ce sens sur la page flyspray.
Genre mettre un seul objet visible au début, et les autres à découvrir par la suite. Éventuellement un ou deux lieux à ne découvrir qu’après être passé par une autre scène…

N’hésite pas à justement donner des idées dans ce sens Akien, ainsi que sur la fin du jeu.

J’ai commencé à tester la roulotte réinventée par Otto :slight_smile:
Je trouve que ça apporte beaucoup au jeu de ne pas avoir tous les éléments prémachés et à portée de main, d’ailleurs je n’ai pas encore trouvé le moyen de me rendre au musée =]

Cependant je peux déjà noter quelques petites bricoles :

  • le vieux livre poussiéreux n’apparaît pas dans la description du lieu si on l’a posé (par exemple, après l’avoir pris, si on le pose sur la table, ni > r ni > x table ne noteront la présence de l’ouvrage).
  • de plus > x table ne nous parle pas de la présence d’un globe de neige, cependant il est considéré comme visible et est décrit dans > r après avoir regardé au préalable la table.
  • dans la description de la table, on nous parle de « babioles ». Le joueur est donc tenté de regarder ces babioles pour y dénicher un quelconque objet. Cependant il y a, derrière le mot babioles, tous les artifices et autre artefacts de la roulotte, donc en cherchant les babioles qu’on imagine sur la table, on nous dit trouver un pendentif accroché à un clou sur le mur…

Pour ma part, j’ai modifié les scènes 190, 86 et 39 pour les rendre « rejouables » depuis la roulotte, mais je n’ai pas encore fait le commit.

J’ai quelques remarques sur la scène 39. Je m’occupe d’apporter les corrections mais j’ai besoin de quelques consignes de l’auteur :slight_smile:

  1. le timer est trop rapide, même en sachant ce qu’il faut faire il suffit que je m’attarde sur quelques éléments du décor et je perds ! Il est actuellement sur 24 tours. Peut-on l’augmenter et si oui à combien ?

  2. L’action « souffler » ou « jouer » de l’ocarina est problématique si on est hors de la scène de la plage, car elle fait perdre et revenir à la roulotte, et c’est compliqué à gérer du point de vue de la réinitialisation de la scène en cours. Peut-on désactiver l’effet maléfique de l’ocarina quand on souffle dedans ?
    Sinon, si on veut garder son effet maléfique je trouverai bien un moyen de détecter quelle est la scène en cours (avec une variable) et je désactiverai la bonne scène.

  3. Si on n’a pas tenté de prendre la flûte, elle ne va pas vers les dunes, et alors mettre les rochers sur les dunes n’a aucun effet (en revanche on ne peut plus les reprendre) et donc il est impossible de gagner.
    Proposition : dès que le joueur entre en possession d’un rocher, l’ocarina vole vers les dunes de son propre chef. Ou alors dès le 2e ou 3e tour de la scène, que l’ocarina aille vers les dunes, avant qu’on n’ait le temps d’y placer la moindre pierre.
    [Edit : autre solution simple, si le joueur veut mettre un objet sur la dune mais que l’ocarina n’y est pas, on dit « Quel intérêt avais-je à poser ce rocher sur la dune ? »]

  4. Au début, la mer est à l’est, et la plage continue au nord. Puis le joueur doit aller à l’est pour s’éloigner de la mer. A mois que la plage n’ait fait un demi-tour, la mer serait plutôt à l’est (c’est plus clair pour le joueur en tout cas) et la terre vers l’ouest. J’ai changé les choses en conséquence, sauf contrordre.

  5. J’ai eu une fois un problème : je venais de poser le quatrième rocher sur la dune, mais j’ai été pris de vitesse par le timer de l’ocarina et j’ai perdu !
    Il faut dire que je suis passé par une commande qui m’a permis de poser 2 rochers d’un coup. Si ça se trouve le timer a expiré entre les deux ?
    Bref, je vais étudier la question pour que cela n’arrive pas (probablement ajouter un test dans le time_out de l’ocarina).

  6. Par ailleurs, pour la roulotte, au cas où un joueur trouve les objets très vite, il ne voit pas la sorcière arriver, et quand il revient à la roulotte elle est là alors qu’il ignore tout d’elle.
    2 solutions : ne faire venir la sorcière que si le joueur est là (le plus simple), ou aménager un petit texte si le joueur arrive dans la roulotte et que la sorcière est venue en son absence. Par paresse je préfère la première solution.

  7. Dernière remarque pour Otto, sur un détail : j’ai vu dans le dernier commit que tu as retiré le mot « murs » des termes désignant les fruits pour scenic_taste (il reste présent pour scenic_smell). Est-ce pour une raison particulière ? Une des descriptions du lieu mentionne justement une odeur suave de fruits murs.

  1. le timer est trop rapide => il me semblait que 24 tours c’était suffisant (j’avais mis 20 au début) mais si tu juges que c’est trop peu, augmente le un peu alors. Par contre cela serait pas mal si le joueur pouvait avoir la surprise de se faire prendre la première fois qu’il passe un peu de temps sur la plage, mais sinon tant pis. À mon avis vers 28-30 tours c’est déjà pas mal. Astuce : pour gagner un peu de temps, il est possible de parler à la flute.

2)L’action « souffler » ou « jouer » de l’ocarina est problématique si on est hors de la scène de la plage => ok, je vais corriger cela. Par contre je ne vois pas pourquoi ce superbe ocarina maléfique deviendrait automatiquement un appeau à galinette cendrée une fois sorti de la plage :slight_smile:
Je vais donc faire perdre le joueur s’il s’avise de souffler dedans, sans retour à la roulotte. Par contre je viens de voir que de ce fait il n’est pas possible de souffler dans l’ocarina sur la plage, vu que l’on revient direct dans la roulotte (ou alors, avant d’en prendre possession même si ce n’est pas très logique, mais bon le joueur est peut-être contorsionniste et peut jouer à plat ventre sur les dunes)

  1. Si on n’a pas tenté de prendre la flûte, elle ne va pas vers les dunes => si on n’est pas un minimum curieux, on n’ira pas loin dans l’histoire :wink:

=> oui c’est bien vu, je vais le modifier en ce sens.

  1. Au début, la mer est à l’est, et la plage continue au nord => bien vu. Je vais donc remettre la plage à l’ouest, vu que c’était ainsi que je l’avais en tête.

5)J’ai eu une fois un problème : je venais de poser le quatrième rocher sur la dune, mais j’ai été pris de vitesse par le timer de l’ocarina et j’ai perdu ! =>
tu veux dire que c’était trop juste mais que cela aurait dû passer ? Fais comme tu le sens ici. De toute façon en ajoutant un peu de temps cela sera plus facile.

  1. Par ailleurs, pour la roulotte, au cas où un joueur trouve les objets très vite, il ne voit pas la sorcière arriver => oui c’est vrai, j’y ai pensé également. Je ne sais pas comment le faire simplement (edit : j’ai rajouté une variable viewed à la sorciere, et si la variable est à 0 cela relance le timer à chaque retour à la roulotte. En outre j’ai réduit le timer de 3 à 2, comme cela on est certain de rencontrer la sorcière à un moment…)

  2. en fait j’avais cru à une erreur, il me semblait bien qu’il n’y avait pas de mur au début (sauf les parois de la roulotte). Je le remets, désolé.

J’ai pour ma part ajouté de nouvelles routines de test pour la fin, je pense que cela devrait marcher pas trop mal (il y aura sans doute quelques bugs, mais l’idée est là). Je commite cela bientôt.

Argh, j’avais apporté certaines modifications moi-même comme annoncé dans le message précédent, et j’ai plein de conflits avec tes derniers commits. Tant pis, je commence à avoir l’habitude de les gérer. C’est dû à mon habitude d’attendre que les choses soient dans un état satisfaisant avant de faire mes commits.

Va pour 29 alors. Le truc, c’est que chaque mouvement (prendre un caillou, poser un caillou, etc… prend du temps). Ne t’inquiète pas, je ne doute pas que le joueur se fera tout de même prendre par le temps la première fois qu’il jouera.
=> Je fais la modification.

Finalement j’ai mis en place une solution dans mon prochain commit, qui fait que tu peux laisser le comportement existant : un simple appel à la fonction Perdu() suffit, je gère la réinitialisation de la scène en cours dedans.
=> rien à faire donc

=> Si tu ne l’as pas déjà fait, je l’ai fait dans mon code. Sinon je gérerai le conflit :slight_smile:

Euh, là dans ton commit tu as au contraire mis la mer à l’ouest, résultat c’est incohérent avec les photos (notamment celle de Plage39) qui suggèrent qu’on longe la mer du sud au nord, en l’ayant à notre droite donc à l’est.
=> Si tu es d’accord avec moi sur ce point je m’en occupe, tu pourras tester plus tard si cela te convient.

Ce qui se passe, c’est que j’ai bien posé les 4 pierres, et puis la flute a quand même appelé son monstre :frowning: Mais comme j’ai réussi à poser rochers en même temps (je ne sais plus comment j’ai fait), cela a dû poser un problème vis à vis des variables permettant au timer de savoir qu’on a réussi ?
Ou alors j’avais oublié de mettre la flûte sur la dune…
=> On laisse les choses en l’état, si j’arrive à reproduire le problème on avisera

Pour limiter les conflits, peux-tu committer un maximum de choses que tu estimes relativement stables, me laisser gérer les conflits que j’aurai (j’ai modifié beaucoup de fichiers) afin que je fasse un gros commit ce soir ?

Dernière chose, j’ai vu que tu as retiré l’attribut « scored » de la classe ObjetPortail. Je trouvais pourtant plus propre en terme de codage de le mettre là que de le donner à chaque objet de la classe, et j’avais commencé à modifier en ce sens (toujours sans commit).

Est-ce que cela t’embête si on fait de cette manière là, en mettant l’attribut à la classe et non aux objets (ainsi que pour les ObjetsAutel) ?

Edit : je n’ai rien dit, j’ai mal regardé le contenu de ton commit. On continue comme on a fait donc :slight_smile:

désolé pour le pb de commit. J’espère que tu t’en sortiras :slight_smile:

Va pour 29 alors

j’avais mis 28, mais si tu veux modifier, tu peux encore le faire, je n’y touche plus ce soir.

Finalement j’ai mis en place une solution dans mon prochain
commit, qui fait que tu peux laisser le comportement existant :

j’ai déjà modifié, mais c’est pas grave. Il ne faut pas vouloir jouer du Jethro Tull dans un ocarina maléfique :slight_smile:

« Quel intérêt avais-je à poser ce rocher sur la dune ? »
=> Si tu ne l’as pas déjà fait, je l’ai fait dans mon code.
Sinon je gérerai le conflit Smile

déjà commité. Mais tu pourras comparer quel code est le mieux :slight_smile:

Je vais donc remettre la plage à l’ouest,
vu que c’était ainsi que je l’avais en tête.

Euh, là dans ton commit tu as au contraire mis la mer à l’ouest,

zut, je voulais dire « la mer à l’ouest ».

résultat c’est incohérent avec les photos (notamment celle de
Plage39) qui suggèrent qu’on longe la mer du sud au nord,

oui mais si on remet dans l’autre sens cela va faire bizarre avec la scene initiale (piece39)

=> Si tu es d’accord avec moi sur ce point je m’en occupe,

je propose plutôt de changer le sens de l’image de la place39.

pour l’histoire de la classe ObjetAutel, je voulais faire hériter de ObjetPortail, mais cela ne va pas car cela donne un scored en trop pour des objets qui ne devraient pas l’avoir. Je vais donc faire encore autrement, genre une nouvelle classe ObjetSpecial, dont dériveront
ObjetAutel et ObjetPortail.

Il reste encore un bug pour la fin, je vais corriger cela ce soir, et ensuite j’arrête là je pense.

OK pour le sens de l’image. Je te laisse changer l’image, je m’occupe de tester que tout va bien et faire les changements nécessaires si besoin.

Pour la classe ObjetSpecial c’est une bonne idée, je vote pour (et la fonction DeplacerObjetsPortails serait renommée en DeplacerObjetsSpeciaux). Si tu veux je peux le faire ce soir, c’est comme tu veux.

c’est bon pour moi ce soir, si je dois faire des changements, je pense que cela ne sera plus dans le code mais les descriptions.

Maintenant le jeu est plus ou moins bouclé, il est possible normalement d’avoir les 3 fins possibles, mais je vais tester un peu quand même pour être sûr. Il y a sans doute encore des améliorations à faire, mais je pense que la fin comme cela n’est pas trop vache…
Concrêtement, en ayant visité les 7 lieux, et réussi seulement à rapporter 3 objets sur les 6 (ou en ayant 15 points), on a la fin2, une fin moyenne (mais on sauve sa vie). Avec 5 objets ou plus, c’est la fin « ultime ».

Cela serait bien de trouver une solution pour nettoyer un peu les objets pas utile. Ou faire encore des fins alternatives en plaçant trop de mauvais objets sur l’autel.

pour la classe objetspecial, j’ai repris exactement ton code de ObjetPortail sans l’attribut scored, et pour ce dernier j’ai simplement :

Class ObjetPortail
class ObjetSpecial
has scored;

je pouvais éviter cette classe mais cela voulait dire qu’il fallait que je duplique du code.

Merci encore de ta participation dans ce projet !

Vous entendez les beta testeurs ? Il nous reste moins de 5 jours, c’est le moment de tout casser par vos tests de joueur imprévisible !

Pour la question du nettoyage des objets pas utiles, je t’invite à regarder le code de la fonction ReInit190 : tous les objets pas utiles sont renvoyés à leur place dans la scène 190, à la fin de la scène. Seuls les objets utiles obtenus dans la scène sont conservés si le joueur a gagné.
Je suis en train de mettre la même chose en place pour toutes les scènes (c’est fait pour les 86, 190 et 39, même si je n’ai pas encore fait le commit).

OK. As-tu mis à jour également la fonction DeplacerObjetsSpeciaux ? Faut-il le faire ? (cela aurait pour effet d’empêcher la perte des objets Autel dans les diverses scènes. On peut aussi décider que le joueur est responsable de ces objets et peut les perdre, quitte à devoir refaire telle ou telle scène pour les obtenir à nouveau).

Et merci de la tienne !

non

je ne sais pas trop. Effectivement, libre au joueur de perdre ses affaires après tout :slight_smile:

en fait j’aimais bien la ligne uniquement pour la page d’intro, et si on gardait la bannière ensuite. Mais c’est vrai qu’avec les images et les bords arrondis, cela n’était pas du meilleur effet. On garde donc la modification, et je pourrais éventuellement ajouter une ligne en png juste avec la bannière…

je ne sais pas si c’est lié, mais maintenant on ne peut plus finir le jeu (en testant avec "rejouer + solution.txt), la réinitialisation remet chaque début de scène (piece##) en non visitée, or le jeu à la fin teste l’arrivée de la scene finale avec :

if (self.actif==0 && Piece39 has visited && Piece31 has visited && Piece190 has visited && Piece125 has visited && Piece86 has visited && Piece37 has visited && Piece172 has visited)

comme cela la scene finale se déclenche si le joueur a visité chaque scene au moins une fois.

Pour rétablir cela, soit on retire par exemple le give Piece39 ~visited; dans ReInit39 init_tout (en considérant qu’il n’y a pas vraiment de chose critique dans la première visite pour le joueur, puisqu’il est déjà passé par là, ou alors on ajoute une nouvelle variable qui se déclenche à la première visite, et que l’on teste dans la scene finale.
Je te laisse choisir la meilleure solution puisque tu as encore à terminer d’ajouter tes modifications sur les différentes scenes.

la dernière version avant tes modifications se trouve ici :
informfr.tuxfamily.org/lieuxcommuns/

lorsque le pb de la fin sera résolu, je ferai encore une mise à jour de ce répertoire, et je ferai également une version .zip pour la distribution (avec jeu + interpréteur).

En effet, le problème de la fin vient de ma modification. J’ajouterai une variable par scène, initialisée à 0 et mise à 1 dans chaque fonction DemarrerXXX, afin que cela fonctionne à nouveau.

Voilà c’est fait, il faut maintenant tester que cela fonctionne.

レツゴ
Enfin let’s go.
Enfin je m’y attèle. Prévenez vos femmes, préparez vos bassines d’eau froide, fermez bien à clef le tiroir qui contient votre colt .44 et avalez la clef, parce que je suis un testeur impitoyable =]

avec « rejouer » puis solution.txt, cela m’a l’air de fonctionner parfaitement ! Super !

Je vais essayer également de faire d’autres fichiers de solution pour tester les autres possibilités et fins et voir s’il ne reste pas de bugs…

Je mettrai le fichier de distribution à disposition ce midi si je peux…

Merci l’utf-8 pour l’affichage d’injures en japonais :slight_smile:

On va voir si tu atteinds mon niveau en stormisation (= tests impitoyables confinant au chipotage). Conseil : télécharge bien toutes les images et sons (elles sont où déjà Otto ?) avant de générer le .blb, afin d’avoir un test qui porte aussi bien sur le texte que sur l’image et le son !

  1. Première chose : certains ObjetsPortail si ce sont eux ne sont pas désactivés hors de la croisée des lieux communs. En effet, si on va dans l’ « Étrange Pièce » avec le vieux livre poussiéreux (jardins) et la carte postale (musée), le fait de toucher la carte postale dira qu’elle n’a aucun effet hors de la croisée des lieux communs, cependant sentir le vieux livre poussiéreux amènera aux jardins.

  2. Toujours dans ce même lieu, la commande > se planter le couteau dans le coeur ne fonctionne pas. Le joueur aura-t-il l’idée d’essayer de > se tuer après que sa précédente idée abracadabrantesque ait échoué ?

  3. Dans l’Océan : « je crus voir apparaître un visage phosphorescent ». À la commande > x visage, on pourrait avoir un message plus approprié (ex: « Je ne discernai plus cette vision d’horreur, ce qui pourtant n’aida point à faire diminuer mon angoisse. »).

  4. Une fois sur le rocher, utiliser un de ses 5 sens sur l’eau donne le message suivant : « Le décor de l’aventure. Il n’y a rien à tirer de cela. » Un peu étrange non ?

  5. Ne serait-il pas possible d’ouvrir la trappe avec le couteau de la scène de l’ourson, si on l’a, de manière à améliorer le moral du personnage et par exemple, à gagner 1 point (en évitant de se couvrir du sang de ses poings) ?

  6. Dans la cité sous les eaux, un > sentir cadavre serait peut être bien.

  7. Bug critique :

piloter tableau de commandes
Je n’avais pas une expérience de ce genre d’engin comme pouvaient l’avoir certains de mes collègues, mais néanmoins ce n’était pas bien sorcier à piloter. Après avoir activé les magnétos pour démarrer le propulseur, je trouva également la commande pour envoyer une décharge de protection électrique anti-requin. Cela ne fut pas assez puissant pour tuer le monstre qui s’échinait sur la carlingue du sous-marin, mais suffit pour lui faire lâcher prise, et je pus repartir en direction de la surface.

*** fatal error: Illegal instruction ***

Et crash du jeu évidemment. Au deuxième essai, je n’ai pas eu l’erreur.

:sunglasses: > porter pendentif
Je ne pouvais pas mettre cela sur moi comme un vêtement !

Ce serait intéressant :wink: Un attribut du style has portable ? =]

  1. Dans le musée :

dire Ngha ghaa Ia Ghphit Ia Ia Chtulhu Fhtagn Nyagh Phgit
(a la momie)
Ce n’était certainement pas le moment !

Ngha ghaa Ia Ghphit Ia Ia Chtulhu Fhtagn Nyagh Phgit
Je prononçais tant bien que mal […]

À corriger non ? De plus il manque l’accent au (a la momie), mais là le problème vient peut être plutôt des libs non ?

  1. Dans les jardins, au bassin :
    « Il y avait une statue au fond du jardin, derrière le bassin.

Je pouvais voir une statue. »

  1. L’ombre réapparu
    => J’ai cru bon de le corriger en « l’ombre réapparut » (trois fois je crois). Si jamais j’ai fait une erreur, on peut revenir à la version sans T.

  2. Si on est entré une fois dans le portail de la rotonde qui nous ramène à la roulotte, en retournant dans le jardin on se fait quasiment toujours attraper par le monster… De plus comment faire pour être en saison == 2 plutôt qu’en saison == 1 ?

Pour les questions de la désactivation des objets portail et de la rejouabilité des scènes, seules les scènes 86 (ourson), 190 (musée) et 39 (plage) sont à jour. Il me reste encore à gérer cet aspect des choses pour les autres scènes.

Mazette, ça c’est du beta testing !
Ma femme est en train de finir un jeu en anglais pour l’ifcomp, si cela vous tente de jouer, puis de le Stormiser et Akieniser, je pense qu’il n’y aura plus de bug à la fin :slight_smile: En plus je le trouve assez plaisant à jouer. Si vous voulez, je peux vous envoyer le fichier.

Bon, ce sont de très bonnes remarques.

je laisse Stormi s’en occuper…

je pense que c’est trop compliqué et lourd à mettre en place.
La réponse est assez claire quand même (« j’ai bien peur de ne pas comprendre »…), aussi c’est au joueur d’essayer une autre commande. À voir par contre si on change ce message ou pas. Mais je trouve que le « vous » passe dans le contexte.

« utiliser le couteau » / « utiliser le couteau sur moi / attaquer moi / m’attaquer/ me tuer » etc, cela fonctionne.

ok, j’ai ajouté ta phrase, c’est bien mieux ainsi.

oui. Je n’ai pas trop d’idée, alors j’ai modifié par « J’avais mieux à faire pour le moment ». En fait ce n’est pas un « scenic » comme l’avais fait Stormi, c’est un objet qui renvoie cela, car il se trouve dans plusieurs lieux à la fois. On peut toujours paramétrer, mais je n’ai pas voulu entrer dans les détails. Si vous pouvez être plus lyrique, pourquoi pas.

bonne idée, c’est ajouté. Pas de point par contre, car vu que cela dépend de l’ordre des scenes, un joueur qui fini tout correctement mais sans savoir quelle scene faire avant n’aura pas le maximum. Par contre si le joueur attaque la trapper (sans préciser avec le couteau), cela sort automatiquement le couteau. Le 2 devraient fonctionner, je viens de tester.

ok, j’ai ajouté : « Je n’allais pas mettre mon nez sur ce cadavre, par contre le corps devait avoir été décomposé depuis tellement longtemps qu’il n’y avait plus d’odeur notable qui émanait de celui-ci. »
Cela serait pas mal de faire une classe pour ces souterrains, pour dire par exemple que cela sent la vase, ou le champignon etc

les seules instructions qu’il y a ensuite sont :
score = score + 1 ; gagne() ;

en ayant fait beaucoup de fois le test complet du jeu (pour arriver à la fin) avec le code zmachine, cela n’a jamais crashé. Est-ce que c’est gargoyle que l’on a fourni que tu utilises (affiche glulxe dans la barre de titre), ou bien un autre gargoyle (affiche git dans le titre). Git est vraiment très très buggé, il ne faut absolument plus l’utiliser. Par exemple pour le jeu de ma femme, dès le démarrage dans les premières instructions cela crash direct, avec glulxe aucun problème.

Pour lieuxcommuns, si cela vient d’autre chose, c’est bizarre que cela ne l’ai pas fait la seconde fois.

exact. L’attribut c’est « clothing ». Je l’ajoute, c’est une bonne idée. Bien entendu le joueur se transformera en un profond (un monstre, comme la femme à la fin de cette scene). Cela vous tente ? On peut à partir de là soit mettre le score du joueur à 0 pour lui indiquer que ce n’est pas une façon de gagner, et le laisser errer en modifiant la fin (peut faire soit la fin ultime (même sans score), soit la fin ratée), soit on le fait perdre tout de suite. La dernière éventualité est plus facile à coder, évite des incohérences éventuelles, mais est moins drôle :slight_smile:

j’ai ajouté cela qui réagit si on fait « dire » face à la momie

Tell,Parler,Answer: « Je ne pouvais pas parler normalement à cette créature, mais je pouvais peut-être invoquer une formule adéquate ? »;

comme cela le joueur comprendra peut-être qu’il doit écrire « invoquer » à la place de dire (on peut utiliser la formule toute seule également)

Pour l’accent qui manque, je ne sais pas où on doit le corriger. Par contre je viens de voir que c’était déjà noté en bug :
informfr.tuxfamily.org/flyspray/ … task_id=21

j’ai essayé de corriger.

je pense que c’est correct maintenant très bien !

J’ai réinitialisé les variables dans la fonction reinitialise_scenes

(edit : j’ai corrigé la fin…)