Skip to content

MSB map layouts

FromSoftware engineWorld and streamingApplies toSekiroElden Ring

An MSB describes a map’s models and their occurrences, regions and events. A model entry names a resource; a part places it, so several parts can share one model. Parts also carry entity IDs used by event scripts. Observed

Sekiro uses the MSBS generation and Elden Ring uses MSBE. The ordered section names identify the generation; section revision numbers alone do not, because revisions can differ while the record layout stays the same. Observed

Order MSBS MSBE Confidence
1 MODEL_PARAM_ST Same Observed · Sekiro Proven · Elden Ring
2 EVENT_PARAM_ST Same Observed · Sekiro Proven · Elden Ring
3 POINT_PARAM_ST (regions) Same Observed · Sekiro Proven · Elden Ring
4 ROUTE_PARAM_ST Same Observed · Sekiro Proven · Elden Ring
5 LAYER_PARAM_ST (empty in the examined layouts) Same Observed · Sekiro Proven · Elden Ring
6 PARTS_PARAM_ST Same Observed · Sekiro Proven · Elden Ring
7 MAPSTUDIO_PARTS_POSE_ST (empty in the examined layouts) Absent Observed · Sekiro Proven · Elden Ring
8 MAPSTUDIO_BONE_NAME_STRING (empty in the examined layouts) Absent Observed · Sekiro Proven · Elden Ring

The file begins with MSB and a 16-byte header; the first section starts at 16. Section pointers are absolute, whereas pointers inside a part or model record are relative to that record. Strings are NUL-terminated UTF-16. Observed

A file stores one revision, repeated in every section header of its chain; the two empty trailing sections of a Sekiro file store 0. This holds in all 10 Sekiro and all 935 Elden Ring MSBs of the installs examined (the Elden Ring install is the base game without the expansion archive). Proven

Game Revisions stored (files) Confidence
Sekiro 35 (9 maps), 33 (m89_00_00_99) Proven · Sekiro
Elden Ring 73 (547), 74 (160), 57 (46), 51 (39), 69 (30), 64 (30), 71 (22), 65 (21), 63 (20), 66 (18), 46 (1), 70 (1) Proven · Elden Ring

Every Elden Ring file reads with the one six-section layout whatever its revision, so a reader that accepts only 73 refuses 388 of the 935 files. Proven · Elden Ring Within m60 the revision varies from tile to tile (73 on 460 tiles, 74 on 153, and eight further revisions on 18 to 46 tiles each). Proven · Elden Ring

Section header and pointer table (Sekiro)variableSekiro100% known

Little-endian; offsets are absolute from the MSB start.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x04u32section revisionObserved
0x44u32pointer countObservedRecord count plus one
0x88u64section name offsetObserved
0x108 × record countu64[]record offsetsObserved
after record offsets8u64next section offsetObservedZero terminates the chain
Section header and pointer table (Elden Ring)variableElden Ring100% known

Little-endian; offsets are absolute from the MSB start.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x04u32section revisionProven
0x44u32pointer countProvenRecord count plus one
0x88u64section name offsetProven
0x108 × record countu64[]record offsetsProven
after record offsets8u64next section offsetProvenZero terminates the chain

In every file of both installs a section is: its header (revision, pointer count, name offset), the table of record offsets ending in the next section’s offset, the section’s name directly after the table, zero bytes to the next multiple of 8, and its records back to back. A record runs to the next record’s offset, the last record of a section to the next section’s start, so the padding after a record belongs to it, and every record of both installs is a multiple of 8 bytes long. An empty section has the table’s single slot, its name and the padding, and the next section follows at once. The last section’s next-section slot is 0. Proven · every MSB of both installs Laying the sections out again from their revisions, names and records this way reproduces all 10 Sekiro and all 887 distinct Elden Ring files byte for byte. Proven · an independent writer over every MSB of both installs

Ashina Castle’s map-piece and object names, model references, positions, rotations and scales agree bit for bit with an independent SoulsFormats decode. That comparison does not cover the other Sekiro part kinds. Observed · Sekiro The whole-install Elden Ring comparison covers all 935 MSBs, all 457,108 parts of every kind and all 227 spawn points, with no refusals. Model names, part transforms, IDs, shadow controls, hit filters and spawn-point values agree with SoulsFormatsNEXT. Proven · Elden Ring

