Asobo Studio DPC DPS

From XentaxWiki
Jump to: navigation, search

What Is a Asobo Archive File?

Asobo Archive files used in Asobo games are asset archives that contain serialized class objects such as textures, models, animations, sounds, particle systems, etc.

History of the Asobo Archive File

The DPC file extension is used across Asobo’s catalog liberally; the structure of these files may change dramatically from title to title or not at all for several years. For example, the DPC files found in FUEL have special considerations for the asset streaming capabilities of ACE (Asobo Conception Engine), such as lazy loading of object data and parallel loading procedures at launch. ACE was specially created for the development of Grand Raid Off-road, the original title of what would eventually become FUEL, and as a result similarities between FUEL’s DPCs and other DPCs are expected to be minimal. While FUEL was released in 2009, its development began in 2005 as evidenced by many date artifacts in the DPCs and the project being referred to as “offroad” throughout the codebase and assets. Many of the assets were created and compiled around 2007. The PC release gold master was built in 2008 according to the version string present in the language files. Keep this timeline in mind if you intend to investigate other Asobo games for additional information.

First known occurence of Asobo Archive can be spotted in Super Farm game realeased in 2003.

DPC, DPS, DXB, DPP, DRV, D36


Format Specifications

Version 1.19

// Sitting Ducks (PS2)
// DPS archive file format

//little endian


//Note: padding is set to multiplication of 1024 bytes.


//header (2048 bytes)
48 bytes (char) - version clob // "v1.19 - Asobo Studio - Internal Cross Technology"
1 byte - null
207 bytes - padding // "\xCD\xCD\xCD\xCD..."
4 bytes (uint32) - next folder offset - 2048
4 bytes (uint32) - unknown // always "214"
4 bytes (uint32) - unknown // always "74"
4 bytes (uint32) - unknown // always "59"
1776 bytes - padding // "\xCD\xCD\xCD\xCD..."



//data
num_of_folders *
{
   4 bytes (uint32) - number of files in folder
   num_of_files *
   {
      4 bytes (uint32) - file size + 4
      x bytes - file data
   }
   x bytes - padding // "\xCD\xCD\xCD\xCD..."
}

Version 1.51

This file format is the same as in version 1.19
Only version string is different: "v1.51 - Asobo Studio - Internal Cross Technology".

Version 1.81

// CT Special Forces: Fire for effect (PC)
// DPC archive file format

// Archives are compressesed
// with custom compression algorithm


//header
256 bytes - version clob // "v1.81 - Asobo Studio - Internal Cross Technology"
4 bytes - number of files
24 bytes - unknown


//file info (24 bytes per entry)
num_of_files *
{
  4 bytes - dummy
  4 bytes - xsize / uncompressed size
  4 bytes - size  / compressed size
  4 bytes - unknwon
  4 bytes - some CRC?
  4 bytes - unknown
}
x bytes - padding 


//file data
num_of_files *
{
  x bytes - file data
  x bytes - padding
}

Version 1.06.63.06

// Ratatouille (PS2)
// DPS archive file format

// Files inside archive are compressesed
// with custom compression algorithm

//little endian

//header
256 bytes - version clob // "v1.06.63.06 - Asobo Studio - Internal Cross Technology"
4 bytes (uint32) - number of folders?
4 bytes (uint32)- number of files
24 bytes - unknown


//file info (24 bytes per entry)
num_of_files *
{
  4 bytes - dummy
  4 bytes - xsize / uncompressed size
  4 bytes - size  / compressed size
  4 bytes - unknwon
  4 bytes - some CRC?
  4 bytes - unknown
}
x bytes - padding 


//file data
num_of_files *
{
  x bytes - file data
  x bytes - padding
}

Version 1.08.40.02

// Garfield 2 (PC)
// DPC archive file format

// little endian


// Note: Files inside archive are 
// compressed wih unknown compression
 

//header
256 bytes - version clob // "v1.08.40.02 - Asobo Studio - Internal Cross Technology"
4 bytes (uint32) - number of entries
4 bytes (uint32) - unknown
4 bytes (uint32) - unknown
4 bytes (uint32) - file_size - header_size
4 bytes (uint32) - unknown // always "222"
4 bytes (uint32) - unknown // always "139"
4 bytes (uint32) - unknown // always "39"
4 bytes (uint32) - number of files?


