RNG

De Poképédia
Aller à la navigation Aller à la recherche

Un générateur de nombres aléatoires (en anglais random number generator ou RNG) est un algorithme générant des suites de nombres choisis indépendamment les uns des autres. Par abus de langage, cette expression peut désigner les programmes informatiques simulant le hasard mais de manière prédictible.

Certains joueurs savent utiliser à leur avantage les générateurs numériques des jeux Pokémon, notamment pour obtenir un Pokémon optimisé.

Généralités[modifier]

Les nombres issus d'un processus aléatoire n'ont aucun lien entre eux, si ce n'est qu'ils suivent une loi de probabilité donnée (dans le cas le plus simple, il s'agit de la loi uniforme sur un ensemble fini de nombres). Les ordinateurs, de par leur caractère déterministe, ne peuvent générer de nombres parfaitement aléatoires : on parle dès lors de nombres « pseudo-aléatoires ». Pour créer un hasard satisfaisant dans des environnements informatiques et plus particulièrement dans un jeu vidéo, les statistiques des nombres qui encodent les événements doivent être les moins biaisées possibles. Plus la sortie de l'algorithme est difficile à prédire, plus le degré d'aléatoire est élevé.

Un générateur de nombres pseudo-aléatoires (GNA) possède une graine, nombre à partir duquel débute la séquence. Ce nombre est le plus souvent la date et l'heure (dans l'horloge interne de la console) de la première itération de l'algorithme durant la session active. Les graines peuvent aussi être modifiées par une commande de l'utilisateur, sachant que le hasard repose sur l'infime probabilité de reproduire un processus donné. Le nombre interne est traité par un algorithme complexe dont la sortie est formatée selon l'environnement requis. Le résultat brut devient alors la graine pour toutes les utilisations ultérieures du GNA, qui est donc un algorithme récursif.

Dans les jeux vidéo[modifier]

Générateur congruentiel linéaire[modifier]

Les jeux Pokémon de troisième et quatrième générations ainsi que Pokémon Stadium utilisent un générateur à congruence linéaire sur 32 bits.

