A .NET library for reading and writing various FromSoftware file formats, targeting .NET Framework 4.6.2.
Dark Souls, Demon's Souls and Bloodborne are the main focus, but older From games may be supported to varying degrees. See below for a breakdown of each format.
Objects for each format can be created with the static method Read, which accepts either a byte array or a file path. Using a path is preferable as it will be read with a stream, reducing memory consumption.
BND3 bnd = BND3.Read(@"C:\your\path\here.chrbnd");
// or
byte[] bytes = File.ReadAllBytes(@"C:\your\path\here.chrbnd");
BND3 bnd = BND3.Read(bytes);
The Write method can be used to create a new file from an object. If given a path it will be written to that location with a stream, otherwise a byte array will be returned.
bnd.Write(@"C:\your\path\here.chrbnd");
// or
byte[] bytes = bnd.Write();
File.WriteAllBytes(@"C:\your\path\here.chrbnd", bytes);
DCX (compressed files) will be decompressed automatically and the compression type will be remembered and reapplied when writing the file.
BND3 bnd = BND3.Read(@"C:\your\path\here.chrbnd.dcx");
bnd.Write(@"C:\your\path\here.chrbnd.dcx");
The compression type can be changed by either setting the Compression field of the object, or specifying one when calling Write.
BND3 bnd = BND3.Read(@"C:\your\path\here.chrbnd.dcx");
bnd.Write(@"C:\your\path\here.chrbnd", DCX.Type.None);
// or
BND3 bnd = BND3.Read(@"C:\your\path\here.chrbnd.dcx");
bnd.Compression = DCX.Type.None;
bnd.Write(@"C:\your\path\here.chrbnd");
Finally, DCX files can be generically read and written with static methods if necessary. DCX holds no important metadata so they read/write directly to/from byte arrays instead of creating an object.
byte[] bndBytes = DCX.Decompress(@"C:\your\path\here.chrbnd.dcx");
BND3 bnd = BND3.Read(bndBytes);
// or
byte[] dcxBytes = File.ReadAllBytes(@"C:\your\path\here.chrbnd.dcx");
byte[] bndBytes = DCX.Decompress(dcxBytes);
BND3 bnd = BND3.Read(bndBytes);
Writing a new DCX requires a DCX.Type parameter indicating which game it is for. DCX.Decompress has an optional out parameter indicating the detected type which should usually be used instead of specifying your own.
byte[] bndBytes = DCX.Decompress(@"C:\your\path\here.chrbnd.dcx", out DCX.Type type);
DCX.Compress(bndBytes, type, @"C:\your\path\here.chrbnd.dcx");
// or
byte[] bndBytes = DCX.Decompress(@"C:\your\path\here.chrbnd.dcx", out DCX.Type type);
byte[] dcxBytes = DCX.Compress(bndBytes, type);
File.WriteAllBytes(@"C:\your\path\here.chrbnd.dcx", dcxBytes);
Game compatibility will always be listed for DS 1/R/2/3, DeS, and BB unless the format is unused in that game. Other From games may or may not be supported.
A general-purpose file container used in PS2-era From games.
Extension: .bnd
- ACE 3: Partial Read and Write.
A general-purpose file container used before DS2.
Extension: .*bnd
- DS1: Full Read and Write
- DSR: Full Read and Write
- DeS: Partial Read and Write
- NB: Full Read and Write
A general-purpose file container used from DS2 onwards.
Extension: .*bnd
- DS2: Full Read and Write
- DS3: Full Read and Write
- BB: Full Read and Write
Something to do with map part lighting/shadowing.
Extension: *.btab
- DS3: Full Read and Write
- BB: Full Read and Write
Point light sources in maps.
Extension: *.btl
- DS3: Full Read and Write
- BB: Partial Read and Write
Essentially a BND3 split into separate header and data files.
Extensions: .*bhd
(header) and .*bdt
(data)
- DS1: Full Read and Write
- DSR: Full Read and Write
- DeS: Untested
Essentially a BND4 split into separate header and data files.
Extensions: .*bhd
(header) and .*bdt
(data)
- DS2: Full Read and Write
- DS3: Full Read and Write
- BB: Full Read and Write
A wrapper for a single compressed file used in every game after NB.
Extension: .dcx
- DS1: Full Read, Write, and Create
- DSR: Full Read, Write, and Create
- DS2: Full Read, Write, and Create
- DS3: Full Read, Write, and Create
- DeS: Full Read, Write, and Create
- BB: Full Read, Write, and Create
An interface element configuration file used before DS2 when Scaleform was adopted. Very poorly supported.
Extension: .drb
- DS1: Partial Read, No Write
- DSR: Partial Read, No Write
- DeS: Untested
- NB: Untested
Unknown. Believed to determine which assets load based on where you are in a map.
Extension: .entryfilelist
- DS3: Full Read and Write
- BB: Untested
A graphics configuration format used in DS2.
Extension: .filtparam
- DS2: Partial Read and Write
A 3D model file used throughout the series.
Extension: .flv
or .flver
- DS1: Full Read and Write
- DSR: Full Read and Write
- DS2: Full Read and Write
- DS3: Full Read and Write
- DeS: No support
- BB: Full Read and Write
A text bundle format used throughout the series.
Extension: .fmg
- DS1: No support
- DS2: Untested
- DS3: Full Read and Write
- DeS: No support
- BB: Untested
A graphics configuration format used in DS3 and BB.
- DS3: Partial Read and Write
- BB: Untested
A map definition format used in DS3.
Extension : .msb
DS3: Full Read and Write
A material definition file used throughout the series.
Extension: .mtd
- DS1: Full Read and Write
- DSR: Full Read and Write
- DS2: Full Read and Write
- DS3: Full Read and Write
- DeS: Untested
- BB: Untested
- NB: Untested
A general configuration file used in DS3.
Extension: .param
- DS3: Full Read and Write
A container for multiple DDS textures used throughout the series.
Extension: .tpf
- DS1: Full Read and Write
- DSR: Full Read and Write
- DS2: Full Read and Write
- DS3: Full Read and Write
- DeS: Full Read and Write
- BB: Full Read and Write
- NB: Full Read and Write
To everyone below, for either creating tools that I learned from, or helping decipher these formats one way or another. Please yell at me on Discord if I missed you.
- Atvaark
- B3LYP
- HotPocketRemix
- Ian
- Lance
- Meowmaritus
- Nyxojaele
- Pav
- SeanP
- Wulf2k