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édacteurs : BUGLITCH, Haxel et Krys3000
Remerciements à notre partenaire Glitch City Labs et particulièrement à Torchickens
This glitch is also available in English 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 ce même système dans la première génération 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 pas 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). 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'Item Shifting Glitch 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 longue à mettre en place, mais s'utilise rapidement après la première fois et surtout, elle est utilisable partout. La seconde nécessite moins de préparation mais ne peut pas s'utiliser partout... 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 nécessite de toute façon une autre méthode au préalable. 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. Bref, notre conseil, c'est d'opter pour le Wrong Pocket TM ACE dans O/A sans hésiter, et pour Cristal, d'utiliser une seule fois le Bad Clone ACE pour mettre en place le Wrong Pocket TM ACE également !

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. Attention toutefois, sur Cristal, ça n'est pas possible de composer un code fonctionnel avec les noms des boîtes ; on peut toutefois utiliser les Lettres données aux Pokémon pour ça, et nous prévoyons de vous faire des codes Lettre dès que possible.

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), une méthode exclusive à Cristal qui est laborieuse à mettre en place, mais plus permissive ensuite.
  • Le Bad Clone ACE (Cristal), une méthode exclusive à Cristal facile à préparer mais laborieuse à utiliser.
  • 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)

Note : si vous jouez sur Cristal, voici un prototype de code-objet équivalent.

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 Maraîstre 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 (CT26 sur Cristal), à 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é) (Réveil x3 sur Cristal)
  2. N'importe quel objet x(n'importe quelle quantité) (Anti-Para x3 sur Cristal)
  3. Eau Fraîche x44 (x7 sur Cristal)
  4. Poké Ball x38
  5. CT23 (CT26 sur Cristal) 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.

Puis, selon la méthode, utilisez la CT17/CT15 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex ACE) ou suivez la procédure avec le PC (Bad Clone ACE), en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraîstre 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 (CT26 sur Cristal), à 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é) (Réveil x3 sur Cristal)
  2. N'importe quel objet x(n'importe quelle quantité) (Anti-Para x3 sur Cristal)
  3. Eau Fraîche x43 (x6 sur Cristal)
  4. Poké Ball x38
  5. CT23 (CT26 sur Cristal) 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.

Puis, selon la méthode, utilisez la CT17/CT15 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex ACE) ou suivez la procédure avec le PC (Bad Clone ACE), en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraîstre 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'Identifiant 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 ! Pour trouver le code (ou directement l'adresse) de votre choix, vous pouvez consulter notre section Action Replay 2G. 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'Identifiant 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'Identifiant 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'Identifiant 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'Identifiant 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é) (Réveil x3 sur Cristal)
  2. N'importe quel objet x(n'importe quelle quantité) (Anti-Para x3 sur Cristal)
  3. PP Plus x(conversion de XX en décimal)
  4. CT42 x(conversion de YY en décimal)
  5. L'objet d'Identifiant 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.

Puis, selon la méthode, utilisez la CT17/CT15 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex ACE) ou suivez la procédure avec le PC (Bad Clone ACE), en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraîstre 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é) (Réveil x3 sur Cristal)
  2. N'importe quel objet x(n'importe quelle quantité) (Anti-Para x3 sur Cristal)
  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.

Puis, selon la méthode, utilisez la CT17/CT15 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex ACE) ou suivez la procédure avec le PC (Bad Clone ACE), en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraîstre 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. Super Ball x62
  2. CT02 x38
  3. CT27 x46
  4. Charbon x45
  5. PierrePlante x04
  6. CT10 x(quantité quelconque)

Puis, selon la méthode, utilisez la CT15 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex ACE) ou suivez la procédure avec le PC (Bad Clone ACE), en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraîstre 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)

Remerciements à Treizy67 qui nous a signalé plusieurs erreurs sur le forum
Allez au PC de Léo et utilisez CHANGER BOITE pour renommer les Boîtes 1 à 7 en l'un de ces codes. Pour choisir le bon code ainsi que le caractère qui doit remplacer @ dans le code, referez-vous au tableau plus bas. Attention, le caractère "_" correspond à un espace.

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

