🜲

Devlog Myriade #1

État des lieux et note d'intention.

J'ai commencé à travailler sur ce projet dans le but de créer un simulateur qui me permettrait de générer rapidement un décor de jeu de rôle utilisable presque en l'état, avec des factions, des donjons et une géographie prédéfinie.

J'ai été très inspiré par le boulot de Thomas, alias Idraluna, sur l'Antiborée, un décor de jeu qu'il a élaboré à partir de données géographiques réelles et de scripts. Il a documenté tout ça sur son blog, et son approche très technique m'a particulièrement intrigué.

Ça va peut-être étonner les gens qui traînent sur ce site, mais je n'aime pas beaucoup écrire. Surtout quand il s'agit de fiction. Par contre, il y a quelque chose qui m'intéresse beaucoup : les systèmes, en particulier l'émergence — quand d'une multitude de simplicités mises bout à bout émergent des phénomènes nouveaux et inattendus. Il y a dans cette complexité quelque chose d'authentique et d'inspiré que je trouve amusant, beau et inspirant.

J'ai commencé par reproduire ce qu'avait fait Idraluna avec QGIS, quelques scripts et un peu d'aide de sa part. Plusieurs problèmes se sont rapidement présentés. D'une part, QGIS est un logiciel affreusement lent, surtout quand on l'utilise pour un usage qui n'est pas exactement celui d'un géographe. Ensuite, les scripts Python, eux aussi, sont affreusement lents, avec des temps d'exécution qui peuvent nécessiter de laisser tourner son ordinateur pendant la nuit.

Ça ne m'a pas empêché d'avoir quelques résultats encourageants et de faire quelques trucs cools. Mais le souci, c'est que tout ça était un peu statique, un peu simpliste. J'avais moins l'impression de générer un monde et davantage le sentiment de placer quelques points au hasard.

En voulant complexifier la simulation, je me suis dit que ce serait sûrement plus optimal de bosser en Rust. Par chance, il existait déjà des crates pour travailler avec les formats ouverts utilisés par QGIS, donc j'ai commencé à faire le con avec ça. Et effectivement, c'était beaucoup, beaucoup plus rapide. Les 30 minutes de traitement sont devenues 3 secondes, et je n'exagère même pas.

Les opérations et la simulation sont devenues de plus en plus complexes, mais c’est QGIS qui a fini par me limiter. C’était très chiant de devoir ouvrir cette usine à gaz à chaque fois pour regarder ce que j'avais généré. Alors j'ai codé mon propre rendu, avec un moteur de jeu minimaliste qui s'appelle Macroquad. Ça m'a pris 30 minutes.

Ce qui nous amène à ceci.

Description du modèle

Libéré de QGIS et des scripts pourris, j'ai commencé à vraiment m'amuser et à implémenter la simulation comme je le voulais. On va faire un petit tour de mon modèle, de comment ça fonctionne actuellement.

Chaque case contient une communauté. Cette communauté est déterminée par plusieurs facteurs importants dans la simulation : sa faction, sa culture, son niveau de technologie militaire, sa population et son niveau de développement.

Dans le cadre de la simulation, les cultures sont représentées par une liste de traits culturels qui servent à représenter le rapport de cette communauté à la politique.

Un trait culturel peut être ultrasocial (1) ou antisocial (0). Par ultrasocial, j'entends que ce trait culturel favorise la guerre, la centralisation et l'organisation à grande échelle, tandis que les traits antisociaux (qui portent très, très mal leur nom, mais que voulez-vous) représentent des traditions et habitudes qui tendent vers le décentralisme et l'égalitarisme.

En bref, une culture peut être principalement résumée à un score d'ultrasocialisation qui va déterminer son efficacité dans les affaires militaires et politiques.

Les factions, quant à elles, sont simplement des communautés de communautés qui mettent en commun leurs ressources dans l'intérêt général.

En ce qui concerne la technologie militaire, elle représente principalement le savoir-faire autour du travail du métal et de la cavalerie, qui nous est historiquement parvenu des plaines d'Asie centrale. Dans la simulation, elle est modélisée sur une case par une suite de traits (0 et 1) qui se propagent aléatoirement à chaque tour aux cases adjacentes.

Enfin, le développement et la population évoluent passivement dans chaque communauté quand on lui fout la paix. Chaque case a un score d'arabilité qui, multiplié par le score de développement, permet d'obtenir la population maximale qu'une communauté peut accueillir. La population évolue doucement à chaque tour jusqu'à atteindre ce plafond.

Maintenant qu'on a fait le tour de ce qui caractérise les communautés, voyons les systèmes qui font évoluer ces variables.

Guerre, conquête et ethnocides

Chaque tour, chaque communauté va choisir une cible aléatoire parmi ses voisines qui ne font pas partie de sa faction. On compare ensuite le score de guerre de l'attaquant et du défenseur.

Pour obtenir le score de guerre, je prends la faction de la communauté attaquante/défenseuse et je cumule la population totale de chaque communauté de la faction, multipliée par un coefficient qui dépend de l'ultrasocialité de la communauté locale. En gros, je récupère la population mobilisable de chaque faction.

