Introduction

All the Souls games split the game world into several distinct maps. Each map is identified by a 4 number identifier in the form of m_AA_BB_CC_DD. The AA digit identifies an "area", and all maps under a particular area share texture/lightmap assets. The BB digit identifies a "block" within an area and while it shares texture assets with other blocks in the area it is otherwise its own self-contained map with unique model, collision, and navigation data. The DD component of the identifier usually marks minor revisions of a map, and is used for things like the DLC-enabled variant of forest in Dark Souls 1 and time-of-day variants of some maps in Bloodborne.

Maps in Souls games are complex, and there are many components and assets that are loaded for a map that include the following:

  • Mapstudio file (.msb): This is the main map file that defines the actual 3D layout of the map and placement of everything. This file determines which 3D model assets are loaded, where map geometry, collision data, objects, and enemies are placed, where event regions are placed, and other miscellaneous game event data is configured.
  • Texture data (.tpf, .tpfbhd): Each map area has a number of giant texture archives that are shared for all maps within an area. For most games, there are 4 generic texture archives with all the map textures, as well as separate archives for lightmap and environment cubemap textures.
  • Model data (*.flver, *.mapbnd): Map models are stored in the FLVER model format like all other model data in the Souls games. Each model is labeled with an identifier that begins with "m", but the format of the identifier can vary between games.
  • Collision data (*.hkx, *.hkxbhd): Collision data is stored in a proprietary Havok format and varies quite a bit between games. DeS, DS1, and DS2 use an older legacy Havok physics format, while DS3, Bloodborne, and Sekiro use the new physics format. Sekiro and Dark Souls Remastered also use a new Havok tagfile serialization format, while the other games use a legacy Havok packfile. In general, tools for working with collision data are quite limited. Each collision asset usually has a low-res version that begins with "l" that's used for general map collision, and a high-res version that begins with "h" that's used for foot IK placement.
  • Navigation data (*.hkx, *.nvm): Navmesh data is used for enemies to be able to navigate and traverse the level, and enemies generally won't work without the data. It's also theorized to be involved in doing distance calculations to determine when to stream in level assets.