Identifiant@ =Pokémon (code 1)Pokémon (code 2)Pokémon (code 3)Pokémon (code 4)Pokémon (code 5)
$7F_SCARABRUTE ????? (n°000)CANINOSBULBIZARRERHINOFEROS
$80ATAUROS BULBIZARRECOLOSSINGE????? (n°000)RHINOCORNE
$81BMAGICARPE HERBIZARREFEROSINGE????? (n°255)SMOGOGO
$82CLEVIATOR FLORIZARREAKWAKWAK????? (n°254)SMOGO
$83D LOKHLASSSALAMECHEPSYKOKWAKOEUFEXCELANGUE
$84E METAMORPHREPTINCELPERSIAN????? (n°253)TYGNON
$85F EVOLIDRACAUFEUMIAOUSSCELEBIKICKLEE
$86G AQUALICARAPUCETRIOPIKEURHO-OHOSSATUEUR
$87H VOLTALICARABAFFETAUPIQUEURLUGIAOSSELAIT
$88I PYROLITORTANKAEROMITETYRANOCIFNOADKOKO
$89J PORYGONCHENIPANMIMITOSSYMPHECTNOEUNOEUF
$8AK AMONITACHRYSACIERPARASECTEMBRYLEXELECTRODE
$8BL AMONISTARPAPILLUSIONPARASSUICUNEVOLTORBE
$8CM KABUTOASPICOTRAFFLESIAENTEIKRABBOSS
$8DN KABUTOPSCOCONFORTORTIDERAIKOUKRABBY
$8EO PTERADARDARGNANMYSTHERBELEUPHORIEHYPNOMADE
$8FP RONFLEXROUCOOLNOSFERALTOECREMEUHSOPORIFIK
$90Q ARTIKODINROUCOUPSNOSFERAPTIMAGBYONIX
$91R ELECTHORROUCARNAGEGRODOUDOUELEKIDECTOPLASMA
$92S SULFURARATTATARONDOUDOULIPPOUTISPECTRUM
$93T MINIDRACORATTATACFEUNARDKAPOERAFANTOMINUS
$94U DRACOPIAFABECGOUPIXDEBUGANTCRUSTABRI
$95V DRACOLOSSERAPASDEPICMELODELFEQUEULORIORKOKIYAS
$96W MEWTWOABOMELOFEECERFROUSSEGROTADMORV
$97X MEWARBOKNIDOKINGPORYGON2TADMORV
$98Y GERMIGNONPIKACHUNIDORINODONPHANLAMANTINE
$99Z MACRONIUMRAICHUNIDORAN_MPHANPYOTARIA
$9A( MEGANIUMSABELETTENIDOQUEENHYPOROIDODRIO
$9B) HERICENDRESABLAIREAUNIDORINADEMOLOSSEDODUO
$9C: FEURISSONNIDORAN_FNIDORAN_FMALOSSECANARTICHO
$9D; TYPHLOSIONNIDORINASABLAIREAUAIRMUREMAGNETON
$9E[ KAIMINUSNIDOQUEENSABELETTEDEMANTAMAGNETI
$9F] CROCRODILNIDORAN_MRAICHUCADOIZOFLAGADOSS
$A0a ALIGATUEURNIDORINOPIKACHUOCTILLERYRAMOLOSS
$A1b FOUINETTENIDOKINGARBOKREMORAIDGALOPA
$A2c FOUINARDMELOFEEABOCORAYONPONYTA
$A3d HOOTHOOTMELODELFERAPASDEPICCOCHIGNONGROLEM
$A4e NOARFANGGOUPIXPIAFABECMARCACRINGRAVALANCH
$A5f COXYFEUNARDRATTATACVOLCAROPODRACAILLOU
$A6g COXYCLAQUERONDOUDOURATTATALIMAGMATENTACRUEL
$A7h MIMIGALGRODOUDOUROUCARNAGEURSARINGTENTACOOL
$A8i MIGALOSNOSFERAPTIROUCOUPSTEDDIURSAEMPIFLOR
$A9j NOSTENFERNOSFERALTOROUCOOLFARFURETBOUSTIFLOR
$AAk LOUPIOMYSTHERBEDARDARGNANSCARHINOCHETIFLOR
$ABl LANTURNORTIDECOCONFORTCARATROCMACKOGNEUR
$ACm PICHURAFFLESIAASPICOTCIZAYOXMACHOPEUR
$ADn MELOPARASPAPILLUSIONQWILFISHMACHOC
$AEo TOUDOUDOUPARASECTCHRYSACIERGRANBULLALAKAZAM
$AFp TOGEPIMIMITOSSCHENIPANSNUBBULLKADABRA
$B0q TOGETICAEROMITETORTANKSTEELIXABRA
$B1r NATUTAUPIQUEURCARABAFFESCORPLANETARTARD
$B2s XATUTRIOPIKEURCARAPUCEINSOLOURDOTETARTE
$B3t WATTOUATMIAOUSSDRACAUFEUFORRETRESSPTITARD
$B4u LAINERGIEPERSIANREPTINCELPOMDEPIKARCANIN
$B5v PHARAMPPSYKOKWAKSALAMECHEGIRAFARIGCANINOS
$B6w JOLIFLORAKWAKWAKFLORIZARREQULBUTOKECOLOSSINGE
$B7x MARILLFEROSINGEHERBIZARREZARBIFEROSINGE
$B8y AZUMARILLCOLOSSINGEBULBIZARREFEUVOREVEAKWAKWAK
$B9z SIMULARBRECANINOS????? (n°000)ROIGADAPSYKOKWAK
$D8m'TEDDIURSAGROTADMORVCADOIZOMIGALOSABO
$D9n'URSARINGKOKIYASOCTILLERYMIMIGALRAPASDEPIC
$DAp'LIMAGMACRUSTABRIREMORAIDCOXYCLAQUEPIAFABEC
$DBs'VOLCAROPODFANTOMINUSCORAYONCOXYRATTATAC
$DC'sMARCACRINSPECTRUMCOCHIGNONNOARFANGRATTATA
$DDt'COCHIGNONECTOPLASMAMARCACRINHOOTHOOTROUCARNAGE
$DEu'CORAYONONIXVOLCAROPODFOUINARDROUCOUPS
$E1PkCADOIZOKRABBYTEDDIURSACROCRODILCOCONFORT
$E2MnDEMANTAKRABBOSSFARFURETKAIMINUSASPICOT
$E3- AIRMUREVOLTORBESCARINHOTYPHLOSIONPAPILLUSION
$E6? HYPOROINOADKOKOQWILFISHMEGANIUMTORTANK
$E7! PHANPYOSSELAITGRANBULLMACRONIUMCARABAFFE
$E8. DONPHANOSSATUEURSNUBBULLGERMIGNONCARAPUCE
$E9& PORYGON2KICKLEESTEELIXMEWDRACAUFEU
$EAé CERFROUSSETYGNONSCORPLANEMEWTWOREPTINCEL
$EFELEKIDRHINOFEROSQULBUTOKEELECTHOR????? (n°000)
$F1× ECREMEUHSAQUEDENEUFEUVOREVERONFLEX????? (n°254)
$F3/ RAIKOUHYPOTREMPECORNEBREKABUTOPS????? (n°253)
$F4, ENTEIHYPOCEANNOCTALIKABUTOCELEBI
$F5SUICUNEPOISSIRENEMENTALIAMONISTARHO-OH
$F60EMBRYLEXPOISSOROYMARAISTREAMONITALUGIA
$F71YMPHECTSTARIAXOLOTOPORYGONTYRANOCIF
$F82TYRANOCIFSTAROSSYANMAPYROLIYMPHECT
$F93LUGIAM. MIMEHELIATRONCVOLTALIEMBRYLEX
$FA4HO-OHINSECATEURTOURNEGRINAQUALISUICUNE
$FB5CELEBILIPPOUTOUCAPUMAINEVOLIENTEI
$FC6????? (n°253)ELEKTEKCOTOVOLMETAMORPHRAIKOU
$FD7OEUFMAGMARFLORAVOLLOKHLASSLEUPHORIE
$FE8????? (n°254)LEVEINARD*GRANIVOLLEVIATOR ECREMEUH
$FF9????? (n°255)KANGOUREX*TARPAUDMAGICARPE MAGBY
* = 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.

