Arbitrary Code Execution

Version : O/A/C

C'est le plus puissant glitch de la 2G, 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 : BUGLITCH, Krys3000
Tuteur : Haxel
Remerciements à notre partenaire Glitch City Labs et particulièrement à Torchickens, couldntthinkofaname, spamviech, gifvex, et luckytyphlosion
This glitch is also available in English language at our partner Glitch City Labs: click here

ATTENTION : Ce glitch ne fonctionne pas sur Visual Boy Advance, qui ne gère pas bien l'Echo RAM (utilisez BGB)

Cette page va vous apprendre à exécuter du code dans les version Or, Argent et Cristal. Si vous êtes familier avec d'autres glitches de ce type comme le 8F Code Execution vous avez une idée de la puissance de l'exécution de code. De la même manière, ce glitch vous permettra d'ordonner au jeu d'agir selon votre bon vouloir, c'est vous qui aurez la main. Avec ce glitch, vous n'avez aucune limite, vous avez un action replay puissance 10 entre vos mains. Argent, Pokémon, objets, badges, se téléporter d'endroits en endroits, rien n'est impossible !

Introduction : l'exécution de code sur O/A/C

Dans les jeux de première génération, l'exécution de code s'effectuait le plus souvent à l'aide d'un objet glitch. Dans la deuxième génération, comme vous le savez si vous avez lu notre liste de correspondance, il n'y a pas d'objet glitch, tous les slots inutilisés sont occupés par un placeholder appelé Teru-Sama, qui ne sert à rien...

Pourtant, dans la version anglaise du jeu, on peut exécuter du code à l'aide de la Boîte Jeton : c'est le Coin Case Glitch. Ce glitch très simple est dû a une erreur de l'équipe de traduction anglaise qui a oublié, juste pour cet item, de remplacer le marqueur de fin de phrase (celle qui indique le nombre de jetons) japonais par celui qui fonctionne sur les jeux anglais et européens. Cette erreur n'est donc une partie du jeu de base, et parce que les équipes de traduction des autres pays ont été plus rigoureuses, le glitch ne fonctionne pas dans les autres langues. Dommage !

Dans les versions non-japonaises du jeu, en dehors du Coin Case Glitch, il existe au moins 5 autres méthodes d'exécution de code. L'une d'elles, le Move 00 Type ACE, est également exclusif, en tout cas pour l'instant, aux version anglaises. Les 4 autres méthodes, disponibles dans les versions françaises, utilisent soit le recours direct à un Bad Clone obtenu avec le Bad Clone Trick, soit le recours à un autre glitch dépendant (le plus souvent) d'un Bad Clone (Item Shifting Glitch ou son dérivé le Infinite PC Items Trick). Nous allons réexpliquer tout ça pour chaque méthode, mais autant dire que si vous êtes allergiques aux Bad Clones, vous ne pourrez jamais exécuter du code !

Comment choisir sa méthode parmi celles présentées ci-dessous ? Tout d'abord, deux méthodes sont exclusives à Cristal : le Glitch Pokédex Mode ACE qui utilise l'Infinite PC Items Trick et le Pokédex, et le Bad Clone ACE, qui utilise simplement un Bad Clone ainsi qu'un bout de code issu du Mobile GB Adapter, l'accessoire qui permettait de connecter Cristal à un téléphone portable, uniquement disponible au Japon (mais dont le code a été conservé dans les versions européennes et américaines). La première de ces méthodes est simple, mais corrompt le Pokédex. La seconde nécessite plus de préparation mais ne corrompt pas de données du jeu... C'est à vous de choisir.
Concernant Or et Argent, utiliser le Wrong Pocket TM ACE est la meilleure idée : elle utilise l'Item Shifting Glitch (ou n'importe quelle autre méthode d'exécution de code) pour obtenir, dans la poche des Balls, une CT qui exécute du code. Vous pouvez aussi utiliser cette méthode sur Cristal, mais c'est beaucoup plus dur et ne vaut pas forcément le coup. La dernière méthode, exclusive à O/A, est toute nouvelle : c'est le Withdraw Smash ACE, une méthode de corruption de données qui s'utilise surtout pour le fun.

