Atelier Traduction
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Code source du patcher

Poster un nouveau sujet   Répondre au sujet

Aller en bas

Code source du patcher Empty Code source du patcher

Message par DarkPhoenix Ven 23 Avr - 9:34

Bonjour à tous !

Déjà je tenais à remercier l'équipe du projet, j'ai commencé à jouer il y a quelques jours à ce Xenogears en version française, et je dois avouer qu'il est vraiment fabuleux 👌

Merci pour votre énorme investissement, j'imagine que ça a dû mettre un sacré de temps de réussir à faire tout ça Wink

Je suis du coup très curieux de savoir comment le patcher fonctionne. C'est loin d'être un projet """""""simple"""""" comme un jeu de Super NES (je mets beaucoup de guillemets car je sais que ça reste souvent très complexe quand même) et j'aimerais vraiment voir comment ça marche.

Du coup j'aimerais savoir s'il était possible d'avoir accès au code source du projet. Je suis tombé sur ce ce sujet qui en parlait et qui était effectivement très irrespectueux (à mon avis en tout cas ^^)

Pour ma part je souhaiterais juste savoir comment le patcher fonctionne. Pas besoin d'instructions de build ou quoi que ce soit, s'il y a des parties qui doivent rester "secrètes" aucun souci, mon but n'est pas de pouvoir build le patcher de mon côté ou de pouvoir avoir un exe reproducible, mais juste de voir comment ça marche (quitte à ce que certaines parties 'privées' soient enlevées du code source si vous le souhaitez).

Merci d'avance pour votre réponse Smile

DarkPhoenix

Messages : 5
Date d'inscription : 23/04/2021

Revenir en haut Aller en bas

Code source du patcher Empty Re: Code source du patcher

Message par RyleFury Ven 23 Avr - 20:20

Bonjour DarkPhoenix,

Les patcheurs que je développe sont personnalisés et différents selon la structure des jeux pour être le plus optimisé possible mais à part ça il n'y a rien d'extraordinaire dans le code, même si c'est tout de même plus compliqué pour un jeu PS1 étant donné la structure assez chiante des données sur le disque.

Un programmeur devrait être capable de faire son propre patcheur du moins ou juste utiliser un patcheur générique, ça peut être fait de plein de façons différentes, il n'existe rien d'universel.

Habituellement je partage mes codes sources pour les hackeurs ou traducteurs ayant un projet solide et qui en ont absolument besoin car ils sont bloqués dans leur projet. C'est le cas par exemple pour la décompression des données de Baten Kaitos Origins.

Donc je ne suis pas enclin à partager le code source pour le patcheur, je ne vois pas l'intérêt de faire ça, mais si ça t'intéresse, je peux néanmoins te dire ce qu'il fait dans les grandes lignes, la logique du patcheur. C'est à toi de voir.
RyleFury
RyleFury
Admin

Messages : 106
Date d'inscription : 28/04/2013
Age : 34

https://ateliertraduction.forumgaming.fr

Revenir en haut Aller en bas

Code source du patcher Empty Re: Code source du patcher

Message par DarkPhoenix Ven 23 Avr - 20:39

Je serais personnellement intéressé parce que c'est un patcher particulièrement complexe, il ne s'agit pas simplement d'un patch IPS basique mais il y a aussi la réinjection des vidéos, l'adaptation des fonts, etc.

Cela étant aucun souci si vous ne souhaitez pas partager le code source, j'aimerais vraiment y jeter un œil mais c'est vous qui voyez ^^

Du coup je veux bien savoir dans les grandes lignes comment fonctionne notamment la réinjection vidéo et l'adaptation du font, parce que ça me semble particulièrement poussé ici Smile

DarkPhoenix

Messages : 5
Date d'inscription : 23/04/2021

Revenir en haut Aller en bas

Code source du patcher Empty Re: Code source du patcher

Message par RyleFury Sam 24 Avr - 7:01

Pour commencer, les vidéos ne sont pas modifiées du tout dans la version FR avec voix US, j'utilise ma propre technique pour sous-titrer les vidéos à la volée. Le sous-titrage est sous format image en 4BPP avec palette 16 couleurs et je rajoute dans l'ISO un fichier par vidéo sous-titrée pour ça. Une table dans l'exécutable (SLUS) est rajoutée afin d'obtenir toutes les données nécessaires à ces sous-titres (trame de commencement, trame de fin, emplacement des sous-titres dans le fichier image, coordonnées où les afficher à l'écran, etc.). Ensuite, j'ai créé mes propres routines ASM afin de les ajouter en temps réel dans le jeu avec le CPU en optimisant au mieux. Ces routines sont compatibles avec tous les jeux PS1, sauf celle où il faut stocker les sous-titres dans la RAM et les enlever où c'est spécifique selon le jeu. C'est ainsi que les vidéos ne sont pas du tout retouchées et ont zéro perte et que la taille du patch peut être aussi petite.

Pour Xenogears, les packets "image" dans les vidéos sont exactement les mêmes entre la version jap et us parce que les éditeurs sont moins bêtes que pour Lunar où toutes les vidéos ont été entièrement réencodées. Il a donc suffi d'extraire les packets "audio" des vidéos de la version jap et de les insérer dans les vidéos de la version US. Cette technique permet de ne pas réencoder les vidéos et de réduire la taille du patch en ne modifiant que les packets "Audio".

Un jeu PS1, à l'inverse de la Super NES par exemple, utilise une structure de fichiers (ISO9660) et contient donc des fichiers que l'on peut extraire. C'est ce qu'on fait quand on utilise un logiciel comme UltraISO ou IsoBuster pour voir à l'intérieur des fichiers BIN. Cependant, Xenogears est un peu vicelard de ce côté car seulement deux fichiers de l'ISO utilisent la table standard ISO9660, c'est le strict minimum pour un jeu PS1/PS2 (SYSTEM.CNF et SLUS). Le reste des fichiers utilise une table spécifique au jeu cachée se trouvant dans la zone de l'ISO réservée aux développeurs (0x0 -> 0x9300) et dans le fichier SLUS. Grâce à cette table, on peut donc extraire la totalité des fichiers puis à l'aide du patcheur les réinsérer et modifier cette table.

La font fait partie de l'un de ces fichiers et la logique n'est pas différente de n'importe quel autre jeu, SNES, PS1 ou n'importe quel support.

Il existe deux logiques à adopter pour un patcheur.

La première façon consiste à prendre un fichier d'entrée statique, avec toujours la même taille et toujours les mêmes données, puis de le patcher pour obtenir le fichier final patché. C'est ce que fait chaque patcheur générique et ce qu'il y a de plus simple à faire. Dans certains cas, afin d'optimiser la taille du patch, on décompresse les fichiers à patcher s'ils sont compressés, on les concatène, on fait la même chose avec les fichiers d'origine, puis on crée un patch entre les deux (je le fais avec Xdelta3) avec un premier programme. Ce premier programme va aussi créer une table contenant tous les emplacements et les modes des fichiers pour le fichier concaténé patché.

On utilise le patch et la table générés par le premier programme dans un second qui est le véritable patcheur. Le programme va commencer par détecter automatiquement l'ISO (2 disques ici) en vérifiant la taille des fichiers scannés qui est une taille spécifique par disque et son label (ici "XENOGEARS"). Une autre donnée est vérifiée dans les tables ISO9660 pour s'assurer que c'est bien Xenogears et détecter si c'est le CD1 ou le CD2 puis une dernière vérification est effectuée dans le fichier SLUS pour s'assurer que l'ISO n'est pas déjà patché.

Quand tous est en ordre et que les deux disques sont détectés, le programme va décompresser les fichiers de l'ISO d'origine, les concaténer, puis les patcher avec vérification CRC32. Il reste plus qu'à reconstruire l'ISO. Les fichiers qui restent d'origine sont extraits de l'ISO d'origine et insérés tels quels dans le nouvel ISO, et les fichiers patchés sont directement pris des données concaténées patchées qu'on a crées plus tôt et on utilise la table générée par le premier programme pour obtenir l'emplacement des fichiers dans les données concaténées, s'ils ont besoin d'être recompressés, etc. On obtient ainsi l'ISO final qui est le jeu patché. C'est ce que je fais pour le patcheur FR.

Le seconde logique à adopter consiste à être plus souple dans le patcheur, c'est le cas du patch undub. Le patcheur undub effectue les tâches suivantes :

- Remplacement des packets audio dans les vidéos par les pistes jap
- Remplacement des doublages audio en jeu par les pistes jap
- Remplacement des fichiers de sous-titre car les timings sont différents pour les vidéos jap

En gros, l'objectif ici n'est pas de patcher toujours le même fichier ISO en entrée pour obtenir toujours le même fichier ISO en sortie, mais de prendre n'importe quel ISO de Xenogears et de ne remplacer que les fichiers en rapport avec l'audio, le reste pouvant être modifié préalablement par un autre patch.

Dans le cas de l'undub, il est inutile de patcher les pistes audio de l'US vers le JAP car ça ne donnerait aucun gain de place, donc je prend les fichiers jap tels quels et les concatène avec un premier programme. Le patcheur quant à lui va effectuer une vérification de l'ISO moins stricte que le patcheur FR, donc juste le label de l'ISO, si c'est le CD1 ou CD2 et des données dans le SLUS indiquant si le jeu est déjà patché undub ou non et si faut patcher en undub FR ou US (l'undub FR sera effectué uniquement si des données spécifiques au jeu patché FR sont détectés, sinon c'est l'undub US par défaut). Il ne vérifiera pas la taille de l'ISO d'entrée. Ensuite, la logique reste la même que pour le patcheur FR sauf qu'on ne patche aucune donnée des ISO d'origine vu qu'on a directement les données finales. Donc en reconstruisant l'ISO on va insérer soit les fichiers des ISO d'origine si ça n'a rien à voir avec l'undub soit les fichiers audio modifiés. On modifie forcément en même temps la table des fichiers dans l'ISO. Pour les vidéos, on va utiliser un petit algorithme pour insérer uniquement les packets audio jap. On obtient donc en sortie les deux disques ISO undub avec uniquement les fichiers audio modifiés, le reste n'a pas été touché.

J'espère que ces explications t'aideront et te suffiront Wink


Dernière édition par RyleFury le Sam 24 Avr - 8:18, édité 2 fois
RyleFury
RyleFury
Admin

Messages : 106
Date d'inscription : 28/04/2013
Age : 34

https://ateliertraduction.forumgaming.fr

Revenir en haut Aller en bas

Code source du patcher Empty Re: Code source du patcher

Message par DarkPhoenix Sam 24 Avr - 8:01

Wouaw, merci pour ces explications très détaillées Very Happy

C'est plus ou moins ce que je voulais déduire du code source donc c'est parfait, j'ai tout ce que je voulais savoir ^^

Merci encore pour cet excellent patch et vos explications sur son fonctionnement Wink

DarkPhoenix

Messages : 5
Date d'inscription : 23/04/2021

Revenir en haut Aller en bas

Code source du patcher Empty Re: Code source du patcher

Message par Ryusan Sam 24 Avr - 17:10

Et moi, je suis intéressé de savoir ce qui t'a poussé à nous demander une explication sur le patcheur... une idée derrière la tête ? Je pense que ce n'est pas désintéressé ^^
Tu programmes ? Tu hackes ? etc etc ?
Je veux TOUT savoir !!!
Ryusan
Ryusan

Messages : 30
Date d'inscription : 16/06/2019
Age : 44

Revenir en haut Aller en bas

Code source du patcher Empty Re: Code source du patcher

Message par DarkPhoenix Dim 25 Avr - 12:47

Pas spécialement, c'est juste que je suis développeur bas niveau (je développe des machines virtuelles entre autres) et que je m'intéresse de plus en plus au ROM hacking, je trouve ça vraiment passionnant malgré la complexité du sujet Smile

Et quoi de mieux pour comprendre ça qu'avoir le code source (en l'occurrence plutôt les explications détaillées ici) d'un patcher qui ne vas pas 'juste' changer les textes mais aussi adapter la police d'écriture, remplacer les vidéos, etc.

Donc c'est vraiment désintéressé pour le coup, juste que ça m'intéresse beaucoup ^^

DarkPhoenix

Messages : 5
Date d'inscription : 23/04/2021

Revenir en haut Aller en bas

Code source du patcher Empty Re: Code source du patcher

Message par Ryusan Dim 25 Avr - 12:56

Ok, je comprends. Après, les outils sont faits par RyleFury, et ne sont pas repiqués ailleurs. Il programme tout. C'est son code, sa logique. Et chaque outil est développé en fonction du jeu, car ils sont bien entendus tous différents, particulièrement à partir de la PS1. Ce n'est pas du tout le même boulot que sur les consoles 8/16 bits.

Donc étudier ce qu'il a fait sur Xenogears ok, mais ça te t'aidera pas plus pour d'autres jeux.
C'est l'étude du jeu en lui-même qui est important, savoir coder intelligemment et SURTOUT savoir coder en ASM, en fonction de la machine... Chaque jeu est codé différemment, selon l'esprit tordu des programmeurs de l'époque. C'était beaucoup de bidouilles pour faire fonctionner un jeu et contourner les problèmes, je trouve.

En tout cas, je te souhaite bon courage et de la réussite dans ce que tu entreprendras Wink
Ryusan
Ryusan

Messages : 30
Date d'inscription : 16/06/2019
Age : 44

Revenir en haut Aller en bas

Code source du patcher Empty Re: Code source du patcher

Message par DarkPhoenix Dim 25 Avr - 16:57

Ryusan a écrit:Ok, je comprends. Après, les outils sont faits par RyleFury, et ne sont pas repiqués ailleurs. Il programme tout. C'est son code, sa logique. Et chaque outil est développé en fonction du jeu, car ils sont bien entendus tous différents, particulièrement à partir de la PS1. Ce n'est pas du tout le même boulot que sur les consoles 8/16 bits.

Donc étudier ce qu'il a fait sur Xenogears ok, mais ça te t'aidera pas plus pour d'autres jeux.

Justement, sur tout ce qui est Super NES & co. il y a plein de doc trouvable sur internet sur comment ça marche, comment contourner telle ou telle difficulté etc.

Alors pour du patching vidéo PS1 par exemple, il y a déjà beaucoup moins de ressources :p

Ryusan a écrit:C'est l'étude du jeu en lui-même qui est important, savoir coder intelligemment et SURTOUT savoir coder en ASM, en fonction de la machine... Chaque jeu est codé différemment, selon l'esprit tordu des programmeurs de l'époque. C'était beaucoup de bidouilles pour faire fonctionner un jeu et contourner les problèmes, je trouve.

C'est toute la difficulté du ROM hacking, sinon ça serait facile :p

Ryusan a écrit:En tout cas, je te souhaite bon courage et de la réussite dans ce que tu entreprendras Wink

Merci ^^

DarkPhoenix

Messages : 5
Date d'inscription : 23/04/2021

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

Poster un nouveau sujet   Répondre au sujet
 
Permission de ce forum:
Vous pouvez répondre aux sujets dans ce forum