Utilisez la CT17 depuis la mauvaise poche en vous assurant que le "Slide Pokémon" ainsi que Maraîstre avec RETOUR et la CT02 sont placés aux bons endroits pour remplacer 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).

Tous les Pokémon rencontrés deviennent chromatiques (Code Boîte, O/A)

Remerciements à Scotteh qui a conçu ce code, et Link_enfant qui nous l'a rapporté
Ce code rend tous les Pokémon rencontrés chromatiques, y compris ceux des dresseurs. Leur IV attaque sera de 15, et leurs PVs peuvent être bugués jusqu'à soin ou stockage.

Allez au PC de Léo et utilisez CHANGER BOITE pour renommer les Boîtes 1 à 9 en l'un de ces codes. (femelle) désigne le symbole femelle.

Ap0-éK95
p0m'éL955
pu'(u'céJ9
55555555
p0éé(femelle)p'pp
ppp0ké0p'
pu'(u':é0m'
pu'(u'Vé.m'
é/m'u'9m'55

Utilisez la CT17 depuis la mauvaise poche en vous assurant que le "Slide Pokémon" ainsi que Maraîstre avec RETOUR et la CT02 sont placés aux bons endroits pour activer le code.

Transformer un Code-Objet en Code-CT

Les codes-CTs sont des variantes des codes-Objets qui se composent non pas avec les objets du PC, mais avec les CTs du sac. Ils sont faciles à réaliser si vous maniez 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 utiliser un code-CT, organisez-votre setup comme pour un Code-Objet, et stockez les objets suivants dans le PC, dans cet ordre :

  1. N'importe quel objet x(n'importe quelle quantité) (Réveil x3 sur Cristal)
  2. N'importe quel objet x(n'importe quelle quantité) (Anti-Para x3 sur Cristal)
  3. Poké Ball x195
  4. Oeuf Chance x213 (Noigrume Blu x216 sur Cristal)

