Besoin d'aide, pointeurs God Eater Burst

Une question en rapport avec le ROMHacking ?
Dans cette section nous tenterons de vous conseiller ou de partager nos connaissances, bien entendu dans la limite de nos compétences et de notre disponibilité.

Besoin d'aide, pointeurs God Eater Burst

Message non lupar Plop23 » Vendredi 4 Mai 2012 à 22:33:34

Voilà, je suis dans une team qui traduit déjà 2 jeux de DS (Rune Factory 2 & Rune factory 3).
Pendant mon temps libre je joue régulièrement à God Eater Burst sur PSP.
Je me suis intéressé aux fichiers qui composait ce jeu (j'aime bien bidouiller ^^ ), et je suis bloqué, j'ai trouvé la totalité des fichiers contenant les dialogues, je suis sûr que les pointeurs sont présents dans ces fichiers, mais débutant dans le monde du RomHacking, j'aimerais que l'on m'explique plus ou moins comment repérer ceux spécifiques a ce jeu et comment repointer pour faire 2 ou 3 modifications sympas pendant mon temps libre, comme par exemple, les menus, objets, quêtes, et pourquoi pas histoire.
Voici quelques fichiers contenant des textes :
http://www.mediafire.com/?cdb858sbumt1one

Merci de votre aide ;)
Plop23
 
Messages: 13
Enregistré le: Dimanche 4 Septembre 2011 à 13:01:47
Genre: Non spécifié

Re: Besoin d'aide, pointeurs God Eater Burst

Message non lupar pinktagada » Vendredi 4 Mai 2012 à 22:55:14

[HS] Bravo pour vous patchs de Rune factory ! [/HS]
Avatar de l’utilisateur
pinktagada
 
Messages: 502
Âge: 41
Enregistré le: Lundi 22 Novembre 2010 à 21:32:31
Localisation: Asgard
Genre: Femme

Re: Besoin d'aide, pointeurs God Eater Burst

Message non lupar Plop23 » Samedi 5 Mai 2012 à 8:25:27

Thanks :D ^^
Plop23
 
Messages: 13
Enregistré le: Dimanche 4 Septembre 2011 à 13:01:47
Genre: Non spécifié

Re: Besoin d'aide, pointeurs God Eater Burst

Message non lupar Lyan53 » Dimanche 6 Mai 2012 à 18:46:37

Sorry de ne pas avoir répondu avant mais je rentre de week end

Alors, pour tes fichiers, j'ai z'yeuté vite fait et ça semble être des archives contenant plusieurs sous fichiers qui contiennent eux mêmes des textes (ou autres infos)

Bref, là j'ai pas encore récup toutes mes facultés ( :P )et j'ai pas les neurones assez en phase pour te dire de quoi il en retourne assurément, mais j'ai (il me sembe) déjà repéré l'index de l'archive dans le fichier du header (classique) et chaque entrée semble etre sur 0x14 octets avec des adresses et des tailles (j'ai pas encore trouvé toute la logique exacte de fonctionnement, juste repéré certaines valeurs correspondantes)

Pour ce qui est des pointeurs, ces derniers se trouvent dans les sous-fichiers de texte juste après leur header, et c'est du très basique, soit du 32 bits LE (4 octets par pt, stockés en Litlle Endian), mais pour pouvoir éditer les fichiers, faut déjà comprendre comment fonctionne l'archive qui les contient dans le but de pouvoir espérer les étendre

ça me rappelle un peu le style d'archive qu'il y avait dans persona 3 et 4 sur ps2 bien que ça semble de prime abord, plus simple à aborder


Bref je z'yeuterais ça plus attentivement à tête plus reposée et te refilerais les informations sur ce que je trouverais prochainement ;)
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: Besoin d'aide, pointeurs God Eater Burst

Message non lupar Plop23 » Dimanche 6 Mai 2012 à 18:52:56

OOkay ça marche ;)
Merci beaucoup ;)
Plop23
 
Messages: 13
Enregistré le: Dimanche 4 Septembre 2011 à 13:01:47
Genre: Non spécifié

Re: Besoin d'aide, pointeurs God Eater Burst

Message non lupar Lyan53 » Mardi 8 Mai 2012 à 21:17:08