Dans tous les cas, l'idée d'une bonne exécution de code, c'est de composer ses codes avec quelque chose de pratique : ça peut être les objets, comme dans la première génération, mais aussi les noms des boîtes, nouveauté de O/A/C, qui permettent donc d'écrire des codes plus rapidement (mais les codes seront un peu plus compliqués à écrire, et il n'est toutefois pas possible de composer des codes avec les boîtes sur Cristal).

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 Wrong Pocket TM ACE (O/A/C), la meilleure méthode sur O/A (mais moins sur Cristal) qui exécute du code grâce à une CT placée dans la poche Balls.
  • Le Glitch Pokédex ACE (Cristal) (BIENTOT DISPONIBLE), une méthode exclusive à Cristal qui constitue un des meilleurs choix pour cette version, mais corrompt le Pokédex.
  • Le Bad Clone ACE (Cristal) (BIENTOT DISPONIBLE), une méthode exclusive à Cristal qui ne corrompt pas mais est plus longue à préparer.
  • Le Withdraw Smash ACE (O/A) (BIENTOT DISPONIBLE), une méthode complexe qui corrompt certaines données et s'utilise surtout pour le fun.

Etape II : préparer le code voulu

Obtenir n'importe quelle CT/CS en quantité x255 (Code Boîte, O/A)

Allez au PC de Léo et utilisez CHANGER BOITE pour renommer la Boîte 1 en Ap09é@♀n' en replaçant @ par le caractère correspondant à la CT voulue dans le tableau suivant :
(espace) = CT02
A = CT03
B = CT04
C = CT05
D = CT06
E = CT07
F = CT08
G = CT09
H = CT10
I = CT11
J = CT12
K = CT13
L = CT14
M = CT15
N = CT16
O = CT17
P = CT18
Q = CT19
R = CT20
S = CT21
T = CT22
U = CT23
V = CT24
W = CT25
X = CT26
Y = CT27
Z = CT28
( = CT29
) = CT30
: = CT31
; = CT32
[ = CT33
] = CT34
a = CT35
b = CT36
c = CT37
d = CT38
e = CT39
f = CT40
g = CT41
h = CT42
i = CT43
j = CT44
k = CT45
l = CT46
m = CT47
n = CT48
o = CT49
p = CT50
q = CS01
r = CS02
s = CS03
t = CS04
u = CS05
v = CS06
w = CS07

Utilisez la CT17 depuis la mauvaise poche en vous assurant que le "Slide Pokémon" ainsi que Maraistre avec RETOUR et la CT02 sont placés aux bons endroits. La CT/CS x255 apparaîtra dans la poche des CT/CS.

Augmenter/Diminuer la quantité d'un objet (Code Objets)

Utilisez le code "Obtenir n'importe quelle CT/CS en quantité x255" (ou le code "Obtenir n'importe quel objet" puis le clonage) pour obtenir la CT10 et la CT23, à moins de déjà les avoir dans les quantités mentionnées ci-dessous.
NOTE : La CT10 peut s'acheter.

Obtenez (à moins de déjà les avoir), puis stockez les objets suivants dans le PC, dans cet ordre :

  1. N'importe quel objet x(n'importe quelle quantité)
  2. N'importe quel objet x(n'importe quelle quantité)
  3. Eau Fraîche x44 (x7 sur Cristal)
  4. Poké Ball x38
  5. CT23 x52 (pour augmenter) ou x53 (pour diminuer)
  6. CT10 x(n'importe quelle quantité)
  7. N'importe quel objet x(n'importe quel quantité)
  8. N'importe quel objet x(n'importe quel quantité)
  9. N'importe quel objet x(n'importe quel quantité)
  10. N'importe quel objet x(n'importe quel quantité)
  11. L'objet qui doit changer x(n'importe quel quantité)
  12. N'importe quels autres objets en n'importe quelle quantité peuvent être placés à partir d'ici.

Selon la méthode utilisée, utilisez la CT17/CT33 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex Mode ACE) ou bien ouvrez la Boîte du PC contenant le Bad Clone (Bad Clone ACE) en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que Maraistre sont placés aux bons endroits. Le 11ème objet gagnera ou perdra alors une unité.
NOTE : Diminuer la quantité d'un objet est très utile quand sa quantité est de 1 ; utiliser le code deux fois amènera alors sa quantité à x255, et vous pourrez jeter autant d'unités que vous voudrez pour arriver à la quantité qui vous intéresse vraiment.

Obtenir n'importe quel objet (Code Objets)

Utilisez le code "Obtenir n'importe quelle CT/CS en quantité x255" (ou le duo de codes "Obtenir n'importe quel objet" et "Augmenter/Diminuer la quantité d'un objet") pour obtenir la CT10 et la CT23, à moins de déjà les avoir dans les quantités mentionnées ci-dessous.
NOTE : La CT10 peut s'acheter.

Utilisez la correspondance pour sélectionner l'objet que vous avez déjà ou pouvez facilement acheter/obtenir le plus proche possible (au-dessus ou en-dessous) de l'objet que vous voulez avoir. Obtenez cet objet sélectionné.

Obtenez (à moins de déjà les avoir), puis stockez les objets suivants dans le PC, dans cet ordre :

  1. N'importe quel objet x(n'importe quelle quantité)
  2. N'importe quel objet x(n'importe quelle quantité)
  3. Eau Fraîche x43 (x6 sur Cristal)
  4. Poké Ball x38
  5. CT23 x52 (si l'objet voulu est en-dessous de l'objet selectionné) ou x53 (s'il est au-dessus)
  6. CT10 x(n'importe quelle quantité)
  7. N'importe quel objet x(n'importe quel quantité)
  8. N'importe quel objet x(n'importe quel quantité)
  9. N'importe quel objet x(n'importe quel quantité)
  10. N'importe quel objet x(n'importe quel quantité)
  11. L'objet qui doit changer x(n'importe quel quantité)
  12. N'importe quels autres objets en n'importe quelle quantité peuvent être placés à partir d'ici.

Selon la méthode utilisée, utilisez la CT17/CT33 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex Mode ACE) ou bien ouvrez la Boîte du PC contenant le Bad Clone (Bad Clone ACE) en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraistre sont placés aux bons endroits. Le 11ème objet deviendra alors celui qui est directement en-dessous ou au-dessus de lui dans la correspondance. Utilisez donc autant de fois le code que nécessaire pour atteindre l'objet voulu.

