No edit summary |
|||
(22 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
[[Gotcha Force | ← Gotcha Force]] | [[Gotcha Force | ← Gotcha Force]] | ||
'' | ''This article is about Gotcha Force ARC file format and ongoing researches on it.'' | ||
{{Research | 2| Researches on headers / bodies structures are partially achieved. }} | |||
{| | |||
ARC | ARC seems to be the diminutive of '''arc'''hive. | ||
== Format == | |||
In the main executable '''boot.[[DOL (File format)|dol]]''' we found the debug string "Archive_Parse: Byte-Order mismatch" related to HSD ('''H'''AL '''S'''ys'''D'''olphin) archives. The "Super Smash Bros. Melee" GameCube community has reversed this HSD lib function (Gotcha Force use not the same HSD lib version): | |||
[https://github.com/PsiLupan/FRAY/blob/master/src/hsd/hsd_archive.h hsd archive.h] | |||
[https://github.com/PsiLupan/FRAY/blob/master/src/hsd/hsd_archive.c hsd archive.c] | |||
All ARC files named with '''_mdl''' in their title are HSD [[Models|models]]. | |||
=== Header === | === Header === | ||
The HSD header seems to match others ARC headers: | |||
typedef struct _HSD_ArchiveHeader { | typedef struct _HSD_ArchiveHeader { | ||
u32 file_size; // 0x00 | |||
u32 data_size; // 0x04 | |||
u32 nb_reloc; // 0x08 | |||
u32 nb_public; // 0x0C | |||
u32 nb_extern; // 0x10 | |||
u8 version[4]; // 0x14 | |||
u32 pad[2]; // 0x18 In debugging there is 4 bytes pad / not 2 | |||
} HSD_ArchiveHeader; | } HSD_ArchiveHeader; | ||
== Observations == | |||
=== Unused textures === | |||
In the afs_data.afs (USA/NTSC version) we find 3 unused textures which have possibly been used in the game demo: | |||
* nwld00_mdl.arc | |||
* nwld01_mdl.arc | |||
* nwld02_mdl.arc | |||
[[File:Array 0 nwld00 mdl.arc.png.png|300px]] [[File:Array_0_nwld01_mdl.arc.png|300px]] [[File:Array 0 nwld02 mdl.arc.png|300px]] | |||
All headers of the "afs_data.afs" have been verified without decompress using automated scripts. [[PZZ (Gotcha Force)|PZZ]] files haven't been verified except for HSD models. ARC files seems to use this information. "Archive_Parse: Byte-Order mismatch" is referenced twice in the code (USA/NTSC [[DOL (Gotcha Force)|dol]] version) boot.dol at addresses 8004d548 and 80006c88. | |||
* 8004d548 is called when starting the game. We get HSD_archiveParse(*bufferDest=r3=0x81489c40, *bufferSrc=r4=0x80f2b1c0, len?=r5=0x4d7b). We found back arg (*bufferSrc) as a pointer to an ARC file like. | |||
[[ | [[Category:File format]] | ||
[[ | [[Category:Gotcha Force]] |
Latest revision as of 13:23, 7 October 2023
This article is about Gotcha Force ARC file format and ongoing researches on it.
This file format needs more research. Researches on headers / bodies structures are partially achieved. |
ARC seems to be the diminutive of archive.
Format
In the main executable boot.dol we found the debug string "Archive_Parse: Byte-Order mismatch" related to HSD (HAL SysDolphin) archives. The "Super Smash Bros. Melee" GameCube community has reversed this HSD lib function (Gotcha Force use not the same HSD lib version):
All ARC files named with _mdl in their title are HSD models.
Header
The HSD header seems to match others ARC headers:
typedef struct _HSD_ArchiveHeader { u32 file_size; // 0x00 u32 data_size; // 0x04 u32 nb_reloc; // 0x08 u32 nb_public; // 0x0C u32 nb_extern; // 0x10 u8 version[4]; // 0x14 u32 pad[2]; // 0x18 In debugging there is 4 bytes pad / not 2 } HSD_ArchiveHeader;
Observations
Unused textures
In the afs_data.afs (USA/NTSC version) we find 3 unused textures which have possibly been used in the game demo:
- nwld00_mdl.arc
- nwld01_mdl.arc
- nwld02_mdl.arc
All headers of the "afs_data.afs" have been verified without decompress using automated scripts. PZZ files haven't been verified except for HSD models. ARC files seems to use this information. "Archive_Parse: Byte-Order mismatch" is referenced twice in the code (USA/NTSC dol version) boot.dol at addresses 8004d548 and 80006c88.
- 8004d548 is called when starting the game. We get HSD_archiveParse(*bufferDest=r3=0x81489c40, *bufferSrc=r4=0x80f2b1c0, len?=r5=0x4d7b). We found back arg (*bufferSrc) as a pointer to an ARC file like.