Ensuite, décomposez en Hexadécimal le code-Objet à traduire et passez tout ça en Décimal. Pour savoir faire ça, vous devrez lire nos explications techniques, plus bas. Vous obtenez x nombres, et ces nombres doivent être placés en tant que quantité de la CT01 à la CTx.

Par exemple, si je décompose le code "Obtenir n'importe quel objet" sur O/A, en supposant que mes deux premiers objets "sans importance" sont Poké Ball x1 et Super Ball x1, j'obtiens $05 $01 $04 $01 $2E $2B $05 $26 $D6 $34 $C9, soit x = 11 nombres. Ainsi, il me faut 5 CT01, 1 CT02, 4 CT03, 1 CT04, 46 CT05, 43 CT06, 5 CT07, 38 CT08, 214 CT09, 52 CT10 et 201 CT11.

Puis, selon la méthode, utilisez la CT17/CT15 depuis la mauvaise poche (Wrong Pocket TM ACE), ouvrez le Pokédex (Glitch Pokédex ACE) ou suivez la procédure avec le PC (Bad Clone ACE), en vous assurant, si nécessaire à la méthode choisie, que le "Slide Pokémon" ainsi que le bon Maraîstre sont placés aux bons endroits. Le code sera exécuté.

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 (c'est pourquoi nous l'avons abandonné au profit de la méthode avec la CT15 expliquée dans la sous-page du Wrong Pocket TM ACE). 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.

Le Coin Case anglais 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 (Identifiant $D6) et une Protéine (Identifiant $1B).

Faisons un petit détour pour expliquer ce qu'il se passe dans Cristal, d'abord avec la méthode de la CT15. Nous essayons d'exécuter par exemple le code "jp $DCDF" ou "jp $FCDF" puisque $DCDF est l'adresse contrôlant l'espèce du premier Pokémon de l'équipe. Nous modifions donc la partie de la mémoire exécutée par la CT15, à savoir de $DA10 à $DA12, en $C3 $DF $FC. ce qui se traduit en opcodes par le sauf à l'adresse voulue ! Grâce à la CT50 (Identifiant $F2) et à RETOUR (Identifiant $D8), Maraîstre nous fait sauter en $D8F2 ce qui correspond au premier objet stocké. Sans objet (Identifiant $00) et avec DANSE-PLUIE (Identifiant $F0) nous sautons par contre à $F000 ce qui est une copie de $D000, et on lit donc la première lettre de la dernière Lettre lue.