Editer la mémoire du jeu/Simuler un code action replay (Code Objets)

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 : 01XXYYZZ. Vous avez sans doute l'habitude du XX, qui représente l'IDH vous permettant de sélectionner la nature de ce que vous essayez d'obtenir avec un code (par exemple un Pokémon). Quant à YY et ZZ, il s'agit de l'adresse mémoire que le code va modifier (à l'envers, l'adresse est donc $ZZYY). 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'exécution de code, vous pouvez changer la valeur de l'adresse de votre choix, ce qui revient à simuler les codes action replay ! Avec votre code, utilisez la calculatrice Windows pour convertir BB et CC en décimal et notez-en les valeurs. Puis, cherchez l'objet d'IDH ZZ dans notre correspondance.
NOTE : Certains codes, comme celui qui permet de rencontrer un Pokémon, ne peut pas être simulé de cette façon.

Utilisez le code "Obtenir n'importe quelle CT/CS en quantité x255" (ou le duo de codes "Obtenir n'importe quel objet" et "Augmenter/Diminuer la quantité d'un objet") pour obtenir la CT10 et la CT42, à moins de déjà les avoir dans les quantités mentionnées ci-dessous. Si l'objet d'IDH ZZ est aussi une CT/CS et vous ne l'avez pas, utilisez également le code pour cette CT/CS.
NOTE : La CT10 peut s'acheter.

Utilisez le code "Obtenir n'importe quel objet" pour obtenir un PP Plus, à moins d'en avoir déjà un (ou plus). Si l'objet d'IDH ZZ n'est pas une CT/CS et vous ne l'avez pas, utilisez également le code pour cet objet.

Si nécessaire, utilisez le code "Augmenter/Diminuer la quantité d'un objet" pour obtenir autant d'exemplaires de PP Plus, CT42 et de l'objet d'IDH ZZ que vous en aurez besoin pour l'exemplaire ci-dessous.

Stockez les objets suivants dans le PC, dans cet ordre :

  1. N'importe quel objet x(n'importe quelle quantité)
  2. N'importe quel objet x(n'importe quelle quantité)
  3. PP Plus x(conversion de XX en décimal)
  4. CT42 x(conversion de YY en décimal)
  5. L'objet d'IDH ZZ x3
  6. CT10 x(n'importe quelle quantité)
  7. N'importe quels autres objets en n'importe quelle quantité peuvent être placés à partir d'ici.

Selon la méthode utilisée, utilisez la CT17/CT33 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex Mode ACE) ou bien ouvrez la Boîte du PC contenant le Bad Clone (Bad Clone ACE) en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraistre sont placés aux bons endroits pour simuler le code action replay.

Rendre chromatique le 6ème Pokémon de l'équipe (Code Objets)

Utilisez le code "Obtenir n'importe quelle CT/CS en quantité x255" (ou le duo de codes "Obtenir n'importe quel objet" et "Augmenter/Diminuer la quantité d'un objet") pour obtenir la CT10 et la CT28, à moins de déjà les avoir dans les quantités mentionnées ci-dessous.
NOTE : La CT10 peut s'acheter.

Utilisez le code "Obtenir n'importe quel objet" pour obtenir un Ruban à pois et une Poudre Métal, à moins d'en avoir déjà.
NOTE : Vous pouvez aussi échanger respectivement Rondoudou et Metamorph depuis R/B/J, ils tiendront alors ces objets.

Utilisez le code "Augmenter/Diminuer la quantité d'un objet" sur Ruban à pois et sur Poudre Métal pour leur donner une quantité de x119.

Obtenez (à moins de déjà les avoir), puis stockez les objets suivants dans le PC, dans cet ordre :

  1. N'importe quel objet x(n'importe quelle quantité)
  2. N'importe quel objet x(n'importe quelle quantité)
  3. Précision + x47 (x228 sur Cristal)
  4. CT28 (CT29 sur Cristal) x62
  5. Ruban à pois x119
  6. Poudre Métal x119
  7. CT10 x(n'importe quelle quantité)
  8. N'importe quels autres objets en n'importe quelle quantité peuvent être placés à partir d'ici.

Selon la méthode utilisée, utilisez la CT17/CT33 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex Mode ACE) ou bien ouvrez la Boîte du PC contenant le Bad Clone (Bad Clone ACE) en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraistre sont placés aux bons endroits pour rendre le sixième Pokémon chromatique.

Activer l'évènement Celebi (Code Objets, Cristal)

Utilisez les codes "Obtenir n'importe quel objet" et "Augmenter/Diminuer la quantité d'un objet" pour obtenir la CT02, la CT10 et la CT27, à moins de déjà les avoir dans les quantités mentionnées ci-dessous.
NOTE : La CT02 et la CT10 peut s'acheter.

Utilisez le code "Obtenir n'importe quel objet" pour obtenir une PierrePlante, à moins d'en avoir déjà une (au moins).

Utilisez le code "Augmenter/Diminuer la quantité d'un objet" sur la PierrePlante pour lui donner une quantité de x4.

Obtenez (à moins de déjà les avoir), puis stockez les objets suivants dans le PC, dans cet ordre :

  1. N'importe quel objet x(n'importe quelle quantité)
  2. N'importe quel objet x(n'importe quelle quantité)
  3. Super Ball x62
  4. CT02 x38
  5. CT27 x46
  6. Charbon x45
  7. PierrePlante x04
  8. CT10 x(quantité quelconque)

