Map registry
DataTable\<language>\NDMap.edf; DataTable\Map.edf; Map\Map_Data.spt
Total 33 Known 18 Derived 12 Unused 3World
Map registry, dummies, spawn, portals
A map is a set of linked files: the registry (Map\Map_Data.spt on the server, Map.edf and NDMap.edf in the client), SPT with dummies (server and client), [BLOCK] and spawn files per monster set, [PORTAL] with texts, EXT.spt with town zones. Geometry (BSP/EBP) and map registration are described in the 3D documents and are not repeated here.
Map_Data.spt: map number = row order, 12 columns read by the server: code (the name for all references), folder, type (0 field, 1 layers and monster sets, 2 no monster blocks), class (1 — respawn at the *ds of one's race), layer count (≤ 500), capital race, monster set count (≤ 30), sector radius, level limits (summoning only), map code for potion restriction, PvP race mask. Transport01, Platform01, the capital of every race and six settlement sub-maps are mandatory — without them the server does not start.*dm block points, *dp portals, *sd<code> stores, *bd<code> bind, *ds start (on class 1 maps the first three are Bellato, Cora, Accretia), *dq dungeon zones, *0dr/*1dr/*2dr mining. *sa and dummies without a prefix are not read by the server.EXT.spt box, the race by the first letter of the name (b/c/a/elan); this is the only “safe zone”.SystemSave\<map>_Boss.ini). Point weights and the block's nMin/nMob/nMax are not read; type 0 maps use only set 0.pc_MovePortal checks the level even with NeedConCheck = 0, items and race; the client portal record in Map.edf must match the server one, requirements included._dummy.spt is a derived file: type 1 records (monsters) are assembled from the spawn files, type 2 records (NPCs) are kept as is. The client requires exactly 37 maps (on Sirin ModMapNum sets the number).X:Y label on the minimap is the cell number of the image, not world coordinates; the scale and shift in Map.edf are recomputed for the BSP bounding box.For text formats (Map_Data.spt, <map>.spt, EXT.spt, _dummy.spt) the catalog unit is a column or token. Map.edf/NDMap.edf have variable-length records: the catalog goes by logical fields, offsets are not fixed; the STRS Strs\map strs is not used for the catalog (partial labels).
| File | Side | Format | Level | Corpora | Record | Digest | Note |
|---|---|---|---|---|---|---|---|
Map\<guild room>\<map>-[PORTAL].dat | server | dat | opaque | AoP 6 maps, GU 6 maps, Sirin 6 maps | AoP 328, GU 328, Sirin 328 | maps.md | *_guildroom_SD/SP folders: 328-byte record, 7 columns; these maps are not in Map_Data.spt |
Map\<map>\<block>.dat | server | dat | ready for full | AoP 3417, GU 2287, Sirin 3417 | AoP 92, GU 92, Sirin 92 | maps.md | spawn files (<block>.dat, for type 1 maps — <block>_<set>.dat); those unused by blocks are leftovers (8 nareaM files of 80 bytes), maps.md §3 |
Map\<map>\<map>-[BLOCK].dat | server | dat | ready for full | AoP 41 maps, GU 20 maps, Sirin 42 maps | AoP 1444, GU 1444, Sirin 1444 | maps.md | spawn blocks, maps.md §3 |
Map\<map>\<map>-[PORTAL].dat | server | dat | ready for full | AoP 56, GU 31 maps, Sirin 57 | AoP 376, GU 376, Sirin 376 | maps.md | maps.md §4 |
Map\<map>\<map>-[PORTAL].txt | server | list | out of scope (never read) | AoP 36, GU 34 maps, Sirin 37 | maps.md | text copy of the portals; the server does not read it (maps.md §4) | |
Map\<map>\<map>-[PORTAL]_str.dat | server | dat | derived | AoP 56, GU 31 maps, Sirin 57 | AoP 644, GU 644, Sirin 644 | maps.md, localization.md | Derived from: -[PORTAL].dat (codes) + portal texts. portal texts, 644 bytes (maps.md §4) |
Map\<map>\<map>.spt | server | spt | ready for full | AoP 52, GU 37 maps, Sirin 53 | maps.md, npc-stores.md, mining.md, dungeons.md | dummy type — name prefix; the NeutralC folder holds copies of NeutralA/B.spt | |
Map\<map>\<map>_dummy.spt | server | spt | out of scope (never read) | AoP 6 maps, GU –, Sirin 6 maps | maps.md | old (2015) copies of the client _dummy.spt in 6 map folders; the server does not read them [code, maps.md §3.4] | |
Map\<map>\<map>EXT.spt | server | spt | ready for full | AoP 13, GU 12 maps, Sirin 13 | maps.md, sounds.md | town zones | |
Map\<map>\<other>.txt | server | list | opaque | AoP 4 maps, GU 2 maps, Sirin 4 maps | Dummy.txt etc.; not described in the digests | ||
Map\<map>\MAPDATA.DAT | server | dat | opaque | AoP 1 map, GU –, Sirin 1 map | copy in the NeutralC folder; format not described | ||
Map\Map_Data.spt | server | spt | ready for full | AoP ✓, GU ✓, Sirin ✓ | maps.md | map registry; map number = row order | |
Map\MAPDATA.DAT | server | dat | opaque | AoP ✓, GU ✓, Sirin ✓ | maps.md | the Map.edf minimap section without encryption: byte for byte in AoP (73 616); the server reads it (14012CA70) and sends the zone index to the client in packet 8/6 — must match the client Map.edf (maps.md §4.3) | |
DataTable\<language>\NDMap.edf | client | edf | derived | AoP ✓ (en-ph, ru-ru), GU ✓ (en-gb, ru-ru), Sirin ✓ (en-gb, ru-ru) | maps.md | Derived from: map and portal names. variable-length records; 3D\RFMapCompiler writes them byte for byte (maps.md §6) | |
DataTable\Map.edf | client | edf | derived | AoP ✓, GU ✓, Sirin ✓ | maps.md | Derived from: Map_Data.spt + portals and map SPTs (mining points *0dr/*1dr/*2dr), BSP, minimap zones (= the server's Map\MAPDATA.DAT). variable-length records, size not checked (maps.md §1) | |
Map\<map>\<map>-[BLOCK].dat | client | dat | ready for full | AoP 3 maps, GU –, Sirin 3 maps | AoP 1444, Sirin 1444 | maps.md | copy of the server file in the client |
Map\<map>\<map>-[PORTAL].dat | client | dat | ready for full | AoP 5 maps, GU –, Sirin 6 maps | AoP 376, Sirin 376 | maps.md | copy of the server file in the client; the client takes portals from Map.edf (maps.md §4) |
Map\<map>\<map>-[PORTAL].txt | client | list | out of scope (never read) | AoP 38 maps, GU –, Sirin 38 maps | maps.md | text copy of the portals | |
Map\<map>\<map>-[PORTAL]_str.dat | client | dat | ready for full | AoP 6 maps, GU –, Sirin 7 maps | AoP 644, 772, Sirin 644, 772 | maps.md | copy of the server file in the client |
Map\<map>\<map>.spt | client | spt | ready for full | AoP 105, GU 1 map, Sirin 106 | maps.md | client copy; dummies needed by both must match (maps.md §8) | |
Map\<map>\<map>_dummy.spt | client | spt | derived | AoP 104 maps, GU –, Sirin 104 maps | maps.md | Derived from: server spawn blocks: [BLOCK].dat + spawn files + the dummy named after the block (type 1 records, maps.md §3.5); type 2 records — as imported. type 1 — quest target markers on the minimap, derived from the server spawn blocks (maps.md §3.4–3.5); type 2 is not used by the client; assembled automatically when the spawn changes (user decision 29.10.2026) | |
Map\<map>\<map>_dummy.txt | client | list | out of scope (never read) | AoP 28 maps, GU –, Sirin 28 maps | maps.md | the client does not read it [code, maps.md §3.5]; a dump of the server spawn, an intermediate file for type 1 records in _dummy.spt | |
Map\<map>\<map>EXT.spt | client | spt | ready for full | AoP 43, GU 15, Sirin 43 | maps.md, sounds.md | in the client — also music zones (sounds.md §5.3) | |
Map\<map>\<other>.txt | client | list | opaque | AoP 100, GU –, Sirin 100 | dungeon05.txt etc. in dungeon folders; not in the digests | ||
Map\MAPDATA.DAT | client | dat | opaque | AoP ✓, GU –, Sirin ✓ | maps.md | the same format as the Map.edf minimap section (93 records, the old full set); the client does not open it (maps.md §4.3) |
“ready for full” — the format is understood and the fields are described; “derived” — the file is assembled from another; “opaque” — the format is not fully known; “postponed” and “out of scope” — the studio does not edit the file.
The files of the category are split into groups; every group and subgroup has its own page with the fields of its files only.
DataTable\<language>\NDMap.edf; DataTable\Map.edf; Map\Map_Data.spt
Total 33 Known 18 Derived 12 Unused 3Map\<map>\<map>.spt; Map\<map>\<map>_dummy.spt; Map\<map>\<map>EXT.spt; Map\<map>\<map>.spt; Map\<map>\<map>EXT.spt
Total 16 Known 14 Derived 2 Unused 0Map\<map>\<map>-[BLOCK].dat; Map\<map>\<block>.dat; Map\<map>\<map>-[BLOCK].dat
Total 24 Known 9 Derived 0 Unused 15Map\<map>\<map>-[PORTAL].dat; Map\<map>\<map>-[PORTAL]_str.dat; Map\<map>\<map>-[PORTAL].dat; Map\<map>\<map>-[PORTAL]_str.dat
Total 30 Known 13 Derived 0 Unused 17Fields that neither the server nor the client reads. For each: why it was decided so and where that was established. The editor keeps their bytes as they are.
DataTable\Map.edf client file| Offset | Field | Why unused | Data |
|---|---|---|---|
— | angle | minimap rotation 0/180 — the client does not read the field (not a single read of +0x164 of the map record); the image is pre-rotated, G106 confirms; write 0 when buildingmaps.md §4.3 [code, 30.10.2026]; maps.md §1.2 | — |
— | vertexNum, faceNum | BSP vertex and face counts — the client does not read them ( +0x1C0, +0x1C4)maps.md §4.3 [code, 30.10.2026] | — |
— | ebpSize | size of the client map EBP (GU: 31 of 31; AoP mismatches — different file sets); the client does not read the field ( +0x1C8)maps.md §4 [bytes, 29.10.2026]; maps.md §4.3 [code, 30.10.2026] | — |
Map\<map>\<map>-[BLOCK].dat client file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x000 | nCount | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x004 | Lable | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x044 | m_dwDummyNum | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x048 | m_strDummyCode ×20 | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x088 | m_dwSelectProp ×20 | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x598 | m_nMin | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x59C | m_nMob | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x5A0 | m_nMax | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
Map\<map>\<map>-[PORTAL].dat client file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x000 | m_dwIndex | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x004 | m_strCode | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x044 | m_strLinkMapCode | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x084 | m_strLinkPortalCode | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x0C4 | m_szMenu | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x104 | m_bNeedConCheck | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x108 | m_nNeedChrLevel | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x10C | m_nUpLevelLim | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x110 | m_itmNeedItemCode ×3 | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x118 | m_nNeedItemCount ×3 | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x134 | m_nKind | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x138 | m_strUseRace | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
Map\<map>\<map>-[PORTAL]_str.dat client file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x000 | m_dwIndex | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x004 | m_strCode | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
+0x044 | m_strNameTag ×9 | the client does not open the file: the strings [BLOCK], [PORTAL], _str.dat are absent in the AoP client image in both ASCII and UTF-16; the server reads its own copymaps.md §4 (before 4.1) | — |
Map\<map>\<block>.dat server file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x050 | m_dwRegenMinNum | never read maps.md §3: “No reads found” [code] | — |
+0x054 | m_dwStdKill | never read maps.md §3: “No reads found” [code] | — |
+0x058 | m_dwRegenMaxNum | never read maps.md §3: “No reads found” [code] | — |
Map\<map>\<map>-[BLOCK].dat server file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x088 | m_dwSelectProp ×20 | point selection weight maps.md §3: “the only code with the 0x44 point record stride is the loader” (search in dzs.txt) | — |
+0x598 | m_nMin | nMin of the block, 0 in AoPmaps.md §3: “search for all reads of +0x598/+0x59C/+0x5A0 in dzs.txt: none refers to the block record”; the client does not use the file for these fields | — |
+0x59C | m_nMob | nMob of the block, 0 in AoPmaps.md §3: “search for all reads of +0x598/+0x59C/+0x5A0 in dzs.txt: none refers to the block record”; the client does not use the file for these fields | — |
+0x5A0 | m_nMax | nMax of the block, 0 in AoPmaps.md §3: “search for all reads of +0x598/+0x59C/+0x5A0 in dzs.txt: none refers to the block record”; the client does not use the file for these fields | — |
Map\<map>\<map>-[PORTAL].dat server file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x0C4 | m_szMenu | never read maps.md §4: “ m_szMenu and m_nKind are not read in the transition or in the other users of the record” (all callers of 1401284C0 and 140128370: reference check, ship, guild rooms …) | — |
+0x134 | m_nKind | never read (1 in AoP — entrance, 0 — arrival, 3 for 15 portals) maps.md §4: “ m_szMenu and m_nKind are not read in the transition or in the other users of the record” (all callers of 1401284C0 and 140128370: reference check, ship, guild rooms …) | — |