Rechercher du texte dans un jeu

Encodage ASCII / Recherche relative / Table de caractères

Rechercher du texte dans un jeu

Message non lupar Lyan53 » Mardi 11 Janvier 2011 à 0:05:05

Rechercher du texte dans un jeu






Ce tutoriel va vous apprendre comment faire une recherche relative sur un JV dans le but d'y trouver du texte non compressé .
Heureusement pour nous , tous les jeux n'ont pas du texte compressé , si tel est la cas ça compliquera sans nulle doute la tâche , mais pour un débutant il est mieux de commencer pas à pas et donc de trouver un jeu dans lequel il vous sera facile de trouver les scripts .



1. L'encodage ASCII

Avant de commencer , il vous faut savoir une petite chose qui peut avoir son importance , dans votre éditeur hexadécimal , les caractères qui sont dans la partie "texte" (à droite de ce dernier) sont encodés en ASCII . Cela signifie que chaque caractère de l'alphabet ou de la ponctuation sont sur 1 octet et possèdent chacun leur propre valeur .

Image


Pour exemple dans le screen ci-dessus , j'ai noté les caractères allant de 0x00 à 0xFF , vous verrez qu'on y trouve tous les caractères de notre alphabet ainsi que notre ponctuation (entre autre) .





2. Quelques infos sur les textes dans les JV

Même si dans certains JV les textes sont visibles à l'oeil nu via un éditeur hexadécimal , ce n'est pourtant pas toujours le cas .
En effet les JV ne sont pas tenus de respecter la norme ASCII , vos caractères alphabétiques ou ponctuations peuvent donc posséder d'autres valeurs , ce qui fait qu'on ne pourra pas toujours voir les textes d'un jeu aussi facilement et qu'il nous faudra donc avoir recours à une recherche relative dans le but de les trouver .

Image
Exemple de textes visibles à l'oeil nu


Image
Exemple de textes non visibles à l'oeil nu


Sur le 1er screen ci-dessus , pas de doute possible , les textes se reconnaissent de suite , mais sur le 2nd qui pourrait penser qu'il s'agit bien là des textes d'un JV , et c'est pourtant bel et bien le cas ;)


Une autre chose importante à savoir , les caractères dans un JV ne sont pas non plus systématiquement sur 1 octet par caractère , ils peuvent tout aussi bien être sur 2 octets par caractère (pour exemple , ce n'est pas rare sur les jeux Jap ou sur les jeux NDS) .

Image
Exemple de textes sur 2 octets par caractère visibles à l'oeil nu


Image
Exemple de textes sur 2 octets par caractère partiellement visibles à l'oeil nu


Image
Exemple de textes sur 2 octets par caractère non visibles à l'oeil nu


Comme vous pouvez le constater sur les screens ci-dessus , chaque caractère est sur 2 octets (ex/ a=6100 sur le 1er screen) , il faudra bien penser à prendre cela en compte lorsque vous ferez une recherche relative de vos textes .





3. La recherche relative

Avant de rentrer dans le vif du sujet , il vous faudra déjà comprendre comment fonctionne une recherche relative , sur quelle logique celle-ci est basée .

Comme nous l'avons vu dans la 1ère partie , l'encodage ASCII attribue à chaque caractère un octet d'une certaine valeur toujours fixe (Ex/: A=41 , B=42 , C=43, ... , a=61 , b=62 , c=63 , ...) . On constate donc que pour les lettres de l'alphabet , la valeur s'incrémente de 1 en suivant l'ordre alphabétique aussi bien pour les majuscules , que pour les minuscules .

La recherche relative va donc suivre la même logique , elle va checker les octets du fichier sur lequel vous l'utiliserez , dans le but de trouver un mot clef (présent dans le jeu) que vous lui indiquerez vous même , en tablant sur le principe que "si A=(valeur x) , B= (valeur x+1) , C=(valeur x+2) , D=(valeur x+3) , etc ...
Quoi de plus adapté pour trouver du texte non visible finalement puisqu'en théorie , l'ordre alphabétique sera quasi systématiquement respecté même si vos textes ne sont pas en ASCII :)