Selon la méthode utilisée, utilisez la CT33 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex Mode ACE) ou bien ouvrez la Boîte du PC contenant le Bad Clone (Bad Clone ACE) en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraistre sont placés aux bons endroits. Ce code active tout simplement l'événement Celebi du bois aux chênes : après l'avoir activé, allez voir Fargas qui vous rend une GSBall, et vous indique la direction du Bois aux Chênes. Vous pourrez donc vous rendre sur l'autel afin de capturer Celebi !
Dialogue Fargas Autel du Bois aux Chênes Combat Celebi

Rencontrer n'importe quel Pokémon (Code Boîte, O/A)

Ce code remplace tous les Pokémon sauvages par le Pokémon de votre choix jusqu'au prochain reset du jeu (indépendamment du fait que vous sauvegardiez ou non). Allez au PC de Léo et utilisez CHANGER BOITE pour renommer les Boîte 1 à 7 en l'un de ces codes. "_" signifie Espace. Pour choisir le bon code ainsi que le caractère qui doit remplacer @ dans le code, referez-vous au tableau plus bas.

CODE 1 :
Ap0Bu'U__
é/2p0Bu'r
é,2é02p_
0Bu'péJ9p
0(male)éK9p02
éL9p0@éA
pA

CODE 2 :
Ap0Bu'U__
é02p0Bu'r
é12é32p_
0Bu'péJ9p
0(male)éK9p02
éL9p0@u'_
éAApA

CODE 3 :
Ap0Bu'U__
é02p0Bu'r
é12é32p_
0Bu'péJ9p
0(male)éK9p02
éL9p0zu'@
éAApA

CODE 4 :
Ap0Bu'U__
é02p0Bu'r
é12é32p_
0Bu'péJ9p
0(male)éK9p02
éL9p0Au'@
éAApA

CODE 5 :
Ap0Bu'U__
é02p0Bu'r
é12é32p_
0Bu'péJ9p
0(male)éK9p02
éL9p0(male)u'@
éAApA

Utilisez la CT17 depuis la mauvaise poche en vous assurant que le "Slide Pokémon" ainsi que Maraistre avec BLABLA DODO et la Protéine sont placés aux bons endroits pour activer le code.

