Game Engine Overview
From uses a custom, in-house proprietary game engine that powers all the Souls games (including Bloodborne and Sekiro) as well as some other, earlier games such as Ninja Blade and Armored Core V. Contrary to popular belief, From does NOT utilize the Phyre Engine. The engine doesn't seem to have a singular name, but it seems to be made up of multiple internal modules and libraries. Some of the internal modules include Dantelion2, FD4, and GX. All the PC ports of the Souls games have RTTI information compiled in, which gives some insight into the internal organization and a good chunk of the C++ class names in the source code. The game engine has undergone significant changes in each game since Demon's Souls, but many core file formats and concepts have survived over the years with relatively minor changes. See FromSoftware Game Engines for a full rundown.
While this page presents a broad presentation of the files organization, informations about specific formats can be found in the formats list.
Regarding Dark Souls II and SOTFS
Most of the information on this wiki does not apply to Dark Souls II, which runs on a completely different engine than the rest of the Soulsborne games.
File System Structure
DVDBND archives
With the exception of Dark Souls Remastered (DSR), all the Souls games on PC have all their game files inside giant so-called "dvdbnd" archives, which are the bdt and bhd files that are seen in the game's directory. The bhd files are encrypted and contain the file lists and offsets for each of the game files, and the bdt files contain all the game files. DS2, DS3, and Sekiro don't actually have the names of all the files: the file names are hashed and the when the game loads a file, it hashes the file name its trying to load and then looks for that hash in the bhd file, which then points to the file location and size in the bdt file. The game decides which archive to load a file from based on the kind of file it is. For example, map assets are always in data5 for DS3 and Sekiro.
Tools
Most modders will never have to worry about these giant archives as tools have been made to extract them and patch the game to load game data from loose files instead of the giant archives, making file modding easy.
- Unpack Dark Souls for Modding : Tool that extracts the archives and textures for Dark Souls: Prepare to Die Edition (PtDE) and patches the exe to load the potentially modded extracted files instead of the archives.
- UXM : Extracts the archives for Dark Souls II (vanilla and SotFS), Dark Souls III, and Sekiro. It also has the option to patch the games to load the extracted files instead of the archived files, but this option won't work on a standard Steam copy of Sekiro due to how they used Steam DRM.
- Sekiro Mod Engine : DLL injection library that intercepts internal game functions that load files from archives and redirects them to load loose modded files instead if they exist. Use this as a substitute for UXM's exe patching functionality for Sekiro as it's compatible with the DRMed Steam release.
DCX and BND files
Once you extract the game archives and look around, you will notice that the majority of the files have a type of *bnd.dcx. DCX files are compressed files, and use EDGE, DEFLATE, or Oodle depending on the game. Once decompressed, you will likely have bnd files. These are mini-archive files that bundle related assets together. For example, a chrbnd file may contain the 3D model and textures for a specific character, and an anibnd file will contain all the animations and animation event data for a specific character.
In other words, together bnd and dcx files can be thought of analogous to zip files: they pack a bunch of files together and then compress them.
Tools
- WitchyBND : A successor to Yabber, the FromSoftware file format unpacker and serializer by TKGP, featuring a comprehensive rewrite, added features and comfort, and bundled contributions by the community. Can unpack/repack bnd and dcx files, along with some other game file formats.
Game directory structure:
Once unpacking a game, you will see the following structure for the game's files (except for DS2, which has some differences):
chr/
Archives for characters and all their models and animations. Characters include the player (c0000), enemies, bosses, NPCs, and even interactables such as the bonfire. Each character is identified by a unique ID in the form of cXXXX.
- The cXXXX.anibnd archives contain the Havok animation files (HKX) and their corresponding TAE files, which govern the specific events that occur during animations. Sound effects, i-frames, parry windows, motion blur, and more are all controlled via TAE files.
- DS1 character list by Meowmaritus
obj/
Archives for objects. Objects are mostly static small things that can be placed in the map. They may have collision, may have simple animations, or may have simple triggerable actions (called object actions or ObjActs). Objects include breakable pots, doors, elevators, and other decorations. Objects are itentified by a 4 (6 in DS3/BB) digit identifier in the form of oXXXX.
parts/
Contains the models, textures, and animations for the weapons and armor that your character and some NPCs wear.
event/
These contain event scripts for all the maps in DS1, DS3, BB, and Sekiro. These utilize a From proprietary scripting language and control just about everything that happens in a map. Examples include controlling everything from elevators, set pieces, ambushes, mimics, invasions, time of day changes, and boss fights.
map/
Maps and their assets. Maps also have ids in the form of mAA_BB_00_CC. AA is an area id that shares some assets like textures with other maps with the same area id. BB is a block that has for the most part unique models, collisions, and navimeshes. CC is a variation used for some DS1 and BB maps that are used for very slightly different versions of the same map and use the same assets. For example, Darkroot garden has a variation of the map depending on if you have the DLC or not. Inside the MapStudio directory are msb files for each map, which defines the layouts and placements of everything.
menu/
Contains layouts and textures for the game's menus, HUD, and GUIs. DeS and DS1 use a proprietary From format to layout GUIs (drb files), but the remaining games use Scaleform Flash files for GUI layouts. Almost all of the actual menu functionality is hardcoded in the game's exe, making any meaningful menu editing very difficult.
msg/
Contains all the text and dialogue for the game and all the translations.
mtd/
Contains all the materials in the game, which define how the 3D models are shaded.
param/
Contains gameparams (except for DS3) and drawparams. Game params define a huge amount of parameters for the game, link assets together, and define things such as weapon damage, enemy behavior, and many other things. Draw params determine how a map looks.
remo/
Contains all the game's cutscenes.
script/
Scripts for some game events, AI, and NPCs. AI scripts are written in Lua and compiled, and are used to select moves and combos for enemies. NPC scripts define NPC dialogue, actions, and questlines, and use From's proprietary state machine format.
sfx/
Special effects for the game. Particles, weather, lightning, and many other game effects fall under here.