Dans la pratique , ce système est relativement simple et efficace à partir du moment ou les textes sont en 1 octet par caractère , mais dans le cas ou ils sont en 2 octets par caractère , ça complique quelque peu la tâche . Il existe heureusement des logiciels de recherche relative qui permettent d'utiliser un caractère "joker" ce qui permettra donc au logiciel de checker seulement un caractère sur 2 et cela se révèlera très pratique pour vos recherches .

On trouve plusieurs logiciels de recherche relative comme Search RX , Search R3 , etc ... que disponibles sur le site de la TRAF , mais dans ce tutoriel je vais vous proposer "Monkey-Moore" codé par Darkl0rd , puisque ce dernier gère les caractères "joker"dont je vous parlais précédemment , ainsi que les caractères Jap .


Lien pour Monkey-Moore : monkey-moore-v0.4


Voyons un peu son interface :

Image


  1. Il s'agit juste de l'emplacement ou vous mettrez le fichier dans lequel vous souhaitez rechercher du texte

  2. C'est ici que vous rentrerez le (ou les) mot(s) clef que vous aurez préalablement repéré dans le scénario du jeu , tant qu'à faire essayez de choisir un mot pertinent , et de préférence entièrement en minuscules dans un 1er temps

  3. Case à cocher qui vous permettra d'utiliser si activée un caractère "joker" dans vos mots clef

  4. Cette fenêtre est dédiée au résultat de la recherche


En pratique ça donne :

  • Pour commencer je lance le jeu dans le but de dénicher quelques mots clefs que j'utiliserais dans ma recherche relative pour trouver du texte

    Image


  • Dans mon jeu , ce texte apparait lors de l'introduction (l'opening) .
    Par chance dans l'arborescence des fichiers du jeu je trouve comme par hasard un fichier qui se nomme "OpeningText.mbb" , coup de bol car ce nom semble tout à fait pertinent , je regarde donc ce qu'il contient avec mon éditeur hexadécimal

    Image

    Au vu de la forme du code dans le fichier , j'en déduis qu'il s'agit bel et bien de textes en 2 octets par caractère (0x00 entre chaque caractère) mais pas encodés en ASCII car impossible de lire quoi que ce soit

  • Je tente donc une recherche relative dans ce fichier en utilisant le mot clef "civilization" car il est long , en minuscules et il correspond donc tout à fait à la situation . Comme j'ai remarqué qu'il y a de fortes chances pour que mes caractères soient sur 2 octets , j'active l'option "joker" et je tape mon mot en prenant bien soin d'insérer le caractère joker entre chaque lettre (c*i*v*i*l*i*z*a*t*i*o*n) puis je lance ma recherche .

    Image


    Comme vu sur le screenshot , Monkey-Moore trouve donc 1 résultat de recherche , il vous indique l'adresse où se situe celui-ci dans le fichier , ainsi que la valeur hexadécimale des lettres "a" et "A" qu'il a trouvé pour que votre mot clef corresponde .

    Attention néanmoins , comme vous n'avez pas utilisé de mot avec des majuscules , seule la valeur attribuée au "a" minuscule est à prendre en considération .

    A partir de ce résultat obtenu vous pouvez donc facilement déduire que : si a=42 , alors b=43 , c=44 , d=45 etc ... Vous allez donc pouvoir commencer à mettre en place une "table de caractères"





4. La table de caractères

Une fois que vous avez réussi à identifier les valeurs attribuées à certains caractères dans vos fichiers contenant du texte , il est temps de commencer à mettre en place une table de caractères . Notez que la mise en place d'une table de caractères est à faire quel que soit l'encodage (même si c'est du ASCII) .

Celle-ci vous sera utile principalement pour 2 raisons :
  1. La première est simplement que certains éditeurs hexa vous permettront d'utiliser une table de caractères sur votre fichier (WindHex32 , Translhextion) , vous aurez donc la possibilité de pouvoir lire directement votre texte non ASCII dans celui-ci

    Image
    Sans table de caractères


    Image
    Avec table de caractères

  2. Le seconde pour la simple raison que c'est grâce à une table de caractères que vous pourrez extraire et réinsérer les scripts dans un fichier .txt par exemple .
    Il vous faudra partir du principe qu'il sera nettement plus pratique à un traducteur de travailler sur un fichier .txt , que directement avec un éditeur hexadécimal , c'est pour ainsi dire un très gros gain de temps mais également un confort non négligeable pour diverses raisons sur lesquelles nous ne nous étendrons pas dans ce tutoriel .

Revenons donc à nos moutons : comment construire une table de caractères et avec quel outil ?
Un simple bloc-note windows (ou notepad) suffira pour ce faire . Il vous suffit d'ouvrir un fichier .txt tout bête dans lequel vous noterez vos correspondances en suivant ce principe : valeur hexa=caractère
Un seul valeur=caractère par ligne et aucun espace superflu car il sera compté comme caractère à part entière sinon ;)