IDH @ = Pokémon (code 1) Pokémon (code 2) Pokémon (code 3) Pokémon (code 4) Pokémon (code 5)
7F _ SCARABRUTE ????? (n°000) COLOSSINGE BULBIZARRE RHINOFEROS
80 A TAUROS BULBIZARRE FEROSINGE ????? (n°000) RHINOCORNE
81 B MAGICARPE HERBIZARRE AKWAKWAK ????? (n°255) SMOGOGO
82 C LEVIATOR FLORIZARRE PSYKOKWAK ????? (n°254) SMOGO
83 D LOKHLASS SALAMECHE PERSIAN OEUF EXCELANGUE
84 E METAMORPH REPTINCEL MIAOUSS ????? (n°253) TYGNON
85 F EVOLI DRACAUFEU TRIOPIKEUR CELEBI KICKLEE
86 G AQUALI CARAPUCE TAUPIQUEUR HO_OH OSSATUEUR
87 H VOLTALI CARABAFFE AEROMITE LUGIA OSSELAIT
88 I PYROLI TORTANK MIMITOSS TYRANOCIF NOADKOKO
89 J PORYGON CHENIPAN PARASECT YMPHECT NOEUNOEUF
8A K AMONITA CHRYSACIER PARAS EMBRYLEX ELECTRODE
8B L AMONISTAR PAPILLUSION RAFFLESIA SUICUNE VOLTORBE
8C M KABUTO ASPICOT ORTIDE ENTEI KRABBOSS
8D N KABUTOPS COCONFORT MYSTHERBE RAIKOU KRABBY
8E O PTERA DARDARGNAN NOSFERALTO LEUPHORIE HYPNOMADE
8F P RONFLEX ROUCOOL NOSFERAPTI ECREMEUH SOPORIFIK
90 Q ARTIKODIN ROUCOUPS GRODOUDOU MAGBY ONIX
91 R ELECTHOR ROUCARNAGE RONDOUDOU ELEKID ECTOPLASMA
92 S SULFURA RATTATA FEUNARD LIPPOUTI SPECTRUM
93 T MINIDRACO RATTATAC GOUPIX KAPOERA FANTOMINUS
94 U DRACO PIAFABEC MELODELFE DEBUGANT CRUSTABRI
95 V DRACOLOSSE RAPASDEPIC MELOFEE QUEULORIOR KOKIYAS
96 W MEWTWO ABO NIDOKING CERFROUSSE GROTADMORV
97 X MEW ARBOK NIDORINO PORYGON2 TADMORV
98 Y GERMIGNON PIKACHU NIDORAN_M DONPHAN LAMANTINE
99 Z MACRONIUM RAICHU NIDOQUEEN PHANPY OTARIA
9A ( MEGANIUM SABELETTE NIDORINA HYPOROI DODRIO
9B ) HERICENDRE SABLAIREAU NIDORAN_F DEMOLOSSE DODUO
9C : FEURISSON NIDORAN_F SABLAIREAU MALOSSE CANARTICHO
9D ; TYPHLOSION NIDORINA SABELETTE AIRMURE MAGNETON
9E [ KAIMINUS NIDOQUEEN RAICHU DEMANTA MAGNETI
9F ] CROCRODIL NIDORAN_M PIKACHU CADOIZO FLAGADOSS
A0 a ALIGATUEUR NIDORINO ARBOK OCTILLERY RAMOLOSS
A1 b FOUINETTE NIDOKING ABO REMORAID GALOPA
A2 c FOUINARD MELOFEE RAPASDEPIC CORAYON PONYTA
A3 d HOOTHOOT MELODELFE PIAFABEC COCHIGNON GROLEM
A4 e NOARFANG GOUPIX RATTATAC MARCACRIN GRAVALANCH
A5 f COXY FEUNARD RATTATA VOLCAROPOD RACAILLOU
A6 g COXYCLAQUE RONDOUDOU ROUCARNAGE LIMAGMA TENTACRUEL
A7 h MIMIGAL GRODOUDOU ROUCOUPS URSARING TENTACOOL
A8 i MIGALOS NOSFERAPTI ROUCOOL TEDDIURSA EMPIFLOR
A9 j NOSTENFER NOSFERALTO DARDARGNAN FARFURET BOUSTIFLOR
AA k LOUPIO MYSTHERBE COCONFORT SCARHINO CHETIFLOR
AB l LANTURN ORTIDE ASPICOT CARATROC MACKOGNEUR
AC m PICHU RAFFLESIA PAPILLUSION PAPILLUSION MACHOPEUR
AD n MELO PARAS CHRYSACIER QWILFISH MACHOC
AE o TOUDOUDOU PARASECT CHENIPAN GRANBULL ALAKAZAM
AF p TOGEPI MIMITOSS TORTANK SNUBBULL KADABRA
B0 q TOGETIC AEROMITE CARABAFFE STEELIX ABRA
B1 r NATU TAUPIQUEUR CARAPUCE SCORPLANE TARTARD
B2 s XATU TRIOPIKEUR DRACAUFEU INSOLOURDO TETARTE
B3 t WATTOUAT MIAOUSS REPTINCEL FORRETRESS PTITARD
B4 u LAINERGIE PERSIAN SALAMECHE POMDEPIK ARCANIN
B5 v PHARAMP PSYKOKWAK FLORIZARRE GIRAFARIG CANINOS
B6 w JOLIFLOR AKWAKWAK HERBIZARRE QULBUTOKE COLOSSINGE
B7 x MARILL FEROSINGE BULBIZARRE ZARBI FEROSINGE
B8 y AZUMARILL COLOSSINGE ????? (n°000) FEUVOREVE AKWAKWAK
B9 z SIMULARBRE CANINOS ????? (n°255) ROIGADA PSYKOKWAK
D8 m' TEDDIURSA GROTADMORV CADOIZO MIGALOS PERSIAN
D9 n' URSARING KOKIYAS OCTILLERY MIMIGAL MIAOUSS
DA p' LIMAGMA CRUSTABRI REMORAID COXYCLAQUE TRIOPIKEUR
DB s' VOLCAROPOD FANTOMINUS CORAYON COXY TAUPIQUEUR
DC 's MARCACRIN SPECTRUM COCHIGNON NOARFANG AEROMITE
DD t' COCHIGNON ECTOPLASMA MARCACRIN HOOTHOOT MIMITOSS
DE u' CORAYON ONIX VOLCAROPOD FOUINARD PARASECT
E1 Pk CADOIZO KRABBY TEDDIURSA FOUINETTE PARAS
E2 Mn DEMANTA KRABBOSS FARFURET ALIGATUEUR RAFFLESIA
E3 - AIRMURE VOLTORBE SCARHINO CROCRODIL ORTIDE
E6 ? HYPOROI NOADKOKO QWILFISH KAIMINUS MYSTHERBE
E7 ! PHANPY OSSELAIT GRANBULL TYPHLOSION NOSFERALTO
E8 . DONPHAN OSSATUEUR SNUBBULL FEURISSON NOSFERAPTI
E9 & PORYGON2 KICKLEE STEELIX HERICENDRE GRODOUDOU
EA é CERFROUSSE TYGNON SCORPLANE MEGANIUM RONDOUDOU
EF ELEKID RHINOFEROS QULBUTOKE MACRONIUM FEUNARD
F1 × ECREMEUH SAQUEDENEU FEUVOREVE GERMIGNON GOUPIX
F3 / RAIKOU HYPOCEAN CORNEBRE MEW MELODELFE
F4 , ENTEI HYPOTREMPE NOCTALI MEWTWO MELOFEE
F5 SUICUNE POISSIRENE MENTALI DRACOLOSSE NIDOKING
F6 0 EMBRYLEX POISSOROY MARAISTRE DRACO NIDORINO
F7 1 YMPHECT STARI AXOLOTO MINIDRACO NIDORAN_M
F8 2 TYRANOCIF STAROSS YANMA SULFURA NIDOQUEEN
F9 3 LUGIA M. MIME TOURNEGRIN ELECTHOR NIDORINA
FA 4 HO_OH INSECATEUR HELIATRONC ARTIKODIN NIDORAN_F
FB 5 CELEBI LIPPOUTOU CAPUMAIN RONFLEX SABLAIREAU
FC 6 ????? (n°253) ELEKTEK COTOVOL PTERA SABELETTE
FD 7 OEUF MAGMAR FLORAVOL KABUTOPS RAICHU
FE 8 ????? (n°254) LEVEINARD* GRANIVOL KABUTO PIKACHU
FF 9 ????? (n°255) KANGOUREX* TARPAUD AMONISTAR ARBOK
* = pour que le code donne le bon Pokémon, utiliser "N" (LEVEINARD) ou "M" (KANGOUREX) à la place de "_" en tant que dernière lettre de la boîte 6.
Exécuter d'autres codes et en fabriquer soi-même

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

