Vos débuts en hexadécimal

Pages: [1]

Flower//

  • Invité
03 avril 2011, 13:58
Comment ça se présente ?


Vous vous demandez surement à quoi l'hexadécimal ressemble?  Voici un petit exemple:



Arrrrgh !!!!! Mais qu'est-ce que c'est que tout ça ??!!?

Ne vous inquiétez pas, votre réaction est tout à fait normale !  
C'est un "langage" (on pourrait dire) plutôt compliqué que peut de monde arrive à comprendre, mais pourtant, il va nous être grandement utile...

D'accord, mais quel logiciel ?

Pour utiliser les "bienfaits" de l'hexa (ça va plus vite que de dire hexadécimal), il nous faut un logiciel, et pour cela, je vous propose Hex-Editor MX !  

Télécharger Hex-Editor MX:

http://www.pokemon-legendary.com/downloads/Hex-EditorMX.zip

Ce super logiciel à la pointe de la technologie va vous permettre de lire votre rom en hexadécimal !
Ouvrez-le:



Oulaaaaa !!! Mais c'est tout en Allemands !  

Ne vous inquiétez pas, faites tout comme moi, cliquez sur "optionen" en haut, puis sur "Einstellugen...", vous arrivez ici:



Cliquez ensuite sur "Sprache" à gauche et choisissez Français, un message s'affichera, cliquez sur "OK":



Fermez le logiciel et relancez-le, IL EST EN FRANÇAIS !!!   :D



Faites fichier, ouvrir, puis insérez une rom gba, nous allons passer à la pratique...

Comprendre le système Hexadécimal

Une foi votre rom gba ouverte sur Hex Editor, vous obtenez ceci, pour ma part, j'ai ouvert Pokémon Rouge Feu:



Voilà quelque chose de bien compliqué...  

Commençons par le commencement, vous remarquerez que si vous sélectionnez du code, la partie correspondante, à droite, se sélectionnera elle aussi:



C'est le principe ! La partie à gauche correspond à celle de droite !  

Vous remarquerez tout à gauche qu'il y a plein de petits "0x000quelquechose:", regardez:




Regardons-en un de plus près...Mais oui, c'est bien un offset !  
Mais nous, nous les connaissions avec un "$" à la place du "0x"  

Si vous êtes perspicaces, vous aurez compris qu'un offset correspond à chaque ligne, la partie bleu est de l'hexa, et la partie noire est ce que le jeu va comprendre. En gros, chaque offset contient des informations.

Par exemple, pour créer un warp, vous vous souvenez ? Il faut trouver un offset libre par FSF, vous le rentrez, et la mémoire de l'offset se remplira. L'offset contiendra les informations nécessaires pour que le warp vous mènent là où vous avez choisi.

En faisant un schéma simple:
J'arrive au warp dans le jeu ----> Le warp renvoi à un offset (celui que l'on a entré sur Advance Map)----->Les informations quui sont dans l'offset disent: Attention, on est sur un warp, il faut sa rendre à tel endroit------>L'information revient au jeu, on se retrouve à l'endroit voulu !  

D'autres évènements doivent fonctionner avec 2 offsets, comme un script par exemple:
L'un contient les informations concernant le script, par exemple, s'il vas y avoir un combat, si il va y avoir un déplacement, ou un effet comme tremblement de terre ou un effet de flash ect...
Le deuxième sert à stocker les paroles du personnage.

Encore un exemple ? Et bien les images ! Elles aussi ont besoin de deux offsets:
Le premier contient les informations sur la palette.
Le deuxième contient l'image.

Si cous changez de palette, l'image aura la même forme mais pas la même couleur.  

Bon, c'est très joli tout ça, mais comment on reconnais un offset vide ?
C'est simple, il n'est constitué que de F:



Votre première modification en programmation

Maintenant que vous avez compris comment fonctionne l'hexa, on vas passer à la pratique.  
Nous allons changer les données de la rom ! Pour cela, on va utiliser un petit logiciel appelé Rom Header Editor !  

Télécharger Rom Header Editor:
http://www.pokemon-legendary.com/downloads/RHEA.zip

Ouvrez le logiciel et chargez la même rom qui est en même temps ouverte sur Hex Editor, vous arrivez ici:



Ici vous pourrez changer le code du jeu (ce que je ne vous conseil pas, vous ne pourrez plus ouvrir la rom avec les éditeurs), vous pourrez changer aussi le nom de la rom ainsi que son fabriquant.
Retournez sur Hex Editor et regardez bien cet endroit:



Retournez sur RHEA (Rom Header Editor Advance), changez le nom de la rom puis sauvegardez:



Fermez RHEA et Hex Editor, relancez Hex Editor, insérez votre rom et...  :



INCROYABLE,  vous avez changé le nom de la rom, qui été inscrit en Hexadécimal !

