Générer des spawners en survie vanilla, génération et fonctionnement.

Omeganx

Bucheron
21 Décembre 2016
18
19
14
Comme vous l'avez vu dans le titre, cet article va traiter d'une partie de la génération du monde minecraft, du générateur de nombres aléatoires jusqu'aux spawners et même comment générer des spawners en survie vanilla.
O
Ne vous-êtes vous jamais demandé pourquoi un même seed (ou graine) aboutit au même monde, alors que celui-ci apparaît aux premiers abords aléatoire? Je vous rassure, la génération du monde minecraft est bien aléatoire...enfin presque.
Je m'explique, le générateur de nombres aléatoires utilisé par minecraft est le suivant : on part d'un nombre entier (que l'on va nommer 'Seed0', ce nombre est plutôt grand), puis on effectue des opérations mathématiques basiques avec ce nombre entier qui nous redonne un autre nombre entier('Seed1'), ensuite on extrait un nombre de la taille souhaitée avec ce nouveau nombre, c'est le nombre aléatoire recherché et on recommence avec ce nombre.

Voilà un schéma pour illustrer le fonctionnement:

upload_2016-12-22_17-15-34.png


Ainsi à chaque fois que l'on effectue l'opération, un nombre est généré (les opérations mathématiques étant faites afin de ne pas pouvoir récupérer l'antécédent de ce nombre, en prenant le reste de la division par un autre nombre par exemple.)
Or il s'avère justement que le seed que vous rentrez pour générer votre monde minecraft est utilisé comme seed de base du générateur aléatoire du monde c'est donc pour cela que les mondes restent inchangés avec le même seed.



Voilà, maintenant que vous savez comment un nombre aléatoire est généré on peut maintenant passer à la génération du monde. Ce qu'il faut savoir c'est que celui-ci ne se génère pas d'un seul coup, mais plutôt en deux temps.
En premier, le terrain lui-même est généré : la terre, la pierre, le sable ou encore les océans ainsi que les biomes et les cavernes, ce qui donne déjà l'aspect global du monde,
Voici à quoi peut ressembler le monde à ce stade là :

upload_2016-12-22_17-32-0.png



Si vous vous demandez comment la génération des blocs se passe à ce stade là, sachez que je ne vais pas en parler aujourd'hui. (en effet, la génération des blocs utilise un générateur particulier pour cette génération, appelé 'perlin noise'.)



La deuxième phase de génération, appelée population, c'est ce qui donne vie au terrain : arbres, herbes, minerais, neige, animaux, structures, lacs d'eau et de lave par exemple. Elle s'effectue dès qu'un certain nombre de chunks adjacents sont générés, c'est-à-dire au fur et à mesure que le joueur s'approche.
Comme vous pouvez vous en douter, cette partie de la génération utilise le générateur aléatoire dont je vous ai parlé précédemment: un nouveau seed est calculé à partir des coordonnées du chunk et du seed du monde, et celui-ci est utilisé afin de savoir si oui ou non certains éléments du terrain doivent être placés, en outre cette partie de la génération est indépendante de la première phase de génération (pas totalement, on verra que pour les donjons, il faut qu'une certaine configuration de blocks se produise pour générer le donjon).
Voici à quoi ressemble le monde après cette phase de peuplement comparé à la première phase : (à droite : sans peuplement, à gauche : avec peuplement des chunks.)

upload_2016-12-22_17-59-34.png



On va enfin pouvoir parler de donjons et de spawners ! Les donjons sont les dernières structures à être générées, après les strongolds, les villages, les mineshafts et les temples. Pour un chunk, 8 positions sont testées pour générer les spawners, ces positions sont aléatoires et dépendent donc du chunk et des autres structures (car elles aussi utilisent le générateur aléatoire et donc changent la prochaine valeur aléatoire).
Voilà en gros toutes les positions qui sont testées si on les affiche dans le jeu :

upload_2016-12-22_17-38-0.png



Pour qu'un donjon soit généré, il lui faut : un sol, un toit et une ouverture de 1 à 6 blocks, c'est tout, mais en réalité (dans le monde minecraft, vous m'avez compris) ces simples conditions sont plutôt rares, car il faut que la position testée se situe à proximité d'une ouverture tout en ayant des blocs pour le toit et le sol. (c'est d'ailleurs pour cela que les donjons sont plus courants dans les mineshafts)

Voici un exemple : en violet et en bleu : les blocs qui constituent les murs, le sol et le toit, et en magenta : les blocs constituant le sol qui doivent avoir 4 blocks d'air au dessus d'eux : c'est l'ouverture enfin en blanc les blocks neutres qui n'ont pas de conséquences dans la génération du donjon.

upload_2016-12-22_17-39-20.png



Une fois que la position testée est valide, les blocks intérieurs sont supprimés, la mossycobblestone et la cobblestone sont placés, ainsi que les coffres, et enfin le spawner est placé au centre du donjon.
Les blocks de mossycobblestone étant générés aléatoirement, ainsi que le spawner, il est possible de contrôler le type de spawner à partir des blocks sous le sol (si il n'y a pas de blocks, la mossycobblestone n'est pas placée).



Cette histoire de générateur aléatoire vous sort peut-être un peu de la tête, mais grâce à lui il est possible de prédire les positions de donjons testées par l'algorithme de génération du monde. Si l'on parvient à placer des blocks loin du joueur, là où le monde est seulement généré et non peu peuplé, on peut forcer minecraft à placer des donjons en plaçant les blocs nécessaires. Pour l'instant seulement deux moyens permettent de placer les blocks nécessaires au donjons loin du joueur : des ponts de pistons illimités ou encore des machines volantes.

Voici la vidéo de la personne ayant découverte comment manipuler la génération de donjons:


J'ai moi-même généré un sextuple spawner à squelettes dans mon monde survie:
upload_2016-12-22_17-50-50.png

Il est même possible d'obtenir des positions avec une vingtaine de donjons activés en même temps lorsque le joueur se situe au milieu mais construire les flying machines, gérer les chargements de chunks devient très difficile voire impossible.
 

Fichiers joints

  • upload_2016-12-22_17-33-24.png
    upload_2016-12-22_17-33-24.png
    156.2 KB · Affichages: 162
Dernière édition:

Omeganx

Bucheron
21 Décembre 2016
18
19
14
Je suis choqué c'est génial ^^

C'est cool comme post. C'est rare d'apprendre des chose sur Minecraft

Oui, surtout pour les communautées qui ne sont pas anglophones, ce qui est dommage et plutôt bien en même temps, cela crée des ruptures entre certaines communautés mais cela permet aussi de partager d'avantage.
La communauté française parait peu ouverte sur ce genre de contenu et c'est pour cela qu'il y en a pas beaucoup, cependant cela n'empêche pas que certaines personnes s'y intéressent et tant mieux.
Merci d'avoir commenté, même si je me doute que vous êtes les seuls intéressés, cela donne au moins l'impression de ne pas avoir fait quelque chose pour rien. :)

Dans le futur, si plus de personnes sont intéressées j'essaierai de faire plus d'articles de ce genre, il y a pleins de choses intéressantes à traiter.
 
  • J'aime
Reactions: Padouga et Nano_

BouleDisco

Architecte en herbe
1 Novembre 2014
613
128
156
Merci d'avoir commenté, même si je me doute que vous êtes les seuls intéressés, cela donne au moins l'impression de ne pas avoir fait quelque chose pour rien.
Dis toi que même si il n'y a pas beaucoup de commentaires, y'a pas mal de gens intéressés, comme moi :p
 
  • J'aime
Reactions: Omeganx

Clen

pessimiste repenti
22 Février 2016
1 507
286
167
21
Lille
aujourd'hui on va
Ce n'est pas la peine d'attirer le public avec des mots inutiles et un "on" utilisé comme un "nous".
Tout d'abord, ne vous-êtes vous jamais demandés pourquoi un même seed (ou graine) abouti au même monde, alors que celui-ci apparaît aux premiers abords aléatoire? Je vous rassure, la génération du monde minecraft est bien aléatoire...enfin presque.
Je m'explique, le générateur de nombres aléatoires utilisé par minecraft est le suivant : on part d'un nombre entier (que l'on va nommer 'Seed0', ce nombre est plutôt grand), puis on effectue des opérations mathématiques basiques avec ce nombre entier qui nous redonne un autre nombre entier('Seed1'), ensuite on extrait un nombre de la taille souhaité avec ce nouveau nombre, c'est le nombre aléatoire recherché et on recommence avec ce nombre.

Voilà un petit schéma pour illustrer le fonctionnement:
Ainsi à chaque fois que l'on effectue l'opération un nombre est généré (les opérations mathématiques étant faîtes afin de ne pas avoir de liens (combo grammaire+signification) entre les deux nombres, en prenant le reste de la division par un autre nombre par exemple.)
Or il s'avère justement que le seed que vous rentrez pour générer votre monde minecraft est utilisé comme seed de base du générateur aléatoire du monde c'est donc pour cela que les mondes restent inchangés avec le même seed.
Pour raccourcir, tu peux dire :
"le seed original est soumis à un hash pour donner les autres seed"
Triste.png
sachez que je ne vais pas en parler aujourd'hui. (en effet, la génération des blocks utilise un générateur particulier pour cette génération, appelé 'perlin noise'.)
De quoi parles-tu, alors ?
le générateur aléatoire que je vous ai parlé précédemment
Pleure.png
Même avec des anglicismes, tu fais des fautes...

Pour conclure, c'est intéressant mais incomplet (comment sont utilisés les différentes graines ? comment sont reliés les chunks entre eux ? (je me souvient avoir lu Jeb_ disant que relier les chunks avait été très dur...) comment sont générés les coffres ?)
Et puis, tu n'as pas cité de sources, ce qui donne 3 possibilités :
1. Tu plagies et n'as pas envie qu'on le sache
2. Tu centralises des infos, mais tu as oublié de citer tes sources
2. Tu es un codeur professionnel qui a créé cet article sans inspiration (difficile à imaginer vu que tu n'a pas parlé de "hash")
 

Nano_

Architecte en herbe
19 Avril 2016
78
26
107
25
Ce n'est pas la peine d'attirer le public avec des mots inutiles et un "on" utilisé comme un "nous".

Pour raccourcir, tu peux dire :
"le seed original est soumis à un hash pour donner les autres seed"

Voir la pièce jointe 70414

De quoi parles-tu, alors ?

Voir la pièce jointe 70416

Même avec des anglicismes, tu fais des fautes...

Pour conclure, c'est intéressant mais incomplet (comment sont utilisés les différentes graines ? comment sont reliés les chunks entre eux ? (je me souvient avoir lu Jeb_ disant que relier les chunks avait été très dur...) comment sont générés les coffres ?)
Et puis, tu n'as pas cité de sources, ce qui donne 3 possibilités :
1. Tu plagies et n'as pas envie qu'on le sache
2. Tu centralises des infos, mais tu as oublié de citer tes sources
2. Tu es un codeur professionnel qui a créé cet article sans inspiration (difficile à imaginer vu que tu n'a pas parlé de "hash")
D'après ce que j'ai compris l'auteur du post ne m'a pas l'air qualifier pour des explications clair tu m'a l'air de t'y connaître bien plus que lui, c'est quoi cette histoire de hash ? et comment arrive t'il a choisir la graine ?