Exemple avec un extrait d'une table ASCII :
Code: Tout sélectionner
20=
41=A
42=B
43=C
44=D
61=a
62=b
63=c
64=d

Une fois tous vos caractères entrés , enregistrez simplement votre fichier et remplacez l'extension ".txt" par ".tbl" , c'est tout , ce n'est pas plus compliqué que ça ;)

Dans le cas ou votre table de caractères contient 2 octets par caractère , il vous suffira alors de procéder ainsi :
Code: Tout sélectionner
0100=
2200=A
2300=B
2400=C
2500=D
4200=a
4300=b
4400=c
4500=d
Note : Dans les extraits de table ci-dessus , vous pourrez notez que le première valeur ("20= " ou "0100= ") est l'espace qui est bien entendu considéré comme un caractère à part entière , pensez à ne pas l'oublier dans vos futures tables , il est tout aussi important que n'importe quel autre lettre , chiffre ou ponctuation ;)


Pour reprendre l'exemple donné plus haut dans lequel j'ai utilisé une table sur 1 octet , voilà ce que ça donnera avec un table plus adaptée au texte en question (donc sur 2 octets par caractère) :

Image
Avec table sur 2 caractères


Dernier point relativement important , certains jeux possèdent plusieurs tables de caractères différentes pour les divers textes que vous y trouverez , c'est à voir selon le cas , mais pensez-y au besoin si vous constatez que votre table ne fonctionne pas ;)





A vous de bien travailler maintenant ... 8-)
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Re: Rechercher du texte dans un jeu

Message non lupar pinktagada » Mercredi 12 Janvier 2011 à 12:23:30

Ce qui est bien, c'est que ce tutoriel s'applique pour la recherche de caractère pour l'ensemble des jeux sur l'ensemble des consoles. Que ferions nous sans toi, Lyan ? Je rajouterais bien qques explications sur le codage 5 bits rencontré dans Bible Adventure NES (qui en définitive est très commun). Ça fait un peu double emploi avec ce qui est dit sur le guide de la TRAF V2, mais bon. Qu'en penses tu ?
Avatar de l’utilisateur
pinktagada
 
Messages: 502
Âge: 41
Enregistré le: Lundi 22 Novembre 2010 à 21:32:31
Localisation: Asgard
Genre: Femme

Re: Rechercher du texte dans un jeu

Message non lupar Lyan53 » Mercredi 12 Janvier 2011 à 16:08:05

Mhhmm , ça risque d'être un peu hard de rentrer là dedans dès le départ ...

Le tutoriel s'adresse avant tout aux débutants , j'attaque pas de suite les compressions utilisées etc ... C'est du niveau supérieur et le but est surtout de bien expliquer les bases dans leur forme la plus simpliste et non pas d'embrouiller les cerveaux des inconscients qui souhaitent s'attaquer au ROMHack :P
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Re: Rechercher du texte dans un jeu

Message non lupar Vix33 » Samedi 15 Janvier 2011 à 23:21:53

Je n'ai pas tout saisis, je le relirai ^^
Le jeu sur lequel j'ai essayé contient les textes (principaux mais secondaire je sais pas) directement accessible dans l'éditeur hexa, les mots ne sont pas haché par des points ou autre.
Mais je n'ai pas saisis comment faire pour extraire en .txt
Avatar de l’utilisateur
Vix33
 
Messages: 30
Enregistré le: Vendredi 7 Janvier 2011 à 21:05:08
Genre: Homme

