Jump to content

[PS3] God of War: Ascension, help with extracting .WAD, .AS & .STREAMS


Recommended Posts

Posted

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
Posted (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 by wattostudios
Posted (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.
image.thumb.png.7712f2aa4c790373067aecdcd1e51ba1.png

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 by adje
  • Members
Posted

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.

 

  • Thanks 1
Posted
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.

Posted
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
Posted
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
Posted
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)

 

  • Like 1
Posted
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!

Posted
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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...