Limites de I7

J’avance bien sur mon dernier jeu, un dungeon crawler pour ados et pré-ados, histoire de voir s’ils savent encore lire. Et les résultats sont encourageants : ils ne savaient pas qu’on peut faire des jeux avec d’autres « scénarios » que tirer à vue tout ce qui bouge et même tout ce qui ne bouge pas, des « jeux avec une histoire », et ils sont tout surpris. Je vous en reparlerai.

A mon avis, ce jeu n’est pas énorme : 18 000 mots, 63 salles et 130 objets y compris les backdrops. Je pense finir à 22 - 23 000 mots.

Mais j’ai déjà du repousser les limites par défaut d’I7. J’en suis là :

Use MAX_NUM_STATIC_STRINGS of 50000.
Use MAX_PROP_TABLE_SIZE of 50000.
Use MAX_STATIC_DATA of 300000.

Ça m’inquiète.

Non, je te rassure, tu peux y aller tranquille.

Avec un interpréteur genre Gargoyle ou Lectrote, ça ne posera aucun problème, jamais.

Dans le pire des cas ton jeu saturera la mémoire virtuelle si tu fais une version jouable en ligne, mais pour ça il faudrait que tu aies des milliers d’objets et un nombre déraisonnable de règles qui tournent en même temps (je le sais, ça m’est arrivé…)

Merci.

Pour être exact (en tout cas si je ne me trompe pas), ces réglages ne concernent pas I7, ni même l’histoire compilée, mais la mémoire que le compilateur I6 alloue lors de la compilation.

Pour pas que le compilateur ne bouffe toute ta mémoire (la RAM, j’imagine), il alloue un certaine quantité fixe de mémoire pour stocker diverses choses lors de la compilation. Mais si le jeu est très gros, alors la quantité par défaut ne suffit pas et il faut l’augmenter. (C’est sûrement moins pertinent aujourd’hui que dans les années 90, quand a été écrit le compilateur I6. Aujourd’hui, le compilateur pourrait s’allouer beaucoup plus de mémoire par défaut, je pense.)

Tout ça pour dire que ce que tu atteins n’est pas une limite de la taille du jeu. Le jeu peut aller bien plus loin. Avec Glulx, c’est 2 Go, ce qui est équivalent en texte à quelque chose comme 20 % de tout Wikipédia en anglais. Donc tu n’as pas à t’inquiéter.

Néanmoins, si ton jeu possède beaucoup d’objets (plusieurs centaines), il pourra devenir très lent parce que les Standard Rules ne sont pas optimisées pour ce genre de cas extrême. Zarf a écrit une extension pour mitiger ce problème, mais ça n’arrive pas souvent.

Et si ton jeu est vraiment vraiment très très très gros, le compilateur I7 peut bloquer parce qu’il n’est pas vraiment testé dans ces conditions et donc peut avoir des bugs de ce côté. Mais à ma connaissance, ça n’est arrivé qu’à un seul projet I7 (un jeu pour adulte, je peux te donner le nom si tu veux aller voir à quoi ça ressemble).

Ça, ça m’étonnerait que ça puisse vraiment arriver, sauf quand on fait quelque chose de « stupide », comme une règle qui se relance récursivement à l’infini. Dans ce cas, ça n’est pas spécifique à Inform, tous les programmes qui font ça font finir par planter, parce qu’il auront besoin de plus de mémoire que l’ordinateur peut fournir.

Merci à toi aussi.