[Emeraude][ACE/RNG] RNG sur mesure via ACE (nouvelle méthode)

Discussions dédiées à l'exécution de code (ACE) sur les trois premières générations (et la quatrième ?). Ce forum permet également de demander de l'aide ou de soumettre de nouvelles idées sur ce sujet !
Répondre
Avatar du membre
E-Sh4rk
Programmeur PRAMA
Messages : 4
Enregistré le : mer. 17 mars 2021 13:51

[Emeraude][ACE/RNG] RNG sur mesure via ACE (nouvelle méthode)

Message par E-Sh4rk » dim. 11 avr. 2021 18:27

Bonjour, bons gens que vous êtes.

Aujourd'hui, en avant-première mondiale, voici le top du top en matière de manipulation RNG:
la modification et le gèle de seed via ACE!

Il y a pas mal de prerequis, mais une fois que vous avez mis tout cela en place, vous pouvez, en un seul code ACE:
  • Changer la seed pour celle que vous voulez
  • La geler (partiellement, on y reviendra) pour réussir votre rencontre à 100%
  • Forcer une méthode de type 1 pour les rencontres de pokémon sauvages
Pour ceux qui ne sont pas familiers avec ces termes, sachez juste que ca va vous permettre de rencontrer le zigzaton de vos rêves, celui avec des couleurs toutes bizarres et qui tappe ultra fort. Ou alors celui avec des couleurs normales et qui tappe que dalle, si c'est votre kiff.

Alors sans plus attendre, voici les prérequis.

I. PREREQUIS
  • Utiliser la version francaise de pokémon Emeraude (les codes utilisées ici existent aussi pour la version anglaise)
  • Utiliser une vrai console ou un émulateur fidèle, c-à-d mGBA version 0.9 (ou supérieur) avec un vrai BIOS de GBA
  • Avoir mis en place le déclenchement rapide d'ACE via 0x40ED (tuto ici)
C'est bon pour vous?
Alors c'est parti pour l'aventure, aller hop, on y va!

II. MISE EN PLACE DU BOOTSTRAP DE CODE DE SORTIE

Cette section a pour particularité d'avoir un titre très peu évocateur.

En fait, les codes ACE sont en général constitués de 2 parties: le code et lui même (la "charge utile") et le code de sortie, dont l'unique but est de redonner la main au code normal du jeu sans tout faire crasher.
En général, le code de sortie occupe les boites 9 à 14, mais dans notre cas, on a besoin de 13 boites juste pour la charge utile du code, donc on va devoir créer un pokemon sur mesure qui permettra de raccourcir le code de sortie.