//entries table (24 bytes per entry)
num_of_entries *
{
   4 bytes (uint32) - data block size (data+padding?)
   4 bytes (uint32) - data size
   4 bytes (uint32) - padding size?
   4 bytes (uint32) - CRC1?
   4 bytes (uint32) - CRC2?
   4 bytes (uint32) - data block ID?
}

x bytes - padding1 (up to offset=1820)  // "\x00\x00\x00\x00..."
x bytes - padding2 (up to offset=2048)  // "\xFF\xFF\xFF\xFF..."


//data
num_of_entries *
{
   x bytes - data block
}

Version 1.291.03.07

This file format is the same as in version 1.06.63.06
Only version string is different: "v1.291.03.07 - Asobo Studio - Internal Cross Technology".

Variouse versions (FUEL PC)

// FUEL PC
// DPC file format

256 bytes (char) - version string
        //   * "v1.381.67.09 - Asobo Studio - Internal Cross Technology"
        //   * "v1.381.66.09 - Asobo Studio - Internal Cross Technology"
        //   * "v1.381.65.09 - Asobo Studio - Internal Cross Technology"
        //   * "v1.381.64.09 - Asobo Studio - Internal Cross Technology"
        //   * "v1.379.60.09 - Asobo Studio - Internal Cross Technology"
        //   * "v1.325.50.07 - Asobo Studio - Internal Cross Technology"
        //   * "v1.220.50.07 - Asobo Studio - Internal Cross Technology"

4 bytes (uint32) - isNotRTC  // 1 - DPC in RTC directory
                             // 0 - DPC not in RTC directory
4 bytes (uint32) - blockCount  // num of blocks in DPC file
4 bytes (uint32) - blockWorkingBufferCapacityEven
4 bytes (uint32) - blockWorkingBufferCapacityOdd
4 bytes (uint32) - paddedSize
4 bytes (uint32) - versionPatch
4 bytes (uint32) - versionMinor

num_of_block_descriptions *
{
   // block description
   4 bytes (uint32) - blockType
   4 bytes (uint32) - objectCount
   4 bytes (uint32) - paddedSize
   4 bytes (uint32) - dataSize
   4 bytes (uint32) - workingBufferOffset
   4 bytes (uint32) - CRC32
}

4 bytes (uint32) - null
4 bytes (uint32) - poolManifestPaddedSize
4 bytes (uint32) - poolManifestOffset
4 bytes (uint32) - poolManifestUnused0
4 bytes (uint32) - poolManifestUnused1
4 bytes (uint32) - poolObjectDecompressionBufferCapacity
4 bytes (uint32) - blockSectorPaddingSize
4 bytes (uint32) - poolSectorPaddingSize
4 bytes (uint32) - fileSize
128 bytes (char) - incrediBuilderString
64 bytes - padding  // 0xFF 0xFF...


// Block Sector
num_of_blocks *
{
   // Block
   num_of_block_objects *
   {
       //Block object
       4 bytes (uint32) - dataSize
       4 bytes (uint32) - classObjectSize
       4 bytes (uint32) - decompressedSize
       4 bytes (uint32) - compressedSize
       4 bytes (uint32) - classCRC32
       4 bytes (uint32) - CRC32
       x bytes - data
   }

   x bytes - padding
}


// Pool Sector
x bytes - Pool Manifest
x bytes - Pool Objects

QuickBMS Script

MultiEx BMS Script

IDString 0 "v1.381.67.09 - Asobo Studio - Internal Cross Technology" ;
GoTo 260 0 ;
Get FileNum Long 0 ;
GoTo 284 0 ;
Set FNS String "file" ;
Set EXT String ".bin" ;
Set OFF Long 2048 ;
For T = 1 To FileNum ;
Get U1 Long 0 ;
Get U2 Long 0 ;
Get PSize Long 0 ;
Get RSize Long 0 ;
Get U3 Long 0 ;
Get U4 Long 0 ;
Set FN String FNS ;
String FN += T ;
String FN += EXT ;
Log FN OFF RSize 0 0 ;
Math OFF += PSize ;
Next T ;