La graine s0 est un entier compris entre 0 et 0xFFFFFFFF (232 – 1 en hexadécimal). La séquence de nombres pseudo-aléatoires est ensuite générée de manière récursive : si+1 est calculé modulo 232 à partir de la valeur si issue de l'itération précédente.

  • Pokémon Stadium : si+1 = 0x41C64E6D x si + 0x0000303B (cette formule est appliquée plusieurs fois en fonction du compteur de la console N64 et suivie d'une opération XOR avec un nombre pseudo-aléatoire)
  • Pokémon Colosseum : si+1 = 0x000343FD x si + 0x00269EC3
  • Jeux GBA et DS : si+1 = 0x41C64E6D x si + 0x00006073
  • Modules événementiels de 2003 : si+1 = 0x41C64E6D x si + 0x00003039

Cet algorithme remplit les fonctions suivantes :

  • Graver les données des Pokémon dans le fichier de sauvegarde ;
  • Déterminer l'espèce d'un Pokémon sauvage rencontré hors Safari ;
  • Générer la valeur interne personnelle d'un Pokémon sauvage ;
  • Générer les IV d'un Pokémon sauvage sous les troisième et quatrième générations ;
  • Déterminer le numéro gagnant de la loterie ID ;
  • Évaluer l'apparition d'un Œuf à la Pension.

Les jeux de cinquième et sixième générations utilisent un générateur congruentiel linéaire sur 64 bits. Sa formule est
si+1 = 0x5D588B656C078965 x si + 0x0000000000269EC3.

Générateur pseudo-aléatoire alternatif[modifier]

Les jeux de quatrième génération utilisent un autre GNA pour alterner, recalculer ou remplacer un nombre précédemment généré. L'algorithme fonctionne de la même manière, à la différence près que la formule s'écrit si+1 = 0x6C078965 x si + 0x00000001.

Cet algorithme remplit les fonctions suivantes :

Mersenne Twister[modifier]

Appliqué depuis la quatrième génération, le Mersenne Twister est un générateur pseudo-aléatoire efficace qui produit 624 nombres à chaque itération. Ces valeurs numériques sont ensuite stockées en mémoire puis consommées au fur et à mesure. La liste des nombres est renouvelée dès qu'ils ont tous été utilisés.

Cet algorithme remplit les fonctions suivantes :

  • Générer les numéros ID du personnage joueur et des PNJ proposant un échange de Pokémon (quatrième génération et suivantes) ;
  • Générer la valeur interne personnelle d'un Pokémon à éclore (quatrième génération et suivantes) ;
  • Réaliser les variations de bonheur d'un Pokémon ;
  • Réaliser les sprites animés (cinquième génération et suivantes) ;
  • Générer les IV d'un Pokémon (cinquième génération et suivantes) ;
  • Évaluer la réussite d'une capacité ou d'un lancer de Ball (cinquième génération et suivantes).

Manipulation du GNA[modifier]

Certains joueurs cherchent à exploiter le générateur pseudo-aléatoire des jeux principaux afin d'obtenir un Pokémon particulier. Les traits recherchés peuvent être le caractère chromatique, des IV optimaux (tous au maximum ou fixant le type désiré de Puissance Cachée) ou une certaine Nature.

Dans les jeux où la graine au démarrage est prédictible, la suite de nombres pseudo-aléatoires (si) peut se déduire de cette valeur initiale. Dans Pokémon Émeraude, la graine s0 vaut toujours 0. Les jeux de quatrième génération calculent s0 en se basant sur l'horloge interne de la Nintendo DS et le temps écoulé entre le démarrage du jeu et la validation de « Continuer ». Les jeux de cinquième génération utilisent la date, l'heure, les touches couramment appuyées et d'autres données entropiques pour définir s0 peu avant l'apparition du logo de Nintendo à l'écran.

Le générateur pseudo-aléatoire est utilisé pour déterminer la valeur interne personnelle et les IV d'un Pokémon lorsqu'il est rencontré à l'état sauvage, dans son Œuf ou reçu en cadeau. En cherchant les s0 qui induisent les caractéristiques adéquates, le joueur peut cibler précisément une graine et une plage de données pour s'assurer les valeurs internes voulues. Il existe plusieurs voies d'action sur les caractéristiques d'un Pokémon : par exemple, le simple fait qu'un Pokémon soit sauvage ou non influe sur la méthode de calcul de ses valeurs numériques.

Quelques limitations sont à relever sous les troisième et quatrième générations. Puisque les numéros ID du joueur (carte Dresseur et ID secrètes) déterminent le caractère chromatique, les Pokémon « shiny » générés suivant certaines méthodes ne peuvent avoir qu'un ensemble restreint d'IV. Les cadeaux des Cartes Miracle calculant les valeurs internes personnelles à partir des données temporelles, il est impossible de fixer la Nature du Pokémon offert. Ce n'est plus le cas depuis la cinquième génération puisque les IV et valeurs internes personnelles sont calculés par deux GNA différents.

Dans la communauté des joueurs, manipuler le générateur est sujet à controverse. Certains légitiment cette pratique dans la mesure où ils n'utilisent pas de logiciels tiers, arguant que les Pokémon créés par manipulation du GNA peuvent tout aussi bien être obtenus en jouant normalement et ont même été admis en compétition officielle. Autre argument des partisans, trouver le timing du générateur reste très compliqué, plus en tout cas qu'insérer un code de triche. De leur côté, les opposants dénoncent l'exploitation du GNA comme une pratique frauduleuse, assimilant le contrôle des caractéristiques d'un Pokémon à de la triche logicielle. Selon eux, les joueurs capables de prédire les résultats du GNA bénéficieraient d'un trop grand avantage ; les partisans répondent qu'avec cette méthode, chacun peut optimiser ses statistiques donc personne ne déséquilibrera le jeu en capturant un Pokémon qui s'avère meilleur.

Liens externes (Wikipédia)[modifier]