La méthode par Pokédex consiste à changer le mode du Pokédex (qui peut normalement être Nouveau Mode, Ancien Mode, Mode A à Z ou Mode Zarbi) pour un mode glitché normalement inaccessible, le mode d'Identifiant $09. Le mode du Pokédex est contrôlé par l'adresse $D959 dans Cristal, et peut se modifier pour y mettre une valeur invalide telle que la valeur $09 grâce à la poche Balls étendue obtenue par le Item Shifting Glitch, car elle correspond à la quantité de l'objet stocké 65 ; il suffit donc de placer à cet endroit un objet de quantité 9. Lorsqu'un Pokédex avec le mode $09 est ouvert, le jeu lit du code à partir de $FA20. Cette adresse est bien sûr une copie de $DA20, une adresse mémoire liée aux flags d'avancement du jeu, qu'on ne peut pas modifier normalement, mais qu'on peut modifier encore une fois avec la poche Balls, grâce aux Identifiants des objets 165 et 166 : la CT19 possède en effet l'Identifiant $D2 et la CT29 l'Identifiant $DD. Avec la quantité de 1 entre les deux, cela se traduit, en opcodes, par "jp NC,$DD01", un saut conditionné aux données du premier Pokémon de l'équipe, qui aura, dans notre cas, tout le temps lieu. La suite est similaire au TM Code Execution : le 'Slide Pokémon' permet de glisser vers le jump vers les objets ou le tampon de stockage des Lettres représenté par Maraîstre et ainsi, nous pourrons exécuter du code.

Si vous avez opté pour l'exécution de code par Bad Clone, c'est encore un peu différent. Comme vous le savez si vous avez lu notre page du Bad Clone Trick, les Bad Clones n'ont pas de nom terminé et dans Cristal, lorsque vous les visualisez dans le PC, la lecture du nom se poursuit sur les données qui suivent dans la mémoire (cela se traduit par l'affichage de nombreux "?"). Ceci dit, certains caractères sont utilisés par le jeu non pas pour écrire des noms, mais pour exécuter des fonctions : ce sont les caractères spéciaux. Le caractère d'Identifiant $15 est l'un d'eux, et est utilisé pour les fonctions liées au Mobile GB Adapter dont on parle dans l'introduction de cette page. Ceci dit, à cause d'un oubli de programmation, si le caractère $15 est suivi d'une adresse qui contient la valeur $00, le jeu va exécuter du code à l'adresse $CD52, une autre zone tampon qui contient des données de map. En suivant les pas indiqués dans l'astuce, vous modifiez donc les valeurs des adresses de ce tampon, et "inscrivez" une instruction ret un peu plus loin, à $CD74. Mais ici en réalité, contrairement à ce que vous faites avec vos codes, cela ne signifie pas la fin de la lecture : celle-ci est simplement déviée, pour des raisons techniques, à l'adresse se trouvant juste après la séquence $15 $00.

L'adresse $D106 correspond à la position du curseur d'objets. Elle contient donc toujours l'Identifiant de l'objet sur lequel le curseur se trouve actuellement. $D107, elle, contient la position dans le sac de l'objet actuellement sélectionné. De fait,en visualisant (mais sans sélectionner) le Max Elixir (Identifiant $15) de l'inventaire, on inscrit $15 $00, qui est ensuite lu en tant que partie de nom du Bad Clone et provoque donc l'exécution de code à partir de $CD52... qui saute alors à $D108. Or, cette zone est encore un autre tampon, cette fois contenant les données des Pokémon visualisés : $D108 contient l'Identifiant du dernier Pokémon affiché dans le PC, alors que $D10E contient l'Identifiant du dernier Pokémon dont nous avons vu le profil et $D110 sa première attaque. $D10F contient l'Identifiant de l'objet tenu par le dernier Pokémon visualisé par n'importe laquelle de ces méthodes. Similairement aux autres méthodes, si Maraîstre possède RETOUR et la CT50, la séquence de $D108 à $D110 ordonnera $C3 XX XX XX XX XX $C3 $F2 $D8. Si les trois dernières instructions correspondent bien à un "jp $D8F2", nous ne pourrons exécuter du code à partir des objets car le premier $C3 nous enverrait ailleurs. En visualisant, mais sans ouvrir son profil, Piafabec, nous enlevons donc ce $ sans toucher à celui se trouvant à $D10E - et l'objet de Maraistre n'a alors pas d'importance, puisqu'il est écrasé par celui de Piafabec.

Bien, nous avons sauté aux objets stockés ou aux noms 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'Identifiant 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 à 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équencce, $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 Identifiant de $7F (suivi par A, dont l'Identifiant 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'Identifiant 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,XX			
$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 langage assembleur vous attend ! Dingue !


Page Précédente : Item Shifting Glitch
Page suivante : Glitch City 2G