Mapdev%3ASMF_format(1) - beyond-all-reason/springrts_engine_wiki_mirror GitHub Wiki
SMF(Spring Map File) Reference
SMF is a binary format
File location
maparchive.sd7/maps/mymapname.smf
Data Map
- smu = spring map unit, the size you see when in the lobby. roughly between 2 and 64.
| Bytes | Type | Description |
|---|---|---|
| 16 | char[] |
Magic number; "spring map file\0" |
| 4 | int |
Version number; "1" |
| 4 | unsigned int |
ID, should be as unique as possible. |
| 4 | int |
Width; smu * 64 |
| 4 | int |
Length; smu * 64 |
| 4 | int |
Square size; 8 |
| 4 | int |
Texels per square size; 8 |
| 4 | int |
Tile size; 32 |
| 4 | float |
Depth/min height; 512 = 1*smu |
| 4 | float |
Height/max height; 512 = 1*smu |
| 4 | int |
Byte offset to start of height map |
| 4 | int |
Byte offset to start of type map |
| 4 | int |
Byte offset to start of tile index |
| 4 | int |
Byte offset to start of mini map |
| 4 | int |
Byte offset to start of metal map |
| 4 | int |
Byte offset to start of features map |
| 4 | int |
No of extra headers |
align="left" | Header
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Size of the header |
| 4 | int |
Type of header |
| * | * | Data of header |
align="left" | + Extra Headers
| Bytes | Type | Description |
|---|---|---|
| (width+1)*(length+1) | unsigned short[] |
Data for height map. |
align="left" | + Height Map
| Bytes | Type | Description |
|---|---|---|
| (width/2)*(length/2) | char[] |
Data for type map. |
align="left" | + Type Map
| Bytes | Type | Description |
|---|---|---|
| 699048 | char[] |
raw DXT1 compressed 1024x1024 image. |
align="left" | + Mini Map
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Number of tile files |
| 4 | int |
Total number of tiles in all files. |
align="left" | + Tile Index Header
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Number of tiles in this file |
| size of filename | char[] |
The filename of the smt. |
align="left" | + SMT File Infos
| Bytes | Type | Description |
|---|---|---|
| (width / 4) * (length / 4) | int[] |
Index numbers of tiles in SMT's |
align="left" | + Tile Index
| Bytes | Type | Description |
|---|---|---|
| (width / 2) * (length / 2) | char[] |
Metal Density |
align="left" | + Metal Map
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Number of features |
| 4 | int |
Number of feature types |
| * | char[] |
List of feature names delimited by null |
align="left" | + Features Header
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Type of feature, corresponds with feature name list. |
| 4 | float |
X Position (along the width of the map) |
| 4 | float |
Y Position (Up into the sky) |
| 4 | float |
Z Position (along the length of the map) |
| 4 | float |
rotation, not sure of scale |
| 4 | float |
relative size (not implemented); 1 |
align="left" | + Features
Optional Extra Headers & data
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Size of the header; 12 |
| 4 | int |
Type of header; 1 |
| 4 | int |
Byte offset to beginning of grass map |
align="left" | + Grass Extra header
| (width / 4) * (length / 4) | unsigned char |
Map defining the grass on the map. not sure what 256 available values mean. |
align="left" | + Grass Data