[HACK] Début dans la traduction de jeux vidéo

Des soucis pour hacker votre jeu ? C'est ici qu'il faut exposer votre problème.
Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6482
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par BahaBulle »

Il faut bien comprendre ce qu'est un pointeur.

Un pointeur pointe une adresse en mémoire. Exemple un peu bidon :
Si ton texte commence à l'adresse 0x1000, la valeur du pointeur sera 0x1000.
Dans la réalité, il y a tout un tas de choses qui fait que ce n'est pas aussi simple mais c'est l'idée.

Avatar de l’utilisateur
TheNeoKyousuke92
Amateur Floodeur
Messages : 52
Inscription : 01 mai 2012, 15:21
Localisation : Belgique
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par TheNeoKyousuke92 »

@StorMyu :

L'insertion d'octet à l'air (fait) de faire planter le jeu. Donc je ne peux en rajouter.

@BahaBulle :

Ça voudrait dire qu'il faut que le texte commence et finisse à la même adresse que le texte d'origine ?
Image

Jeux en cours :

[PS] Digimon World
[PS3] Naruto - Ultimate Ninja Storm
[iPhone] Final Fantasy I

Avatar de l’utilisateur
Lyan
Dieu Suprême du flood
Messages : 1441
Inscription : 19 nov. 2007, 04:56
Localisation : Raxacoricofallapatorius
Contact :
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par Lyan »

TheNeoKyousuke92 a écrit :@BahaBulle :

Ça voudrait dire qu'il faut que le texte commence et finisse à la même adresse que le texte d'origine ?
Dans le cas ou tu ne modifies (ou plutôt "adaptes") pas le pointeur en conséquence des modifications que tu as apporté au texte, oui ça plantera à moins que ton nouveau texte fasse exactement le même nombre d'octets.

De base il faut savoir que la moindre modification dans le jeu aura des conséquences sur d'autres données de ce dernier, il faut donc remonter la chaine de ces données liées à ta modification et les adapter en conséquence, le tout en tablant sur les normes de base, pour que tout fonctionne ;)


StorMyu a écrit :J'peux dire des bétises mais ça se trouve y'en a pas de pointeurs hein.
Il y a effectivement des cas ou les pointeurs ne sont pas utilisés pour l'affichage du texte mais à vrai dire c'est à voir sur le tas car pour le moment rien ne nous dit qu'il y'en a ou pas jusque là :)


BahaBulle a écrit :Neo-truc (désolé pour le nom, je suis sur mon tel), arrête de parler d'hexadécimal comme tu le fais.
Baha n'a pas tord :)

J'ajouterai que pour différentier une valeur décimale, d'une valeur hexadécimale, il faut ajouter devant cette dernière un "0x" de manière à ce qu'on sache que c'est bien une valeur hexadécimale qu'il s'agit.

Exemple : 10, c'est différent de 0x10

En décimal on aura : 0, 1, 2, 3, 4, 5, etc...
En hexadécimal on aura : 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, etc...


