No edit summary |
No edit summary |
||
Line 31: | Line 31: | ||
<span class="pl-s">Le header de l'archive HSD correspond aux headers des fichiers ARC :</span> | <span class="pl-s">Le header de l'archive HSD correspond aux headers des fichiers ARC :</span> | ||
typedef struct _HSD_ArchiveHeader { | |||
u32 file_size; /* 0x00 */ 0x4d7b | |||
u32 data_size; /* 0x04 */ 0x49c8 | |||
u32 nb_reloc; /* 0x08 */ 0xe0 | |||
u32 nb_public; /* 0x0C */ 1 | |||
u32 nb_extern; /* 0x10 */ 0 | |||
u8 version[4]; /* 0x14 */ 0 | |||
u32 pad[2]; /* 0x18 */ on a seulement un pad de 4 octets / pas 8 dans le débogage ; | |||
} HSD_ArchiveHeader; | } HSD_ArchiveHeader; | ||
Revision as of 16:15, 16 November 2021
Cet article est pour les format de fichiers ARC de Gotcha Force. Voir ARC (Format de fichier) pour les autres versions de ce fichier.
|
ARC semble être le diminutif d'archive.
Format
On retrouve dans l'exécutable principal Start.dol l'usage de la chaîne de caractère "Archive_Parse: Byte-Order mismatch". La communauté du jeu GameCube "Super Smash Bros. Melee" a notamment reverse cette fonction de la librairie HSD (rien n'indique que la version de HSD soit la même, il faudrait vérifier) :
Header
Le header de l'archive HSD correspond aux headers des fichiers ARC :
typedef struct _HSD_ArchiveHeader {
u32 file_size; /* 0x00 */ 0x4d7b u32 data_size; /* 0x04 */ 0x49c8 u32 nb_reloc; /* 0x08 */ 0xe0 u32 nb_public; /* 0x0C */ 1 u32 nb_extern; /* 0x10 */ 0 u8 version[4]; /* 0x14 */ 0 u32 pad[2]; /* 0x18 */ on a seulement un pad de 4 octets / pas 8 dans le débogage ;
} HSD_ArchiveHeader;
Tous les headers des fichiers de "afs_data.afs" ont été vérifiés directement, sans décompression ou autre. Les fichiers compressés dans les PZZ n'ont pas été vérifiés par exemple. Seul les fichiers ARC utilisent des informations qui semblent correspondre à ce header. La fonction utilisant la chaîne de caractère "Archive_Parse: Byte-Order mismatch" est référencée deux fois dans Start.dol aux adresses 8004d548, et 80006c88. 8004d548 est appelé une fois au lancement du jeu. On y retrouve HSD_archiveParse(*bufferDest=r3=0x81489c40, *bufferSrc=r4=0x80f2b1c0, len?=r5=0x4d7b). On a bien en argument (*bufferSrc) un fichier qui ressemble aux fichiers ARC.
Le PGCD des tailles des arc est de 1.