MSBS part header — selected fields160 bytesSekiro53% known

Offsets within records are relative to the record start. Unlisted fields are not described here.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x08u64name offsetObserved
0x84u32part kindObserved
0x104i32model indexObserved-1 names no model
0x188u64resource path offsetSourced
0x2012f32[3]positionObserved
0x2C12f32[3]rotation in degreesObserved
0x3812f32[3]scaleObserved
0x608u64entity data offsetObservedEntity block occupies 0x54 bytes
0x688u64type data offsetObserved
0x708u64graphics configuration offsetObserved
0x788u64scene configuration offsetObserved
MSBE part header — selected fields192 bytesElden Ring44% known

Unlisted fields are not described here; record-relative offsets.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x08u64name offsetProven
0xC4u32part kindProven
0x144i32model indexProven-1 names no model
0x188u64resource path offsetSourced
0x2012f32[3]positionProven
0x2C12f32[3]rotation in degreesProven
0x3812f32[3]scaleProven
0x608u64entity data offsetProvenEntity block occupies 0x40 bytes
0x688u64type data offsetProven
0x708u64graphics configuration offsetProven
0x788u64scene configuration offsetProven

Within entity data, the entity ID is at +0 and eight group IDs start at +0x1c. Enemy type data stores the NPC row ID at +12. Sourced · SoulsFormatsNEXT

Kind 0 is a map piece, 2 an enemy, 4 a player, 5 collision, 10 a dummy enemy and 11 connecting collision. Sourced · SoulsFormatsNEXT only in Sekiro Kind 1 is an object and 9 a dummy object. Sourced · Sekiro · SoulsFormatsNEXT only in Elden Ring Kind 13 is an asset and 9 a dummy asset. Sourced · Elden Ring · SoulsFormatsNEXT

An entity ID of 0 or -1 names no entity. A positive group ID lets an event address all parts in that group. Observed

Over all parts of the installs, only the kinds above occur; no part has kind 6 (the navmesh kind of earlier games). Model records have kind 0, 1, 2, 4 or 5 in Sekiro and 0, 2, 4, 5 or 10 in Elden Ring (4,335 / 1,266 / 284 / 4 / 1,353 Sekiro records of those kinds; 4,958 / 4,475 / 189 / 3,351 / 40,530 Elden Ring records). Proven

Kind Sekiro parts Elden Ring parts
0 map piece 40,970 4,522
1 object 10,538 n/a
2 enemy 1,557 16,776
4 player 70 722
5 collision 1,304 3,266
9 dummy object / dummy asset 125 2,661
10 dummy enemy 206 7,108
11 connecting collision 582 800
13 asset n/a 421,253
Total 55,352 457,108

The counts cover the 10 Sekiro and 935 Elden Ring MSBs of the installs. Proven

A model record is 40 bytes of header before its strings, in both games (the name offset is 40 in all 7,242 Sekiro and 53,503 Elden Ring records). Its u32 at +24 is the number of parts that name the model: it equals the count of parts whose model index is that record in every model record of both installs. A file’s parts reference no model index outside its model section, apart from the -1 of 4 Elden Ring files. Proven

The part header’s payload slots (eleven u64 from +80 in Elden Ring, seven in Sekiro) hold offsets of blocks, 0 for none. The size below is the distance from a block to the next higher offset or the record’s end, so it includes alignment padding. Proven

Slot Block Size (Sekiro / Elden Ring) Present on
+80 draw and display groups 388 / 392 Elden Ring: every kind. Sekiro: map piece, object, enemy, collision
+88 second display-group block 72 / 72 Collision and connecting collision in both games; Elden Ring assets
+96 entity data 84 (88 on player, dummy and connecting-collision kinds) / 64 Every kind
+104 type data per kind Every kind
+112 graphics configuration 32 / 32 Every kind except player and connecting collision
+120 scene configuration 80 / 80 Collision only
+128 Sekiro: unnamed; Elden Ring: grass configuration 32 / 32 Sekiro map pieces only; Elden Ring map pieces and assets
+136, +152 Elden Ring: unnamed; +152 is the tile-load configuration 32 Elden Ring: every kind
+144, +160 Elden Ring: unnamed 32 Elden Ring: +144 map pieces and assets; +160 map pieces, collisions, connecting collisions and assets

