adje Posted Thursday at 10:11 PM Posted Thursday at 10:11 PM Aloha. I hope everyone's doing and feeling good. I've been trying to extract the entire game just for the sake of the audio files. I have used some tools, ps3 tools, extracted .PSARC files, extracted cinematics, wad, streams and .as files and some "music" as well. Now, the sounds I have extracted contain some SFX, they're in .xvag format, but the rest is just "behind-the-scenes" and making-of sounds. I couldn't find any battle themes, ambient sound, opening, ending, or similar. You get my point. I have a strong desire to make complete soundtracks for popular AAA games. It's a big hobby of mine, and I'd love to do a complete soundtrack for Ascension as well, but I have not been successful in squeezing out the music at all. Something is telling me that the audio may be somewhere hidden in either .AS or .STREAMS, maybe .WAD too, I really have no idea as I've been going back and forth to get this done for months... Here are all the things I have extracted apart from the sounds. I truly hope someone's going to help me with this. I'd be really grateful! https://mega.nz/folder/xZI3FLKZ#SVkNJ7fzZo3Y7jXb__b3bg
Members wattostudios Posted 12 hours ago Members Posted 12 hours ago (edited) The STREAMS files are already readable by Game Extractor, the majority of the files in them are XVAG audio (playable with FFMPEG) The WAD files don't seem to have any audio in them, but have plenty of other files (Textures, animations, models, materials, ...). The general format looks like this: +-----------------------------------+ | God of War: Ascension [PS3] *.wad | +-----------------------------------+ // BIG ENDIAN FORMATTING // If the BlockType=0, there isn't any block data, so ignore the Block Length value. In all other cases, the BlockLength value is the length of the BlockData. // In its most basic form, "files" are wherever BlockType != 0 and FileType != 0 // BLOCKS AND FILE DATA // for each block 2 - Block Type (21=Root, 2=GroupStart, 3=GroupEnd, 22=PopHeap, 1=File, 7=GoStreamInfo, 0=Unknown (but ignore the block length)) 2 - File Type (0=Blank Entry, 22=Texture, 88=Animation, 119=Material, 131=Model, ...) 4 - Block Length 56 - Block Name (null terminated, filled with nulls) X - Block Data X - null Padding to a multiple of 16 bytes The Texture files (FileType=22) are DDS images with a custom header, however the width/height aren't accurate, so you actually need to >> the width/height a number of times to get the actual mipmap size (some are >>0, others are >>1 or >>2 - it really depends on the file) Edited 12 hours ago by wattostudios
adje Posted 9 hours ago Author Posted 9 hours ago (edited) 3 hours ago, wattostudios said: The STREAMS files are already readable by Game Extractor, the majority of the files in them are XVAG audio (playable with FFMPEG) The WAD files don't seem to have any audio in them, but have plenty of other files (Textures, animations, models, materials, ...). The general format looks like this: +-----------------------------------+ | God of War: Ascension [PS3] *.wad | +-----------------------------------+ // BIG ENDIAN FORMATTING // If the BlockType=0, there isn't any block data, so ignore the Block Length value. In all other cases, the BlockLength value is the length of the BlockData. // In its most basic form, "files" are wherever BlockType != 0 and FileType != 0 // BLOCKS AND FILE DATA // for each block 2 - Block Type (21=Root, 2=GroupStart, 3=GroupEnd, 22=PopHeap, 1=File, 7=GoStreamInfo, 0=Unknown (but ignore the block length)) 2 - File Type (0=Blank Entry, 22=Texture, 88=Animation, 119=Material, 131=Model, ...) 4 - Block Length 56 - Block Name (null terminated, filled with nulls) X - Block Data X - null Padding to a multiple of 16 bytes The Texture files (FileType=22) are DDS images with a custom header, however the width/height aren't accurate, so you actually need to >> the width/height a number of times to get the actual mipmap size (some are >>0, others are >>1 or >>2 - it really depends on the file) Thank you very much for helping me out. I have one issue with this, though. The files I have extracted don't show me as ".xvag" files but "unnamed" or just "FILE." (Maybe it's supposed to be this way, I'm not entirely sure) I can play them all, but the problem is that every track plays for 2 seconds and then stops. Even the longest tracks that show more than 3 minutes of duration stop at 2 second and that's it. Yes, I have extracted the files using Watto Studios, basic version. I'd appreciate your help with this, mate! PS: Also, just noticed that the size of all the files I have extracted is 64 KB. I assume that's why they stop at 2 sec, even though foobar shows a longer track duration, so there must be a way to fix this. Edited 9 hours ago by adje
Members wattostudios Posted 8 hours ago Members Posted 8 hours ago Hmm, thanks for letting me know, I'll have to look further in to that. The files are definitely longer, and if I preview them in Game Extractor (Full Version) they extract fully and convert using FFMPEG, but if I extract them to my PC, they only end up being 64KB in size, like you report, so there's a bug in there somewhere. I've looked at 2 of the large RDB and RDB+BIN files, and they have this format: +-----------------------------------------------+ | God of War: Ascension [PS3] *.rdb.bin + *.rdb | +-----------------------------------------------+ // The .RDB.BIN file contains the file data, the .RDB file contains the directory // File Data is compressed using ZLib in blocks of 16384 bytes uncompressed // RDB FILE // HEADER 8 - Header (_DRK0000) 4 - Unknown (32) 4 - Unknown (10) 4 - Number of Files 4 - Unknown X - Directory Name ("data/") 1 - null Directory Name Terminator 0-3 - null Padding to a multiple of 4 bytes // DETAILS DIRECTORY // for each file 8 - Header (IDRK0000) 8 - File Entry Length (not including padding) 8 - Unknown (14/15) 4 - Unknown 4 - null 4 - Extra Data Length 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown if (extraLength == 1){ 13 - Extra Data } else { X - Extra Data (optional) (length = ExtraData*4) } // if not the last file X - File Offset and Length String (2 Hex Strings with "@" between them) 1 - null Hex String Terminator 0-3 - null Padding to a multiple of 4 bytes // RDB.BIN // FILE DATA // for each file 8 - Header (IDRK0000) 8 - Compressed File Length (including all header fields) 8 - Compressed File Length (File Data only) 8 - Decompressed File Length 4 - Unknown 8 - Unknown 4 - Unknown (BIG) (4096) 4 - Unknown 4 - Number of Header Blocks if (numHeaderBlocks != 0){ // for each header block 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown (0/1) } X - Padding (byte 255) to a multiple of 8 bytes // for each compressed block 4 - Compressed Block Length X - Compressed Data Block (ZLib Compression) 4 - null End of Compression Indicator ... there are no filenames in these archives. When I analyse them, most of the files have some kind of header to identify what they are, but they are all custom formats, I couldn't find anything standard at all, and even struggled to figure out what kind of content is supposed to be in them, tbh. 1
adje Posted 8 hours ago Author Posted 8 hours ago 25 minutes ago, wattostudios said: Hmm, thanks for letting me know, I'll have to look further in to that. The files are definitely longer, and if I preview them in Game Extractor (Full Version) they extract fully and convert using FFMPEG, but if I extract them to my PC, they only end up being 64KB in size, like you report, so there's a bug in there somewhere. I've looked at 2 of the large RDB and RDB+BIN files, and they have this format: +-----------------------------------------------+ | God of War: Ascension [PS3] *.rdb.bin + *.rdb | +-----------------------------------------------+ // The .RDB.BIN file contains the file data, the .RDB file contains the directory // File Data is compressed using ZLib in blocks of 16384 bytes uncompressed // RDB FILE // HEADER 8 - Header (_DRK0000) 4 - Unknown (32) 4 - Unknown (10) 4 - Number of Files 4 - Unknown X - Directory Name ("data/") 1 - null Directory Name Terminator 0-3 - null Padding to a multiple of 4 bytes // DETAILS DIRECTORY // for each file 8 - Header (IDRK0000) 8 - File Entry Length (not including padding) 8 - Unknown (14/15) 4 - Unknown 4 - null 4 - Extra Data Length 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown if (extraLength == 1){ 13 - Extra Data } else { X - Extra Data (optional) (length = ExtraData*4) } // if not the last file X - File Offset and Length String (2 Hex Strings with "@" between them) 1 - null Hex String Terminator 0-3 - null Padding to a multiple of 4 bytes // RDB.BIN // FILE DATA // for each file 8 - Header (IDRK0000) 8 - Compressed File Length (including all header fields) 8 - Compressed File Length (File Data only) 8 - Decompressed File Length 4 - Unknown 8 - Unknown 4 - Unknown (BIG) (4096) 4 - Unknown 4 - Number of Header Blocks if (numHeaderBlocks != 0){ // for each header block 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown (0/1) } X - Padding (byte 255) to a multiple of 8 bytes // for each compressed block 4 - Compressed Block Length X - Compressed Data Block (ZLib Compression) 4 - null End of Compression Indicator ... there are no filenames in these archives. When I analyse them, most of the files have some kind of header to identify what they are, but they are all custom formats, I couldn't find anything standard at all, and even struggled to figure out what kind of content is supposed to be in them, tbh. For instance, the biggest .STREAMS size is 265 MB, which is MP_HUNT_DES_MUS.STREAMS, and when I extract the archive, I get only 3.91 MB in total. The only way it shows me what the METADATA is when I go to foobar and select one of the audio, right click on it> properties>details, and it shows Sony XVAG header, that's that.
betterman Posted 6 hours ago Posted 6 hours ago 2 hours ago, wattostudios said: Hmm, thanks for letting me know, I'll have to look further in to that. The files are definitely longer, and if I preview them in Game Extractor (Full Version) they extract fully and convert using FFMPEG, but if I extract them to my PC, they only end up being 64KB in size, like you report, so there's a bug in there somewhere. I've looked at 2 of the large RDB and RDB+BIN files, and they have this format: +-----------------------------------------------+ | God of War: Ascension [PS3] *.rdb.bin + *.rdb | +-----------------------------------------------+ // The .RDB.BIN file contains the file data, the .RDB file contains the directory // File Data is compressed using ZLib in blocks of 16384 bytes uncompressed // RDB FILE // HEADER 8 - Header (_DRK0000) 4 - Unknown (32) 4 - Unknown (10) 4 - Number of Files 4 - Unknown X - Directory Name ("data/") 1 - null Directory Name Terminator 0-3 - null Padding to a multiple of 4 bytes // DETAILS DIRECTORY // for each file 8 - Header (IDRK0000) 8 - File Entry Length (not including padding) 8 - Unknown (14/15) 4 - Unknown 4 - null 4 - Extra Data Length 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown if (extraLength == 1){ 13 - Extra Data } else { X - Extra Data (optional) (length = ExtraData*4) } // if not the last file X - File Offset and Length String (2 Hex Strings with "@" between them) 1 - null Hex String Terminator 0-3 - null Padding to a multiple of 4 bytes // RDB.BIN // FILE DATA // for each file 8 - Header (IDRK0000) 8 - Compressed File Length (including all header fields) 8 - Compressed File Length (File Data only) 8 - Decompressed File Length 4 - Unknown 8 - Unknown 4 - Unknown (BIG) (4096) 4 - Unknown 4 - Number of Header Blocks if (numHeaderBlocks != 0){ // for each header block 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown (0/1) } X - Padding (byte 255) to a multiple of 8 bytes // for each compressed block 4 - Compressed Block Length X - Compressed Data Block (ZLib Compression) 4 - null End of Compression Indicator ... there are no filenames in these archives. When I analyse them, most of the files have some kind of header to identify what they are, but they are all custom formats, I couldn't find anything standard at all, and even struggled to figure out what kind of content is supposed to be in them, tbh. R_LANG_EN-GB.WAD.zip Could you help me to understand the structer of .patch file? this also come from GOWA but in the update.
Members wattostudios Posted 4 hours ago Members Posted 4 hours ago 1 hour ago, betterman said: R_LANG_EN-GB.WAD.zip Could you help me to understand the structer of .patch file? this also come from GOWA but in the update. Similar to the WAD - had to take a bit of a guess here: +-----------------------------------------+ | God of War: Ascension [PS3] *.wad.patch | +-----------------------------------------+ // BIG ENDIAN FORMATTING // Similar to a WAD file, with a header out the front of the archive // HEADER 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown 4 - File Data Length 4 - Unknown 4 - Unknown // BLOCKS AND FILE DATA // for each block 2 - Block Type (1=File, 0=Unknown (but ignore the block length)) 2 - File Type (0=Unknown, 22=Texture, 88=Animation, 119=Material, 131=Model, ...) (negative means this is part of the previous file?) 4 - Block Length 56 - Block Name (null terminated, filled with nulls) X - Block Data X - null Padding to make the Block Data to a multiple of 16 bytes
Members wattostudios Posted 4 hours ago Members Posted 4 hours ago 3 hours ago, adje said: For instance, the biggest .STREAMS size is 265 MB, which is MP_HUNT_DES_MUS.STREAMS, and when I extract the archive, I get only 3.91 MB in total. The only way it shows me what the METADATA is when I go to foobar and select one of the audio, right click on it> properties>details, and it shows Sony XVAG header, that's that. Ended up examining the archive format more thoroughly and figured out the missing pieces to allow proper decompression, and also filenames. +---------------------------------------+ | God of War: Ascension [PS3] *.streams | +---------------------------------------+ // BIG ENDIAN ORDER // File data uses ZLib Compression in blocks of 65536 decompressed // The first Directory Entry has no hash, but points to a file that contains the filenames when decompressed // ARCHIVE HEADER 4 - Header (PSAR) 2 - Version Major? (1) 2 - Version Minor? (4) 4 - Compression Algorithm (zlib) 4 - File Data Offset 4 - Directory Entry Size (30) 4 - Number of Files 4 - Decompressed Block Size (65536) 4 - Unknown (1/2) // DETAILS DIRECTORY // for each file (30 bytes per entry) 16 - Hash? 4 - Index to the First Block in the Compression Directory 1 - null 4 - Decompressed Length 1 - null 4 - File Offset // COMPRESSION DIRECTORY // for each compressed block 2 - Compressed Block Length // FILE DATA // for each file // for each compressed block X - Compressed Block of File Data (ZLib Compression) 1
betterman Posted 3 hours ago Posted 3 hours ago 1 hour ago, wattostudios said: Similar to the WAD - had to take a bit of a guess here: +-----------------------------------------+ | God of War: Ascension [PS3] *.wad.patch | +-----------------------------------------+ // BIG ENDIAN FORMATTING // Similar to a WAD file, with a header out the front of the archive // HEADER 4 - Unknown 4 - Unknown 4 - Unknown 4 - Unknown 4 - File Data Length 4 - Unknown 4 - Unknown // BLOCKS AND FILE DATA // for each block 2 - Block Type (1=File, 0=Unknown (but ignore the block length)) 2 - File Type (0=Unknown, 22=Texture, 88=Animation, 119=Material, 131=Model, ...) (negative means this is part of the previous file?) 4 - Block Length 56 - Block Name (null terminated, filled with nulls) X - Block Data X - null Padding to make the Block Data to a multiple of 16 bytes would is be possible to made an unpacker/repacker for this type of files? Btw, tysm!
DKDave Posted 2 hours ago Posted 2 hours ago 1 hour ago, wattostudios said: Ended up examining the archive format more thoroughly and figured out the missing pieces to allow proper decompression, and also filenames. +---------------------------------------+ | God of War: Ascension [PS3] *.streams | +---------------------------------------+ // BIG ENDIAN ORDER // File data uses ZLib Compression in blocks of 65536 decompressed // The first Directory Entry has no hash, but points to a file that contains the filenames when decompressed // ARCHIVE HEADER 4 - Header (PSAR) 2 - Version Major? (1) 2 - Version Minor? (4) 4 - Compression Algorithm (zlib) 4 - File Data Offset 4 - Directory Entry Size (30) 4 - Number of Files 4 - Decompressed Block Size (65536) 4 - Unknown (1/2) // DETAILS DIRECTORY // for each file (30 bytes per entry) 16 - Hash? 4 - Index to the First Block in the Compression Directory 1 - null 4 - Decompressed Length 1 - null 4 - File Offset // COMPRESSION DIRECTORY // for each compressed block 2 - Compressed Block Length // FILE DATA // for each file // for each compressed block X - Compressed Block of File Data (ZLib Compression) Just a quick note - the decompressed length and file offset values seem to be actually 5-byte/40-bit values, due to some archives being over 4 GB, with the same format used in quite a few other PS3/PC games, such as Captain America: Super Soldier, Infamous, Naughty Bear, Warhawk, Ghost Of Tsushima, among others.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now