Forum : Jeux vidéo |
Page : 1 |
Auteur |
Message |
Aladore
 Malhonnête
|
Posté le 02 mars 2013 à 02:24 | Sujet : TUTO : Créer un code AR |
|
Comme on m'a demandé de rédiger un tuto sur comment créer un code AR, j'ai voulu le partager ici.
Mes exemples s'appuieront seulement sur FF VIII et sa version PS1. Je profite de poster ici pour pouvoir utiliser la fonction "Edit" inexistante sur les forums de JVC. Là il est 2h26 donc je vais juste copier/coller comme un gros bourrin la première partie du tuto.
Postez vos réactions, j'en ai besoin pour améliorer le tutorial.
EDIT : Je vais aussi poster des liens expliquant en anglais les fonctions et la méthode. C'est bien mieux expliqué (pas à l'arrache comme moi pour l'heure) mais souvent les gens ont du mal en angliche :
les fonctions possibles pour un code :
http://gamehacking.org/faqs/hackv500c.html#playstation_code_types
comment faire un code :
http://pec.duttke.de/makecodes1.php
http://pec.duttke.de/makecodes2.php
http://pec.duttke.de/makecodes3.php
[Ce message a été édité par son auteur pour la dernière fois le 04 mars 2013 à 22:57] -
|
710 messages
|
|
|
Aladore
 Malhonnête