Type-data sizes (Sekiro / Elden Ring): map piece 8 / 8; object 40 / n/a; enemy and dummy enemy 192 / 192; player 16 / 16; collision 96 / 80; dummy object or asset 40 / 32; connecting collision 16 / 16; asset n/a / 392. Proven

An asset part’s type data stores at +0x1c a signed 16-bit word, the relative id of the row of AssetModelSfxParam its effects come from: row (nnn x 1000 + mmm) x 1000 + id for the asset model AEGnnn_mmm (see model effect params); -1 names none. Of the 421,253 asset parts of AEGnnn_mmm models, 409,246 store -1, 11,533 name an existing row and 474 name an absent one. Of every 16-bit word of the type data, this is the only one whose non-negative values name an existing row for more than a thousand parts (4,100 positive values name a row and 16 do not; the next best word names one for 966 parts and misses 69,758). Observed · Elden Ring Sekiro’s object part has no such field. Observed · Sekiro

A collision part’s type data starts with a hit-filter byte. The values present, with the community names (Smithbox’s enumerations; both games leave 16, 17, 20, 23 and 24 unnamed):

Value Name Sekiro collisions Elden Ring collisions Confidence
8 Collide with all characters 1,127 2,095 Proven · Sekiro, Elden Ring · counts Sourced · Sekiro, Elden Ring · Smithbox
9 Collide with camera only 6 27 Proven · Sekiro, Elden Ring · counts Sourced · Sekiro, Elden Ring · Smithbox
11 Collide with non-player characters only 14 71 Proven · Sekiro, Elden Ring · counts Sourced · Sekiro, Elden Ring · Smithbox
13 Trigger fall death camera 12 257 Proven · Sekiro, Elden Ring · counts Sourced · Sekiro, Elden Ring · Smithbox
15 Trigger instant death 13 258 Proven · Sekiro, Elden Ring · counts Sourced · Sekiro, Elden Ring · Smithbox
16 unnamed 19 187 Proven · Sekiro, Elden Ring · counts
17 unnamed 4 92 Proven · Sekiro, Elden Ring · counts
19 Collide with non-player characters only (Sekiro enumeration), unnamed (Elden Ring) 9 38 Proven · Sekiro, Elden Ring · counts Sourced · Sekiro · Smithbox
20 unnamed 0 10 Proven · Sekiro, Elden Ring · counts
22 Block all fall damage (Sekiro enumeration), unnamed (Elden Ring) 17 210 Proven · Sekiro, Elden Ring · counts Sourced · Sekiro · Smithbox
23, 24, 29 unnamed 0 10, 3, 8 Proven · Elden Ring · counts
25, 26, 27, 28 absent from the community enumerations 6, 2, 64, 11 0 Proven · Sekiro · counts

The counts are over all 1,304 Sekiro and 3,266 Elden Ring collision parts. Values 0 to 7, 14 and 21 (named in the Sekiro enumeration) do not occur in either install. Proven

In Elden Ring the collision type data holds two more bytes read from the data: +0x35 is 255 on 3,225 of 3,266 collisions and otherwise 0, 1, 2, 3, 21, 31 or 41 (41 collisions, all in m60 tiles), and +0x36 is 0 on 1,877 and 1 on 1,389. How +0x35 selects a graphics-parameter file is under graphics parameters. Proven · Elden Ring

Entity IDs and group IDs follow a numbering per area, in the decimal digits of the ID. Counted over every positive entity ID in the installs’ MSBs (part IDs, the eight group IDs of each part, region IDs and the entity ID in each event’s base data), n being a number below 10,000:

Game and kind of map Form Parts Part groups Regions Events Confidence
Sekiro, all maps but _99 area × 10^5 + block × 10^4 + n 2,616 of 2,619 2,783 of 2,783 1,787 of 1,871 203 of 213 Observed · Sekiro
Elden Ring, legacy dungeons and other non-overworld maps area × 10^6 + block × 10^4 + n 6,241 of 6,256 6,198 of 6,204 3,106 of 3,425 239 of 240 Observed · Elden Ring
Elden Ring, m60 tiles 10^9 + X × 10^6 + Z × 10^4 + n for tile m60_X_Z_* 5,077 of 5,808 2,741 of 3,759 1,778 of 2,304 125 of 136 Observed · Elden Ring

