Arbitrary Code Execution

Version : R/B/J

C'est le plus puissant glitch de la 1G, qui vous permet d’exécuter du code. Vous pouvez ainsi simuler des codes action replay, d'autres glitches ou même programmer des logiciels, sans avoir besoin d'un quelconque appareil de triche !
Rédacteur : Krys3000
Tuteur : Haxel
Remerciements à Glitch City Labs et particulièrement à Torchickens (également pour l'adaptation à la version française) et TheZZAZZGlitch mais aussi à Tagada67 du forum PRAMA
This glitch is also available in English at our partner Glitch City Labs: click here

Sur cette page vous allez apprendre à exécuter du code dans votre jeu Pokémon Rouge, Bleu ou Jaune. C'est plus ou moins ce que vous faites en utilisant l'Action Replay, mais ici, vous n'avez besoin d'absolument rien. Vous allez pouvoir ordonner au jeu d'agir selon votre bon vouloir, c'est vous qui aurez la main. Avec ce glitch, vous n'avez aucune limite. Argent, Pokémon, objets, badges, se téléporter d'endroits en endroits, jouer à Pong (si si), rien n'est impossible pour qui maîtrise l'art de l'Arbitrary Code Execution !

Introduction : l'exécution de code sur R/B/J

Il existe plusieurs moyen d'effectuer cette technique. Si vous avez déjà lu la liste de correspondance dans nos pages, vous savez qu'il existe un certain nombre d'objets glitchés ou portant des noms correspondant à l'association de ceux-ci avec d'autres sections de la mémoire du jeu. Ils peuvent d'ailleurs être visualisés et obtenus à l'aide de l'Item Underflow Glitch. Un moyen simple de parvenir à l'ACE est en utilisant un de ces objets : c'est le Glitch Item ACE.

Dans les versions anglaises, il est également possible de faire de l'ACE en utilisant une attaque glitchée obtenue avec d'autres glitches tels que le Trade Evolution Glitch ou détenue par un Pokémon glitch obtenu avec une des nombreuses méthodes permettant d'avoir des Pokémon : c'est le Glitch Move ACE ; Malheureusement, cette méthode n'est pas démontrée en version française et donc, nous n'en parlerons pas.

Vous avez toutefois plusieurs alternatives aux objets. Il est possible d'arriver à l'ACE en utilisant des boîtes de dialogues glitchées (Textbox ACE), mais contrairement aux versions anglaises, cela n'est démontré sur jeu français que dans la version Jaune, où on utilisera une propriété de Pikachu (et un peu de chance) pour réaliser une exécution de code sans pré-requis, ce qui en fait une meilleure technique !

Pour ceux qui veulent une méthode un peu plus complexe, le Glitch Meta-Map Script ACE peut être effectué également à l'aide de l'Item Underflow Glitch (mais sans avoir besoin d'un objet) ou même parfois en détournant le Ditto Trick de son but premier.

Pour finir en beauté, le ZZAZZ Trainer ACE, utilise la corruption ZZAZZ via un dresseur spécifique que vous pouvez rencontrer via plusieurs glitches de rencontre. A vous de choisir votre méthode !

Etape I : préparer une méthode d'exécution de code

Cliquez sur l'un des liens suivantes pour accéder à la sous-page correspondante et apprendre la technique. Il est possible de préparer son code (étape II) avant de préparer la méthode, si vous le souhaitez.

  • Le Glitch Item ACE, meilleure méthode pour R/B (et également pratique sur Jaune) nécessitant un objet spécial obtenu avec d'autres glitches.
  • Le Textbox ACE dans sa variante "Pikachu Off-Screen", méthode exclusive à Jaune et qui constitue la meilleure méthode sur cette version si vous avez un peu de chance.
  • Le Glitch Meta-map script ACE, un prolongement de l'Item Underflow Glitch permettant d'exécuter du code.
  • Le ZZAZZ Trainer ACE, une méthode peu réaliste, rapide pour exécuter du code mais moyennant une corruption massive du jeu.

Etape II : Préparer et lancer le code voulu

Les sous-sections qui suivent vous permettront de comprendre comment utiliser ce glitch pour vos besoins personnels.

Simuler un code A.R. / Changer la valeur d'une adresse mémoire donnée

Si vous êtes habitués de nos pages et avez lu notre introduction à la glitchologie Pokémon (et il vaudrait mieux que ce soit le cas avant de continuer) vous êtes déjà familiers du concept d'adresse mémoire et de la façon dont les codes action replay fonctionnent. Pour rappel, ils sont composés d'une série de 8 chiffres hexadécimaux, 4 groupes de deux que l'on peut écrire de cette façon : AABBCCDD. Vous avez sans doute l'habitude du BB (ou xx), qui représente l'Identifiant vous permettant de sélectionner la nature de ce que vous essayez d'obtenir avec un code (par exemple un Pokémon). Quant à CC et DD, il s'agit de l'adresse mémoire que le code va modifier (à l'envers, l'adresse est donc $DDCC). N'hésitez pas à lire nos explications techniques si vous voulez approfondir.

Un code action replay n'est donc rien d'autre qu'une instruction simple demandant de placer une valeur dans une adresse mémoire. Avec l'ACE, vous pouvez changer la valeur de l'adresse de votre choix, ce qui revient à simuler tous les codes action replay ! Il suffira de configurer l'inventaire pour indiquer les valeurs BB, CC et DD du code à déclencher.

Voici l'inventaire à préparer :

  1. N'importe quel objet (par exemple l'objet glitch si vous utilisez le Glitch Item ACE)
  2. N'importe quel objet (par exemple l'objet glitch si vous utilisez le Glitch Item ACE)
  3. Limonade xBB (la quantité de Limonade représente donc l'Identifiant du code, mais en décimal. Vous pouvez utiliser la calculatrice Windows pour la conversion. Pour un Identifiant de $12, comptez donc 18 limonades)
  4. Précision + xCC (la quantité de Précision + représente donc la valeur CC du code, mais en décimal)
  5. Carbone xDD (la quantité de Carbone représente donc la valeur DD du code, mais en décimal)
  6. Poké Ball x119
  7. Eau Fraîche x201
  8. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

De manière générale, cet inventaire générique permet de modifier n'importe quelle adresse mémoire $DDCC de votre choix. Il suffit juste de mettre les bonnes valeurs aux bons endroits !

Pour plus de compréhension, voici un exemple. Je souhaite avoir tous les badges, et pour cela le code action replay est 01FF5BD3 sur Rouge/Bleu, et 01FF5AD3 sur Jaune. Ce code affecte la valeur FF à l'adresse mémoire $D35B. En décimal, FF = 255, 5B = 91 et D3 = 211. Sur Rouge/Bleu, mon inventaire ressemblera à ça :

  1. N'importe quel objet
  2. N'importe quel objet
  3. Limonade x255
  4. Précision + x91
  5. Carbone x211
  6. Poké Ball x119
  7. Eau Fraîche x201

La seule différence dans Jaune est que vous n'aurez que 90 Précision +, ainsi qu'une Huile à la fin si vous utilisez le Textbox ACE !

Une fois l'inventaire prêt, vous n'avez qu'à exécuter le code avec la méthode choisie pour activer le code A.R.. C'est aussi simple que ça !

Obtenir ces objets dans de si grandes quantité peut être un problème. Vous pouvez bien sûr le résoudre en simulant par ACE les codes action replay qui modifient votre premier objet. Vous pouvez aussi choisir de rencontrer MissingNo. Il est aussi possible d'obtenir un paquet d'objets en faisant l'Item Underflow Glitch et en utilisant les axes x et y pour influencer la nature mais aussi la quantité des objets.

Notez bien que la simulation du code de capture 01xxDDCF doit se faire durant le combat avant de lancer la ball pour fonctionner (donc forcément avec le Glitch Item ACE) et c'est une bonne façon de capturer des MissingNo. pixels en version R/B française.

Executer d'autres types de codes

Vous venez d'apprendre à modifier la valeur d'UNE adresse mémoire à la façon d'un code action replay. Mais avec l'ACE vous n'êtes pas du tout limité à ça. Vous pouvez exécuter n'importe quel code, que ce soit pour modifier une adresse ou plusieurs en même temps, voire même créer une procédure, pour peu que vous vous y connaissiez suffisamment pour comprendre la façon dont vous influencez la RAM. Nous vous conseillons de lire notre section en fin de glitch pour cela, mais si ça ne vous intéresse pas plus que ça, nous vous donnons ici quelques exemples de codes, dont la plupart viennent du forum de notre partenaire Glitch City Labs.

Changer le second objet :
Ce code permet d'ajouter 1 a l'Identifiant du second objet de l'inventaire donc si c'est une Poké Ball (Identifiant $04), activez le code 4 fois une fois l'inventaire en place, et vous aurez une Safari Ball. Ce code n'utilise que des objets achetables, et est très utile notamment pour récupérer des objets pour d'autres codes, surtout qu'il n'en change pas la quantité. Si vous prenez n'importe quel objet x255 avec l'underflow, vous pouvez utiliser celui-ci pour le transformer en l'objet de votre choix x255, et jeter autant d'exemplaires que vous voulez pour mettre en place vos codes.

  1. N'importe quel objet
  2. L'objet qui doit changer
  3. Anti-brule x43
  4. Antigel x43
  5. Total soin x201
  6. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

Vider une boite PC
Ce code permet de vider une boite du PC (ce qui peut être utile si elle est remplie de Pokémon glitchés). Le seul problème de ce code c'est qu'il ne marche que pour la boite actuelle et qu'avec diverses méthodes d'ACE sur Jaune il faut justement que la boite actuelle contienne les Pokémon du code. L'utiliser sur Jaune vous forcerait donc à refaire le setup de votre méthode la prochaine fois que vous voudrez exécuter un code.

  1. N'importe quel objet
  2. N'importe quel objet
  3. Limonade x1
  4. Soda cool x64
  5. CT34 x133 (132 sur jaune)
  6. CT18 x201
  7. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

Changer son nom
Changer son nom peut se faire avec une série de codes action replay disponibles sur notre site. Vous pourriez donc changer chaque adresse, mais il existe un autre moyen. Ce code change le nom de votre joueur en le surnom du premier Pokémon de votre équipe, sans avoir besoin de changer le code entre deux lettres. Ça peut être très utile pour le Old Man Trick, mais aussi si vous voulez changer de nom ou si le nom de dresseur est buggué suite à l'utilisation, par exemple, de la corruption Super Glitch.
Faites cependant attention en exécutant ce code car si vous changez votre nom de dresseur sans posséder tous les badges il est possible que certains Pokémon ne vous obéissent plus.

  1. N'importe quel objet
  2. N'importe quel objet
  3. CT50 x186 (185 sur jaune)
  4. CT10 x64
  5. CT34 x93 (92 sur jaune)
  6. CT09 x46
  7. ????? (objet d'Identifiant $2C) x52. Utilisez le code de changement d'objet plus haut avec un objet en 52 exemplaires. Sur Jaune, remplacez-le par Clé Secrète.
  8. Précision + x40 (39 dans jaune)
  9. Total soin x201
  10. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

Ce code fonctionne lettre par lettre (vous devez donc activer 6 fois le code si le surnom contient 6 lettres) et vous devez ensuite activer une dernière fois le code pour inscrire un marqueur de fin à votre nouveau nom.

Chromatiser un Pokémon :
Merci à thelinekioubeur pour ce code
Dans la première génération, il n'y a pas de Pokémon chromatiques (shiny, en anglais). Mais il est possible de les modifier par ACE pour qu'ils le deviennent à coup sûr, une fois transféré sur Or, Argent ou Cristal ! Ce code "chromatise" le premier Pokémon de la boite active du PC.

  1. N'importe quel objet
  2. N'importe quel objet
  3. PierreFoudre x182 (x181 sur Jaune)
  4. CT18 x62
  5. CT34 x119
  6. CT14 x64
  7. PV Plus x79
  8. Poké Ball x113
  9. CT01 x1
  10. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

On ne peut pas non plus vous lister tous les codes du monde. Toutefois, un topic consacré à l'échanges de codes ACE existe sur notre forum alors n'hésitez pas à y faire un tour ! Sinon, vous pouvez toujours apprendre à en faire et vous n'aurez alors plus de limites !

Forcer l'activation de glitches par ACE

En modifiant les valeurs des adresses par ACE, il est possible de déclencher "artificiellement" la plupart des glitches qui se trouvent sur PRAMA. Voici quelques moyens détournés d'effectuer certains glitches, qui pourraient vous servir ou juste vous amuser !

Ditto Trick instantané
Il est possible de simuler la fuite devant un dresseur du Ditto Trick grâce à l'ACE. Le code pour cela est différent sur chaque Route. Ensuite, il vous suffira de finir le glitch en allant affronter un Métamorph. Mais il y a encore plus simple. Activez le code suivant, volez à Céladopole et sortez par l'Ouest, sur la Route 16. Sortez alors et fermez le menu Start qui s'ouvre pour rencontrer instantanément le Pokémon de votre choix !

  1. N'importe quel objet
  2. N'importe quel objet
  3. PierreFoudre x45
  4. CT05 x4
  5. Rappel Max x(Identifiant du Pokémon voulu, en décimal)
  6. Réveil x8
  7. Huile Max x4
  8. Repousse x254 (253 sur Jaune)
  9. Poké Ball x25
  10. Limonade x1
  11. Antidote x119
  12. CT01 x1
  13. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

Obtenir l'Attaque Cooltrainer
Nécessaire pour le Cooltrainer Trick, cette attaque ne peut pas être obtenue par des moyens conventionnels sur Jaune. Vous pouvez aussi choisir d'appliquer ce code, qui transforme la première attaque du premier Pokémon en attaque Cooltrainer, même dans les versions Rouges et Bleues.

  1. N'importe quel objet
  2. N'importe quel objet
  3. Limonade x0
  4. Précision + x120 (119 dans Jaune)
  5. Carbone x209
  6. Poké Ball x119
  7. Eau Fraîche x201
  8. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

Forcer la corruption Cooltrainer
Vous savez peut-être que la corruption Cooltrainer ne marche pas sur toutes les sauvegardes et qu'un bon moyen de la faire fonctionner est de renommer tous ses Pokémon avec des surnoms de 10 lettres et d'ouvrir une boite de stockage du PC de Léo qui n'a jamais été utilisée. Seulement, tout le monde n'en a pas. Voici un code ACE qui permet de remettre une boite vidée active à zéro, comme si elle n'avait jamais été ouverte !

  1. N'importe quel objet
  2. N'importe quel objet
  3. Pierrefoudre x128
  4. CT18 x4
  5. Limonade x1
  6. Potion x61
  7. Anti-brûle x34
  8. Soda Cool x1
  9. Master Ball x70
  10. CT05 x253
  11. Rappel Max x201
  12. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

Item Underflow Glitch
Il est possible d'activer l'Item Underflow Glitch par ACE au cas où vous souhaiteriez obtenir un objet, par exemple. C'est tout simple, car il n'y a qu'une seule adresse à modifier, celle qui gère le nombre d'objets de l'inventaire !

  1. N'importe quel objet
  2. N'importe quel objet
  3. Limonade x255
  4. Précision + x34 (33 dans Jaune)
  5. Carbone x211
  6. Poké Ball x119
  7. Eau Fraîche x201
  8. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

Avoir plus de 6 Pokémon (Fossil Conversion sans Save Abuse ni Super Glitch)
On peut également augmenter son nombre de Pokémon, ce qui s'avère utile pour certains glitches qui, autrement, nécessiteraient une corruption. C'est le cas notamment du Fossil Conversion Glitch !

  1. N'importe quel objet
  2. N'importe quel objet
  3. Limonade x(nombre de Pokémon voulu, 33 minimum pour le Fossil Conversion Glitch)
  4. Précision + x104 (103 dans Jaune)
  5. Carbone x209
  6. Poké Ball x119
  7. Eau Fraîche x201
  8. Huile x1 (uniquement nécessaire si vous utilisez le Textbox ACE)

Programmer des logiciels

Il est également possible d'utiliser les fonctionnalités de l'ACE pour programmer des choses plus complexes (comme des jeux par exemple), dans la limite de 249 octets. Pour comprendre cette sous-section réservée aux habitués du ACE, vous devez avoir lu nos explications techniques ! La découverte de cette procédure pour Glitch Item ACE sur Rouge ou Bleu est imputable à TheZZAZZGlitch et son adaptation à la version française à un membre de notre forum, Darkbrioche, que nous remercions vivement !

Commencez par obtenir l'inventaire suivant :

  1. N'importe quel objet
  2. N'importe quel objet
  3. Précision + x102
  4. Anti-brûle x126
  5. Anti-para x15
  6. PV Plus x15
  7. Antigel x15
  8. Potion x134
  9. CT34 x25
  10. CT15 x46
  11. Total soin x52
  12. Super Ball x201
  13. CT10 x6
  14. CT20 x46

Rendez-vous sur la Route 1, activez le code avec l'objet glitché, et sautez une barrière. Jetez 19 CT34 de façon à ce qu'il n'en reste plus que 6, puis inversez CT15 et CT20 pour rentrer dans le mode écriture.

Déplacez-vous à présent sur la Route et placez-vous à l'endroit correspondant au nombre hexadécimal de l'instruction à ajouter sur la carte suivante créée par Torchickens, et exécutez votre code à nouveau. Poursuivez ainsi pour toutes les instructions suivantes en activant à la chaque fois, jusqu'à la fin de votre programme.

Quand vous avez fini, inversez CT34 et CT10 et exécutez de nouveau pour lancer le programme ! A titre d'exemple, voici un Pong programmé sur Pokémon Bleu par TheZZAZZGlitch :

Et, aussi incroyable que ça puisse paraître, Torchickens a utilisé un programme ACE (à l'aide d'une procédure un peu différente que vous pourrez retrouver sur la vidéo ci-dessous) pour transformer Bourg-Palette en une version rétro de Bonaugure, la ville de départ de Pokémon Diamant/Perle et Platine !

Alors, vous attendez quoi pour faire vos propres programmes ? Amusez-vous bien !

Explications techniques : Comment fabriquer son code

Tout d'abord, sachez que toutes ces différentes méthodes ont quelque chose en commun : elles lancent l'interprétation d'un point particulier de la mémoire comme du code à lire. Ces points sont les suivants pour la méthode du Glitch Item ACE :

  • 7EME ETAGE : les Pokémon de votre équipe (adresse $D168 sur la carte de la RAM car il faut ajouter 5 pour la version française, comme toujours). Dans la version Jaune, cet objet ne lit qu'à partir de l'adresse $04FE ce qui a comme conséquence de vous envoyer dans une version glitchée d'un centre Pokémon.
  • 3EME ETAGE : les PV du dernier Pokémon stocké à la pension ($DA64 dans Jaune, $DA65 dans R/B)
  • ws*l’||lm|| : les Pokémon de la boite active du PC ($DA84). Dans R/B, cet objet ne permet pas d'exécuter du code.
  • 8*û- : le D.O. du dernier Pokémon stocké à la pension ($DA58) - c'est la même lecture pour le dresseur ZZAZZ Glitch
  • \-g*||lm|| : le Surnom du dernier Pokémon stocké à la pension ($DA47)
  • 1er SS : les données du Panthéon ($A7D0)

Seulement, comme je l'ai évoqué dans l'article, créer du code à partir de Pokémon, c'est pas super évident ; surtout à partir de son D.O. ou Surnom. C'est pour ça qu'on vous fait faire cette configuration particulière dans l'équipe, dans le PC ou dans la Pension (on appelle cela un "setup") : c'est en fait une instruction qui "redirige" la lecture du code... vers l'inventaire ! Lorsque vous activez via l'inventaire l'objet glitché, le jeu interprète donc ces Pokémon comme une instruction pour se rendre dans l'inventaire et y lire les objets qui s'y trouvent comme du code. Bien sûr, il existe toujours plusieurs façon de faire les choses, et il est possible d'utiliser d'autres setups ; certains sont plus courts, mais plus complexes, d'autres plus longs mais plus faciles à obtenir, certains sont optimisés pour être disponibles le plus tôt possible dans le jeu... Si cela vous intéresse, notre topic sur le glitch propose plusieurs autres setups !

Si vous souhaitez approfondir ce glitch, non seulement pour comprendre mais aussi pour créer des codes à exécuter à votre convenance, vous devez comprendre comment les nombres hexadécimaux des Pokémon, des objets et de leur quantité sont traduits en instructions appelées opcodes. Sur ce tableau, vous trouverez la liste des opcodes pour chaque nombre hexadécimal. Par exemple, 41 correspond à la case à l'intersection entre la 5ème ligne et la deuxième colonne, c'est à dire à l'instruction ld B,C

Vous trouverez surement des tutos sur le net pour apprendre tout ça de façon avancée, mais on va essayer de vous donner ici les bases qui vous permettront de coder. L'opérateur ld signifie load (charger, dans le sens de "devient") ; inc veut dire incrémenter (donc augmenter la valeur) et dec décrémenter (diminuer). jp et jr vous permettent de sauter à un autre endroit de la mémoire. sub implique une soustraction, alors que ret marque dans notre cas la fin de la lecture du code. Une liste plus complète et explicative est disponible à ce lien.

Supposons que vous avez opté pour le Glitch Item ACE et examinons ensemble le code appelé à partir de l'équipe dans Rouge/Bleu après l'activation de 7EME ETAGE. Celle-ci commande un jp hl initial, où h et l sont des variables de valeur (actuellement) $D1 et $68. La lecture sautera donc à l'adresse D168 de la carte de la RAM ce qui correspond au nombre de Pokémon dans l'équipe (rappelez-vous qu'il faut toujours ajouter 5 !). Pour éviter de confondre les adresses de mémoire avec les nombres hexadécimaux, j'écrirais un $ lorsqu'il s'agit d'une adresse comme nous le faisons d'habitude sur le site. La lecture du code démarre donc dans l'équipe.

Dans votre équipe, il y a 5 Pokémon ; la valeur de $D168 est $05. Ensuite, il y a Roucool (Identifiant $24), Parasect ($2E), Gravalanch ($27), Tentacool ($18) et Kangourex ($02). Il n'y a pas de sixième Pokémon ($00). L'adresse suivante est le marqueur de fin d'équipe, dont la valeur est toujours FF. On va s'arrêter la pour le moment. Le jeu lit donc le code $05 $24 $2E $27 $18 $02 $00 $FF. Traduit en opcodes, ça donne ça :

$D168 (nombre de Pokémon)	$05	dec b		La variable b est décrémentée.

Nous n'avons pas affecté de valeur à cette variable, qui ne sera pas utilisée pour notre code.

$D169 (premier Pokémon)		$24	inc h		La variable h est incrémentée.

Souvenez-vous, elle était de $D1. Elle devient donc $D2.

$D16A (deuxième Pokémon)	$2E	ld l,d8

Ça devient subtil. Vous voyez le 2 qui apparaît sous l'opcode dans le tableau ? Il signifie que cette instruction prend 2 octets. Le d8 dans l'opcode doit être remplacé par la valeur de l'adresse suivante ($D16B, le troisième Pokémon, soit $27). Il faut donc lire ld l,27 c'est-à-dire que l (qui était de $68) devient désormais $27.

$D61B n'est pas lue individuellement, car elle est comprise dans l'instruction précédente. On enchaîne.

$D16C (quatrième Pokémon)	$18	jr r8

Cette instruction prend également deux octets. r8 est une donnée un peu particulière, qui doit être remplacée par l'adresse suivante ($D16D) auquel on ajoute autant d'unités que l'exige la valeur de celle-ci. Ici, la valeur de cette adresse est $02. Mais comme il faut compter le 0 comme une valeur, il faut donc ajouter 3 unités à $D16D, ce qui donne $D170. L'instruction commande donc de sauter à l'adresse $D170. Le prochain hexadécimal de notre équipe qui sera lu est celui affecté à cette adresse : le $00 et le $FF affectés à $D16E et $D16F sont sautés.

Intéressons-nous maintenant à la suite. Dans la carte de la mémoire, on peut voir qu'à partir de $D170 vient le détail du premier Pokémon. Son espèce en premier (ici Roucool, donc $24) puis son nombre de PV, dans les adresses $D171 et $D172. Au maximum, un Pokémon peut donc avoir $FFFF PV, soit 65535. Dans notre cas, 233 PV correspondent, en hexadécimal, à $E9, donc $00 $E9.

$D170 (doublon de $D169)	$24	inc h		h devient $D3.
$D171 (nombre de PV 1)		$00	nop		Cela signifie que le jeu ne fait rien.
$D172 (nombre de PV 2)		$E9	jp (hl)		Sauter à l'adresse indiquée par la valeur des variables h et l.

Ici, h = $D3 et l = $27. Nous sautons à $D327. Vous l'avez compris, c'est l'adresse du troisième objet de l'inventaire. De là, avec le 7EME ETAGE à la deuxième position, activer celui-ci conduira le programme à lire du code à partir de l'objet qui se trouve en dessous de lui !

Pour comprendre pourquoi il est facile de simuler un code A.R. avec ce glitch, il faut savoir qu'entrer un code de type AABBCCDD revient à demander au jeu de changer la valeur de l'adresse $DDCC (oui, c'est à l'envers) en BB. Examinons le code appelé par l'inventaire "générique" utilisé pour la simulation de code action replay. Les Identifiants des objets utilisés (la Limonade, le Précision +, le Carbone, la Poké Ball et l'Eau Fraîche) sont respectivement $3E, $2E, $26, $04 et $3C. N'oubliez pas, nous démarrons au troisième objet de l'inventaire mais l'adresse suivante correspond à sa quantité, et le quatrième objet ne vient qu'après :
$04 $77 $3C $C9

$D327	$3E	ld a,d8 (2 octets)	Remplacer d8 par la valeur de l'adresse suivante.

$D328	"BB"	→ ld a,BB		La variable a prend la valeur BB

$D329	$2E	ld l,d8 (2 octets)	Remplacer d8 par la valeur de l'adresse suivante.

$D32A	"CC"	→ ld l,CC		La variable l prend la valeur CC

$D32B	$26	ld h,d8 (2 octets)	Remplacer d8 par la valeur de l'adresse suivante.

$D32C	"DD"	→ ld h,DD		La variable h prend la valeur DD

$D32D	$04	inc b			La variable b est incrémentée.

$D32E	$77	ld (hl),a		Les parenthèses signalent que ce n'est pas l'adresse HL qui change, mais la valeur affectée à cette adresse. Ici, HL vaut DDCC, et la valeur affectée à $DDCC devient a, c'est à dire BB. Mission accomplie, le code est actif !

$D32F	$3C	inc a			La variable a est incrémentée.
  
$D330	$C9	ret			Fin de la lecture du code.

Le $C9 final correspond à 201 en hexadécimal (la quantité de Eau Fraîche) puisque l'adresse $D330 correspond à la quantité du septième objet. Quand aux actions sur les variables b (avant le changement de valeur) et a (après celui-ci), ce ne sont que des "placeholders", des opérations inutiles visant à nous épargner l'utilisation d'objets compliqués à obtenir. Super simple, n'est-ce pas ? Du coup on va faire un truc un peu plus dur ; intéressons-nous aux codes faits maisons et particulièrement celui qui permet de transformer son second objet.

$D327		$0C	inc  c		Incrémenter la valeur c. Nous ne l'avons pas affectée.

$D328		$2B	dec hl		Décrémenter la valeur hl.  N'oubliez pas, ce code suit le code lu dans l'équipe ! hl était donc $D327 et devient $D326.

$D329		$0D	dec  c		Décrémenter la valeur c. On revient ici à la normale. En fait, ces deux opérations sont des "placeholders". Elles ne servent qu'à passer à l'opération suivante sans rien faire, encore une fois. Il faut parfois recourir à ces "fausses instructions" pour passer outre certains problèmes.

$D32A		$2B	dec  hl		Décrémenter la valeur de hl qui devient $D325... soit l'adresse du deuxième objet de l'inventaire !

$D32B		$34	inc  (hl)	Incrémenter la valeur affectée à hl. Vous pouvez bien voir ici la différence entre hl, qui est de D325 et réfère à l'adresse du deuxième objet de l'inventaire, et (hl) qui est la VALEUR affectée à cette adresse. Ici, c'est l'Identifiant de l'objet qui se trouve actuellement en deuxième position, qui gagne 1. Bingo !

$D32C		$C9	ret		Fin de la lecture du code.

Bah alors, c'était facile ça aussi en fait. Attaquons-nous à quelque chose de plus indigeste, comme le code du changement de nom !

$D327		$FA		ld a,(a16) (3 octets)
$D328		$BA		→
$D329		$D2		→ ld a,($D2BA)		a devient la valeur à l'adresse $D2BA (première lettre du surnom du premier Pokémon)
$D32A		$40		ld   b,b		b devient b (placeholder)
$D32B		$EA		ld (a16),a (3 octets)
$D32C		$5D		→
$D32D		$D1		→ ld (D15D),a		La valeur à l'adresse $D15D (première lettre de votre nom) devient a (première lettre du surnom du premier Pokémon)
$D32E		$2E 		ld l,d8 (2 octets)
$D32F		$2C		→ ld l,$2C		l devient 2C
$D330 		$34		inc (hl)		Incrémenter la valeur à l'adresse hl. Souvenez-vous, h est $D3, donc hl réfère à $D32C. Il s'agit de la quantité du quatrième objet, mais c'est surtout cette valeur qui sert à changer la première lettre de votre nom.
$D331 		$2E		ld l,d8 (2 octets)
$D332		$28		→ ld l,28		l devient $28
$D333		$34		inc  (hl)		Incrémenter la valeur à l'adresse hl (qui est désormais $D328, c'est à dire la quantité de votre troisième objet... et la valeur servant à affecter à la variable a la première lettre du surnom du premier Pokémon !)
$D334		$C9		ret			Fin de la lecture du code.

La première partie de ce code permet de changer la première lettre du nom du joueur en première lettre du surnom d'un Pokémon. La deuxième partie décale d'une unité les deux hexadécimaux qui sont utilisés pour sélectionner la lettre (par exemple, $5D devient $5E, donnant l'adresse $D15E, qui correspond à la deuxième lettre). La prochaine fois que vous activerez le 7EME ETAGE, ce sont désormais les adresses $D2BB et $D15E qui seront utilisées, remplaçant la deuxième lettre du nom du joueur par la deuxième lettre du surnom du premier Pokémon. Etc., etc. :)

On va s'arrêter la parce que je pense que vous avez compris la technique. A vous de composer avec les opcodes (partez de ceux-ci, traduisez en hexadécimal et voyez si c'est réalisable ou si vous devez ajouter des placeholders !) pour faire vos propres programmes ! Et comme on vous aime beaucoup, notre testeur-programmeur ISSOtm a développé un outil qui convertit vos opcodes en objets de l'inventaire, donc vous n'avez quasiment même plus à vous prendre la tête ! Pour retrouver cet outil magique baptisé GBZ80 to items, cliquez ici pour la v2 (destinée aux néophytes car propose des catégories explicites de tous les opcodes) ou sur le site personnel d'ISSOtm, ici pour la v3 (un peu plus pro car il faut avoir déjà crée son code à la main) !

Par confort, j'ai beaucoup parlé du 7EME ETAGE mais le même principe est valable pour tous les objets glitches. Avec les explications plus haut, vous devriez être en mesure de traduire les setup utilisés pour chacun d'eux et comprendre pourquoi, à partir du point de départ de la lecture donné plus haut, cela fonctionne. En ce qui concerne le setup avec 3EME ETAGE, vous devez savoir qu'utiliser un PP Plus sur une attaque rajoute hex:40 à la valeur de son nombre de PP (par exemple, 1 PP sur une attaque où 2 PP Plus ont été utilisés donne une valeur de 81).

Revenons à nos autres méthodes d'exécution de code. Tout d'abord, si vous avez lu les explications techniques du Ditto Trick vous savez que chaque map du jeu dispose d'un script qui est généralement sur 0 ou sur 1. Si nous pouvons utiliser un autre glitch pour changer cette valeur de script à quelque chose de normalement impossible, cela exécute parfois du code à certains points de la mémoire :

  • Script $12 de Bourg-Palette, $10 de Jadielle et $0D d'Argenta : le N°ID (2ème octet) du deuxième Pokémon de la boîte active ($DAC9).
  • Script $11 de l'arène de Céladopole : Exp. Stats. FOR (2ème Octet) du 19ème Pokémon de la boîte active ($DD01).
  • Script $12 du casino de Céladopole : Nombre de Safari Balls ($DA4C).

Je ne vais pas rentrer dans le détail des opcodes donnés par les setups proposés sur nos pages pour ces différents scripts, car vous devriez être en mesure de les comprendre seul maintenant. Ceci dit, il est intéressant de savoir pourquoi le Connection Copier permet d'activer ces scripts. Cette technique n'est pas très documentée mais repose sur le fonctionnement des connexions entre les maps : l'adresse $D375 stocke l'Identifiant de la map actuelle, et les deux suivantes ($D376 et $D377) enregistrent l'adresse où le jeu peut trouver, dans la ROM, les données de la map se trouvant au sud, qui précèdent l'adresse de l'endroit où il faut les copier ($D378 et $D379) et enfin, le nombre de valeurs à y copier ($D37A). Le reste permet d'englober la connection dans la taille de la map afin que le jeu procède à la copie.

Le Textbox ACE est déjà en partie expliqué sur la sous-page correspondante, mais le but dans le cas de l'ACE c'est de faire en sorte de modifier le nombre de panneau sur la map à 4 ($D4AF) et les coordonnées de ce panneau ($D4B6) à $01, $01 (le coin en haut à gauche) grâce à des pas vers l'est et le bas, puis de s'y rendre et d'activer la boîte de dialogue. Celle-ci n'existant normalement pas, elle lira une donnée qui n'a rien avoir (les données du 5ème Pokémon de l'équipe, $D221. Or, dans une boîte de dialogue, lorsque le caractère de contrôle d'Identifiant $08 s'affiche, du code est exécuté...


Page Précédente : Q Trick
Page suivante : Experience Underflow Glitch