Alors, je vais te faire un petit détail de la structure du fichier, par contre je ne pourrais pas te dire avec certitude à quoi correspondent toutes les valeurs (certaines m'échappent pour le moment), et bien entendu, je peux éventuellement me tromper pour certaines (à voir sur le tas par la suite)

Mon analyse ne reste basée que sur les fichiers que tu m'as fourni, et je n'ai fait aucune vérification sur le jeu lui même, mais ça te donnera toujours un bon aperçu général et une bonne base de travail pour comprendre leur structure

Let's go!!


Note : Je prends le fichier le plus petit "npc.tr2" pour exemple, mais à priori c'est valable également pour tous les autres fichiers que tu as fourni

Tout d'abord, comme indiqué dans mon post précédent, ces fichiers sont des archives.
C'est à dire, un fichier conteneur qui embarque plusieurs sous fichiers.
Pour que ces sous fichiers puissent être facilement retrouvés dans le code du jeu, comme dans toute bonne archive, on trouve un index correspondant ou sont répertoriées diverses informations qui concernent les sous-fichiers.
C'est généralement de l'ordre de la taille de chacun, de l'adresse où les trouver, etc...


Dans ce type d'archive, l'index est inclus dans le fichier, il est même situé directement au début (assez classique dans le style bien que parfois un index peut être externe et se retrouver dans un autre fichier).
Il semble aussi qu'à la fin de l'archive, on trouve quelques datas


Index en rouge / Sous-fichiers en bleu / Data finales en vert


Du coup on a là une structure pour chaque fichier qui donnera : Index + sous-fichier 1 + sous-fichier 2 + sous-fichier 3 , etc... + données finales

Faisons maintenant le détail de chaque partie :


Index
Ce dernier se divise en 3 parties distinctes :

  • Header (en jaune)
  • Données des sous-fichiers (en rouge)
  • Autres données (en bleu - je ne sais pas à quoi elles correspondent exactement)

Partie 1 : Le header

  • En rouge => extension du fichier (.tr2)
  • En violet => aucune idée, peut être une simple balise pour marquer quelque chose (on retrouve DF07 plusieurs fois à divers endroits)
  • En vert => nom du fichier (sans extension) + padding (0x00)
  • En bleu => taille du header
  • En rose => nombre "de sous fichiers/d'entrées" indexées dans la partie 2


Partie 2 : Données des sous-fichiers
Chaque entrée pour chaque sous-fichier est sur 0x14 octets (cadres rouge, bleu, vert et orange, puisqu'on a ici 4 entrées comme indiqué en rose dans la partie précedente)

Et voici le détail des données contenues dans ces 0x14 octets :
  • 4 octets (jaune) => N° ID attribué au fichier (généralement il s'incrémente de 1 mais pas toujours)
  • 4 octets (rouge) => Adresse (offset) ou se trouve le sous-fichier en question dans l'archive (en partant du début de l'archive)
  • 4 octets (vert) => Taille des données dédiées à ce sous-fichier dans l'index (donc les 0x14 octets)
  • 4 octets (bleu ciel) => Taille du sous-fichier en octets
  • 4 octets (bleu foncé) => Taille du sous-fichier en octets (bis repetita)

Pour ce qui est des 2 bleu, dans les fichiers que tu as fourni ils sont toujours similaires, mais je dirais qu'il est possible que ce ne soit pas systématiquement le cas, pour exemple il pourrait peut être avoir quelques octets de différences entre les deux et dans ce cas l'un représenterait la taille réelle du fichier, et l'autre la taille + le padding ajouté pour la mise en forme dans le fichier (à voir sur le tas donc, c'est juste un exemple de la différence qu'il pourrait y avoir entre ces deux valeurs)


Partie 3 : Autres données
Ici c'est très simple, chaque entrée est sur 4 octets, et on a d'abord le nombre d'entrées, puis ensuite les entrées

  • En rouge (sur "4 octets") => Nombre d'entrées dans la partie 3
  • En bleu (sur "nb d'entrées * 4 octets") => Entrées
  • En vert ( sur "0x0, 0x4, 0x8 ou 0xC octets") => Padding (de 0x00) pour la mise en forme du fichier
Je ne sais pas à quoi correspondent ces données mais elles s'incrémentent toujours (un peu comme dans une table de pointeurs), je ne pense pas pour le moment qu'il soit nécessaire d'y toucher de toute façon.
Toujours est-il que ces données semblent être liées aux pointeurs puisque le nombre d'entrées est similaire au nombre de pointeurs qu'on retrouvera dans chaque sous-fichier.



Pour résumer un peu cet index, la seule partie qu'il sera nécessaire de modifier en cas d'extension de fichiers (ayant pour but d'ajouter de la place pour les textes traduits) sera situé dans la partie 2 : les tailles des sous-fichiers, et leurs adresses dans l'archive ;)


Sous-fichiers
Les sous-fichiers semblent tous fonctionner sur une même structure de base bien que certains contiennent du texte et d'autres des datas




On distingue 4 parties distinctes dans ces derniers

  • Header 1 (en jaune)
  • Header 2 (en rouge)
  • Table des pointeurs (en vert)
  • Datas/textes (en bleu)
Note : la partie en blanc c'est juste du padding de mise en forme


Partie 1 : Header 1
- Il fait 0x40 octets et ne contient que le nom du sous-fichier en question + du padding
- On retrouve aussi sur les 4 derniers octets, la balise DF07 qui etait présente dans le header de l'index



Partie 2 : Header 2
- Là encore il est sur 0x40 octets
- Sur les 1ers octets, on trouve ce qui semble être à priori l'encodage (UTF-8, ASCII, etc ...), vient ensuite du padding, puis vers la fin des datas que je n'ai pas réussi à identifier (il y a peut être l'identifiant du fichier dans le lot)
- Reste les 4 derniers octets de cette partie qui eux sont le nombre de pointeurs (ou d'entrées dans la table des pointeurs), nombre correspondant au passage au "nombres d'entrées" qu'on a sur la partie 3 de l'index. Ce nombre restera le même dans tous les sous-fichiers d'une même archive



Partie 3 : Table des pointeurs
- Chaque pointeur est sur 4 octets (32 bits)
- Ils sont stockés en Little Endian (LE)
- Les adresses contenues dans cette table de pointeurs font référence à l'offset/adresse ou se trouve(nt) "le mot/la phrase/les datas" qui lui correspondent, sachant que le début du sous fichier est à considérer comme l'adresse (l'offset) 0x00



Pour expliquer ça via un exemple, le 1er sous-fichier se trouve à l'adresse 0xE0 du fichier, si on considère que cette adresse est l'offset 0x00 du sous fichier et qu'on se rend à l'adresse 0xCC indiquée par notre 1er pointeur, on tombera sur notre 1er mot pointé.
Même chose pour notre 2ème pointeur qui indique l'adresse 0xD1, etc ...


Partie 4 : Mots/phrases/données
- Ici c'est très simple, il s'agit du contenu pointé
- Généralement pour les mots ou encore les phrases, chaque entrée est terminée par un 0x00 (qui marque la fin). Pour les datas, ces 0x00 ne sont pas forcément présents.
- Sur les phrases toujours, comme très souvent, une valeur 0x0A marquera un retour à la ligne
- A la fin de cette partie, si nécessaire, on trouve quelques octets de padding pour conserver la mise en forme avant le prochain sous-fichier.


Dans cette partie ou se trouvent les textes donc, chaque fois qu'une phrase sera plus longue ou plus courte, il faudra adapter les pointeurs qui suivront en conséquence des modifications appliquées ;)

Pour exemple si on ajoute 3 octets à notre 1er mot correspondant au 1er pointeur, alors il faudra incrémenter le 2ème pointeur de 3 (donc 0xD1 => 0xD4) ainsi que tous ceux qui suivront dans la table.


Données finales
- Ces dernières sont situées à la toute fin du fichier archive et semblent embarquer 3 pointeurs en 32 bits LE, suivi du nom du fichier archive, puis son extension (sans le point)
Je ne sais pas trop à quoi correspondent les valeurs des pointeurs qu'on trouve ici.


Voilà, je pense en avoir fait le tour

Donc en gros, dans la théorie, pour appliquer des modifs sur ces fichiers, faut adapter les pointeurs en conséquences des modifications, et si les sous-fichiers contenant du texte sont étendus (ou rétrécis), il faudra adapter les tailles et adresses dans l'index de l'archive également ;)

Toujours penser à conserver la mise en forme (en gros pour ça suffit d'utiliser du padding de 0x00 comme on trouve à la fin des sous-fichiers)


Si tu as des questions, n'hésite pas ;)
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: Besoin d'aide, pointeurs God Eater Burst

Message non lupar Plop23 » Mercredi 9 Mai 2012 à 4:49:59

Merci beaucoup, d'avoir passé du temps à analyser ces fichiers pour moi *-*
T'es un dieu (y) :lol:
Plop23
 
Messages: 13
Enregistré le: Dimanche 4 Septembre 2011 à 13:01:47
Genre: Non spécifié

Re: Besoin d'aide, pointeurs God Eater Burst

Message non lupar pinktagada » Mercredi 9 Mai 2012 à 13:01:55

Quelle question, tout le monde sait que Lyan est un Dieu. Et que chaque soir de pleine lune il se transforme en loup et parcours la campagne en hurlant !
Avatar de l’utilisateur
pinktagada
 
Messages: 502
Âge: 41
Enregistré le: Lundi 22 Novembre 2010 à 21:32:31
Localisation: Asgard
Genre: Femme

Re: Besoin d'aide, pointeurs God Eater Burst

Message non lupar Inexpugnable » Mercredi 9 Mai 2012 à 17:04:45

Faut qu'il se calme sur Skyrim. ^^
And upon the wall, scrawled in blood,
were the words : Manus Celer Dei.
Avatar de l’utilisateur
Inexpugnable
 
Messages: 50
Enregistré le: Samedi 12 Mars 2011 à 17:23:57
Genre: Non spécifié


Retourner vers Sur le ROMhacking

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 8 invités

x

#{title}

#{text}