Re: Rechercher du texte dans un jeu

Message non lupar Lyan53 » Dimanche 16 Janvier 2011 à 0:34:42

Normal ça car pour le moment je n'ai pas encore abordé ce sujet ^^

Mais sinon pour cette phase , sache que bien souvent il faut savoir programmer un outil adapté au jeu pour pouvoir le faire :/
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Re: Rechercher du texte dans un jeu

Message non lupar Vix33 » Dimanche 16 Janvier 2011 à 12:26:43

Et ce tutoriel sera dispo quand ? :p
Avatar de l’utilisateur
Vix33
 
Messages: 30
Enregistré le: Vendredi 7 Janvier 2011 à 21:05:08
Genre: Homme

Re: Rechercher du texte dans un jeu

Message non lupar Lyan53 » Dimanche 16 Janvier 2011 à 13:23:22

Ouh là aucune idée , je dirais en temps voulu ^^

A vrai dire , j'en sais trop rien , j'ai pas prévu ça dans mon planning prochainement

Mais bon comme je le disais généralement faut savoir programmer pour extraire du texte et ce n'est pas mon cas ce qui fait que du coup pour l'extraction du texte , c'est assez difficile de rédiger un tutoriel qui l'aborde puisqu'il ne s'agit plus de bases de ROMHack à proprement parler mais de programmation là ;)

Tu peux toujours regarder ce qu'il y a là dessus dans les guides de la TRAF (rédigés par des personnes bien plus compétentes que moi) , sinon il y a bien un utilitaire qui permet d'extraire du texte à condition que le texte en question soit dans un format très standard (au niveau des pointeurs principalement) , il s'agit de "Hareng tool" que tu trouveras sur la TRAF également , il y a un doc qu'il faut plancher dedans pour apprendre à l'utiliser mais avant de s'attaquer à ça je te conseille de plancher plutôt les divers tutoriels de la TRAF qui sont très complet (c'est avec eux que j'ai appris) et encore tu as de la chance car moi à l'époque j'ai pas eu l'occasion de connaitre le guide de la trad v2 qui est une vrai mine d'informations , y'a selon mon avis pas meilleur tutoriel francophone sur le ROMHack à ce jour
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Re: Rechercher du texte dans un jeu

Message non lupar Menhir » Samedi 5 Février 2011 à 14:52:07

Bonjour,

J'ai une question :

Dans le programme Monkey-Moore, il peut créer une table de caractères à partir d'un résultat, Tu n'en parle pas dans le tutoriel.
Les tables créées avec cette outil ne sont pas correctes?
Le faire manuellement c'est pour nous habituer au code hexadécimale?

Voila merci d'avance.

P.S: Très bon tutoriel qui complète ceux de la T.R.A.F.
Menhir
 
Messages: 5
Enregistré le: Vendredi 4 Février 2011 à 21:24:57
Genre: Non spécifié

Re: Rechercher du texte dans un jeu

Message non lupar pinktagada » Samedi 5 Février 2011 à 21:18:52

Alors, de la maigre utilisation que j'ai faite de monkey moore, ma table était pas vraiment juste. Il a fallu corriger pas mal de choses et ajouter la ponctuation, et vérifier que tout était OK dans les scripts. Ca sert de base, mais c'est plein d'erreurs, du moins pour la seule fois où je l'ai utilisé.
Avatar de l’utilisateur
pinktagada
 
Messages: 502
Âge: 41
Enregistré le: Lundi 22 Novembre 2010 à 21:32:31
Localisation: Asgard
Genre: Femme

Re: Rechercher du texte dans un jeu

Message non lupar Lyan53 » Dimanche 13 Février 2011 à 0:46:36

Désolé du retard sur la réponse , j'avais plus le net ces dernieres semaines

Effectivement , moi de même avec monkey moore j'obtiens des tables de caracteres pas toujours 100% fiable à partir du moment ou il y a des majuscules et des minuscules mélangées

Par contre tu peux tabler directement tes minuscules avec et compléter tes majuscules manuellement ;)

Rien de tel qu'une bonne table de caracteres faite à la main de toute façon :)
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Suivante

Retourner vers ROMHacking

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

x

#{title}

#{text}