Notes and Comments

  • Archives may be compressesed with custom compression algorithm. Implementation from FUEL toolkit may be found here.
  • Archives may use custom CRC32 hashing function.
  • File format is shared with many "Asobo Studio" games.
  • Extensions may be described as follows: DPS = "Data PlayStation", DPC = "Data PC", DXB = "Data Xbox", DPP = "Data PSP", DRV = "Data Wii", D36 = "Data Xbox 360".
  • In "Garfield 2" PC game there are also *.NPC and *.LAYOUT files which contains filenames and database entries for *.DPC archives.
    In "FUEL" PC game there are some *.IWR files which also contains some database entries.
    In Monopoly Plus PC game there are NPC and LPC files with database entries.
  • In "Racket Sports Party" Wii game there is string "x:\Datas\$$$IncrediBuilder$$$\X##DATAS#_MASTER#RACKET_DATAS\KIT-WII\" in every *.DRV archive
    which may suggest that archives were build with IncrediBuild software.
  • Archive version numbering suggests that Asobo Engine has been rewritten in 2006.

Games

List of games sharing same file format:

Release Year Game Title Platform Archive Version Extension Compression
2003 Super Farm PS2 v1.09 .*DPS Custom LZ?
2004 Sitting Ducks PS2 / PC v1.19 / v1.22 .*DPS / .*DPC None
2004 The Mummy: The Animated Series PS2 / PC v1.51 / v1.54 .*DPS / .*DPC None
2005 CT Special Forces: Fire for effect (Nemesis Strike) PC / XBOX / PS2 v1.81 .*DPC / .*DXB / .*DPS Custom LZ
2006 Garfield: A Tail of Two Kitties (Garfield 2) PC / PS2 v1.08.40.02 / v1.08.40.04 .*DPC / .*DPS Custom LZ?
2007 Ratatouille PS2 v1.06.63.06 .*DPS Custom LZ?
2008 WALL-E PS2 v1.291.03.07 .*DPS  ?
2009 Fuel PC [v1.220.50.07, v1.381.67.09] .*DPC Custom LZSS
2009 Up PSP v1.530.62.01 .*DPS  ?
2010 Toy Story 3 PSP v1.634.78.15 .*DPP  ?
2010 Racquet Sports / Racket Sports / Racket Sports Party WII v1.796.75.01 .*DRV Custom LZ?
2012 Kinect Rush: A Disney-Pixar Adventure PC / X360 v1.2000.31.11 .*DPC / .*D36  ?
2014 Monopoly Plus PC / X360 v1.2000.77.18 .*DPC / .*D36  ?
2016 Fragments – HoloLens PC  ?  ? Custom LZ
2016 Young Conker – HoloLens PC  ?  ?  ?
2016 ReCore PC / XONE  ?  ?  ?
2016 Quantum Break PC / XONE  ?  ?  ?
2017 Disneyland Adventures PC / XONE  ?  ?  ?
2017 Zoo Tycoon: Ultimate Ani­mal Collection PC / XONE  ?  ?  ?
2019 A Plague Tale: Innocence PC v2.128.92.19 .*DPC LZ4
2020 Microsoft Flight Simulator PC / XONE v2.256.97.19 .*DPC  ?

Compatible Programs


Associated File Types

NPC

Names PC

Plaintext table of Asobo CRC32 hashes and their human readable strings. CRC32 Hashes are represented as signed 32bit integers despite internally being used as unsigned 32bit integers. The distinction between signed and unsigned is important because the hashing algorithm makes use of the right shift operation which compiles to different machine code instructions for signed and unsigned integers. It is unclear why the NPC format uses signed integers when the DPC format uses unsigned integers but my guess is that fprintf is used with the %d format specifier in their internal build tools because somebody didn’t want to lookup the unsigned integer format specifier.

LPC

Layout PC

Describes the contents of a DPC archive. Analogous to a PDB file for an EXE.

DPC.LAYOUT

Data PC Layout

Older format of LPC files.

IWR

Information World Reference (I could stand for anything. Internal/Input/Include)

Describes TWORLDREF dependencies. Only USA1.DPC in FUEL has one of these that isn't empty.


See Also