Dwarf Fortress n’est pas une source ouverte, et bien que de nombreuses conjectures et ingénierie inverse puissent expliquer son fonctionnement, je me concentrerai plutôt sur quelques techniques de base pour l’optimisation d’une 3D (et non de graphiques 3D, mais d’un monde en 3D). même type.
Comme dans tous les jeux vidéo, il y a beaucoup de fumée et de miroirs qui créent l'illusion de complexité à partir de règles et de systèmes simples. Celles-ci vont de l’utilisation de nombres aléatoires simples pour un mouvement sans but jusqu’à la pré-cuisson d’un maillage de nœuds de haut niveau pour la recherche de parcours.
Mouvement
En parlant de cheminement, cela peut souvent être un problème très difficile à résoudre pour de grands espaces comme une carte DF (jusqu’à 768x768x64 IIRC), mais le problème peut être simplifié et accéléré de la manière suivante:
- Réseau de nœuds préchauffés: lors de la création de la carte, le monde peut être divisé en blocs, et chaque bloc peut avoir ses sorties et ses entrées mappées. Lorsqu'un morceau est mis à jour, par exemple lorsqu'un mur est construit, seul le réseau de ce morceau doit être mis à jour.
- Recherche de chemin par étape: L'exécution d'un chemin sur l'ensemble de la carte, cellule par cellule, prendrait beaucoup de temps. Vous feriez plutôt une recherche dans un réseau de blocs plus volumineux, qui mappe toutes les connexions entre des blocs, puis n'exécutait un chemin intra-bloc que lorsque passer de morceau en morceau. Cela fait 2 choses pour vous. Il accélère la recherche de chemin en le divisant en plusieurs morceaux plus petits et permet également à l'unité de changer de direction en cours de route le long du chemin lorsqu'un morceau est mis à jour. Il repasserait par le grand réseau si l'un des nœuds nécessaires pour effectuer la mise à jour croisée.
- Direction aléatoire: lorsqu'il ne se déplace pas vers un but, il suffit à l'unité de marcher sans but. De nombreux roguelikes déplacent simplement l'unité dans une direction aléatoire, ce qui ne semble pas naturel. Diverses techniques de direction peuvent être utilisées, les plus simples privilégiant les déplacements en ligne droite et ayant de moins en moins de chances de se déplacer dans les directions allant vers l’arrière, ce qui n’a que 1% de chances environ. Ainsi, l’unité inversait parfois parfois complètement la direction, mais rarement.
Je ne couvrirai pas les bases de la découverte. La plupart des roguelikes utilisent A *, mais il existe d'autres méthodes pour écorcher le chat. Mmmm Chat en cuir ..
Tâches personnelles
L’un des principaux facteurs qui font que les unités DF apparaissent et se sentent vivantes est leur liste d’objectifs personnels. En vérité, beaucoup de jeux roguelike ont cela à un niveau basique. Chaque unité a essentiellement une liste de désirs (et pour vos tâches, les tâches qu’elle demande à accomplir) et qu’elle choisira en fonction de sa personnalité (stats.)
Certaines tâches ont des exigences. Faire une jupe en cuir nécessite que le dorf soit dans tel ou tel magasin qui a X articles. Tous ces éléments sont donc cochés et ajoutés en tant que tâches à leur liste. Aussi simple que cela.
Comme la plupart du temps, une unité sera en transit, les vérifications de ce que font les unités peuvent être très rapides, seules quelques unités seront en train de faire un choix à un moment donné. Ainsi, dans l’ensemble, il n’ya pas de ralentissement, même pour des centaines de personnes. des milliers d'unités. Et rappelez-vous, dans DF, tout ce qui va des abeilles aux troglodytes en passant par les arbres sont des unités.
En effectuant des recherches supplémentaires, il est clair que DF fait hilarement un travail terrible en tant que médiateur. Il ne s'agit pas de diviser la carte en fragments, mais bien de diviser la carte en segments ou en zones connectées (ce qui est mieux que rien à coup sûr). Mon évaluation ci-dessus est encore moins un exemple du fonctionnement de DF que je ne le pensais. :) Ce qui ne veut pas dire que DF est tout simplement incroyable pour un million d'autres raisons.
Cela montre que ce qui est important dans un jeu, c'est le jeu. Pas de graphismes, pas de programmation géniale, pas de super écriture, pas de bonne musique, pas même l'interface; Rien d'autre n'est même 1% aussi important que le jeu lui-même.