I'm trying my damndest to figure out how Guitar Hero stores its data, and I feel like I'm close, but I just can't quite figure it out. All of the game's data is stored in a file called MAIN_0.ARK alongside a file called MAIN.HDR. MAIN_0.ARK is about 2.11 gigs in size, and MAIN.HDR contains all of the filenames as well as the directory structure for MAIN_0.ARK, but I can't quite figure out the way the directory structure is stored. The filenames are stored as a series of zero-terminated strings starting at offset 0x15 or 0x14 (depends on how you think of it) in the file. The file header itself contains five 32-bit values:
0x00000003 (I don't know what this does)
0x00000001 (I don't know what this does)
0x00000001 (I don't know what this does)
MAIN_0.ARK's file size
The offset of the directory structure itself - I presume, anyway, as the value is 0x0000EA1E, and when you add the size of the header (0x14), it points to the first byte directly after the list of filenames.
Then after that, you have a list of about 6534 or 6535 16-bit values. Rather, they're physically 32 bits, but they never go over 0x0000FFFF. Then at offset 0x15052 in the file, the rest of the file is occupied by 2895 20-byte entries, consisting of the following format (as outputted by the util I've written so far):
Unknown 0: 0x0337c1b9
Unknown 1: 0x00001244
Unknown 2: 0x00000037
Unknown 3: 0x00000018
Unknown 4: 0x00000000
Unknown 0: 0x0da78487
Unknown 1: 0x00000027
Unknown 2: 0x0000008c
Unknown 3: 0x00003020
Unknown 4: 0x00000000
Unknown 0: 0x12bcc887
Unknown 1: 0x0000003d
Unknown 2: 0x0000008c
Unknown 3: 0x00010420
Unknown 4: 0x00000000
Unknown 0: 0x144fa727
Unknown 1: 0x000004b2
Unknown 2: 0x0000008c
Unknown 3: 0x00010420
Unknown 4: 0x00000000
Unknown 0: 0x15847bc7
Unknown 1: 0x00000c49
Unknown 2: 0x0000008c
Unknown 3: 0x00008420
Unknown 4: 0x00000000
Unknown 0: 0x0b238247
Unknown 1: 0x00000f10
Unknown 2: 0x0000008c
Unknown 3: 0x00008420
Unknown 4: 0x00000000
Unknown 0: 0x116958a7
Unknown 1: 0x00000f49
Unknown 2: 0x0000008c
Unknown 3: 0x00010420
Unknown 4: 0x00000000
Unknown 0 is probably a file offset, as at no point is it ever greater than the file size. I'm unsure of Unknown 1-3, and Unknown 4 is always NULL.
If anyone wants to take a look at the header file, let me know, and I'll email it to you - I can't post it as an attachment on here because although it's small and unimportant, it's still off of a PS2 game disc, and so would be the same as posting a ROM. I'd be interested in hearing any further ideas, because I'd like to be able to extract the files from the .ARK file and then figure out how Guitar Hero stores the note data (I already know it stores the music in .VGS files) so that I can come up with my own Christmas mix of it for the Christmas party at work, as PS2 debug units can play burned games without any swapping or modding. <img src=smilies/thumb.gif>
0x00000003 (I don't know what this does)
0x00000001 (I don't know what this does)
0x00000001 (I don't know what this does)
MAIN_0.ARK's file size
The offset of the directory structure itself - I presume, anyway, as the value is 0x0000EA1E, and when you add the size of the header (0x14), it points to the first byte directly after the list of filenames.
Then after that, you have a list of about 6534 or 6535 16-bit values. Rather, they're physically 32 bits, but they never go over 0x0000FFFF. Then at offset 0x15052 in the file, the rest of the file is occupied by 2895 20-byte entries, consisting of the following format (as outputted by the util I've written so far):
Unknown 0: 0x0337c1b9
Unknown 1: 0x00001244
Unknown 2: 0x00000037
Unknown 3: 0x00000018
Unknown 4: 0x00000000
Unknown 0: 0x0da78487
Unknown 1: 0x00000027
Unknown 2: 0x0000008c
Unknown 3: 0x00003020
Unknown 4: 0x00000000
Unknown 0: 0x12bcc887
Unknown 1: 0x0000003d
Unknown 2: 0x0000008c
Unknown 3: 0x00010420
Unknown 4: 0x00000000
Unknown 0: 0x144fa727
Unknown 1: 0x000004b2
Unknown 2: 0x0000008c
Unknown 3: 0x00010420
Unknown 4: 0x00000000
Unknown 0: 0x15847bc7
Unknown 1: 0x00000c49
Unknown 2: 0x0000008c
Unknown 3: 0x00008420
Unknown 4: 0x00000000
Unknown 0: 0x0b238247
Unknown 1: 0x00000f10
Unknown 2: 0x0000008c
Unknown 3: 0x00008420
Unknown 4: 0x00000000
Unknown 0: 0x116958a7
Unknown 1: 0x00000f49
Unknown 2: 0x0000008c
Unknown 3: 0x00010420
Unknown 4: 0x00000000
Unknown 0 is probably a file offset, as at no point is it ever greater than the file size. I'm unsure of Unknown 1-3, and Unknown 4 is always NULL.
If anyone wants to take a look at the header file, let me know, and I'll email it to you - I can't post it as an attachment on here because although it's small and unimportant, it's still off of a PS2 game disc, and so would be the same as posting a ROM. I'd be interested in hearing any further ideas, because I'd like to be able to extract the files from the .ARK file and then figure out how Guitar Hero stores the note data (I already know it stores the music in .VGS files) so that I can come up with my own Christmas mix of it for the Christmas party at work, as PS2 debug units can play burned games without any swapping or modding. <img src=smilies/thumb.gif>