Explications techniques : comment fabriquer son code

Comme on l'a dit, le jeu n'est pas prévu pour lancer des CT dans une autre poche, ce que vous faites avec l'Item Shifting Glitch. Ces CT se comportent alors comme les objets glitch de la 1G et interprètent certaines données comme du code à lire. Dans Cristal, seule la CT33 permet de lire du code dans une partie contrôlable de la mémoire, et en l'occurence, la troisième lettre du surnom du cinquième Pokémon de l'équipe adverse (adresse mémoire $D418). En revanche, dans O/A, le code lu par l'utilisation de la CT17 commence à partir de l'adresse mémoire $FA47, dans ce qu'on appelle l'Echo RAM. Délimitée entre les adresses $E000 et $FFFF, cette Echo RAM est en fait une copie mémoire de la WRAM, c'est-à-dire la section mémoire s'étalant de $C000 à $DFFF et qui stocke les données du jeu. L'adresse $FA47 est donc une copie de l'adresse $DA47, une adresse faisant partie des données du Pokémon 1, mais qui est inutilisée et donc toujours de valeur 00. Dans Cristal, les adresses situées au même endroit dans les données d'un Pokémon servent à enregistrer l'endroit où il a été capturé afin que la voyante d'Irisia puisse vous le rappeler. Il s'agit probablement d'une fonction prévue à l'origine pour O/A et qui a été laissée de côté, ce qui fait que cette adresse n'est pas utilisée.

Pour l'heure, nous n'entrerons pas dans les détails des autres méthodes, qui ne sont pas encore sur le site. Disons simplement que le Coin Case fonctionne de la même façon, mais en lisant les données du troisième Pokémon au lieu du premier. Dans les deux cas, écrire un code utile à partir des données d'un Pokémon est absurde parce qu'il faudrait contrôler les précisément les stats, Stat Exp. et prier pour que les DVs sur lesquels on a absolument aucun contrôle ne viennent pas tout casser. Du coup, ce qu'il faut, c'est un moyen de rediriger vite fait la lecture vers une autre section de la WRAM sur laquelle on a un peu plus de contrôle. En l'occurence, soit les objets, comme en 1G, soit les noms des boîtes. Prenons le cas de la CT17 sur O/A en exemple pour le reste de cette explication, et jetons un oeil aux données lues par son utilisation. Vous pouvez trouver des informations sur les adresses liées aux Pokémon de l'équipe sur cette carte de la RAM en anglais (ISSOtm a commencé a en créer une également pour Cristal à ce lien).

Pokémon 1 (fin)
$DA47 et $DA48 = Données de capture
$DA49 = Niveau
$DA4A et $DA4B = Statut
$DA4C et $DA4D = PV
$DA4E et $DA4F = PV Max
$DA50 et $DA51 = Attaque
$DA52 et $DA53 = Défense
$DA54 et $DA55 = Vitesse
$DA56 et $DA57 = Def. Spé
$DA58 et $DA59 = Atq. Spé
Pokémon 2 (début)
$DA5A = Espèce
$DA5B = Objet tenu
$DA5C à $DA5F = Capacités

Toutes ces adresses contiennent une valeur en hexadécimal correspondant aux données du Pokémon. Par exemple, avec une attaque de 21, l'adresse $DA51 sera de 15. Il faut maintenant comprendre que lorsque le jeu exécute du code à partir d'un point, il interprète les valeurs hexadécimales lues comme des instructions appelées opcodes. Ces instructions sont les mêmes que sur R/B/J, et vous pourrez en retrouver le tableau à cette adresse. 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".

