Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

PZZ (Gotcha Force): Difference between revisions

Line 37: Line 37:
==== Padding des fichiers ====
==== Padding des fichiers ====


<span style="color: rgb(241, 196, 15);">La question, c'est de savoir s'il faut enlever le padding des fichiers avec un flag de compression = 0, lorsqu'on les extrait du pzz.</span>
<span style="color: rgb(241, 196, 15);">Lors ce que le fichier à extraire du pzz n'est pas compressé, on a alors un padding présent à sa fin. Il devient alors impossible de déterminer quel padding enlever précisément. En effet, le fichier peut se terminer par des "00".</span>


=== Algorithme de compression ===
=== Algorithme de compression ===

Revision as of 19:38, 27 November 2021

← Gotcha Force

Cet article est pour les format de fichiers PZZ de Gotcha Force. Voir PZZ (Format de fichier) pour les autres versions de ce fichier.

Les fichiers PZZ sont des dossiers d'archive.

Cette section est en cours de rédaction.

Des recherches sont encore nécessaires et certains paragraphes peuvent être faux.

Format

Les PZZ se composent d'un header de 2048 octets, soit 0x800 octets. A la suite de ce header se trouvent les fichiers inscrit les uns à la suite des autres. Ces fichiers peuvent être compressés ou non.

Header

Le premier champ du header est un uint32 big endian contenant le nombre de fichiers total de l'archive. On retrouve après une suite de taille variable de descripteurs de fichiers au format uint32 big endian. Chaque fichier est paddé avec des "\x00" pour avoir une taille multiple de 0x800.

Format descripteur de fichier

Si on numérote les bits d'un descripteur de fichier de 0 (poids faible) à 31 (poids fort) :

  • bit 31 - inutilisé,
  • bit 30 - Flag de compression : est à 1 si le fichier est compressé, 0 sinon,
  • bit 0 à 29 (30 bits) - taille du fichier divisée par 2048 (0x800),

taille_fichier (octets) = (descripteur_fichier & 0x3FFFFFFF) * 0x800
bCompression = descripteur_fichier & 0x40000000

Pour mieux comprendre le format du descripteur de fichier, voici un exemple :

Le premier fichier de l'archive fait 12288 octets et il est compressé, son descripteur est alors (12288/0x800)+0x40000000 = 0x40000006. On le stockera dans l'entête en big endian (40 00 00 06) juste à la suite du nombre de fichiers.

Le descripteur de fichier peut décrire un fichier vide. Il correspondra alors à "00 00 00 00" mais sera compté dans le nombre de fichier au début du header.

Padding des fichiers

Lors ce que le fichier à extraire du pzz n'est pas compressé, on a alors un padding présent à sa fin. Il devient alors impossible de déterminer quel padding enlever précisément. En effet, le fichier peut se terminer par des "00".

Algorithme de compression

L'algorithme de compression reste à déterminer.

Observations

Les fichiers PZZ contiennent entre autres des fichiers TPL affichant le nom des borgs dans différentes langues (version PAL), ou encore le nom des borgs en japonais (version JAP) ou en anglais (version NTSC).

Dans les fichiers contenus dans les PZZ allant généralement position 4 à 8, on retrouve des fichiers avec des valeurs correspondantes à de la 3D. On peut notamment citer "pl0300.pzz" qui possède des fichiers avec un header qui semble représenter un magic file, des flags ainsi qu'un padding ajustable si besoin est d'avoir plus d’éléments Par exemple pour pl0629.pzz la quantité de flags dans le headers est plus conséquente. L'origine des flags et des valeurs dans le header est pour l'instant inconnu mais pourrai constituer une liste de mesh disponible dans le fichier.

Dans le header des PZZ, on retrouve parfois des file_descriptor=NULL. On peut notamment citer "pl0f07.pzz" qui a un header se terminant par plusieurs descripteurs de fichiers NULL :

  • Théorie 1 : On a une librairie parsant les PZZ qui utilise des pointeurs de fichiers et on initialise ces pointeurs à NULL quand les fichiers n'existent pas.
  • Théorie 2 : On aurait des pointeurs sur des adresses absolues dans le DVD et les mises à jour auraient supprimé certains fichiers pour garder les mêmes adresses en augmentant la taille d'autres.
  • Théorie 3 : Erreur de programmation des devs / ou reste de développements qui n'ont pas été implémentés / ou supprimés / cela peut résulter d'anciens fichiers en rapport avec la version bêta du jeu.

Pour vérifier la décompression, on peut se baser sur les tailles standard des TPLs (version NTSC) :
206 * 3712 octets
206 * 14464 octets
14 * 115296 octets
5 * 573504 octets
(11 fichiers ayant une taille unique)

Tous les fichiers TPLs sont des multiples de 32 ;

Test de l'algorithme de décompression des PZZ par la vérification des tailles des fichiers TPLs décompressés :

1. unpack de tous les pzz
2. mise dans un dossier de tous les fichiers compressés
3. décompression de tous les fichiers
4. identification de tous les TPLs
5. vérification que tous les TPLs ont une taille congrue à 0 modulo 32

Autre approche : vérifier la taille voir si elle correspond à une taille standard

Logiciel

Virtual World RE a développé le script python pzztool.py permettant de manipuler les archives PZZ et leurs fichiers internes, en s'inspirant d'un script de manipulation pzz de PS2.

Catégorie:Format de fichier Catégorie:Gotcha Force