warren
Un roguelike à progression persistante, en Lua, piloté depuis le terminal. Runs générés, classes, mutateurs et "legacy" entre les parties - avec mode headless et vérification du déterminisme.
Un roguelike avec progression persistante en Lua, piloté au terminal. Des parcours générés, des classes et des mutateurs, un système d'héritage entre les parties. La clé : un parcours est à la fois aléatoire et entièrement déterministe, car le même seed doit produire exactement le même parcours.
Introduction
Un roguelike vit de l'aléatoire : chaque partie une disposition de niveaux différente, des objets différents, des choix différents. Mais si cet aléatoire était vraiment aléatoire, on ne pourrait ni tester le jeu ni comparer les résultats équitablement. warren résout ce paradoxe avec un seed qui rend le monde frais pour le joueur et reproductible pour la machine.
Tout le reste est construit autour de cette seule propriété : les classes, les mutateurs et la couche d'héritage entre les parties. Le déterminisme n'est pas ici une limite au plaisir mais le fondement sur lequel reposent à la fois les tests et une progression qui a du sens.
Aléatoire pour le joueur, reproductible pour la machine
Tout le parcours est dérivé d'un seul nombre. Le même seed engendre toujours le même monde, mais le joueur voit tout de même de la fraîcheur parce que le seed change à chaque partie. L'aléatoire est donc apparent au sens technique et réel au sens ressenti : la disposition des niveaux, les objets et les événements sont calculés, pas retirés au hasard à nouveau.
La clé est que chaque tirage passe par cet unique générateur alimenté par le seed. Il suffit qu'un seul appel aille chercher de l'aléatoire en dehors de lui, et le déterminisme vole en éclats, c'est pourquoi tout le parcours doit passer avec discipline par la même source.
Le déterminisme comme outil de test
Puisque le seed détermine entièrement le parcours, on peut le rejouer sans humain. warren a un mode sans affichage qui joue tout seul sur un seed donné et vérifie que le résultat est identique à chaque fois. Cela transforme une loterie en quelque chose que l'on peut régresser : si un changement de code casse le déterminisme, le test l'attrape aussitôt.
Testez le déterminisme de façon contrefactuelle : introduisez un appel d'aléatoire inattendu en dehors du générateur principal et vérifiez qu'un parcours issu du même seed cesse de correspondre. Si le test ne le remarque pas, il ne garde rien.
L'héritage, la trace des parcours précédents
La progression persistante signifie que la mort du héros n'efface pas tout. Entre les parcours reste une couche d'héritage : classes débloquées, mutateurs qui changent les règles, petits bonus permanents. Ainsi la partie suivante commence autrement que la précédente, même si le moteur reste entièrement déterministe sur son seed.
Séparer ces deux couches importe ici. Le seed régit un seul parcours, l'héritage se transmet entre eux, et les deux ne doivent pas se mélanger, sinon la progression contaminerait la reproductibilité d'une seule partie.
Ce qui vient du seed et ce qui vient de l'héritage
| Élément | Source |
|---|---|
| Disposition des niveaux | seed |
| Objets et événements | seed |
| Classes débloquées | héritage, permanent |
| Mutateurs changeant les règles | héritage, permanent |
Plus de projets
D'autres réalisations de la même catégorie - découvrez comment nous abordons des défis similaires.
Vous avez un projet similaire ?
Contactez-nous - le devis est gratuit et arrive sous une heure.