ATTENTION changez plutôt le nom de votre Hack-Rom une foi celle-ci terminée car une foi changé, les éditeurs ne pourront plus lire votre rom et vous ne pourrez plus qu'y jouer sur votre Emulateur. Certains Rom-Hackers font cela pour empêcher d'autres personnes de travailler sur leur création et gardent ainsi leurs secrets de "fabrication"
« Modifié: 06 avril 2011, 21:27 par Flower// »

pokastuce

  • Membre
  • 676 posts
03 avril 2011, 15:16
L'hexadécimal ?

Tout d'abord, qu'est-ce que l'hexadécimal ?
L'hexadécimal est un langage de programmation très complexe utilisé il y a quelques années. De nos jours on utilise principalement le C ou le C++ dans le jeu vidéo car l'hexadécimal était trop compliqué et pas assez performant. 

Mais alors pourquoi utiliser ce langage de programmation s'il est si vieux?

Regardez de quand datent les jeux Pokémon et vous comprendrez !

Comment ça se présente ?

{Je ne démonte rien de ce que tu as dis, au contraire, bien d'expliquer à tout le monde ce qui se passe dans le monde de plus bas niveau. Il peut y avoir des erreurs ou points d'ombre dans ce que je vais dire après, je n'ai jamais été très doué pour expliquer mais un dialogue est bien plus enrichissant ;) }


L'hexadecimal n'est pas un langage, c'est une représentation des données (il y a de l'hexadecimal dans tous les fichiers, on pourrait aussi les modifier en octal, binaire {le plus fun}, etc...). LE C/C++ une fois compilé et assemblé donne un code assembleur qui est du code machine (quasiment le plus bas niveau) ; ce code assembleur est souvent représenté en hexadecimal car plus maniable lorsqu'on veut faire des modifications du code sans avoir les sources sous la main ou le compilateur.

Quand tu parles de l'hexadecimal qui était trop compliqué, tu fais un amalgame avec l'assembleur, qu iest effectivement assez chiant et selon les processeurs, absolument pas pareil. Pour l'efficacité, c'est uniquement la capacité du développeur à produire un code pertinent ou au compilateur qui fait la performance à l'exécution {dans le cas de compilateur, si le code source C par exemple est foireux du genre
for(t=0;t<50;printf(" "),t++); //50 opération de sortie >> potentiellement lent
sera forcément (quoique si le compilateur détecte une opération de ce type répétée, il peut y avoir certain mécanismes mis en jeux pour parer) plus foireux que de faire un
char tmp[51]={' '};
tmp[50]=0;
printf("%s",tmp); //Une seule opération lente de sortie mais allocation en mémoire de 50 octets > complexité en espace ou en mémoire, il faut souvent choisir mais bien pensé, la complexité en espace est futile ;)


Après pour un fichier, connaitre sa structure permet d'obtenir toutes les informations : emplacement des entêtes, fichiers, code, etc...

Pour les jeux Pokémon, qui fonctionnent quasiment qu'avec des scripts :
Au lieu de coder des fonctions pour chaque déplacement, chaque image etc... Codez une fonction qui va bouger un element vers une position avec tel ou tel effet, pareil pour l'affichage d'une image etc... Puis faites un script/code source qui va appeler ces fonctions. On y gagne :
de la place, de l'efficacité de maintenance, et surtout d'évolution : exemple du warp que tu donnes.
Une autre force des scripts, au lieu d'avoir à compiler tout un jeu par exemple, compilez le moteur, des ressources et mettez-y ensuite des fichiers facilement éditable qui seront utilisés avec le moteur.
Exemple : Pour le passage des jeux Pkmn BR, les dev ont du refaire toute la compilation, pour les versions suivantes, modifiez les fichiers ressources et vous avez traduis le jeu, have fun \o/

victinidefeu

  • Membre
  • 512 posts
03 avril 2011, 16:25
Super tuto, vivement le prochain !

Flower//

  • Invité
04 avril 2011, 12:15
Merci de ton observation, mais le tuto est prévu pour quelqu'un qui n'y connait rien du tout ^^, mais ce que tu dit est très pertinent et j'ai appris des choses que je ne savais pas. Et ça feras un complément pour quelqu'un qui s'y connaît ^^. Merci

The New Azerty

  • Membre
  • 2609 posts
04 avril 2011, 12:29

   Oh, le beau tuto.  ;)

Flower//

  • Invité
04 avril 2011, 12:31
ET c'est PAS du plagiat ! (pour éviter qu'on m'attaque de tous les côtés ^^ MDRR')

M@T

  • Membre
  • 15208 posts
04 avril 2011, 15:50
Tout d'abord, qu'est-ce que l'hexadécimal ?
L'hexadécimal est un langage de programmation très complexe utilisé il y a quelques années. De nos jours on utilise principalement le C ou le C++ dans le jeu vidéo car l'hexadécimal était trop compliqué et pas assez performant.  

