Interra : Bientôt un nouveau jeu !

Je termine l’adaptation de l’un de mes anciens jeux DOS en inform. Mais avant de le soumettre à des béta testeurs, j’aurais besoin de quelques conseils pour terminer la programmation… :slight_smile:

Le premier est (je pense :wink: ) tout simple : à l’époque où je programmais en BASIC, je n’utilisais pas de système de score au sein de mes jeux. Et pour terminer le jeu, je rajoutait quelques lignes de code, qui affichaient un message puis stoppaient l’éxécution du programme. Sous inform, existe-il une sub à appeler afin de terminer un jeu ? Où suis-je obligé d’utiliser le système de score ?

il suffit juste d’appeler :

deadflag=2 (pour gagner). 3 c’est indéfini, et 1 c’est perdu je crois.

Pour ne pas avoir de score, il faut ajouter une référence à noscore mais je n’ai pas la syntaxe exacte en tête. Il me semble que c’est :

Constant NOSCORE;

Alors deadflag=2 ça marche mais pas la constante de score, mais ce n’est pas grave…

Je rajoute une question : comment puis-je bricoler un pont ultra simple (à double passage/face)? Il n’y a pas de piège, pas de clé… bref, un truc tout simple :slight_smile:

Sauf si je me plante, traite le comme une room normale avec deux directions possibles ?

JB

apparemment c’est plutôt :

Constant NO_SCORE;

voilà :slight_smile:

Oui merci otto, No_score fonctionne

Par contre, vous pourriez regarder la fin de mon jeu : cette sub est appelée lorsque le joueur examine un objet. Tout se déroule bien à l’exécution, mais un 1 apparaît juste avant le texte « Vous avez gagné »

!sub qui gère la pause
[Pause notNeeded;
@read_char 1 notNeeded;
rtrue;
];


!sub qui est appelée pour terminer le jeu
[Fin notNeededb;
Pause();
print "Après quelques instants, vous remarquez que votre reflet n'y apparaît pas.^^";
Pause();
print "Finalement, c'est le reflet de votre chambre qui s'offre à votre regard.^^";
Pause();
print "La très faible lumière ambiante s'estompe soudain...^^";
Pause();
print "Vous ouvrez les yeux, et vous vous aperçevez que vous êtes rentré chez vous...^^";
Pause();
print "Après un long voyage dans le monde d'Interra.^^^";

!print "^";




@read_char 1 notNeededb;

deadflag=2;

!];


!deadflag=2;

!rfalse;
!return;

];

J’ai pourtant enlevé des 1 sur d’autres passages mais ici je n’y suis pas arrivé… :frowning: (merci d’avance)

Le problème ne vient probablement pas de la fonction en elle-même mais de la manière dont tu l’appelles, tu peux nous donner l’extrait ?

Voilà. Quand on examine l’objet, la sub est appelée.

[code]Object O3 « Miroir »

with name « miroir »,

before[;
Examine: « C’est un miroir en pied, entouré de très fines ferronneries.^^ » , Fin();
],

found_in L30,
has scenery static;

[/code]

Rien de bien sorcier je pense… c’est sans doute un problème de virgule ou de point virgule juste avant l’appel de la sub… :confused:

Ben voilà, tu as trouvé la solution tout seul :slight_smile:

Remplace la virgule par un point virgule juste avant l’appel de la sub et c’est gagné.

euh en mettant un point virgule, il n’est pas certain qu’il execute la procedure Fin() du coup puisque le fait de faire « C’est un miroir… » fait un print et un return en une seul fonction, du coup la fonction d’après n’est sans doute pas exécutée… Tu devrais essayer:

before[;
    Examine:   
        print "C'est un miroir en pied, entouré de très fines ferronneries.^^";  
        Fin();
        return true;
], 

Enfin d’après mes souvenirs d’inform, ça fait longtemps :stuck_out_tongue:

Tout juste, j’avais oublié ce petit petit petit détail :slight_smile:

Effectivement ça marche. Merci à vous :smiley:

Et juste une petite question : comment puis-je spécifier dans une room un texte qui s’affiche au moment où l’on part vers une direction ? Genre je vais au nord et « Vous marchez en direction du nord sur une petite route bordée d’arbres » ?

[n_to;
    print "Vous marchez en direction du nord sur une petite route bordée d'arbres";
    move player to petiteRoute;

];

Mais y’a surement plus simple :slight_smile:

Ca marche pas :frowning:

Il y a plein d’erreurs à la compilation. J’ai un peu modifié pour qu’il n’y ait plus d’erreurs mais la direction n’est pas reconnue…

n_to[; print "Vous marchez en direction du nord sur une petite route bordée d'arbres.^"; move player to petiteRoute; ],

L’interpréteur me renvoie « Vous ne pouvez pas aller là. »

oups désolés ça faisait longtemps et j’avais pas de compilateur inform sous la main :stuck_out_tongue:

maintenant oui :sunglasses: :

Object clairiere "Dans la clairière..."
    with description "Les oiseaux gazouillent et les mouches pètent, tout va pour le mieux à l'orée de la forêt...",
    n_to petiteRoute,
    before [;
        Go:
            if(noun == n_obj)
                print "Vous marchez en direction du nord sur une petite route bordée d'arbres.^"; 
                    
    ],
    has light;

La routine n_to doit renvoyer soit false soit un nom de lieu et ne doit pas faire le deplacement du joueur elle-meme.

Ainsi, cela devrait fonctionner (non testé) :

n_to[; 
    print "Vous marchez en direction du nord sur une petite route bordée d'arbres.^";
    return petiteRoute;
],

en effet !!! bien joué… ça m’apprendra à ne pas toucher à inform pendant presque un an :confused:

sinon move c’est pour des objets. Pour déplacer le joueur lui-même il faut utiliser playerto(endroit); (si ma mémoire est bonne)

Merci à vous tous j’ai beaucoup avancé dans la programmation. :smiley:

C’est pas encore pour tout de suite mais comment puis-je partager le fichier zcode de mon jeu afin de le soumettre à vos tests ? Dois-je utiliser le dépot ?

Tant que j’y pense, y a t-il de grosses différences entre un fichier compilé en Z5 et en Z8 ? Je constate en effet que les 2 types cohabitent.

J’ai quasiment fini la version béta de mon jeu :slight_smile: . Encore quelques petites corrections et je pourrais partager le fichier.

Comment puis-je faire pour partager un fichier ?

Et au niveau des bétas tests, comment ça se déroule ? vous postez vos rapports de bugs ici et moi ensuite je corrige ?