Aller au contenu

« RNG » : différence entre les versions

De Poképédia
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
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 notion peut désigner les programmes informatiques simulant le hasard mais de manière prédictible.
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 aléatoires des jeux Pokémon, notamment pour obtenir un Pokémon optimisé.
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 ==
== Généralités ==
Les nombres issus d'un processus aléatoire n'ont aucun lien entre eux, si ce n'est qu'ils suivent une [[wp:Loi de probabilité|loi de probabilité]] donnée (dans le cas le plus simple, il s'agit de la [[wp:Loi uniforme discrète|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 alors 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é.
Les nombres issus d'un processus aléatoire n'ont aucun lien entre eux, si ce n'est qu'ils suivent une [[wp:Loi de probabilité|loi de probabilité]] donnée (dans le cas le plus simple, il s'agit de la [[wp:Loi uniforme discrète|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 caractère aléatoire repose sur la probabilité quasi nulle 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.
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 ==
== Dans les jeux vidéo ==
Ligne 31 : Ligne 31 :


Cet algorithme remplit les fonctions suivantes :
Cet algorithme remplit les fonctions suivantes :
*Supprimer le caractère [[chromatique]] de l'œuf de [[Manaphy]] obtenu dans ''{{jv|Pokémon Ranger}}'', des Pokémon offerts par [[Carte Miracle]] de type 1 (tous généralement distribués avec une [[Nature]] variable) ou encore des {{jv|Pokémon Obscur}}s rencontrés dans {{jeu|XD}} ;
*[[Shiny Lock|Supprimer le caractère]] [[chromatique]] de l'œuf de [[Manaphy]] obtenu dans ''{{jv|Pokémon Ranger}}'', des Pokémon offerts par [[Carte Miracle]] de type 1 (tous généralement distribués avec une [[Nature]] variable) ou encore des {{jv|Pokémon Obscur}}s rencontrés dans {{jeu|XD}} ;
*Déterminer l'espèce d'un Pokémon [[Apparition massive de Pokémon|apparu en masse]] ;
*Déterminer l'espèce d'un Pokémon [[Apparition massive de Pokémon|apparaissant en masse]] ;
*Déterminer l'espèce d'un Pokémon rencontré au [[Grand Marais]] ou dans le [[Jardin Trophée]].
*Déterminer l'espèce d'un Pokémon rencontré au [[Grand Marais]] ou dans le [[Jardin Trophée]].


Ligne 47 : Ligne 47 :


== Manipulation du GNA ==
== Manipulation du GNA ==
Certains joueurs cherchent à manipuler 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 optimales (maximales ou fixant le [[type]] désiré de [[Puissance Cachée]]) ou une certaine Nature.
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 (s<sub>i</sub>) peut se déduire de cette valeur initiale. Dans {{jeu|É}}, la graine s<sub>0</sub> vaut toujours 0. Les jeux de quatrième génération utilisent la date et l'heure de la Nintendo DS ainsi que le délai entre le démarrage du jeu et la sélection de « Continuer » pour générer s<sub>0</sub>. 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 produire s<sub>0</sub> peu avant l'apparition du logo de Nintendo à l'écran.
Dans les jeux où la graine au démarrage est prédictible, la suite de nombres pseudo-aléatoires (s<sub>i</sub>) peut se déduire de cette valeur initiale. Dans {{jeu|É}}, la graine s<sub>0</sub> vaut toujours 0. Les jeux de quatrième génération calculent s<sub>0</sub> 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 s<sub>0</sub> peu avant l'apparition du logo de Nintendo à l'écran.


Le générateur pseudo-aléatoire est utilisé pour déterminer la {{infobulle|valeur interne personnelle|Certains logiciels tels que RNG Reporter permettent de calculer cette valeur}} et les IV d'un Pokémon lorsqu'il est rencontré à l'état sauvage, dans son œuf ou [[Pokémon en cadeau|reçu en cadeau]]. En cherchant les s<sub>0</sub> qui induisent les caractéristiques requises, le joueur peut cibler précisément une graine et une carte de données pour s'assurer les valeurs internes voulues. Il existe plusieurs facteurs influant sur les caractéristiques d'un Pokémon : par exemple, le simple fait qu'un Pokémon soit sauvage ou non joue sur la méthode de génération de ses caractéristiques.
Le générateur pseudo-aléatoire est utilisé pour déterminer la {{infobulle|valeur interne personnelle|Certains logiciels tels que RNG Reporter permettent de calculer cette valeur}} et les IV d'un Pokémon lorsqu'il est rencontré à l'état sauvage, dans son œuf ou [[Pokémon en cadeau|reçu en cadeau]]. En cherchant les s<sub>0</sub> qui induisent les caractéristiques requises, le joueur peut cibler précisément une graine et une carte 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 joue 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 ({{jv|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 déterminé 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.
Quelques limitations sont à relever sous les troisième et quatrième générations. Puisque les numéros ID du joueur ({{jv|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 ces pratiques dans la mesure où ils n'utilisent pas de logiciels tiers et que les Pokémon issus de cette manipulation peuvent tout aussi bien être obtenus en jouant normalement. De plus, des Pokémon créés par manipulation du GNA ont été utilisés en [[Play! Pokémon|compétition officielle]]. Autre argument des partisans, manipuler le générateur reste très compliqué, plus en tout cas qu'insérer un code de triche. À l'inverse, d'autres joueurs dénoncent la manipulation du GNA comme une pratique frauduleuse, assimilant le contrôle des caractéristiques d'un Pokémon à l'emploi un logiciel de triche. Selon eux, les personnes 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.
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 [[Play! Pokémon|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) ==
== Liens externes (Wikipédia) ==

Version du 1 juin 2021 à 15:18

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

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

Générateur congruentiel linéaire

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

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

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

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 requises, le joueur peut cibler précisément une graine et une carte 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 joue 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)