“Of” counts the positive IDs of that kind in those maps; the others are small numbers (group IDs 7 and 8, region IDs 1 and 2) or follow the numbering of another block (a m10_00 region with an ID of the m10_01 form). The Elden Ring forms are also the forms of the event flags that the map’s own scripts set (see EMEVD).

Regions combine a type, a shape and a placement. Sourced · SoulsFormatsNEXT

Region record header — selected common fields96 (Sekiro), 104 (Elden Ring)15% known

Region-record-relative offsets; type-specific payloads differ. The first string (the name) starts at the header's end.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceGamesNotes
0x08u64name offsetSourcedEquals the header size (96 or 104) in all 45,121 regions
0x84u32region typeSourced
0xC4u32index among the regions of the same typeProvenCounts from 0 in file order; equals the per-type counter in all 45,121 regions
0x104u32shape typeSourced
0x1412f32[3]positionSourced
0x2012f32[3]rotation in degreesSourced
0x2C4u32region numberProvenUnique within the file in all 945 files; not the record index (equal to it in 391 of 45,121 regions)
0x488u64shape data offsetSourced
0x508u64entity data offsetSourced
0x588u64type data offsetSourced0 in all 6,872 Elden Ring regions of type 0xffffffff and in 37 regions of other types
0x608u64extra data offsetProvenElden RingNon-zero in all 36,409 regions; the block it names is described below
Event record header — selected common fields40 (Sekiro), 48 (Elden Ring)33% known

Event-record-relative offsets; type-specific payloads differ. The name string starts at the header's end.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceGamesNotes
0x08u64name offsetSourcedEquals the header size (40 or 48) in all 9,211 events
0x84u32event numberProvenUnique within the file in all 945 files; not the record index (equal to it in 367 of 9,211 events); densely 0..n-1 in 731 of 945 files
0xC4u32event typeSourced
0x104u32index among the events of the same typeProvenEquals the per-type counter in 9,209 of 9,211 events; the other two have type 0xffffffff
0x188u64base data offsetSourcedPart index, region index and entity ID (16 bytes)
0x208u64type data offsetSourced0 for events of type 0xffffffff, and for Sekiro type 22
0x288u64extra data offsetProvenElden RingNon-zero in all 7,585 events; the block it names is described below

The event and region sections of every Elden Ring file are sorted by type, as are the event sections of all 10 Sekiro files (the Sekiro region sections of 3 of the 10). The number at +8 of an event and the number at +44 of a region are file-wide identifiers that keep their values when records are removed: they are unique in every file but dense (a permutation of 0..n-1) in only 731 of the 945 event sections and 419 of the region sections, and they are in section order in 597 of the event sections of the Elden Ring files. They are neither the record index nor the per-type index. Proven

only in Elden Ring Every region and event ends with a 32-byte block that its extra data offset names. It is the last thing in the record: the block ends at the record’s end in 23,517 regions and 7,571 events, and 4 zero bytes of alignment follow it in the other 12,892 regions and 14 events. Proven

Region and event extra block32 bytesElden Ring63% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x04u32map wordProven0xffffffff in 35,784 of 36,409 regions and 7,454 of 7,585 events; otherwise a map word (area in the top byte)
0x44u32unknownUnknown0 with a default map word; 13 in all 756 records with a map word
0x84u32unknownUnknown0 in every region and event but one (2)
0xC4i32unknownUnknown-1 with a default map word; otherwise a non-negative number (226 distinct values, up to 9,081) whose meaning is not established
0x1016u8[16] = 0paddingProven

The records with a map word are the 625 regions and 131 events of 46 overworld tiles of levels 1 and 2: 17 _01 tiles, 26 _02 tiles and the alternate tiles m60_*_11 (2) and m60_*_12 (1). Proven How the word is read is under map words.