|
Posté le 02 mars 2013 à 02:24 | Sujet : TUTO : Créer un code AR |
|
Je vais commencer par définir ce qu'est un code AR en partant du principe que je m'adresse à quelqu'un qui connaît rien à rien. Je préfère être sûr que tout est bien compris, mais ça me permet aussi d'utiliser mes propres termes.
Mais comme je suis nul pour les explications, hésitez pas à me dire si un point n'est pas clair.
Ahem...
Datel a créé plusieurs appareils de triche pour jeux vidéos sous différentes formes : cartouche, disque... mais toujours avec le même nom : Action Replay. Ce type d'appareil a différents noms selon son constructeur, et parfois selon la console : GameGenie, GameShark, Xploder... Mais de manière à rester simple, pour la suite du tuto je vais garder le terme "Action Replay" ou AR.
L'AR permet de modifier des éléments du jeu en accédant à sa mémoire. Mais il faut indiquer à l'AR quelle partie du jeu on veut modifier (adresse), et quelle modification on veut lui apporter (valeur). C'est ce que fait un code AR. Sur PS1, la plupart du temps on a un code qui ressemble à ça :
XX000000 ZZYY
La première partie du code concerne l'adresse :
XX : Fonction utilisée
000000 : Adresse modifiée (ce qu'on veut modifier)
La seconde partie du code concerne la valeur de l'adresse :
ZZ : second octet
YY : premier octet
/!\ "ZZ" est le premier octet de l'adresse suivante/!\
Les adresses et les valeurs sont écrites en héxadécimal. Dans un système décimal, on compte sur une base 10 avec les chiffres de 0 à 9.
Dans un sytème hexadécimal, on compte sur une base 16 avec les chiffres de 0 à F (15). Dans l'ordre : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
D2+9 = DB
19+1 = 1A
La valeur est écrite en chiffres hexadécimal, mais c'est pas forcément pour désigner un "nombre". Il y a en fait plusieurs types de valeurs :
- Nombre
- Booléen (vrai = 01 ou faux = 00, par exemple pour activer ou désactiver qqch)
- Unique (un chiffre correspondant à un objet en particulier par exemple)
Normalement la valeur d'une adresse peut être modifiée sur 1 seul octet (YY). Avec la fonction 30 ça donne : "écriture constante sur 1 octet". On aura donc une valeur minimum de 00 et maximum FF (255).
Mais avec des AR plus récent, on peut modifier deux octets avec une seule ligne de code avec la fonction 80 "écriture constante sur 2 octets". C'est surtout utile pour les valeurs "nombre".
Exemple avec les HP en combat du 1er personnage sur FF VIII:
Pour le code en 30
"HP 9999\Code en 30 :
300790CA 000F
300790CB 0027
9999 dec = 270F hex
On écrit "0F" sur le premier octet, et "27" sur l'octet suivant = 270F.
Pour le code en 80
"HP 9999\Code en 80 :
800790CA 270F
On écrit les deux octets directement sur 0790CA... c'est l'impression que ça donne mais une adresse ne peut contenir qu'1 seul octet. En fait c'est pour faciliter la vie à l'utilisateur, mais ça change pas par rapport à l'exemple avec le code en 30. Il va toujours écrire "0F" sur 0790CA et 27 sur 0790CB.
Il faut aussi noter que dans le cas d'un code en 30, l'AR ne fera rien au second octet mais il faut toujours écrire 4 chiffres. Il faut donc mettre "00" puis son octet. J'écrirais donc pas "300790CA 0F" mais bien "300790CA 000F".
Attention, car en utilisant des codes 80 on risque de modifier des octets qu'on voulait pas modifier, faut être sûr de ce qu'on fait. Si on ne veut modifier qu'un octet alors il faut utiliser le code 30.
Un octet est composé de 8 bits : 8 chiffres binaires qui sont chacun soit un 1 soit un 0.
Chaque combinaison de ces chiffres binaires (0 et 1) est une information différente que le jeu doit interpréter. Idéalement on devrait pouvoir switcher entre écriture décimal, hexadécimal et binaire. Mais on n'a pas ce choix.
Du coup, il faut penser en hexadécimal dans certaines situations où le binaire aurait été pratique. Pour cela on a une correspondance entre l'hexa et le binaire sur l'AR. Les nombres suivants peuvent être utilisés comme des "1" binaires : 01, 02, 04, 08, 10, 20, 40, 80.
Prenons cet octet : 30078532 00XX.
01 = Jouer en tant que Laguna (séquence de rêve)
02 = Avoir Odin
04 = Avoir Phoenix
08 = Avoir Gilgamesh
10 = Linoa n'a pas Angel (Inu)
20 = Linoa a Canonisation
40 = rien
80 = rien
Là il faut combiner selon les besoins. Tu pars de "00", et ajouter (en comptant en hexa) chaque fonction voulue. Par exemple, je veux avoir Odin+Gilgamesh+Phoenix+Linoa sans aucune limit : 00+02+04+08+10 = 1E.
Prenons un autre exemple. Voici le code qui permet de modifier le nombre de cartes Bogomile qu'on a.
"Triple Triad\Cartes\Bogomile
30078AF0 00E4
Décortiquons ce code :
30 : Fonction utilisée : "écriture constante sur 1 octet"
078AF0 : Adresse modifiée : "Nombre de cartes Bogomile"
00E4 : Valeur apportée : comme c'est sur 1 octet, on ignore le deuxième octet "00". Le premier octet est à E4.
Ce code donne 100 cartes Bogomile. Si vous avez bien suivi, vous voyez que quelque chose cloche : 100 en hexa donne 64, et non E4.
C'est parce que pour ce code en particulier, il faut combiner nombre et activation de la carte. La carte n'apparait que si on a activé le "bit" 80. Il faut donc faire "80+(nombre de cartes voulues)".
----
[Ce message a été édité par son auteur pour la dernière fois le 02 mars 2013 à 02:35] -
|
710 messages
|
|
|
Aladore
 Malhonnête
|
Posté le 02 mars 2013 à 02:27 | Sujet : TUTO : Créer un code AR |
|
Comment créer un code ?
Le but quand on créé un code c'est de trouver l'adresse en question, c'est ensuite la valeur qu'on choisira qui donnera l'effet voulu.
Au vu des milliers d'adresses possibles, on ne peut pas juste essayer des adresses au pif jusqu'à ce que ça marche. C'est possible, mais vu le temps que ça mettrait, ce serait encore plus simple de faire sans le code.
La méthode consiste à filtrer ces adresses selon leur valeur, et de répéter les filtrages jusqu'à avoir une liste d'adresses courte (et souvent une seule).
Pour cela, on peut utiliser psx emulation cheater (PEC) pour l'émulateur ePSXe.
On va prendre un exemple concret : cherchons le code FF VIII qui détermine le nombre de Gils.
Le plus simple, sera de faire varier la valeur de cette adresse afin de filtrer le plus possible :
- Je suis à Balamb, devant la boutique avec 5000 Gils.
- J'accède au chercheur de codes de PEC : Ctrl+H, et on voit cette fenêtre :
https://ff7.fr/forum/noelshack/1362433194-sans-titre-1.png
Cette fenêtre apparaît toujours, mais les filtres proposés diffèrent selon si le premier filtrage ou si c'est la suite d'un précédent filtrage.
Pour notre premier filtrage, voilà les options :
Search for (chercher) :
- Equal Value : valeur égale à
- Not Equal Value : valeur non-égale à
- Range : fourchette de valeurs
Data type (type de données/adresses) :
- 1 byte : 1 octet - valeur de 00 à FF (255)
- 2 bytes : 2 octets - valeur de 0000 à FFFF (65535)
- 4 bytes : 4 octets - valeur de 00000000 à FFFFFFFF (4294967295)
Data base : ça vous laisse le choix entre chercher les valeurs en décimal ou en hexadécimal
Value : la valeur qu'on cherche (selon ce qu'on a mis dans "search for"). dans le cas d'un Range on aura deux cases (minimum et maximum).
Search range : permet de ne chercher qu'une trache d'adresses, utile si vous savez déjà à peu près où votre adresse se trouvera. mais laissez "complete memory" tant que vous êtes pas sûrs.
Dans mon cas, j'ai 5000 Gils sur moi. Donc je choisis :
Search for : equal value
Data type : comme j'ai déjà 5000, ça ne peut pas être 1 byte (valeur limitée à 255). Je choisis 4 bytes : je sais que la valeur maximale des Gils est 99999999 qui est plus grande que le maximum pour 2 bytes 65535.
Data base : décimal, c'est plus simple pour cette recherche, enfin pour moi en tout cas.
Value : 5000 (la valeur de l'adresse que je cherche)
Search range : Complete memory fait très bien l'affaire.
Ensuite, j'appuie UNE SEULE FOIS sur le bouton "Search" en bas : le premier filtrage est fait.
Un message apparaît au dessus de la grosse case blance : Founded Adresses (adresses trouvées): 2.
PEC a donc trouvé 2 adresses de 4 bytes qui sont égales à 5000 à ce moment là du jeu. Elles sont affichées dans la grosse case blanche.
/!\ Dans le cas où PEC trouvent trop d'adresses, il n'en affichera aucune. Mais le filtrage est réussi et on peut le continuer. J'essaierai d'aborder un exemple plus tard. /!\
Cela me suffit pour tester, car il n'y a que 2 tests à faire. Je double clic sur chacune des deux adresses, et à chaque fois j'ai le droit d'entrer une nouvelle valeur : j'en choisis deux différentes : adresse 1 aura une valeur de 8 et adresse 2 aura une valeur de 2000.
Je retourne dans le jeu : bouton Resume Emulation. Je regarde le nombre de Gils que j'ai : 8.
Je vens un objet d'une valeur de 50 gils pour être sûr qu'il m'a trouvé l'argent réel. Si j'ai 58 gils à la fin de la transaction, alors je sais à 100% que c'est la bonne adresse.
Et vu que ça a marché, je peux noter cette adresse et en faire un code. Retournons sur le chercheur de code : Ctrl+H.
Je peux noter mon adresse à la main, ou alors je clique sur l'adresse voulu puis je clic sur le bouton "copy" à droite pour l'avoir dans le presse-papiers :
8007831C
Par défaut, PEC affiche les adresses avec la fonction 80 en utilisant son premier byte. Effacer alors les deux premiers chiffres pour voir la vraie adresse. Mais maintenant, il faut quand même adapter ce code pour l'utiliser.
On a une adresse de 4 bytes qui commence par 07831C :
07831C
07831D
07831E
07831F
Je peux faire le code en utilisant la fonction 30 :
3007831C 00??
3007831D 00??
3007831E 00??
3007831F 00??
Les valeurs inscrites sur "??" se cumulent. Mais il faut prendre en compte l'ordre des bytes :
- le premier donne un montant entre 1 et 255
- le deuxième donne un montant entre 256 et 65280
- le troisième donne un montant entre 65536 et 16711680
- le quatrième donne un montant entre 16777216 et 78190080
En fait, c'est simple mais je suis naze pour expliquer. Ce qu'il faut comprendre c'est qu'on écrit les derniers chiffres du montant voulu sur les premiers octets.
Mettons que je veuille 99,999,999 Gils (le max naturel du jeu). Dans un premier temps, il faudra convertir 99999999 en hexa pour que PEC ou les AR le comprenne.
La calculette Windows le fait très bien ou sinon : http://www.statman.info/conversions/hexadecimal.html
Et donc 99999999 = 5F5E0FF
Voyons comment insérer 5F5E0FF sur ces 4 bytes : 05 F5 E0 FF =>
Byte 1 : FF
Byte 2 : E0
Byte 3 : F5
Byte 4 : 05
Voilà donc mon code entier avec la fonction 30 (écriture constante sur 1 byte) :
"99999999 Gils
3007831C 00FF
3007831D 00E0
3007831E 00F5
3007831F 0005
Mais 4 lignes de codes ça fait beaucoup. Heureusement, les AR (dont PEC) ont pour la plupart la fonction 80 (écriture constante sur 2 bytes).
Prenons l'adresse qu'avait trouvé PEC : 07831C. Si j'utilise un code 80, ça me donne :
8007831C YYZZ (ZZ est l'octet de 07831C et YY est l'octet de 07831D)
8007831E ??XX (XX est l'octet de 07831E et ?? est l'octet de 07831F)
Et maintenant entrons notre nombre hexadécimal là dedans : 05 F5 E0 FF =>
Byte 1 : FF
Byte 2 : E0
Byte 3 : F5
Byte 4 : 05
Alors :
8007831C E0FF
8007831E 05F5
Si je veux un nombre qui tient sur 3 bytes, et que je veux pas toucher au quatrième je peux aussi combiner un 80 et un 30, c'est pas interdit ^^. Si par exemple je veux 99,999 Gils = 01 86 9F alors je peux :
8007831C 869F
3007831E 0001
J'espère que jusque là c'est clair.
Il me restera à aborder comment trouver un code quand c'est pas des valeurs connus ensuite et faire un exemple concret avec plusieurs filtrages parce que je pensais pas trouvé l'adresse des Gils aussi vite. Mais en bidouillant un peu on trouve vite comment faire, c'est assez intuitif.
[Ce message a été édité par son auteur pour la dernière fois le 04 mars 2013 à 22:41] -
|
710 messages
|
|
|
Aladore
 Malhonnête
|
Posté le 04 mars 2013 à 22:43 | Sujet : TUTO : Créer un code AR |
|
Je post pour vous informer du nouveau, il faudra aussi que j'édite sérieusement pour que ça ait une gueule de tuto quoi. -
|
710 messages
|
|
|
Qui est en ligne ? | Lecteur audio |
Aucun utilisateur en ligne dans les 5 dernières minutes.
|
Lecteur désactivé (à activer dans le profil) |
Jeux entre forumeurs |
Le Tarot des Anciens

Inscrits : yuyu, Acro, RJ, Yui |
Skull King

Inscrits : yuyu, Acro, RJ |
Interrupted by Hanabi

|
SpeciNames

|
Le Démineur de MSN

|
|