Ensuite, j’applique deux pénalités à l'attaquant. D'abord, une pénalité liée à la difficulté du terrain, qui avantage toujours les défenseurs. Ensuite, une pénalité liée à la largeur du front — c’est-à-dire le nombre de côtés par lesquels l'attaquant peut attaquer cette case.

Enfin, si le score de l'attaquant est plus élevé que celui du défenseur, la case est conquise. Mais ce n'est pas fini. Vous avez remarqué que je n'ai pas encore parlé de technologie militaire. C'est normal.

Je vais employer des mots très vilains pour décrire ce qui se passe quand une faction acquiert une nouvelle case. Déjà, je calcule la dévastation que le conflit a causée. Pour obtenir le facteur de dévastation, je récupère la magnitude du ratio entre la force de l'attaquant et du défenseur — plus les forces sont équilibrées, plus la lutte est sanglante. Je multiplie cette magnitude par le niveau technologique : les armes augmentent les dommages collatéraux. À partir de cette dévastation, je diminue le développement et la population de la communauté ciblée.

Mais ça continue ! Ensuite, il faut savoir si un ethnocide a lieu ou pas. Un ethnocide, c'est quand la culture du vainqueur remplace celle du vaincu. Je ne vous fais pas un dessin de comment ça peut se produire. Pour savoir si un ethnocide a lieu, je prends en compte deux facteurs principaux : la difficulté du terrain (encore) qui diminue les chances que ça arrive, et le niveau de technologie militaire de l'attaquant, qui les augmente.

Je vous met une autre vidéo, chui pas un monstre. Pourquoi c'est toujours les verts qui gagnent ?

Désintégration politique

Bref, voilà comment les factions s'agrandissent. Mais elles peuvent aussi s'auto-détruire si certaines conditions sont remplies, notamment quand les tensions internes deviennent trop fortes.

Le niveau de tension interne est obtenu en multipliant la taille totale de la faction (le nombre de communautés qu'elle intègre) par le nombre de traits culturels uniques. En gros, plus un empire est grand — par sa population ou par la diversité des cultures qui l’habitent —, plus il risque de s'effondrer. Alors attention, c'est un modèle extrêmement simplifié. Mais j'y reviendrai en fin de texte.

Quand une faction dépasse un certain seuil, elle explose au niveau des frontières culturelles, ce qui fait qu'on a autant de factions successeures qu'on avait de cultures.

Cela amène à une guerre civile qui, à travers la mécanique des ethnocides, va redessiner la carte des cultures de la région.

Mais ce n'est pas la seule façon par laquelle les cultures évoluent. Chaque tour, chaque communauté a une chance de développer une mutation : un trait qui va aléatoirement se transformer. Cette mécanique de mutation permet de s'assurer qu'avec le temps, tous les empires finissent par s'effondrer.

Limites du modèle

Avec tout ça, on obtient quelque chose de plutôt divertissant à regarder et qui permet d'obtenir des frontières assez naturelles. Cependant, plusieurs réflexions me sont venues à force de regarder les petites cartes se colorier.

Déjà, je trouve que les hégémonies toutes-puissantes émergent un peu trop facilement. Cela vient du fait que, dans ce modèle, les factions ne souffrent pas du même problème qui a mis fin à presque tous les empires de notre monde : la surextension. Les factions peuvent défendre toutes leurs frontières sans problème et utiliser parfaitement toutes leurs ressources.

Si je voulais simplement améliorer la simulation telle qu'elle existe, je ferais en sorte que chaque case attaquée ou défendue coûte un certain budget à une faction, de sorte à ce que les empires puissent s'effondrer par les dégâts cumulés de mille et une coupures.

Ensuite, je n'aime pas la façon dont le développement est simulé. Le modèle actuel fait que le développement et la population augmentent à peu près partout et au même rythme, d'une façon très peu naturelle. Il faudrait que le développement évolue beaucoup plus lentement, mais soit concentré autour de certaines régions urbanisées.

Mais surtout, le plus gros problème que j'ai avec cette simulation, c'est l'absence totale de diplomatie et d'agentivité de la part des factions. Que se passerait-il si les factions pouvaient former des confédérations pour contenir une puissance émergente, évaluer les cases prioritaires et utiliser leurs forces intelligemment ?

On joue quand dans tout ça ?

Vous avez remarqué que depuis le début je parle de simulation et pas de jeu. C'est parce que, jusqu'à maintenant, je n'avais pas forcément prévu d'en faire un jeu vidéo.

Mais en réfléchissant à ce que l'agentivité pourrait apporter à la simulation, et en constatant le plaisir que je prenais à voir ce petit monde s'agiter, je me suis dit qu'il y avait du potentiel là-dedans pour faire un jeu au moins un petit peu intéressant et captivant. Mais pour que ce soit le cas, beaucoup de choses doivent changer.

Comme ce journal devient déjà un peu trop long à mon goût, on va dire que ce sera le sujet du prochain journal de développement : comment est-ce que je compte transformer ma simulation faite à l'arrache en un véritable jeu de stratégie ? On en discute la prochaine fois.