Alt-F4 n°51 - L'expérience Fluidic Power 05-11-2021
traduit par bev, Firerazer
Pour la parution n°51 de Alt-F4, notre ancien contributeur et éditeur extraordinaire stringweasel nous régale avec la plongée dans l’histoire des mods qui tentent de rendre le réseau électrique de Factorio plus réaliste. Chacun d’entre eux a des avantages et des inconvénients, et c’est pourquoi il nous présente sa propre solution à ce vieux problème, avec de bons résultats !
Le projet Fluidic Power stringweasel
Depuis ma formation en ingénierie électronique, je vois le flux d’électricité partout où je regarde. La vague de voitures qui progresse en sens inverse dans les embouteillages est, à mes yeux, le mouvement des électrons. Ce qui est encore plus intéressant, c’est la similitude entre le flux d’électricité et le mouvement des fluides. Lorsque je tire la chasse d’eau et que cela crée un tourbillon, je vois une inductance qui est chargée par un condensateur. Lorsque je ferme soudainement le robinet et que j’entends le martèlement de l’eau dans les tuyaux, je vois la pointe de tension d’une inductance qui est utilisée pour les convertisseurs Boost. Ne serait-ce pas génial d’avoir ce comportement réaliste de l’électricité dans Factorio ?
Pourquoi est-ce si difficile ?
Tout d’abord, dans le jeu Factorio standard, l’électricité se comporte de manière idéale, ce qui signifie qu’il n’y a pas de résistance dans les câbles. Votre réseau électrique peut transmettre une puissance infinie sur des distances infinies, indéfiniment. C’est presque comme s’ils avaient attaché des supraconducteurs refroidis par cryogénie à des poteaux en bois bon marché. Cela fonctionne très bien pour les objectifs et les contraintes de ce jeu et convient parfaitement à la plupart des styles de jeu. Cependant, il y a toujours eu quelques joueurs à la recherche d’un peu plus de défi, se demandant si l’électricité ne pourrait pas être rendue plus réaliste, ou des joueurs qui ont envie de faire appel à des transformateurs pour éviter les chutes de tension sur de longues distances.
Cependant, recréer des comportements électriques plus réalistes est (sans doute) hors de portée du Factorio standard et n’arrivera probablement jamais. C’est donc aux mods de remplir cette niche un peu sadique. Dans Factorio, les mods ne peuvent modifier que des caractéristiques prédéterminées du jeu, et les options disponibles pour l’électricité sont très limitées. C’est pourquoi les moddeurs ont souvent dû trouver des solutions de substitution intéressantes. L’un des principaux problèmes est qu’une fois que les poteaux électriques sont reliés par un câble en cuivre, le jeu transfère automatiquement l’électricité de manière interne. Et ça, des mods ne peuvent pas le modifier. Le seul accès réel au système électrique consiste à fournir ou à évacuer artificiellement de l’électricité à l’aide d’une interface d’énergie électrique (ci-après appelée IEE), mais cela ne change pas comment l’électricité est distribuée.
Une autre possibilité est de retirer manuellement les câbles en cuivre des poteaux électriques pour gérer manuellement le flux d’électricité, mais cela supprimera toujours aussi la visualisation de la connexion des câbles, ce qui est gênant. Cela vous obligera également à calculer vous-même le transfert d’énergie dans le code du mod et à gérer artificiellement le réseau électrique, tout comme le jeu le ferait normalement en coulisse. Le problème est que les calculs effectués par un mod seront toujours plusieurs fois plus lents que si c’était le moteur du jeu qui les faisait. C’est pourquoi l’un des développeurs de Factorio Rseding91 a déclaré ce qui suit il y a quelques années, après que quelqu’un ait demandé un mod pour implémenter une chute de tension.
[La tension] n’est pas la seule chose que vous allez vous inquiéter de voir chuter. Si vous utilisez un tel mod, vos UPS vont s’effondrer une fois que vous aurez construit plus d’un exemplaire de n’importe quoi :P
[Voltage is] not the only thing you’re going to be worrying about dropping. Your UPS will TANK once you build more than a few of anything if you used such a mod :P
— Rseding91, Développeur de Factorio
Bien entendu, cela ne signifie pas que c’est impossible, même si ce n’est pas aussi performant que le Factorio standard. Les mods ont trouvé de magnifiques moyens de contourner toutes sortes d’obstacles, y compris ces limitations, et ont créé toutes sortes de mécanismes de jeu formidables, autrefois considérés comme irréalistes.
Une brève histoire des refontes de l’électricité
L’un des premiers mods de refonte de l’énergie a probablement été Flow Network, créé à l’époque de la version 0.13 de Factorio. En gros, un accumulateur invisible est placé sous chaque poteau électrique, créant ainsi une entité composite, une astuce très couramment utilisée dans les mods. Le câble en cuivre est ensuite retiré et remplacé par un câble logique rouge pour supprimer le transfert classique d’électricité, tout en conservant la possibilité de visualiser la connexion. L’énergie est ensuite distribuée manuellement entre ces accumulateurs cachés à l’aide d’un script personnalisé. Malheureusement, comme mentionné précédemment, cette méthode est très lente, car tous les calculs d’électricité sont effectués dans le mod et non gérés par Factorio lui-même. Ce système a cependant l’avantage d’être très personnalisable.
Une autre tentative a vu le jour avec Factorio 0.15, appelée High Voltage. Il s’agit d’un mod assez intéressant avec beaucoup de parties mobiles. L’électricité est distribuée soit à haute tension, soit à tension normale, et les transformateurs et autres équipements sont soit des accumulateurs, soit des IEE. La distribution de l’électricité à haute tension est ensuite calculée manuellement avec des formules spécifiques, très similaire à ce que Flow Network avait fait. Cela a permis à l’auteur d’introduire des mécanismes intéressants comme les transformateurs qui ont besoin de temps pour “tourner”. La tension normale, quant à elle, alimente simplement vos machines et est distribuée à l’aide de câbles en cuivre, comme dans le jeu original, ce qui signifie qu’aucun calcul de modélisation n’est nécessaire. Par ailleurs, l’auteur a introduit un type de chute de tension sur la distance qui ne nécessite un calcul que lorsqu’un poteau électrique est placé. Si le poteau électrique placé est trop éloigné du transformateur, il ne pourra alimenter aucune machine. Ce qui se passe, c’est que le poteau électrique est silencieusement remplacé par un poteau avec une distance d’alimentation de zéro, ce qui signifie que le poteau sera toujours connecté au courant, mais qu’il ne pourra pas transmettre ce courant aux machines. Une solution plutôt brillante.
Ces deux mods étaient très gourmands en performances et n’auraient probablement pas été adaptés aux grandes usines. Et ils n’ont jamais été mis à jour pour les nouvelles versions de Factorio. À mon avis, la meilleure solution moderne est probablement Power Overload de Xorimuth. Ici, le but est de diviser le réseau électrique en sous-réseaux distincts à l’aide de transformateurs. Il n’y a pas de changement réel de la puissance passant par un transformateur, et le transfert de puissance à travers celui-ci est calculé par le mod lui-même. Si un sous-réseau donné a un poteau électrique qui tire plus de puissance qu’il ne peut en supporter, il a une chance d’exploser ! Ce qui rend ce mod étonnant, c’est la propreté de son aspect et de sa convivialité, avec toutes les connexions en cuivre encore visibles. C’est parce que la plupart des composants nécessaires, comme les IEE que l’auteur exige pour la manipulation de la puissance, est déporté sur une surface complètement différente, tous connectés par des câbles en cuivre transdimentionnels !
Une dernière mention honorable serait Electric Transformators sur lequel je suis tombé par hasard un mois ou deux après la sortie de Fluidic Power. Il a une approche similaire à celle de Power Overload, mais sans les poteaux électriques qui explosent, ce qui signifie qu’il ne punit pas le fait de ne pas utiliser les transformateurs. Il a cependant trouvé une façon intéressante de construire des transformateurs qui ne nécessitent aucun calcul de puissance de la part du mod. Chaque transformateur est une entité composite avec une chaudière qui crée un fluide à partir de l’électricité, puis un générateur qui le retransforme en électricité. Cela signifie que les réseaux électriques sont déconnectés, mais que les calculs entre les réseaux sont toujours effectués par le moteur de jeu (beaucoup plus performant).
Ces mods sont tous géniaux à leur manière et peuvent créer un style de jeu étonnant. Cependant, je me demandais si l’électricité pouvait être encore plus réaliste ? Pourrait-elle imiter encore plus fidèlement les fluides ? Et surtout, pouvons-nous créer un mécanisme qui pénaliserait de manière naturelle certains réseaux électriques en limitant le débit, ce qui encouragerait l’utilisation de transformateurs ?
En quoi ai-je été différent ?
Heureusement, Factorio dispose d’une simulation intégrée des fluides, qui est très bien optimisée et fonctionne avec le moteur du jeu. Cette simulation gère le pétrole dans vos réservoirs de stockage et la vapeur dans vos centrales nucléaires. Elle n’est pas parfaite et peut causer quelques maux de tête, mais elle fonctionne suffisamment bien. Cette simulation de fluide est exactement ce qu’il me faut pour imiter l’électricité qui circule comme un fluide. J’ai donc entrepris de la mettre en œuvre.
Après de nombreuses heures à me démener avec la phase de données de Factorio, et à me battre avec des boîtes de fluides et des entités composites pendant bien trop longtemps, je suis finalement tombé sur une solution qui fonctionne. J’ai réussi à convertir l’électricité en un fluide (que j’appelle le fluide d’énergie) et à transformer tous les poteaux en tuyaux. Vous trouverez ci-dessous un exemple de machine à vapeur alimentant un four électrique à l’aide de Fluidic Power, montrant à la fois ce que vous verrez en utilisant le mod (à gauche) et ce qui se passe en coulisses (à droite).
Le fluide d’énergie s’écoulera vers les autres poteaux comme un fluide, tout comme l’eau ou tout autre fluide, et de là, il alimentera vos entités. L’unité de ce fluide d’énergie est le Joule (par exemple 10kJ
), ce qui signifie que c’est de l’énergie qui est distribuée à travers les poteaux. L’unité aurait probablement pu être le Volt ou même le Coulomb (comme pour la charge électrique), mais l’utilisation de l’énergie s’intègre facilement aux mécanismes existants de Factorio.
Cette mise en œuvre nécessite toutefois deux types de poteaux, à savoir les poteaux normaux et les poteaux sources. Les poteaux sources sont placés à côté de vos générateurs d’énergie, et ils créent le fluide d’énergie. Pour ce faire, on place sous le poteau une mini machine d’assemblage qui crée le fluide au bon débit en fonction d’une consommation d’énergie donnée. Pour alimenter vos machines, vous avez besoin de poteaux électriques normaux, sous lesquels se trouvent de mini générateurs (comme la machine à vapeur) qui retransforment le fluide en électricité. Cela permet également au fluide d’énergie de circuler à travers plusieurs poteaux jusqu’à l’endroit où il est nécessaire, tout comme vous pouvez enchaîner les machines à vapeur. Cela signifie également que je peux limiter la puissance que chaque poteau peut fournir aux machines qui l’entourent !
Voici le pseudo-code permettant de s’assurer que les poteaux électriques ont les bonnes caractéristiques.
// La production d’énergie est déterminée par la consommation d’énergie de la machine d’assemblage du poteau source.
power_production = (fluid_fuel_value * units_per_craft) / crafting_time
// La consommation d’énergie est déterminée par le taux d’utilisation du fluide du générateur du poteau normal.
power_consumption = fluid_fuel_value * fluid_usage_per_tick * 60
Viennent ensuite les transformateurs, qui ont un rôle vital à jouer dans un mod comme celui-ci, car comme nous le savons tous, les fluides ne se propagent pas très loin à haut débit. Dans le monde réel, un transformateur augmente la tension pour une distribution d’énergie plus efficace (pour faire simple). Fluidic Power n’a pas de tension à augmenter, mais le débit requis peut être simplifié en convertissant simplement l’énergie du fluide en une unité plus grande. Par exemple, la “haute tension” peut être obtenue en convertissant l’unité d’énergie du fluide à 1MJ
au lieu de 1kJ
. Cela signifie que pour la même quantité de flux de fluide, plus d’énergie circulera. Ce que j’apprécie vraiment dans cette implémentation, c’est la simplicité extrême de ces transformateurs. Tous les mods que j’ai mentionnés devaient calculer manuellement le transfert de puissance dans un transformateur ou créer des entités composites complexes, alors que j’ai simplement dû créer une machine d’assemblage avec une recette spécifique. Cette recette ne change pas la quantité totale d’énergie, mais la convertit en une forme plus ou moins dense. Le temps de fabrication de cette recette, ou la quantité d’unités de fluide qu’elle peut transformer, peut alors dicter la puissance d’entrée/sortie du transformateur !
// Exemple de recette de transformateur élévateur
1000 units of 1kJ fluid --> 1 unit of 1MJ fluid
// Débit de puissance du transformateur
power_rating = fluid_output_amount * fluid_output_unit / time_per_craft
Avec un minimum de bricolage, cela a permis d’obtenir un mécanisme de jeu intuitif et amusant. Le système est conçu de manière à ce que seule la tension la plus basse puisse alimenter vos machines ou accepter l’énergie générée. Ensuite, une fois que la tension est augmentée pour faciliter la distribution, le fluide haute tension ne peut circuler que via les grands poteaux électriques. Ces grands poteaux électriques sont également limités et ne peuvent alimenter aucune machine ni accepter aucune énergie générée. C’est probablement la partie de cette implémentation que je préfère. Cela signifie qu’il y a une incitation directe à créer un réseau de haute tension à travers votre base, et partout où vous voulez utiliser de l’énergie, vous devez utiliser des transformateurs.
Enfin, le fait que l’énergie soit simulée comme un fluide modifie la conception des accumulateurs. Il ne s’agit plus d’une entité intelligente qui n’accepte que les surplus d’énergie et qui ne libère toute son énergie que lorsqu’elle est demandée. Au lieu de cela, c’est un simple réservoir de stockage qui agit comme un gros condensateur aveugle. Il n’accepte que le courant basse tension, ce qui signifie que vos parcs d’accumulateurs auront besoin de beaucoup de transformateurs. Il est possible de créer le même comportement que les accumulateurs classiques avec des circuits logiques amusants, mais sans cela, ils fonctionnent quand même assez bien, bien que moins efficacement.
En conclusion
Dans l’ensemble, j’ai été surpris et excité de trouver une implémentation qui remplissait la plupart de mes objectifs et créait naturellement les défis et les obstacles que j’avais imaginés. Et je n’ai pas eu à créer beaucoup de limitations artificielles pour le joueur, ce qui est un grand bonus. Je n’ai créé que le système fondamental et il se régule tout seul ! J’abuse de certains mécanismes, ce qui introduit quelques bizarreries comme le mélange accidentel de différents voltages ou le fait de ne pas montrer les connexions physiques en cuivre, mais c’est en fait très amusant à jouer.
Cependant, une question reste : dans quelle mesure les performances de ce mod le rend-il encore jouable ? Ce mod nécessite beaucoup plus de calculs de fluide qu’un jeu traditionnel, et abuse de certains autres mécanismes. Le moteur hautement optimisé de Factorio peut-il tenir le coup, alors qu’il a été prédit qu’un tel mod ferait exploser vos UPS ? Je reviendrai plus en détail sur ce sujet la semaine prochaine. Pour finir sur un cliffhanger, ce que j’ai découvert pourrait vous surprendre. En tout cas, moi, ça m’a surpris.
Lien vers la deuxième partie
Contribuer
Comme toujours, nous attendons vos contributions pour les Alt-F4, que cela soit par la soumission d’un article ou en aidant pour les traductions. Si vous avez quelque chose d’intéressant en tête que vous souhaitez partager avec la communauté, vous êtes au bon endroit. Si vous n’êtes pas sûr, nous serons heureux de vous aider en discutant structure, contenu et idées. Donc si vous voulez vous impliquer dans les Alt-F4, rejoignez-le Discord pour ne rien rater !