Pour cela:
  1. Rendez-vous sur https://e-sh4rk.github.io/EmeraldACE_web/?lang=fra
  2. Sélectionnez "Create Pokemon species from nothing" dans la barre à coté de "French"
  3. Mettez la variable species à la valeur 0xFF (il doit être écrit "species = 0xFF")
  4. Vérifiez que inaccurate_emu vaut 0. Rappel: vous devez utiliser mGBA >= 0.9 ou une vrai GBA pour ce tuto.
  5. Cliquez sur Compute et entrez le nom des boites correspondant dans votre jeu.
  6. Vérifiez que votre emplacement 19 de la boite 10 est vide, puis exécutez le code via 0x40ED (n'oubliez pas de mettre votre bootstrap THUMB->ARM dans la boite 13 lorsque vous voulez executer des ACEs via 0x40ED)
  7. Un pokemon devrait être apparu à l'emplacement 19 de la boite 10. Si c'est le cas, vous pouvez sauvegarder.
Laissez le pokemon généré là où il est, puis enchainez avec cet autre code:
  1. Toujours sur https://e-sh4rk.github.io/EmeraldACE_web/?lang=fra, sélectionnez "Certificate Exit Code Bootstrap" et cliquez sur Compute.
  2. Entrez le nom des boites dans votre jeu et exécutez le code via 0x40ED.
  3. Le pokémon de l'emplacement 19 de la boite 10 devrait toujours être là, mais son nom devrait avoir changé (ca devrait être un truc du style Á q:·n)
  4. Si c'est bon, mettez le quelque part dans la boite 14 (mais pas dans les deux derniers slots) et sauvegardez.
Voilà, vous avez créé le Pokémon bootstrap, et en prime, votre boite 14 a été renommée et contient désormais le code de sortie qu'il nous faut. Ne renommez pas votre boite 14. Si jamais vous devez la renommer, vous pourrez toujours restaurer son nom en éxécutant le code suivant (à copier coller dans le générateur de code avant de cliquer sur Compute):

Code : Tout sélectionner

@@ exit = "CertificateFullFRA"
@@
III. CHOISIR UNE SEED (PETIT TUTO SUR LA RNG)

Maintenant que les preparatifs sont prêts, il va falloir déterminer la seed dont vous avez besoin.
Pour ceux qui ne sont pas familier avec la RNG de pokémon Emeraude, voici un résumé des bases.

Tout l'aléatoire de pokémon Emeraude dépend d'une variable que l'on appelle la seed.
Elle vaut 0 quand le jeu démarre, puis sa valeur change à chaque fois qu'un nombre aléatoire est utilisé par le jeu, et également à chaque rafraichissement graphique (donc sa valeur change au moins 1 fois par frame).
Les valeurs successives que prend la seed sont toujours les memes: nouvelle_seed = 1103515245*ancienne_seed + 24691 (modulo 2^32).
Du coup, il n'y a en réalité rien d'aléatoire dans les valeurs prises par la seed, mais comme la seed change très souvent,
l'aléatoire émerge de ce timing. Ce qu'il est important de retenir, c'est que seule la seed détermine les tirages aléatoires du jeu.

En particulier, dans les outils de rng, on voit souvent apparaitre en plus de la seed un numéro de frame: ce numéro de frame est juste un moyen de se representer combien de frame il faut attendre approximativement pour obtenir une seed donnée à partir de la seed initiale 0, mais en aucun cas le numéro de la frame n'influence directement la rng du jeu. De plus, comme la seed peut changer plusieurs fois par frame, ce nombre de frames n'est pas vraiment correct, on devrait plutot parler de nombre de cycles.
Cela est très utile pour ceux qui veulent essayer d'obtenir une seed donnée grace à un timer (pour savoir comment régler et réajuster leur timer), mais dans notre cas, on ne va pas avoir besoin de timer, donc oublions totalement ce concept de numéro de frame et retenons simplement le plus important: la seed.

Lors d'une rencontre avec un pokémon (sauvage ou stationnaire), c'est la valeur de la seed au moment de la rencontre qui détermine sa nature, son PID (et donc sa shininess), ses IVs, etc. Si on veut pouvoir manipuler la rng pour obtenir le pokémon de nos rêves, il va donc falloir déterminer quelle seed va pouvoir nous offrir ce pokémon. En réalité, la valeur seule de la seed au moment de la rencontre ne suffit pas toujours à déterminer avec certitude les IVs que va avoir notre pokémon: cela peut également être influencé par un rafraichissement de l'écran (souvent appelé vblank) qui peut survenir à différents moments entre les tirages aléatoires que fait le jeu.
C'est pourquoi on trouve dans les outils de rng plusieurs methodes (principalement la 1, 2 et 4) qui correspondent en fait aux différents comportements que peut avoir le jeu à cause de ces vblank. Mais dans notre cas, notre code ACE va annuler l'interference potentielle que pourrait avoir un vblank qui survient entre deux tirages, et donc nous utiliserons toujours la méthode 1.

Ceci étant dit, c'est parti, allons déterminer notre seed. Pour cela, il y a plusieurs outils, les principaux étant rngreporter et pokefinder. Dans ce tutoriel nous utiliserons PokeFinder. Il peut être téléchargé ici.

Avant toute chose, il faut rentrer votre Trainer ID et Secret ID dans PokeFinder. Cliquez sur Gen 3 Tools -> Profile Manager,
puis cliquez sur New et entrez vos informations. Si vous ne connaissez pas votre Secret ID, mettez un pokemon que vous avez capturé en deuxième position de votre équipe puis exécutez le code ACE "Read Pokemon OTID": votre SID se retrouvera écrit dans la stat de défense de votre deuxième pokémon (et votre TID devrait être écrit dans sa stat d'attaque).

Maintenant, si vous voulez par exemple capturer un Mystherbe shiny route 117, cliquez sur le bouton Wild (Gen 3), sélectionnez le bon profil, puis cliquez sur l'onglet Searcher. Remplissez la partie RNG Info ainsi:

Method: Method H1 (ca sera toujours le cas avec le code ACE de ce tuto)
Location: Route 117
Pokémon: Oddish
Encounter: Grass
Lead: None (sauf si vous avez en première position un pokémon avec Synchronize ou Cute Charm)

Puis, dans la partie Filter, sélectionnez Star/Square pour Shiny. Enfin, cliquez sur Search.
Parmi les pokémons proposés, choisissez en un qui vous convient et notez sa seed.

IV. LET'S GO LES GARS

Maintenant que vous avez déterminé une seed, il va falloir la forcer. Pour cela, on va utiliser un code ACE permettant
de modifier la valeur de la seed et de désactiver temporairement l'avancement de cycle opérant à chaque rafraichissement graphique.
Cependant, certains cycles vont malgré tout s'écouler avant de pouvoir lancer un combat, notamment à cause de la rng propre aux PNJs et à l'allocation randomisé de Emeraude qui fait que la seed avance de 3 cycles à chaque fois qu'un menu comme le pokédex, le sac ou le menu pokémon est fermé.

C'est pourquoi il va falloir que l'on prévoit quelque cycles de marge. Rendez-vous sur https://e-sh4rk.github.io/EmeraldACE_web/scripts/seed/ et entrez votre seed, en la préfixant par 0x si elle est au format hexadécimal (par exemple, si votre seed est 1234ABCD, rentrez 0x1234ABCD). Appuyez sur Entrée: cela va vous afficher les seeds voisines de la votre, c-à-d celles qui sont quelques cycles avant et après.
  • Si le pokémon que vous voulez capturer est un pokémon sauvage, notez la seed situé 2 cycles avant votre seed objectif (celle inscrite apres le "-2:").
  • Si le pokémon que vous voulez capturer est un légendaire stationnaire, notez la seed situé 3 cycles avant votre seed objectif.
  • Pour les autres cas, réferez-vous aux instructions fournies dans le code "Change and freeze PRNG Seed" sur le générateur de code ACE (ces instructions sont plus complètes et seront maintenues à jour)
Maintenant, générons notre code:
1. Rendez-vous sur https://e-sh4rk.github.io/EmeraldACE_web/?lang=fra
2. Sélectionnez "Change and freeze PRNG Seed" dans la barre à coté de "French"
3. Mettez la variable seed à la valeur que vous venez de noter (si elle est écrite en hexadécimal, préfixez-la de 0x)
4. Cliquez sur Compute et entrez le nom des boites calculées dans votre jeu

Petit rappel: le pokémon bootstrap généré dans la partie II doit être dans la boite 14, et vous devez également avoir
à disposition un pokémon stable de déclenchement d'ACE tel que 0x40ED (et son bootstrap THUMB->ARM doit être présent dans la boite 13).

Maintenant, voici ce que vous devez faire pour lancer le combat avec la bonne seed.

Pour un pokémon sauvage:
  1. Il faut que vous ayez un pokémon avec Doux parfum dans votre équipe (si vous n'en avez pas, allez capturer un mystherbe).
  2. Ensuite, allez capturer n'importe quel pokémon et appelez-le ␣ ␣ D n ’ J k l ␣ ␣ (les ␣ désignent des espaces), puis placez-le dans la boite 14 de votre PC, dans le slot juste après votre pokémon boostrap de code de sortie (ce ne doit pas être le dernier slot). Cela va avoir pour effet de modifier le code de sortie du code ACE afin que son exécution ne vous fasse pas sortir du menu pokémon.
  3. Maintenant, vous pouvez aller dans les hautes herbes à l'endroit que vous aviez choisi pour votre seed, puis ouvrez le menu pokémon, regardez le résumé d'un pokémon adjacent à votre pokémon 0x40ED, allez dans le résumé des attaques, puis basculez vers le résumé des attaques de 0x40ED (cette petite pirouette sert à éviter d'aller dans le résumé général de votre 0x40ED, qui ferait crasher le jeu). Aucun signe visuel ne l'indique, mais normalement cela va exécuter le code ACE.
  4. Appuyez simplement sur B pour quitter le résumé du pokémon, et sans quitter le menu pokémon, utilisez Doux parfum. Voilà, normalement le combat contre le pokémon de vos rêves va se lancer :D
Pour un pokémon stationnaire:
  1. Pas besoin de Doux parfum ni du pokémon que vous avez appelé ␣ ␣ D n ’ J k l ␣ ␣ (vous pouvez l'enlever de la boite 14 et le mettre ailleurs, avant la boite 11).
  2. Placez-vous simplement devant le pokémon à capturer, ouvrez le résumé de votre 0x40ED, fermez le certificat qui devrait s'afficher et engagez directement le combat.
Voilà, c'est fini! Vous pouvez répéter les parties III et IV pour capturer tous les pokémons de votre dream team.
N'hésitez pas à me dire si vous rencontrez des problèmes, c'est une méthode très récente alors il y a possiblement des erreurs.
Modifié en dernier par E-Sh4rk le dim. 11 avr. 2021 18:35, modifié 1 fois.

Avatar du membre
Guerdi
Community manager
Messages : 567
Enregistré le : mar. 8 juil. 2014 23:09
Localisation : Quelque part dans le nuage du clavardage téléversé.
Contact :

Re: [Emeraude][ACE/RNG] RNG sur mesure via ACE (nouvelle méthode)

Message par Guerdi » dim. 11 avr. 2021 18:34

Très intéressant et très bien expliqué, ça devrait aider un bon paquet de monde qu'on voit souvent poser des questions à ce sujet :lol:
Image
Ouais j'ai fais cette signature en 5 minutes.

Répondre