On parle de génération aléatoire de contenu... le bat-signal s'allume dans les nuages de Solarus-ville.
Les jeux 3D se basent (presque) tous sur du bruit perlin pour la génération de map (avec de l'interpolation pour faire des caves, comme dans Minecraft). Le problème avec ça c'est que pour des jeux 3D ça peut rendre pas trop mal, mais pour des jeux 2D on a vite une carte très chiante.
Pour les premiers prototypes de
Zelda Infinite, je me basais aussi sur une approche à automate cellulaire.
Le problème c'est que:
- ça fait des cartes très chiantes.
- si on veut faire des cartes moins chiantes, faut mettre plein de cas particuliers dans le code et/ou faire des douzaines et des douzaines de passes, et ça devient *super* chiant à débugger. (heureusement vu qu'on est en 2D, c'est rarement un problème de performance).
Du coup depuis quelque temps (oui oui, PI n'est pas mort) je m'amuse avec des chaines de Markov basées sur des écrans de jeux Zelda 2D pré-existents - ça donne des résultats très sympa. Je suis encore en train d'explorer tout ça, mais c'est prometteur. Je posterai peut être un truc en ligne avec des screenshots etc. quand j'en serais à un stade plus avancé.
Sinon y'a pas mal de trucs sympa sur GDC Vault, et le subreddit r/proceduralgeneration. Peut être même dans les Game Gems, mais je suis pas chez moi donc je peux pas vérifier. Ah oui, il y'a aussi 2-3 articles sur le fonctionnement de Spelunky que l'on peut dénicher en fouillant un peu - ils ont une approche peu complexe qui marche très très bien.
Après, tout comme l'on dit "make games not engines", je dirais: "make games not procedural content generators". On peut passer tout le temps qu'on veut sur ses algorithmes de génération, au final il ne faut pas perdre de vue que l'on fait un jeu, et que le but d'un jeu est d'être plaisant à jouer. On peut avoir des algorithmes de génération super-complexes qu'on a passé des mois à créer, si le jeu est chiant, on aura juste fait un jeu chiant. Donc vaut mieux ne pas mettre la charrue avant les boeufs et ne pas perdre trop de son temps à obséder sur les algos. Et ne pas avoir peut d'utiliser des petits "trucs" pour rendre le résultat final sympa, même si ce n'est pas vraiment complètement "aléatoire".
Dans cet esprit, je finirais juste mon post avec cette petite histoire:
In the days when Sussman was a novice, Minsky once came to him as he sat hacking at the PDP-6.
"What are you doing?", asked Minsky.
"I am training a randomly wired neural net to play Tic-tac-toe", Sussman replied.
"Why is the net wired randomly?", asked Minsky.
"I do not want it to have any preconceptions of how to play", Sussman said.
Minsky then shut his eyes.
"Why do you close your eyes?" Sussman asked his teacher.
"So that the room will be empty."
At that moment, Sussman was enlightened.