Mais alors pourquoi utiliser ce langage de programmation s'il est si vieux?

Regardez de quand datent les jeux Pokémon et vous comprendrez !

MDR

Quelques screenshots de programmes très récents dans HxD (Firefox 4.0, Chromium 12.0.724.0, IE 9.0) :

Spoiler







Mais OH MON DIEU, il y a de l'hexadécimal !  :o :o :o
Seraient-ce en fait des programmes datant d'avant-guerre ?

Pokastuce a déjà plus ou moins tout expliqué, mais par pitié, évite de faire des tutos sur ce que tu ne connais pas...  :/

Surtout que je ne vois pas vraiment le but de ce tuto ; en effet, tu montres que quand on modifie la ROM avec RHEA, quelques valeurs hexa dans la ROM changent. Bien. On ne s'en serait pas doutés une seconde.
Mais tu ne montres pas comment se servir soi-même de l'hexa, ni même la base : qu'est-ce que vraiment l'hexa (système de numérotation en base 16, blablabla) ?

Flower//

  • Invité
04 avril 2011, 17:41
Ok, merci des rectifications. :D   Je ne savais même pas que c'était encre utilisé !
Pour te répondre, ce tuto est juste fait pour remarquer le changement tout bête qu'il y a lieu  dans la Rom. Cela peut expliquer pas mal de choses à quelqu'un qui l'ignorait !

M@T

  • Membre
  • 15208 posts
04 avril 2011, 17:47
Je ne savais même pas que c'était encre utilisé !

As-tu seulement compris ce que Pokastuce a dit ?  :cheval

Cocktail monotone

  • Membre
  • 13877 posts
04 avril 2011, 17:48
L'héxadecimal, c'est ce qui permet de faire des scripts, ou des, par exemple, givepokemon?

M@T

  • Membre
  • 15208 posts
04 avril 2011, 17:56
Si les scripts sont en assembleur, alors ouais, tu as une bijection entre le script et son code hexa (tu peux passer de l'un à l'autre sans perte).

Cocktail monotone

  • Membre
  • 13877 posts
04 avril 2011, 17:58
Ouais bon j'ai pas tout compris a ta phrase mais bon....
Je compte lire ton tuto et aprendre a scripter, c'est si dur que ca?

T@gekiss

  • Membre
  • 2893 posts
04 avril 2011, 18:01
Je ne vois pas l'intêret du tuto.

Flower//

  • Invité
04 avril 2011, 18:37
Je ne savais même pas que c'était encre utilisé !

As-tu seulement compris ce que Pokastuce a dit ?  :cheval

Oui, bien sûr ! (en partie du moins  ;D) C'est juste un moyen de représenter les données ! Mais ce que je veut dire par là, c'est que ce n'est pas cela qu'on utilise pour faire une modification.

Ksilee

  • Membre
  • 1275 posts
04 avril 2011, 18:47
 
Je ne vois pas l'intêret du tuto.
Moi non plus :-\
« Modifié: 04 avril 2011, 18:49 par Ksilee »

Sainior

  • Membre
  • 6362 posts
04 avril 2011, 18:50
Je compte lire ton tuto et aprendre a scripter, c'est si dur que ca?

EUH-

Scripter, c'est pas si dur que ça, non, mais t'as pas besoin de l'hexadécimal pour le faire...

M@T

  • Membre
  • 15208 posts
04 avril 2011, 19:02
Je ne savais même pas que c'était encre utilisé !

As-tu seulement compris ce que Pokastuce a dit ?  :cheval

Oui, bien sûr ! (en partie du moins  ;D) C'est juste un moyen de représenter les données ! Mais ce que je veut dire par là, c'est que ce n'est pas cela qu'on utilise pour faire une modification.

Le simple fait que tu écrives "Je ne savais même pas que c'était encre utilisé" en voyant le code hexa des programmes d'exemples que j'ai montré prouve que tu n'as pas compris.

Flower//

  • Invité
04 avril 2011, 19:04
Oui mais maintenant oui ! ;D  J'ai un air si  :roubaix:  ? mdr' :)

guigzdu67

  • Membre
  • 96 posts
04 avril 2011, 23:57
salut peut etre que ma question n'as rien a faire la mais je voudrai  savoir pour pokemon blanc pour les code modif ct44 vou parler de hexadecimal mais je ne sais pas comment y faire pour mettre l'attaque souhaiter(electacle n°344)

M@T

  • Membre
  • 15208 posts
05 avril 2011, 00:02
Euh, on est en ROM-Hacking là, et ce "tuto" parle d'édition hexa des ROMs ; pour les codes, ça se passe ici.

Pages: [1]    En haut ↑