TheNeoKyousuke92 a écrit :D'après ce que j'ai compris sur les pointeurs (je me trompe peut-être ou certainement...), 1A00 serait le pointeur. Suivi de 0107 qui est la couleur Jaune. Est-ce que je me trompe ?
Attention à ne pas confondre les "pointeurs", et les "balises" qui sont 2 choses différentes et bien distincte l'une de l'autre
  • Une balise est un bout de code pouvant permettre diverses choses, on dira au plus simple, que pour exemple, le "retour ligne" que tu as trouvé, est une balise. Il en existe pour permettre de gérer tout un tas de choses, et selon le jeu en question on ne retrouvera pas forcément les mêmes balises, il faut étudier le texte et voir ce qu'il contient pour ça. Les balises n'ont pas de normes fixes dans un jeu, j'entends par là que tout dépend en gros de comment les développeurs ont codé le jeu et quelles balises ils ont décidés d'y intégrer ou non.

    Tu pourrais par exemple en avoir pour gérer du texte en couleur, en gras en italique un peu à la manière du bbcode sur un forum, ou en avoir pour faire tout un tas d'autres choses. Un morceau de texte proposant un choix à faire dans le jeu, peut très bien être géré avec un système de balises également.

    A toi de voir comment est construit la structure de ton texte, et de déterminer à quoi sert tel ou tel bout de code. Le mieux étant de faire tes test en direct et de voir ce que ça donne lorsque tu utilises telle ou telle balise. Tu peux aussi les deviner en observant l'affichage de ton texte à l'écran et en comparant avec le contenu des scripts du jeu.
  • Un pointeur est une adresse mémoire, c'est en quelque sorte un offset qui indique ou se trouve la donnée qu'il pointe. Dans le cas d'un morceau de texte, l'adresse donnée par le pointeur "pointera" sur le début du texte (et si il y a des balises de texte elles peuvent être incluses dans ces derniers bien évidement)

    Les pointeurs sont généralement répertoriés dans une table (ou un tableau) ce qui signifie donc qu'on en trouvera plusieurs à la suite, et dans la théorie, bien que ce ne soit pas non plus systématique, ces derniers sont classés dans un ordre croissant. Donc si pour exemple tu vois dans ton fichier plusieurs valeurs ressemblant à une liste d'adresses (puisque c'est ce que sont les pointeurs) de 32 bits (soit 4 octets) qui s'incrémentent, i se peut que ce soit une table de pointeurs.

    On les trouve généralement juste avant les textes (mais là encore ce n'est pas systématique, c'est à voir selon le cas).

    Une autre chose importante, chaque pointeur d'une même table se réfère toujours à la même adresse "zéro" de base. Cette adresse de référence peut être située n'importe ou mais généralement elle représentera un point de départ logique. L'astuce pour bien réussir à comprendre comment fonctionnent les pointeurs c'est de réussir à déterminer quelle est cette adresse 0x00 prise comme référence par tes pointeurs.

    Comme il s'agit d'un affaire de logique, celle-ci peut être le début du texte, le début du fichier, au début de fichier mais sans compter le header (donc si tu as un header qui fait 0x20 octets, il faut les soustraire à l'offset ou se trouve le début du texte pour retomber sur la valeur du pointeur), le début de la table des pointeurs, ou autre... Là encore c'est à déterminer selon le cas.

    Un exemple : Imaginons que l'on a dans tes textes 4 mots à la suite : "truc, bidule, machin, chose" tous séparés par un octet 0x00

    Chacun de ces mots est pointé dans ta table de pointeurs.

    Si on part du principe que l'adresse "zéro" prise en référence par ta table de pointeur est le début des textes, alors tu trouveras sur tes 4 premiers pointeurs (en 32bits stockés en little endian) les valeurs suivantes :
    1er pointeur => 0x00000000 (pour pointer sur "truc") => adresse "zéro"de départ pour les pointeurs
    2ème pointeur => 0x05000000 (pour pointer sur "bidule") => le mot "truc" fait 4 octets + l'octet 0x00 de séparation, ça nous donne 5 octets en tout, et c'est là que sera situé ton mot "bidule"
    3ème pointeur => 0x0C000000 (pour pointer sur "machin") => même principe que ci-dessus sauf qu'on à le mot truc + le mot bidule à prendre en compte cette fois-ci
    4ème pointeur => 0x13000000 (pour pointer sur "chose") => encore la même chose qu'au dessus, et ainsi de suite

    Un autre exemple, imaginons maintenant que l'adresse "zéro" est sur le début de la table des pointeurs, que cette dernière se' situe pile avant les textes, et qu'elle fait une taille de 0x150 octets, alors nos pointeurs seront :
    1er pointeur => 0x50010000 (pour pointer sur "truc") => adresse 0x150 soit l'adresse 0x00 de texte à laquelle ou ajoute la taille de la table des pointeurs pour obtenir l'adresse "zéro"
    2ème pointeur => 0x55010000 (pour pointer sur "bidule") => adresse 0x155 Même chose mais avec la taille de "truc" en plus
    3ème pointeur => 0x5C010000 (pour pointer sur "machin") => adresse 0x15C toujours la même logique mais avec "truc" + "bidule" ajouté
    4ème pointeur => 0x63010000 (pour pointer sur "chose") => adresse 0x163 etc.., même principe

    Note : Si tu ne comprends pas pourquoi les valeurs sont inversées dans l'exemple ci-dessus, go apprendre la différence entre "big endian" et "little endian" dans le tutoriel.

TheNeoKyousuke92 a écrit :comment on sait jusque où s'étend le header ?
Il faut savoir qu'ne ROM ou un ISO c'est différent, ils n'utilisent pas les mêmes normes.

Une ROM sera plus souvent d'un seul bloc (sauf pour les ROM NDS) alors qu'un ISO et composé d'une arborescence de sous-fichiers (c'est en quelque sorte une grosse archive avec pleins de fichiers dedans)

La ROM n'étant que d'un seul bloc, il est plus difficile de pouvoir l'étendre, c'est pour cette raison qu'il faudra souvent déplacer des blocs de données dedans dans le but de trouver de la place.

Pour ce qui est des ROM et ISO à arborescence, en revanche, eux c'est différent car un fichier est extensible du fait qu'il est assez indépendant, du coup il 'est généralement pas nécessaire de déplacer quoi que ce soit mais plutôt de déterminer le moyen qui va permettre l'extension du fichier et des sections qu'il contient (dans un 1er temps regarder dans le header des sections ou dans le header général du fichier peut suffire à faire ça moyennant qu'on arrive à analyser les données qu"'il contient)

Les normes de header ne sont donc pas les mêmes sur une rom ou un iso puisque comme expliqué par Hiei-, les ROM ont parfois un header au début, mais les ISO eux c'est différent car chaque fichier, sous fichier, section, est susceptible d'avoir son propre header.

Un header comme son nom l'indique est un en-tête qui contient diverses informations, on y trouve pour exemple l'ID du fichier (un code permettant d'en reconnaitre et en différencier le type), la taille de ce dernier, la tailles des sections qu'il contient etc.... On y trouve aussi très souvent la taille du header en question, bref tout un tas de données importantes sur le fichier en gros.

Pour ce qui st des ROM NDS, ces dernières possèdent tout comme les ISO, une arborescence de sous-fichiers.

Et concernant les ISO, ces derniers proviennent d'un support disque, et ont donc des ormes supplémentaires puisqu'ils sont divisés en secteurs, ce qui complique un poil la chose.


A la base il n'est donc pas recommandé d'aborder un 1er hack sur un ISO pour ce type de raisons, ça implique beaucoup plus de choses à connaitre avant de pouvoir espérer faire la moindre modification dessus. Le support PSX n'est donc pas vraiment ce qui se fait de mieux pour se faire la main :)

Actuellement il te manque encore beaucoup trop d'informations sur la structure de base de ton jeu, il va donc te falloir étudier tous les points cités ci-dessus avant d'espérer obtenir un résultat probant sur les modifications de base que tu souhaites réaliser dessus ;)
Dernière modification par Lyan le 23 mars 2013, 03:54, modifié 1 fois.
http://www.youtube.com/user/Lyan53
Image
- Avec les gens de cour, vos pareils don Salluste, je vous laisse et je reste avec mes chenapans. Je vis avec les loups, non avec les serpents.
- L'amour a dompté le loup ! Ôtez-lui l'amour, il redeviendra un loup.

Avatar de l’utilisateur
StorMyu
Parce que "StorMyu avant"!
Messages : 1232
Inscription : 25 nov. 2009, 00:25
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par StorMyu »

J'attend toujours que Kipy me fasse un topo sur la PSx avant de m'y mettre d'ailleurs.

Et sinon, 12 = 0x0C = 14o = 1100b
On peut se la faire dans tout les sens celle là, même si j'avoue que l'octal est pas vraiment utilisé pour nos cas.

De plus, je suis pas d'accord, une Rom à une arborescence. C'est pas parce qu'elle est pas générique (sauf sur la DS par exemple) que y'en a pas.
D'autant plus que tu le dis, tu bouges des blocs de données, donc tu bouges des fichiers. Alors ok c'est pas une arborescence à proprement parler vu que tu vois pas des dossiers mais certes.
Un header comme son nom l'indique est un en-tête qui contient diverses informations, on y trouve pour exemple l'ID du fichier (un code permettant d'en reconnaitre et en différencier le type), la taille de ce dernier, la tailles des sections qu'il contient etc.... On y trouve aussi très souvent la taille du header en question, bref tout un tas de données importantes sur le fichier en gros.
Pareil pour les roms, je peux très bien m'amuser à codé des fichiers sans header pour un homebrew Psx et ça marchera très bien.
Je suis contre cette idée du générique, moi on m'a toujours dis, chaque jeu est différent, bah c'est pareil ici, j'ai des graphismes sur un de mes projet NDS qui sont des fichiers .ncgr sans header par exemple, ça les empêche pas d'être des fichiers Tiles.
Pareil que sur Tales of Destiny 2 sur PSP, beaucoup de fichiers sont headerless, bah c'est quand même un Iso que je sache...

Puis on peut comparé ça aux archives sur les Isos (et même rom), j'vais pas appeler ça une ROM parce que c'est un bloc de donnée sans spécialement de header.


Pour tout le reste j'suis d'accord avec toi ^^
Je suis pointilleux sur les termes mais ça me fout en vrac quand les gens balancent des phrases à rallonges pour dire un truc tout simple alors j'aime bien que les nouveaux soient sur le droit chemin.

Déjà taleur il a parlé de "code" alors qu'il parlait de donnée ça m'a foutu une gifle (et m'a donnée envie de lui en collée une par la même occaz)

Oui j'suis bourré ! Et alors, c'est mon anniversaire ! (enfin c'était, je vous flûte !)

Tiens, en parlant de ça, qui me pige le format d'archive des Namco.BDI utilisé par les derniers Tales Of sur PSP ? j'ai toujours rien trouvé dessus et ça m'avait pris la tête.
Tales of the world: Radiant Mythology 2 ou 3 / Tales of the Heroes.
il me gave ce format, ET IL A PAS DE HEADER !

Avatar de l’utilisateur
Messis-Summa
Amateur Floodeur
Messages : 95
Inscription : 09 juin 2007, 16:35
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par Messis-Summa »

TheNeoKyousuke92 a écrit : Image
Sur cette image tu as ouvert l'iso avec un éditeur hexadécimale alors que ce n'est pas la chose à faire, il faut avant tout extraire son contenu et analyser les fichiers qui y sont présents.
敵でも味方でもない。

Avatar de l’utilisateur
Lyan
Dieu Suprême du flood
Messages : 1441
Inscription : 19 nov. 2007, 04:56
Localisation : Raxacoricofallapatorius
Contact :
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par Lyan »

Rhôôoo StorMyu, faut toujours que tu trouves un truc à redire lorsque je rédige un pavé pour tenter d'expliquer diverses bricoles :P
StorMyu a écrit :De plus, je suis pas d'accord, une Rom à une arborescence.
Je cite :
Une ROM sera plus souvent d'un seul bloc (sauf pour les ROM NDS) alors qu'un ISO et composé d'une arborescence de sous-fichiers (c'est en quelque sorte une grosse archive avec pleins de fichiers dedans)
Les termes en rouge sont particulièrement pertinent pour répondre à ton désaccord

Pour le 1er c'est le cas pour pratiquement tous les vieux jeux, pour le second j'ai bien précisé de "sous-fichiers", je n'ai en aucun cas dit qu'il ne pouvait pas y avoir une arborescence dans les données, ça aurait d'ailleurs été débile de ma part si ça avait été le cas puisque rien que le fait qu'un jeu soit "structuré" peu importe le support, prouverait le contraire.

StorMyu a écrit :C'est pas parce qu'elle est pas générique (sauf sur la DS par exemple) que y'en a pas.
Je le sais très bien d'ailleurs je te l'avais démontré sur une ROM GBA ou y'avait des sous fichiers compressés en lz type 10 dedans il y a quelques années en arrière et tu avais été le 1er étonné que ce soit construit comme ça, je n'ai donc jamais affirmé à 100% le contraire non plus :)

StorMyu a écrit :D'autant plus que tu le dis, tu bouges des blocs de données, donc tu bouges des fichiers.
Là par contre, non... je peux tout aussi bien bouger un bloc de données dans un fichier, tout dépend de comment il est construit, de même pour la ROM, mais côté ROM NES ou SNES, on reste sur du "en un bloc" découpé en BANK et sans fichier à proprement parler, c'est une autre manière d'aborder un hack et il n'y a aucun sous fichier clairement défini mais juste des BANK et des blocs de données

StorMyu a écrit :Pareil pour les roms, je peux très bien m'amuser à codé des fichiers sans header pour un homebrew Psx et ça marchera très bien.
Je suis contre cette idée du générique, moi on m'a toujours dis, chaque jeu est différent, bah c'est pareil ici, j'ai des graphismes sur un de mes projet NDS qui sont des fichiers .ncgr sans header par exemple, ça les empêche pas d'être des fichiers Tiles.
Pareil que sur Tales of Destiny 2 sur PSP, beaucoup de fichiers sont headerless, bah c'est quand même un Iso que je sache...
Mais quel est le rapport avec ce que je disais ??
Je n'ai jamais dit qu'il ne pouvait pas y avoir de fichiers sans header dans un ISO ou une ROM à arborescence de fichiers banane... Ou est-ce que tu as été pêcher ça ^^
Là je tente juste d'expliquer ce qu'est un header dans les grandes lignes, parce que c'est bien d'avoir le terme "header" qui revient souvent, mais quand on ne sait pas encore ce que ça peut être ça n'aide pas vraiment à comprendre :P

D'ailleurs je cite :
Les normes de header ne sont donc pas les mêmes sur une rom ou un iso puisque comme expliqué par Hiei-, les ROM ont parfois un header au début, mais les ISO eux c'est différent car chaque fichier, sous fichier, section, est susceptible d'avoir son propre header.
Ce qui est d'aileurs valable pour les ROM à arborescence de sous fichiers bien que je ne l'ai pas précisé (c'est maintenant chose faite ^^)

StorMyu a écrit :Puis on peut comparé ça aux archives sur les Isos (et même rom), j'vais pas appeler ça une ROM parce que c'est un bloc de donnée sans spécialement de header.
Gné ?? J'ai dit ça moi ?

StorMyu a écrit :Je suis pointilleux sur les termes mais ça me fout en vrac quand les gens balancent des phrases à rallonges pour dire un truc tout simple alors j'aime bien que les nouveaux soient sur le droit chemin.
Depuis le temps que je traine dans le coin tu sais très bien que je ne sais pas faire court et concis, j'aime les détails, mais si tu peux lui expliquer de cette manière là, y'a pas de souci pour moi, vas-y lâche-toi :-D

StorMyu a écrit :Déjà taleur il a parlé de "code" alors qu'il parlait de donnée ça m'a foutu une gifle (et m'a donnée envie de lui en collée une par la même occaz)
Euh, il est là que depuis 2 ou 3 jours, tu pourrais lui laisser quand même un peu le temps pour s'adapter à tous les termes techniques qu'on emploie ? :P

StorMyu a écrit :Oui j'suis bourré ! Et alors, c'est mon anniversaire ! (enfin c'était, je vous flûte !)
Oui à priori il semblerait ^^
Là pour le coup ton intervention risque de lui embrumer la tête plus qu'autre chose vu que tu laisses légèrement entendre via celle-ci, que je raconte des grosses conneries plus grosses que moi :mdr:

Du coup il risque de se demander qui a raison ou qui à tord alors qu'il ne me semble pas avoir dis trop de conneries ^^

StorMyu a écrit :il me gave ce format, ET IL A PAS DE HEADER !
Un exemple parmi des milliers ^^
http://www.youtube.com/user/Lyan53
Image
- Avec les gens de cour, vos pareils don Salluste, je vous laisse et je reste avec mes chenapans. Je vis avec les loups, non avec les serpents.
- L'amour a dompté le loup ! Ôtez-lui l'amour, il redeviendra un loup.

Avatar de l’utilisateur
Inexpugnable
Dieu Suprême du flood
Messages : 956
Inscription : 30 avr. 2010, 22:11
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par Inexpugnable »

Lyan a écrit :[*]Un pointeur est une adresse mémoire, c'est en quelque sorte un offset qui indique ou se trouve la donnée qu'il pointe. Dans le cas d'un morceau de texte, l'adresse donnée par le pointeur "pointera" sur le début du texte (et si il y a des balises de texte elles peuvent être incluses dans ces derniers bien évidement)
Ça me choque d'entendre parler d'offset, surtout que ça complique les choses pour rien. J'aurais plutôt parlé de référence.
Chaméléon. Est-ce que ne rien prendre. Ah oui mon coeur c'est vrai. Qu'est-ce que ça, qu'est-ce que c'est ? Donnez-moi ton argent. Donnez-moi ton fromage. Je donne tu mon amour et je allume ton chauffage.

https://www.youtube.com/watch?v=9eYAyYo5638

Avatar de l’utilisateur
TheNeoKyousuke92
Amateur Floodeur
Messages : 52
Inscription : 01 mai 2012, 15:21
Localisation : Belgique
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par TheNeoKyousuke92 »

Bonjour tout le monde !

Je vous remercie tous pour vos explications et m'excuse pour mon incompétence actuelle dans ce domaine. Comme me le conseil Messis-Summa et que tout le monde me l'a conseillé d'ailleurs, je vais extraire tous les fichiers de l'ISO avec CDmage et travailler rien que sur le fichier contenant le texte. Je vais réessayer de faire une modification mineure pour voir si j'ai bien compris comment utiliser CDmage (Merci à SWAP pour son explication). Après, je me concentrerai sur mon fichier en suivant vos conseils précieux en espérant que je comprendrai sans trop vous déranger. D'ailleurs, je tiens à m'en excuser !!! :(

Merci grandement pour vos aides !

EDIT :

J'ai ouvert Digimon World.bin dans CDmage et extrait tous les dossiers et fichiers du jeu dans un dossier. J'ai modifié le fichier DG.SCN contenant les textes en changeant la couleur d'un texte. J'ai relancé CDmage en ré-ouvrant Digimon World.bin, fait clic droit sur le fichier DG.SCN d'origine, "Import Files" et sélectionné le DG.SCN modifié. Un message me dit que l'import a bien été effectué avec succès mais quand je veux ré-enregistré l'image, il me propose déjà de le faire en .cue et quand je fais enregistrer, il me met une erreur comme quoi il ne peut pas ré-écrire le fichier. Pourtant les deux fichiers font la même taille. Je ne sais pas comment faire pour ré-insérer le fichier dans l'image.bin.

Je viens de relire les messages précédent et j'avais mal compris StorMyu. Vous me conseillerai quoi pour extraire et insérer des fichiers d'une image CD ?
Image

Jeux en cours :

[PS] Digimon World
[PS3] Naruto - Ultimate Ninja Storm
[iPhone] Final Fantasy I

Avatar de l’utilisateur
StorMyu
Parce que "StorMyu avant"!
Messages : 1232
Inscription : 25 nov. 2009, 00:25
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par StorMyu »

Ouais Lyan, on va juste zapé, j'ai dis nawak xD
Mais j'ai passé un super anniversaire par contre =p

Et désolé TheNeoKyousuke92, mais lua-interface serait pas mal si tu savais t'en servir (et pour moi c'est toujours pas le cas lol)

Edit:
Là pour le coup ton intervention risque de lui embrumer la tête plus qu'autre chose vu que tu laisses légèrement entendre via celle-ci, que je raconte des grosses conneries plus grosses que moi :mdr:

Du coup il risque de se demander qui a raison ou qui à tord alors qu'il ne me semble pas avoir dis trop de conneries ^^
Jamais voulu dire ça, mais j'voulais juste dire un p'tit truc, et j'suis parti en vrille en fait xD

De plus pour les phrases à rallonge je parlais pas pour toi Lyan, moi j'adore tes pavés ^^
Dernière modification par StorMyu le 23 mars 2013, 14:05, modifié 1 fois.

Avatar de l’utilisateur
TheNeoKyousuke92
Amateur Floodeur
Messages : 52
Inscription : 01 mai 2012, 15:21
Localisation : Belgique
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par TheNeoKyousuke92 »

StorMyu a écrit :Et désolé TheNeoKyousuke92, mais lua-interface serait pas mal si tu savais t'en servir (et pour moi c'est toujours pas le cas lol)
J'ai voulu apprendre le langage LUA un jour, mais je l'ai pas fait. Connais-tu un autre logiciel pour extraire et insérer les fichiers ? Enfin, Extraire, j'y arrive avec CDmage, mais pas la ré-insertion. Tout ce qu'il me faudrait donc, c'est un programme qui permet d'insérer correctement un fichier dans une image CD.

A part ça, comment on remarque si il y a un header ou pas ainsi que des pointeurs. D'après ce que j'ai compris, les octets avant ceux du texte sont des balises. 1a00, je ne sais pas encore ce qu'elle fait, car j'ai changé en 0b00 et ça n'a rien modifier dans le cadre de dialogue. 0107 fait en sorte que ce qui suit soit en jaune. Le texte se fini par un 0d00, qui est le retour à la ligne, suivit lui même de 0000 qui à mon avis, met fin au bloc texte. Un truc que j'ai remarqué dans le début du fichier, c'est qu'il y a des séquences qui se suivent où seul une partie d'octets changent.

Image

A l'adresse 0x380, il y a la "valeur" 332e alors qu'en 0x3A0 c'est 342e et ainsi de suite. Je sais pas si ça doit m'apprendre quelque chose, mais en tout cas, ça m'a intrigué.
Image

Jeux en cours :

[PS] Digimon World
[PS3] Naruto - Ultimate Ninja Storm
[iPhone] Final Fantasy I

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6482
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par BahaBulle »

Cdmage fonctionne très bien dans un premier temps.
Une fois ton fichier inséré, je ne suis pas sûr que tu doives réengistrer l'image entière. C'est fait automatiquement il me semble.
Sinon faut l'enregistrer sous un autre nom vu sue l'ISO d'origine est verrouillée par cdmage.

Hiei-
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par Hiei- »

TheNeoKyousuke92 a écrit :Bonjour Hiei- !

Comment reconnaissons-nous les pointeurs alors ? Car dans le tutoriel sur les pointeurs (NES/SNES), ils disent qu'il faut faire un calcul avec un nombre qu'on obtient en sachant de combien d'hexadécimal est composé le header ?

Je demande ça car je voudrai bien "rajouter" de la place dans les textes pour pouvoir les traduire correctement. Je sais qu'un bloc texte se termine par 0D00 (Retour à la ligne) et souvent suivi de 0000 (???). Et qu'un bloc texte commence par 1a00 suivi d'un code hexadécimal de couleur.
Justement, sur ces consoles, on bosse sans header, c'est pour ça que lorsqu'il y en a un sur la rom, on le déduit lorsqu'on calcule le pointeur (mais le plus simple, c'est d'utiliser une rom sans header, et donc, dans ce cas, on zappe juste la partie où on soustrait l'header).

Dans ton cas, ben tu prends l'adresse de base, tu la retournes par paire, comme c'est expliqué, tu gardes les 8 derniers octets (si c'est des pointeurs 32-bits la plupart du temps sur PSX, et tu auras ton pointeur de la forme WW XX YY ZZ).

Et sinon, quand les gens disent de commencer par un jeu NES (tant qu'à faire même, un déjà trad, pour lesquels on est sur que c'est faisable facilement), c'est justement pour assimiler les notions de bases, tout ce qui est pointeurs et autres.

Zelda 2, de mémoire, est un bon jeu pour débuter, tout est en clair je crois, et tu n'as même pas besoin de traduire le jeu, juste essayer de localiser les textes, en modifier, et pouf.

Ca va t'apprendre à chercher du texte, à calculer des pointeurs (et donc à quoi les pointeurs servent), à créer une table (balises et autres).

C'est un peu bidon comme exemple, mais c'est comme pour conduire une voiture de sport, mieux vaut commencer par apprendre à conduire sur un petit modèle avant de passer à la voiture de sport :wink:

Avatar de l’utilisateur
TheNeoKyousuke92
Amateur Floodeur
Messages : 52
Inscription : 01 mai 2012, 15:21
Localisation : Belgique
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par TheNeoKyousuke92 »

BahaBulle a écrit :Cdmage fonctionne très bien dans un premier temps.
Je n'ai pas voulu dire que CDmage ne fonctionnait pas mais surtout que je n'arrivais pas à le faire fonctionner.

BahaBulle a écrit :Une fois ton fichier inséré, je ne suis pas sûr que tu doives réengistrer l'image entière. C'est fait automatiquement il me semble.
Apparemment si. Au début justement, je n'enregistrais pas après avoir inséré le fichier. Et rien n'était changé. J'ai justement eu le tilt après que je n'enregistrais pas l'image CD donc j'ai essayé de ré-enregistré l'image CD et ça m'a affiché une erreur comme quoi il ne pouvais pas ré-écrire dessus.
BahaBulle a écrit :Sinon faut l'enregistrer sous un autre nom vu sue l'ISO d'origine est verrouillée par cdmage.
J'en continue l'explication du dessus. J'ai donc essayé en changeant le nom, la même erreur apparaît mais l'image CD se crée quand même. J'ai essayé de le lancé mais il bug à la deuxième vidéo de la console (logo PlayStation).
Hiei- a écrit :Et sinon, quand les gens disent de commencer par un jeu NES (tant qu'à faire même, un déjà trad, pour lesquels on est sur que c'est faisable facilement), c'est justement pour assimiler les notions de bases, tout ce qui est pointeurs et autres. Zelda 2, de mémoire, est un bon jeu pour débuter, tout est en clair je crois, et tu n'as même pas besoin de traduire le jeu, juste essayer de localiser les textes, en modifier, et pouf. Ca va t'apprendre à chercher du texte, à calculer des pointeurs (et donc à quoi les pointeurs servent), à créer une table (balises et autres).
Je suppose que j'ai pas le choix, je vais commencer par Zelda 2 sur NES dans ce cas. L'objectif de se "test" est de me faire trouver les textes, créer une table, afficher les textes, trouver les pointeurs et comprendre leurs fonctionnement. A quel résultat final veux-tu que j'aboutisse pour dire que j'ai un bon objectif à faire pour être sûr que si j'y arrive, j'ai compris les pointeurs et leurs fonctionnement ?

Merci d'avance !

EDIT :

Je vais donc vous montrer les résultats de mon avancement ! (Médiocre...)

1. Recherche d'un texte dans la ROM.

J'ai donc lancé le jeu avec l'émulateur FCEUXD SP, j'ai commencé un peu le jeu jusqu'à la première ville et parlé à un PNJ pour avoir un dialogue qui dit "DESOLE. JE NE SAIS PAS.". J'ai alors lancé SearchR X et cherché "DESOLE" dans la ROM et trouvé qu'il se situais en offset 58448 ($E450) et que A=DA. J'ai donc réussi à créer ma table avec l'alphabet majuscule et à afficher les textes dans mon éditeur hexadécimal.

2. Découverte du header et recherche des pointeurs.

D'après le tutoriel, le header d'une ROM de jeu NES serait :

Code : Tout sélectionner

4E 45 53 1A 08 0E 10 00 00 00 00 00 00 00 00 00
4E 45 53, ces trois premiers octets forment le mot NES en ASCII standard.

Pour essayer de trouver la table de pointeurs, je vais prendre l'adresse d'une début de ligne qui sera $E440 :

Image

Dans ce jeu, $FF à l'air d'être la fin de section qu'on trouve en adresse $E467. Donc en $E468 devrait commencer un nouveau bloc de texte. Je soustrait l'offset du header et que j'inverse les deux derniers octets du résultat, j'obtiens 58E4. Rien que déjà ici je sais que j'ai un problème avec mon test car je devrait regarder où se trouve l'octer 4E dans ma ROM, mais E4 est la lettre K dans ma table.

Enfin, j'ai déjà un peu avancé. Pas loin mais un peu. Quelqu'un peut-il m'expliquer ce qui cloche dans mon "test" ?

Merci d'avance ![/b]
Image

Jeux en cours :

[PS] Digimon World
[PS3] Naruto - Ultimate Ninja Storm
[iPhone] Final Fantasy I

Hiei-
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par Hiei- »

Ben, déjà, le but pourrait être de modifier un texte (donc recherche des textes et création de la table).

Ensuite, de trouver les pointeurs des textes, et d'essayer d'intervertir deux phrases dans le jeu sans déplacer le texte dans la rom (les pointeurs permettent ça, il suffit de trouver le pointeur de la phrase A, puis le pointeur de la phrase B et d'inverser les valeurs des deux pointeurs).

Si tu arrives à le faire et à comprendre ce que tu as fait, c'est déjà un premier pas vers la compréhension des pointeurs.

Ensuite, tu peux, tenter d'agrandir un texte en rapetissant le suivant, et essayer que les deux phrases fonctionnent dans le jeu (si tu modifies les pointeurs en conséquence, les deux phrases s'afficheront, dans le cas contraire, sans modif de pointeurs, seule la première phrase fonctionnera).

Et avec les tutoriels disponibles sur la T.R.A.F, ça devrait être assez rapide à faire.

En très gros, un pointeur, c'est une "valeur" qui indique au jeu où aller chercher le texte dans le rom. Il commence en général sur la première lettre de la phrase, mais peut commencer avant, si le jeu utilise des balises de couleur, des balises pour ouvrir une fenetre de dialogue ou autre.

Note : Zelda 2 n'utilise que des majuscules, donc pour rechercher du texte avec une recherche relative et aussi créer ta table, il ne faut évidemment utiliser que des majuscules.

Edit : Je n'ai pas compris ton truc avec l'header ? Ce que contient l'header ne nous intéresse pas, seule sa taille nous intéresse 16 octets (10 en hexadécimal, et comme tes calculs vont utiliser des valeurs hexadécimal, c'est 10 qu'il faut retenir, qu'on note 0x10 comme l'a dit "je-ne-sais-plus-qui" pour le différencier et montrer qu'on parle d'une valeur hexadécimale). Et elle nous intéresse uniquement car il faut la retrancher dans le calcul du pointeur.

Si tu veux, il y a ce tutoriel pour les débutants qui parle des pointeurs : http://traf.romhack.org/index.php?p=tutos&tid=29

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6482
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par BahaBulle »

TheNeoKyousuke92 a écrit :
BahaBulle a écrit :Une fois ton fichier inséré, je ne suis pas sûr que tu doives réengistrer l'image entière. C'est fait automatiquement il me semble.
Apparemment si. Au début justement, je n'enregistrais pas après avoir inséré le fichier. Et rien n'était changé. J'ai justement eu le tilt après que je n'enregistrais pas l'image CD donc j'ai essayé de ré-enregistré l'image CD et ça m'a affiché une erreur comme quoi il ne pouvais pas ré-écrire dessus.
Je viens d'essayer et je n'ai pas eu besoin d'enregistrer l'iso. Ce que j'ai fais :
1. Lancé cdmage et ouvert le .cue
2. Exporté un fichier
3. Fais une modification dans le fichier exporté
4. Importé le fichier modifié à la place de l'autre (File imported successfully)
5. Fermé cdmage
Et quand j'ouvre l'iso à nouveau dans cdmage, ma modif est bien présente.

TheNeoKyousuke92 a écrit :Dans ce jeu, $FF à l'air d'être la fin de section qu'on trouve en adresse $E467. Donc en $E468 devrait commencer un nouveau bloc de texte. Je soustrait l'offset du header et que j'inverse les deux derniers octets du résultat, j'obtiens 58E4. Rien que déjà ici je sais que j'ai un problème avec mon test car je devrait regarder où se trouve l'octer 4E dans ma ROM, mais E4 est la lettre K dans ma table.
Ton calcul semble bon mais tu mélanges plusieurs choses.
Il faut bien comprendre qu'une rom contient plusieurs types de données : des graphismes, des textes et du code.

L'éditeur hexadécimal ne sait pas faire la différence entre ces données, il affiche tout sous forme d'octet. Et la représentation ASCII des octets (avec ou sans table de correspondance) ne sert que pour les textes.
Ton E4=K, ne va te permettre que d'identifier du texte. Si tu cherches autre chose, ça n'a aucune importance que ton éditeur hexa affiche un K.

Donc si ton calcul te donne 58E4, tu dois rechercher ces octets en tant qu'octet et pas en tant que texte, il n'y a aucun rapport.
Il faut rechercher cette suite d'octet dans ton éditeur hexa.

Avatar de l’utilisateur
TheNeoKyousuke92
Amateur Floodeur
Messages : 52
Inscription : 01 mai 2012, 15:21
Localisation : Belgique
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par TheNeoKyousuke92 »

Merci Hiei de m'avoir donné un but. Je vais essayer d'obtenir le rendu dont tu parles et je reviens dès que c'est fait ou dès que j'ai une question ! :D
BahaBulle a écrit :Je viens d'essayer et je n'ai pas eu besoin d'enregistrer l'iso. Ce que j'ai fais :
1. Lancé cdmage et ouvert le .cue
2. Exporté un fichier
3. Fais une modification dans le fichier exporté
4. Importé le fichier modifié à la place de l'autre (File imported successfully)
5. Fermé cdmage
Et quand j'ouvre l'iso à nouveau dans cdmage, ma modif est bien présente.
C'est le fichier .cue qu'il faut ouvrir ? Je ne savais pas. Je viens de tester pendant que j'écrivais le message, j'ai fait comme toi, mais le changement n'est pas effectué... C'est mon PC qui n'aime pas CDmage ? :-?
BahaBulle a écrit :Donc si ton calcul te donne 58E4, tu dois rechercher ces octets en tant qu'octet et pas en tant que texte, il n'y a aucun rapport.
Il faut rechercher cette suite d'octet dans ton éditeur hexa.
Il n'y en a pas, quand je recherche 58E4, il ne me surligne que trois 78E4...

EDIT : ZELDA II (SUIVI DU TUTORIEL)


Je lance donc Zelda II par mon émulateur FCEUXD SP et je trouve un PNJ qui me dit :
:
Image
Je lance une recherche à l'aide de SearchR X de DESOLE et ce dernier me dit qu'il se trouve à l'offset E450 et que DA=A :
:
Image
Je crée ma table à l'aide de cette donnée et trouve toutes les autres lettre majuscule de l'alphabet :
:
Image
J'ouvre ma ROM et ma table dans mon éditeur hexadécimal et je vais à l'offset E450 où je retrouve bien mon texte :
:
Image
Commençons nos calculs :
D vaut E450
J vaut E457
S vaut E45D

Je vire tout sauf les 4 derniers chiffres, c'est-à dire que je ne vire rien du tout !
Comme c'est un header de 10 (normalement...), on le retranche :
D=E440
J=E447
S=E44D

Vu que la NES fait les calculs à l'envers, j'inverse les octets et j'obtiens :
Pointeur de D = 40E4
Pointeur de J = 47E4
Pointeur de S = 4DE4

J'ai donc cherché dans mon éditeur hexadécimal la valeur 40E447E44DE4 et il me dit qu'aucun "string" n'a été trouvé... j'ai bien coché hex pour la recherche. J'ai donc essayé 40E4 seul et même chose. Je ne vois pas où est mon erreur... à moins qu'il n'y ai pas de header ou que ce dernier prend plus de 16 octets. Enfin, je vous laisse lire cette grande tartine et voir ce que vous en pensez. :-P
Image

Jeux en cours :

[PS] Digimon World
[PS3] Naruto - Ultimate Ninja Storm
[iPhone] Final Fantasy I

Avatar de l’utilisateur
Messis-Summa
Amateur Floodeur
Messages : 95
Inscription : 09 juin 2007, 16:35
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par Messis-Summa »

Le but d'un pointeur est de pointé à chaque début de phrase, imaginons que la phrase fait 32 caractères et que la deuxième phrase en fait 18.

Dans l'exemple qui suit la table des pointeurs commence à 0x00 de ce premier pointeur au deuxième il y a les 32 caractères de la première phrase qui sont rajoutés donc ça nous fait 0x00+0X20=0x20 , puis par la suite les 18 caractères de la deuxième phrase ce qui donne 0x20+0x12=0x32 et ainsi de suite pour les autres phrases qui se suivent dans le jeu.
敵でも味方でもない。

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6482
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par BahaBulle »

En général, tu as un pointeur par phrase et pas un pointeur par mot ou par ligne.
Donc tu as E450 pour ta phrase. Le suivant doit être E467 pour la phrase suivant, à savoir "Chaque ville..." et ainsi de suite.

Ensuite, le header NES est toujours présent donc ton calcul est bon.
Le seul problème, c'est que la NES, c'est le mal surtout pour les débutants :D
Je ne comprends pas vraiment pourquoi on oriente vers de la NES. A mon avis une Hirom SNES est beaucoup plus simple à aborder en terme d'adressage de données. Bref.

Il faut savoir que la rom n'est pas chargée entièrement en mémoire (RAM) parce qu'il n'y a pas assez de place. Seulement quelques morceaux sont donc chargés à chaque fois.
Et la RAM est à une adresse fixe qui doit être de 0x8000 à 0xFFFF (si ma mémoire est bonne).

Exemple un peu bidon : imaginons que le jeu charge le bloc qui commence en 0xE000 (dans ta rom), ben, il va le charger en 0x8000. Ce qui veut dire que si tu avais du texte en 0xE000, son pointeur ne serait pas E000 mais 8000 puisqu'un pointeur pointe toujours une adresse en mémoire (faire attention s'il s'il s'agit de pointeur relatif mais c'est relativement rare sur NES il me semble).

Donc quand tu recherches un pointeur NES, il faut partir du principe que tes données peuvent se trouver n'importe où en RAM.
En gros, si on prend ton texte en E440, il faut remplacer le E, par 8 ou 9 ou A ou B ou C ou D ou E ou F. Et donc rechercher les valeurs (inversées) : 4084, 4094, 40A4, 40B4, 40C4, 40D4, 40E4, 40F4.

Tout ceci n'est pas forcément entièrement exact mais l'idée est là. Je ne suis pas assez calé sur la NES pour être précis.

Et sinon pour cdmage, prend un autre outil, ultraiso ou je ne sais quoi d'autre. Ce n'est pas le seul.

Avatar de l’utilisateur
TheNeoKyousuke92
Amateur Floodeur
Messages : 52
Inscription : 01 mai 2012, 15:21
Localisation : Belgique
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par TheNeoKyousuke92 »

Bonjour tout le monde !

Est-ce toujours le troisième caractère qu'il faut changer ? Si oui, faut-il toujours remplacer le troisième caractère par un de ces caractère (8, 9, A, B, C, D, E ou F) ou peut-on aussi les remplacer par les autres (1, 2, 3, 4, 5, 6 ou 7) ? J'ai trouvé 14 fois "4084". Étonnamment, une grande série d'octets le suivant se ressemblent à chaque fois. Maintenant, comment savoir lequel des 14 correspond à celui de la phrase ? J'ai aussi trouvé 2 fois "4094", 6 fois "40A4", 1 fois "40B4" et 14 fois "40C4" (également suivi des même octets d'après ce que j'ai vu en survolant).

Je suppose que dans ces paires d'octets se trouve la paire qui correspond au pointeur de la phrase, n'est-ce pas ? Pour savoir c'est lequel, dois-je remplacer le "40X4" par "41X4" ? D'après ce que j'en ai compris du tutoriel, si je tombe sur le pointeur et que je fais cette modification, il ne m'affichera pas la première lettre mais la deuxième. Est-ce comme ça qu'on trouve les pointeurs de chaque fenêtre de dialogue ?
Image

Jeux en cours :

[PS] Digimon World
[PS3] Naruto - Ultimate Ninja Storm
[iPhone] Final Fantasy I

Avatar de l’utilisateur
cloud
Maître Suprême Floodeur
Messages : 476
Inscription : 29 janv. 2008, 00:07
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par cloud »

Bon je te remets mon lien où j’explique un peu les pointeurs avec un exemple très très simple.

Pour reconstruire ton iso PSX, vu que cdmage ne marche pas, je te conseil CDgen PSX qui n'est pas legal, mais fichtrement efficace.
Avec une recherche google tu le trouveras facilement je pense.

Pour Zelda j'ai rien à dire, j'ai jamais mis mon nez dans un jeu NES ou SNES :-)
Patch de traduction Française de Tales of Vesperia PS3 :
https://mega.nz/#F!QqZjwJIB!puHFECuTzrnLtPBsi9318A

Patch traduction Française Nine Hours Nine Persons Nine Doors NDS :
https://mega.nz/#F!E2J0gYBL!JrF2xLWi4FmqBXUPPtNVYw

Avatar de l’utilisateur
TheNeoKyousuke92
Amateur Floodeur
Messages : 52
Inscription : 01 mai 2012, 15:21
Localisation : Belgique
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par TheNeoKyousuke92 »

Bonjour cloud !

J'ai bien compris ce que tu expliques suite à la recherche du texte à partir d'un pointeur, le seul problème c'est que dans mon cas, je dois justement trouver le pointeur à partir du texte... du moins c'est ce que j'essaie de faire. D'après BahaBulle, mon calcul est bon. Sauf que je tombe sur plusieurs octets pouvant être le dit ponteur, c'est ça justement que je ne sais pas comment savoir lequel de ces +/- 30 pointeurs et celui de mon texte.

Un grand merci pour ce lien, je ne manquerai pas de m'y référé souvent !
Image

Jeux en cours :

[PS] Digimon World
[PS3] Naruto - Ultimate Ninja Storm
[iPhone] Final Fantasy I

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6482
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [HACK] Début dans la traduction de jeux vidéo

Message non lu par BahaBulle »

Ben fais comme tout le monde, fais des tests. T'en modifie un, tu regardes dans le jeu si ton texte est modifié.

Sinon tu peux regarder le pointeur de la phrase suivante. Si tu trouves les 2 à la suite, tu as une chance qu'il s'agisse de la table de tous les pointeurs de ton bloc de texte.


Répondre