Sekiro has no extra block or pointer: its region header ends at +96, its event header at +40, and the name string follows. Proven · Sekiro A reader that takes a region’s or event’s type data as “from the type-data offset to the record’s end” in Elden Ring therefore includes the 32-byte block (and up to 4 padding bytes) in it.

An SFX region’s type data names the effect it spawns (an FXR file by id) and whether the effect starts disabled until an event script enables it. The word that holds the flag is SoulsFormats’ StartDisabled (an integer); the files store only 0 and 1 in Elden Ring’s, and in Sekiro’s 0, 1, 256 and 257, so its low byte is read as the flag.

SFX region type data8 (Elden Ring, before the extra block), 24 or 28 (Sekiro)67% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceGamesNotes
0x04i32effect idProvenThe number of an FXR file; 1,872 Sekiro and 1,523 Elden Ring regions
0x44u32start disabledSourcedElden Ring0 or 1 in all 1,523 regions (17 are 1)
0x44i32unnamedUnknownSekiroSoulsFormats' UnkT04: -1 in 1,868 regions, 0x00110440 in 4
0x812i32[3] = -1paddingProvenSekiro
0x144u32start disabledSourcedSekiroLow byte 0 or 1 (54 of 1,872 regions are 1); the second byte is 1 in 13 regions, not understood; the two high bytes are 0

Every SFX region of both installs has a flag byte of 0 or 1 and, in Elden Ring, zero bytes after it in its word. Proven · every region of type 5 of both installs

A WindSFX region’s type data also starts with an effect id, of an effect whose action is a WindForce (parameters); the Stormveil region 【GD_環境風_突風12-5m】_808003_1001 (a box 120.307 × 110.863 × 72.456, turned 36.404° about y) stores [808003, 289, −1.0]. Observed · Elden Ring

only in Elden Ring The game builds the wind regions with the SFX regions when a world block is set up, and every frame spawns or removes their effects by a global flag, a 256-bit mask and two enable bits, with no test of the player’s position. Observed · Elden Ring · read from the code of 1.17.3 A loaded region keeps the file’s record layout, with its offsets turned into pointers and its rotation into radians, f32(degrees) × f32(π / 180) (0x3C8EFA35). The region’s matrix is the rotation (from the C runtime’s sinf and cosf of those radians) times the translation to its position; the effect is spawned at that matrix times the world block’s offset (frames). A box region’s area has the same rows, scaled by half its width, height and depth (the box’s third value being the height), and its centre is the spawn position plus half the height in y. Observed · Elden Ring · the game’s own code run from a memory image of 1.17.3, one region With the block offset (88, −16, −16), the spawn matrix equals the running force field’s transform bit for bit, and the box centre’s y the field origin’s y. Observed · Elden Ring · one region, one recording For a turn about y alone the rotation’s rows are (cos, 0, −sin), (0, 1, 0) and (sin, 0, cos), and the field blows along the third row. All twelve wind regions of Stormveil’s layout resolve to a field this way, and the recorded cloth stood inside exactly one region’s box. Observed · Elden Ring · one recording Whether the box containing the cloth is how the game picks the field in general is not established, and the x and z of the field’s origin are not read from the code. Unknown · Elden Ring

Shape variants include points, circles, spheres, cylinders, rectangles, boxes and composites; a shape and a region’s purpose are different fields. Sourced · SoulsFormatsNEXT

Shape code Payload Confidence
0xffffffff No shape Sourced · SoulsFormatsNEXT
0 Point, no dimensions Sourced · SoulsFormatsNEXT
1 / 2 Circle / sphere, one radius float Sourced · SoulsFormatsNEXT
3 Cylinder, radius then height Sourced · SoulsFormatsNEXT
4 Rectangle, width then depth Sourced · SoulsFormatsNEXT
5 Box, width then depth then height Sourced · SoulsFormatsNEXT
6 Composite child-region records Sourced · SoulsFormatsNEXT

Region type 8 identifies spawn points in both generations. Sourced · SoulsFormatsNEXT Sekiro’s event type 9 is MapOffset; MSBE has no corresponding MapOffset event. See coordinate frames. Observed

How do all region and event types behave?

Community definitions name many types, but a name alone does not establish activation, priority or runtime lifetime. Type-specific bytes need a separate interpretation for each type and game.