Il existe plein de ressources sur le net pour apprendre la fonction de chaque opcode. Vous pouvez par exemple consulter l'introduction à la programmation Game Boy (en anglais) écrite par notre programmeur, ISSOtm, pour notre partenaire anglophone, Glitch City Labs, ou bien encore ce mini-guide. Ceci dit, revoyons ensemble les principaux opcodes.

  • nop (correspondant à l'hexadécimal 00) signifie no operation. Le jeu continue simplement de lire.
  • ld signifie load (charger), dans le sens qu'une variable est chargée avec ("devient") une valeur.
  • inc et dec commandent d'incrémenter et décrémenter la valeur d'une variable donnée.
  • add et sub signifient qu'une valeur donnée est ajoutée ou soustraite à la variable A (toujours).
  • jp signifie jump (saut). Cela permet de déplacer la lecture dans une autre partie de la WRAM. La destination peut être renseignée directement par l'utilisateur, ou préalablement inscrite dans une duo de variables, HL.
  • jr pour relative jump est également un saut, mais relatif. Il saute donc à une distance donnée de l'actuelle position de lecture de code.
  • ret pour return (retour) est surtout utilisée ici pour terminer le code et mettre fin à la lecture.

Tout d'abord, nous voulons sauter à $D61B (troisième objet stocké) ou $D8C0 (deuxième lettre de la boîte 1). Dans ce dernier cas, cela se traduit par "jp D8C0". Ca tombe bien, l'instruction codée par l'hexadécimal C3 commande un saut à l'adresse composée par les deux valeurs hexadécimales suivantes (à l'envers, car ces octets sont Big-endian ; pour plus d'information sur ce qu'on appelle l'endianness, voyez la page Wikipedia sur le sujet). Cela signifie que si le jeu lit C3 C0 D8, alors il sautera la lecture du code au nom de la boîte 1.

Il n'est pas facile d'inscrire cette séquence dans les données accessibles à la lecture du Pokémon 1, mais nous pourrions utiliser l'espèce (C3 correspond à Maraistre dans la correspondance), objet tenu (C0 correspond à la CT02) et première attaque du Pokémon 2 (D8 correspond à RETOUR) parce que ce n'est pas très dur à obtenir. Notre meilleure chance de succès est donc de s'assurer que le Pokémon 1 contient des valeurs hexadécimales correspondant à des opcodes "inoffensifs" qui ne vont pas sauter ailleurs dans la mémoire ou affecter des variables dont on a besoin, ce qui nous permet de "glisser" jusqu'à Maraistre : c'est pour cette raison que le premier Pokémon est appelé "Slide Pokémon" (Pokémon glissant en anglais). Le fonctionnement est exactement le même pour atteindre $D61B si ce n'est qu'on utilisera BLABLA DODO (IDH D6) et une Protéine (IDH 1B).

Faisons un petit détour rapide pour expliquer ce qu'il se passe dans Cristal, où nous essayons d'exécuter par exemple le code "jp D8F6" ou "jp F8F6" puisque $D8F6 est l'adresse du troisième objet stocké. Ce que fait le code 8F, c'est donc de remplacer la troisième, quatrième et cinquième lettre du Pokémon cible par les caractères « ä », « 0 » et « 2 », car leurs IDH sont, respectivement, C3, F6 et F8. Ensuite, nous sommes obligés d'avoir recours à un combat link afin de placer ces caractères dans les adresses mémoires qui gèrent les lettres du surnom du cinquième Pokémon de l'adversaire. Cette section de la mémoire est rafraîchie à chaque combat, effaçant les données précédentes, c'est pourquoi il ne faut pas faire d'autre combat ensuite.

Bien, nous avons sauté aux objets stockés ou au nom des boîtes et sommes prêts à les lire. Pour comprendre pourquoi il est facile de simuler un code A.R. avec ce glitch, il faut redire qu'entrer un code de type AABBCCDD revient à demander au jeu de changer la valeur de l'adresse $DDCC (oui, c'est encore une question d'endianness) en BB. Examinons le code appelé par l'inventaire "générique" utilisé pour la simulation de code action replay.

L'IDH du PP Plus est 3E, celui de la CT42 est EA et celui de la CT10 est C9. 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 :

$D61B	3E	ld a,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 ($D61C, la quantité du troisième objet, ici XX). L'instruction se dit donc "ld a,XX" et la variable a prend la valeur XX. En conséquence, $D61C n'est pas lue individuellement, car elle est comprise dans l'instruction précédente. On enchaîne.

$D61D	EA	ld (a16),a (3 octets)	L'instruction prend 3 octets, il va falloir considérer les deux adresses suivantes.

$D61E	"YY"	→			Comprise dans l'instruction suivante

$D61F	"ZZ"	→ ld (ZZYY),a		Les parenthèses signalent que ce n'est pas l'adresse $ZZYY qui change, mais la valeur affectée à cette adresse. Ici, la valeur affectée à $ZZYY devient a, c'est à dire XX. Mission accomplie, le code est actif !

$D620	03	inc bc			Augmente le duo composé par les variables b et c. On ne s'en sert pas ici, c'est juste un placeholder.
  
$D621	C9	ret			Fin de la lecture du code.

Super simple, n'est-ce pas ? Du coup on va faire un truc un peu plus dur pour apprendre à utiliser d'autres opcodes ; intéressons-nous aux codes faits maisons et particulièrement celui qui permet de transformer son 11ème objet dans O/A. L'adresse de cet objet est $D62B. Vous devriez être en mesure de comprendre maintenant que le code lu par le jeu dans ce cas est 2E 2B 05 26 D6 34 C9.

$D61D	2E 		ld l,d8 (2 octets)	L'instruction prend 2 octets, il va falloir considérer l'adresse suivante.
$D61E	2B		→ ld l,2B		La variable l devient 2B.
$D61F	05		dec b			La variable b est décrémentée. C'est toujours un placeholder.
$D620	26		ld h,d8 (2 octets)	Encore une fois, il faut considérer l'adresse suivante.
$D621	D6		→ ld h,D6		La variable h devient D6.
$D622	34		inc (hl)		La valeur de l'adresse hl, c'est-à-dire D62B, est incrémentée.
$D323	C9		ret			Fin de la lecture du code.

Faisons également un exemple sur Cristal. Si vous ne trouvez pas une adresse sur la carte de la RAM, sachez qu'il existe un désassemblage du jeu. C'est plus difficile à utiliser, mais vous pouvez utiliser la recherche pour chercher les adresses, notamment dans le fichier wram. Intéressons-nous à l'adresse $DA89, qui fait partie de la section des drapeaux d'avancement (event flags), et qui gère l'event de Célébi.

$D61B	04 		inc b				La variable b est décrémentée. Placeholder.
$D61C	3E		ld a,d8 (2 octets)
$D61D	C0		→ ld a,C0			La variable a devient C0.
$D61E	26		ld h,d8 (2 octets)
$D61F	DA		→ ld h,DA			La variable h devient DA.
$D620	2E		ld l,d8	(2 octets)
$D621	8A		→ ld l,8A			La variable l devient 8A.	
$D622	2D		dec l				La variable l devient 89.
$D623	22		ld (hl+),a			La valeur de l'adresse hl, c'est-à-dire DA89, devient a, c'est-à-dire C0. Puis, hl est incrémenté et devient DA8A, mais peu importe.
$D624	04 		inc b				La variable b est décrémentée. Placeholder.
$D625	C9		ret				Fin de la lecture du code.

La bonne valeur à entrer dans $DA89 pour que l'event soit actif a été récupérée d'un très vieux post d'un forum universitaire sur lequel un certain Xatron parlait du code action replay qui sert, normalement, à activer cet événement. Comme vous le savez, un octet s'écrit sous la forme d'un hexadécimal à deux chiffres mais traduit originellement un groupe de 8 chiffres binaires, chacun étant un bit qui peut être vide (0) ou plein (1) ; ainsi, 01 correspond à 00000001 et FF à 11111111. Manifestement, la programmation de l'event fait que lorsque le bit 7 (le dernier, puisque le premier est le bit 0) est plein, Fargas peut prendre la GS Ball du joueur. Pour que Fargas rende la GS Ball et que l’événement se poursuive, les deux derniers bits doivent être pleins. Cela correspond donc à 11000000, ce qui fait C0 en hexadécimal.

Ecrire des codes avec des objets c'est facile en théorie, parce que vous avez accès à quasiment tous les opcodes, moyennant parfois des placeholders. Toutefois, ça peut être pas pratique de réunir les objets en question. Ecrire des codes avec les noms des boîtes est plus rapide et plus facile, mais vous n'aurez pas accès à tous les opcodes parce que le premier caractère, l'espace, a un IDH de 7F (suivi par A, dont l'IDH est 80). C'est la raison pour laquelle les codes boîtes sont plus longs que les codes objets, parce qu'il faut spammer des add et des sub pour contourner l'impossibilité d'utiliser les ld à deux octets. Aussi, certains caractères sont exclusifs à un langage, ce qui veut dire que contrairement aux codes objets, il faut traduire les codes boîtes pour chaque langue ! C'est assez facile en italien et espagnol, assez difficile en français car il manque certains opcodes clés qui obligent parfois à tout réécrire, et impossible en allemand à cause de l'absence de ld à 3 octets.

On va pas entrer dans les détails pour les codes boîtes car cela nécessiterait beaucoup plus de leçons sur les opcodes, mais on peut tout de même prendre un exemple facile, le code qui permet de donner 255 CT/CS de son choix. Il n'y a qu'une adresse mémoire pour chaque CT/CS, car elles sont ordonnées dans le sac ; il y a donc en tout 57 adresses mémoires allant, dans O/A, de $D57E (CT01) à $D5AF (CT50) puis de $D5B0 (CS01) à $D5B6 (CS07). Si la valeur est égale à 0, alors nous n'avons pas la CT, si elle vaut quelque chose d'autre, alors nous avons cette quantité de cette CT. De fait, pour avoir 255 CT50, je dois simplement donner FF comme valeur à $D5AF. Dans le tableau plus haut, vous pouvez voir l'IDH de chaque lettre, qui à l'heure actuelle, n'est pas dans notre correspondance. Ici, cela donne à partir du deuxième caractère : AF F6 FF EA "XX" F5 D9

$D8C0	AF 		xor a

L'opcode xor est un "ou exclusif" entre a (toujours) et une variable. Sans expliquer la fonction mathématique, ici, on fait ce xor entre a et... lui-même ! Ca fait donc forcément 0. En quelque sorte, c'est un moyen détourné pour mettre la valeur de a à 00, même si on a pas accès à l'opcode ld.

$D8C1	F6		or d8 (2 octets)
$D8C2	FF		→ or FF

L'opcode or est un ou simple qui compare la variable a avec une valeur. Utilisée après un xor a qui remet cette variable à 00, elle revient finalement à faire un ld a,d8 avec cette valeur ! Donc, a est désormais égal à FF.

$D8C3	EA		ld (a16),a (3 octets)
$D8C4	"XX"		→ ld h,DA			
$D8C5	F5		ld (F5XX),a			La valeur de $F5XX devient FF. Gagné !
$D8C6	D9		reti			Dans ce cas, similaire à ret ; met fin à la lecture du code.	

C'est maintenant à vous de faire des codes. N'hésitez pas à demander de l'aide, nous pouvons toujours aller plus loin et l'exécution de code peut aussi s'utiliser pour programmer ! Votre quête de l'ACE est sur le point de commencer ! Un tout nouveau monde de rêves, d'aventures et de Pokémon vous attend ! Dingue !


Page Précédente : Infinite PC Items Trick
Page suivante : Experience Underflow Glitch